X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fevents.qh;h=de21a59035a5d4d913ab3ba33aa9b2e1ffbbef14;hb=8f62b609486c7bd6837e453edbbc2934f8e1674a;hp=0110bdf1bd66c989a61f88e8e7840d7e088bcd38;hpb=e520d4b32e53462b9e22a2a923f6ba2fe2909226;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index 0110bdf1b..de21a5903 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -4,6 +4,9 @@ // register all possible hooks here +// to use a hook, first register your mutator using REGISTER_MUTATOR +// then create your function using MUTATOR_HOOKFUNCTION + /** called when a player becomes observer, after shared setup */ #define EV_MakePlayerObserver(i, o) \ /** player */ i(entity, MUTATOR_ARGV_0_entity) \ @@ -24,6 +27,18 @@ MUTATOR_HOOKABLE(PutClientInServer, EV_PutClientInServer); /**/ MUTATOR_HOOKABLE(ForbidSpawn, EV_ForbidSpawn); +/** returns true if client should be put as player on connection */ +#define EV_AutoJoinOnConnection(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(AutoJoinOnConnection, EV_AutoJoinOnConnection); + +/** called when player spawns to determine whether to give them random start weapons. Return true to forbid giving them. */ +#define EV_ForbidRandomStartWeapons(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(ForbidRandomStartWeapons, EV_ForbidRandomStartWeapons); + /** called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here) */ #define EV_PlayerSpawn(i, o) \ /** player spawning */ i(entity, MUTATOR_ARGV_0_entity) \ @@ -114,6 +129,8 @@ MUTATOR_HOOKABLE(ItemSound, EV_ItemSound); /** target */ i(entity, MUTATOR_ARGV_1_entity) \ /** frag score */ i(float, MUTATOR_ARGV_2_float) \ /** */ o(float, MUTATOR_ARGV_2_float) \ + /** deathtype */ i(float, MUTATOR_ARGV_3_float) \ + /** wep entity */ i(entity, MUTATOR_ARGV_4_entity) \ /**/ MUTATOR_HOOKABLE(GiveFragsForKill, EV_GiveFragsForKill); @@ -223,8 +240,16 @@ MUTATOR_HOOKABLE(SetStartItems, EV_NO_ARGS); /**/ MUTATOR_HOOKABLE(CustomizeWaypoint, EV_CustomizeWaypoint); +/** Check if items having the given definition are allowed to spawn. + * Return true to disallow spawning. + */ +#define EV_FilterItemDefinition(i, o) \ + /** item */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(FilterItemDefinition, EV_FilterItemDefinition); + /** - * checks if the current item may be spawned (.items and .weapons may be read and written to, as well as the ammo_ fields) + * checks if the current item may be spawned (.items may be read and written to, as well as the ammo_ fields) * return error to request removal */ #define EV_FilterItem(i, o) \ @@ -394,7 +419,8 @@ MUTATOR_HOOKABLE(PlayerDamage_SplitHealthArmor, EV_PlayerDamage_SplitHealthArmor /** mirrordamage */ i(float, MUTATOR_ARGV_5_float) \ /** mirrordamage */ o(float, MUTATOR_ARGV_5_float) \ /** force */ i(vector, MUTATOR_ARGV_6_vector) \ - /** force */ o(vector, MUTATOR_ARGV_6_vector) \ + /** force */ o(vector, MUTATOR_ARGV_6_vector) \ + /** weapon entity */ i(entity, MUTATOR_ARGV_7_entity) \ /**/ MUTATOR_HOOKABLE(Damage_Calculate, EV_Damage_Calculate); @@ -418,6 +444,8 @@ MUTATOR_HOOKABLE(PlayerDamaged, EV_PlayerDamaged); #define EV_W_DecreaseAmmo(i, o) \ /** actor */ i(entity, MUTATOR_ARGV_0_entity) \ /** weapon entity */ i(entity, MUTATOR_ARGV_1_entity) \ + /** ammo to take */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ /**/ MUTATOR_HOOKABLE(W_DecreaseAmmo, EV_W_DecreaseAmmo); @@ -645,6 +673,13 @@ enum { MUT_ITEMTOUCH_PICKUP // return this flag to have the item "picked up" and taken even after mutator handled it }; +/** called after the item has been touched. */ +#define EV_ItemTouched(i, o) \ + /** item */ i(entity, MUTATOR_ARGV_0_entity) \ + /** toucher */ i(entity, MUTATOR_ARGV_1_entity) \ + /**/ +MUTATOR_HOOKABLE(ItemTouched, EV_ItemTouched); + /** Called when the amount of entity resources changes. Can be used to override resource limit. */ #define EV_GetResourceLimit(i, o) \ @@ -666,6 +701,26 @@ constants for resource types. Return true to forbid the change. */ /**/ MUTATOR_HOOKABLE(SetResourceAmount, EV_SetResourceAmount); +/** Called after the amount of resource of an entity has changed. See RESOURCE_* +constants for resource types. Amount wasted is the amount of resource that is +above resource limit so it was not given. */ +#define EV_ResourceAmountChanged(i, o) \ + /** checked entity */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /**/ +MUTATOR_HOOKABLE(ResourceAmountChanged, EV_ResourceAmountChanged); + +/** Called when there was an attempt to set entity resources higher than their +limit. See RESOURCE_* constants for resource types. Amount wasted is the amount +of resource that is above resource limit so it was not given. */ +#define EV_ResourceWasted(i, o) \ + /** checked entity */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /** amount wasted */ i(float, MUTATOR_ARGV_2_float) \ + /**/ +MUTATOR_HOOKABLE(ResourceWasted, EV_ResourceWasted); + /** Called when entity is being given some resource. See RESOURCE_* constants for resource types. Return true to forbid giving. */ #define EV_GiveResource(i, o) \ @@ -677,6 +732,43 @@ for resource types. Return true to forbid giving. */ /**/ MUTATOR_HOOKABLE(GiveResource, EV_GiveResource); +/** Called when entity is being given some resource with specified limit. See +RESOURCE_* constants for resource types. Return true to forbid giving. */ +#define EV_GiveResourceWithLimit(i, o) \ + /** receiver */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /**/ o(int, MUTATOR_ARGV_1_int) \ + /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ + /** limit */ i(float, MUTATOR_ARGV_3_float) \ + /**/ o(float, MUTATOR_ARGV_3_float) \ + /**/ +MUTATOR_HOOKABLE(GiveResourceWithLimit, EV_GiveResourceWithLimit); + +/** Called when some resource is being taken from an entity. See RESOURCE_* constants +for resource types. Return true to forbid giving. */ +#define EV_TakeResource(i, o) \ + /** receiver */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /**/ o(int, MUTATOR_ARGV_1_int) \ + /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ + /**/ +MUTATOR_HOOKABLE(TakeResource, EV_TakeResource); + +/** Called when some resource is being taken from an entity, with a limit. See +RESOURCE_* constants for resource types. Return true to forbid giving. */ +#define EV_TakeResourceWithLimit(i, o) \ + /** receiver */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /**/ o(int, MUTATOR_ARGV_1_int) \ + /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ + /** limit */ i(float, MUTATOR_ARGV_3_float) \ + /**/ o(float, MUTATOR_ARGV_3_float) \ + /**/ +MUTATOR_HOOKABLE(TakeResourceWithLimit, EV_TakeResourceWithLimit); + /** called at when a player connect */ #define EV_ClientConnect(i, o) \ /** player */ i(entity, MUTATOR_ARGV_0_entity) \ @@ -871,6 +963,13 @@ MUTATOR_HOOKABLE(WantWeapon, EV_WantWeapon); /**/ MUTATOR_HOOKABLE(AddPlayerScore, EV_AddPlayerScore); +#define EV_AddedPlayerScore(i, o) \ + /** score field */ i(entity, MUTATOR_ARGV_0_entity) \ + /** score */ i(float, MUTATOR_ARGV_1_float) \ + /** player */ i(entity, MUTATOR_ARGV_2_entity) \ + /**/ +MUTATOR_HOOKABLE(AddedPlayerScore, EV_AddPlayerScore); + #define EV_GetPlayerStatus(i, o) \ /** player */ i(entity, MUTATOR_ARGV_0_entity) \ /**/ @@ -1040,8 +1139,38 @@ MUTATOR_HOOKABLE(Item_ScheduleRespawn, EV_Item_ScheduleRespawn); /**/ MUTATOR_HOOKABLE(PlayerPhysics_UpdateStats, EV_PlayerPhysics_UpdateStats); +/** called after physics stats are set on a player, allows post-initialization modifications */ +#define EV_PlayerPhysics_PostUpdateStats(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** maxspeed_mod */ i(float, MUTATOR_ARGV_1_float) \ + /**/ +MUTATOR_HOOKABLE(PlayerPhysics_PostUpdateStats, EV_PlayerPhysics_PostUpdateStats); + /** return true to use your own aim target (or none at all) */ #define EV_HavocBot_Aim(i, o) \ /** bot */ i(entity, MUTATOR_ARGV_0_entity) \ /**/ MUTATOR_HOOKABLE(HavocBot_Aim, EV_HavocBot_Aim); + +/** return true to skip respawn time calculations */ +#define EV_CalculateRespawnTime(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(CalculateRespawnTime, EV_CalculateRespawnTime); + +/** called when parsing a vote command. */ +#define EV_VoteCommand_Parse(i, o) \ + /** caller */ i(entity, MUTATOR_ARGV_0_entity) \ + /** first command */ i(string, MUTATOR_ARGV_1_string) \ + /** vote command */ i(string, MUTATOR_ARGV_2_string) \ + /** start position of vote command */ i(float, MUTATOR_ARGV_3_float) \ + /** argument count */ i(float, MUTATOR_ARGV_4_float) \ + /**/ +MUTATOR_HOOKABLE(VoteCommand_Parse, EV_VoteCommand_Parse); + +enum { + MUT_VOTEPARSE_CONTINUE, // return this flag to make the function continue as normal + MUT_VOTEPARSE_SUCCESS, // return 1 (vote parsed) + MUT_VOTEPARSE_INVALID, // return -1 (vote parsed but counted as invalid, no action or vote) + MUT_VOTEPARSE_UNACCEPTABLE // return 0 (vote parameter counted as unacceptable, warns caller) +};