X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fevents.qh;h=a310c6ccadb294c25aad77a6f3900cbb1a96a19a;hb=e2206feb6fec163ffee9c87d50d8d9580393cd88;hp=3f35fe9eaa39e816f3a8bf9c063cc4977c735087;hpb=cc78077027a449f7440197953c3b21d6dc944565;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index 3f35fe9ea..a310c6cca 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -27,6 +27,12 @@ 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) \ @@ -123,46 +129,59 @@ 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); /** called when the match ends */ MUTATOR_HOOKABLE(MatchEnd, EV_NO_ARGS); -/** allows adjusting allowed teams */ -#define EV_CheckAllowedTeams(i, o) \ +/** Allows adjusting allowed teams. Return true to use the bitmask value and set + * non-empty string to use team entity name. Both behaviors can be active at the + * same time and will stack allowed teams. + */ +#define EV_TeamBalance_CheckAllowedTeams(i, o) \ /** mask of teams */ i(float, MUTATOR_ARGV_0_float) \ /**/ o(float, MUTATOR_ARGV_0_float) \ /** team entity name */ i(string, MUTATOR_ARGV_1_string) \ /**/ o(string, MUTATOR_ARGV_1_string) \ /** player checked */ i(entity, MUTATOR_ARGV_2_entity) \ /**/ -MUTATOR_HOOKABLE(CheckAllowedTeams, EV_CheckAllowedTeams); +MUTATOR_HOOKABLE(TeamBalance_CheckAllowedTeams, + EV_TeamBalance_CheckAllowedTeams); /** return true to manually override team counts */ -MUTATOR_HOOKABLE(GetTeamCounts, EV_NO_ARGS); +MUTATOR_HOOKABLE(TeamBalance_GetTeamCounts, EV_NO_ARGS); -/** allow overriding of team counts */ -#define EV_GetTeamCount(i, o) \ - /** team to count */ i(float, MUTATOR_ARGV_0_float) \ +/** allows overriding of team counts */ +#define EV_TeamBalance_GetTeamCount(i, o) \ + /** team index to count */ i(float, MUTATOR_ARGV_0_float) \ /** player to ignore */ i(entity, MUTATOR_ARGV_1_entity) \ - /** number of players in a team */ i(float, MUTATOR_ARGV_2_float) \ - /**/ o(float, MUTATOR_ARGV_2_float) \ - /** number of bots in a team */ i(float, MUTATOR_ARGV_3_float) \ - /**/ o(float, MUTATOR_ARGV_3_float) \ - /** lowest scoring human in a team */ i(entity, MUTATOR_ARGV_4_entity) \ - /**/ o(entity, MUTATOR_ARGV_4_entity) \ - /** lowest scoring bot in a team */ i(entity, MUTATOR_ARGV_5_entity) \ - /**/ o(entity, MUTATOR_ARGV_5_entity) \ - /**/ -MUTATOR_HOOKABLE(GetTeamCount, EV_GetTeamCount); - -/** allows overriding best teams */ -#define EV_FindBestTeams(i, o) \ + /** number of players in a team */ o(float, MUTATOR_ARGV_2_float) \ + /** number of bots in a team */ o(float, MUTATOR_ARGV_3_float) \ + /**/ +MUTATOR_HOOKABLE(TeamBalance_GetTeamCount, EV_TeamBalance_GetTeamCount); + +/** allows overriding the teams that will make the game most balanced if the + * player joins any of them. + */ +#define EV_TeamBalance_FindBestTeams(i, o) \ /** player checked */ i(entity, MUTATOR_ARGV_0_entity) \ /** bitmask of teams */ o(float, MUTATOR_ARGV_1_float) \ /**/ -MUTATOR_HOOKABLE(FindBestTeams, EV_FindBestTeams); +MUTATOR_HOOKABLE(TeamBalance_FindBestTeams, EV_TeamBalance_FindBestTeams); + +/** Called during autobalance. Return true to override the player that will be +switched. */ +#define EV_TeamBalance_GetPlayerForTeamSwitch(i, o) \ + /** source team index */ i(int, MUTATOR_ARGV_0_int) \ + /** destination team index */ i(int, MUTATOR_ARGV_1_int) \ + /** is looking for bot */ i(bool, MUTATOR_ARGV_2_bool) \ + /** player to switch */ o(entity, MUTATOR_ARGV_3_entity) \ + /**/ +MUTATOR_HOOKABLE(TeamBalance_GetPlayerForTeamSwitch, + EV_TeamBalance_GetPlayerForTeamSwitch); /** copies variables for spectating "spectatee" to "this" */ #define EV_SpectateCopy(i, o) \ @@ -287,6 +306,7 @@ MUTATOR_HOOKABLE(PlayerPreThink, EV_PlayerPreThink); MUTATOR_HOOKABLE(GetPressedKeys, EV_GetPressedKeys); /** is meant to call GetCvars_handle*(get_cvars_s, get_cvars_f, cvarfield, "cvarname") for cvars this mutator needs from the client */ +// NOTE: requesting cvar values (get_cvars_f 0) is deprecated #define EV_GetCvars(i, o) \ /**/ i(float, get_cvars_f) \ /**/ i(string, get_cvars_s) \ @@ -682,18 +702,18 @@ resource limit. */ /**/ MUTATOR_HOOKABLE(GetResourceLimit, EV_GetResourceLimit); -/** Called when the amount of resource of an entity changes. See RESOURCE_* +/** Called when the amount of resource of an entity changes. See RES_* constants for resource types. Return true to forbid the change. */ -#define EV_SetResourceAmount(i, o) \ +#define EV_SetResource(i, o) \ /** checked entity */ 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(SetResourceAmount, EV_SetResourceAmount); +MUTATOR_HOOKABLE(SetResource, EV_SetResource); -/** Called after the amount of resource of an entity has changed. See RESOURCE_* +/** Called after the amount of resource of an entity has changed. See RES_* 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) \ @@ -704,7 +724,7 @@ above resource limit so it was not given. */ 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 +limit. See RES_* 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) \ @@ -713,8 +733,9 @@ of resource that is above resource limit so it was not given. */ /**/ MUTATOR_HOOKABLE(ResourceWasted, EV_ResourceWasted); -/** Called when entity is being given some resource. See RESOURCE_* constants -for resource types. Return true to forbid giving. */ +/** Called when entity is being given some resource. See RES_* constants +for resource types. Return true to forbid giving. +NOTE: This hook is also called by GiveResourceWithLimit */ #define EV_GiveResource(i, o) \ /** receiver */ i(entity, MUTATOR_ARGV_0_entity) \ /** resource type */ i(int, MUTATOR_ARGV_1_int) \ @@ -725,7 +746,7 @@ 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. */ +RES_* 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) \ @@ -737,6 +758,31 @@ RESOURCE_* constants for resource types. Return true to forbid giving. */ /**/ MUTATOR_HOOKABLE(GiveResourceWithLimit, EV_GiveResourceWithLimit); +/** Called when some resource is being taken from an entity. See RES_* constants +for resource types. Return true to forbid giving. +NOTE: This hook is also called by TakeResourceWithLimit */ +#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 +RES_* 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) \ @@ -1009,9 +1055,9 @@ MUTATOR_HOOKABLE(MonsterModel, EV_MonsterModel); * Called before player changes their team. Return true to block team change. */ #define EV_Player_ChangeTeam(i, o) \ - /** player */ i(entity, MUTATOR_ARGV_0_entity) \ - /** current team */ i(float, MUTATOR_ARGV_1_float) \ - /** new team */ i(float, MUTATOR_ARGV_2_float) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** current team index */ i(float, MUTATOR_ARGV_1_float) \ + /** new team index */ i(float, MUTATOR_ARGV_2_float) \ /**/ MUTATOR_HOOKABLE(Player_ChangeTeam, EV_Player_ChangeTeam); @@ -1019,9 +1065,9 @@ MUTATOR_HOOKABLE(Player_ChangeTeam, EV_Player_ChangeTeam); * Called after player has changed their team. */ #define EV_Player_ChangedTeam(i, o) \ - /** player */ i(entity, MUTATOR_ARGV_0_entity) \ - /** old team */ i(float, MUTATOR_ARGV_1_float) \ - /** current team */ i(float, MUTATOR_ARGV_2_float) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** old team index */ i(float, MUTATOR_ARGV_1_float) \ + /** current team index */ i(float, MUTATOR_ARGV_2_float) \ /**/ MUTATOR_HOOKABLE(Player_ChangedTeam, EV_Player_ChangedTeam); @@ -1038,15 +1084,23 @@ MUTATOR_HOOKABLE(Player_ChangeTeamKill, EV_Player_ChangeTeamKill); /** id */ i(float, MUTATOR_ARGV_0_float) \ /** status */ i(float, MUTATOR_ARGV_1_float) \ /** data */ i(string, MUTATOR_ARGV_2_string) \ - /**/ + /**/ MUTATOR_HOOKABLE(URI_GetCallback, EV_URI_GetCallback); +/** + * return true to lock weapon (can't be used nor changed) for a player + */ +#define EV_LockWeapon(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(LockWeapon, EV_LockWeapon); + /** * return true to prevent weapon use for a player */ - #define EV_ForbidWeaponUse(i, o) \ - /** player */ i(entity, MUTATOR_ARGV_0_entity) \ - /**/ +#define EV_ForbidWeaponUse(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(ForbidWeaponUse, EV_ForbidWeaponUse); /** called when creating a clone of the player (usually for corpses that stay after the player has re-spawned) */ @@ -1142,3 +1196,45 @@ enum { 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) }; + +/** + * Called when freezing an entity (monster or player), return true to force showing a waypoint + */ +#define EV_Freeze(i, o) \ + /** targ */ i(entity, MUTATOR_ARGV_0_entity) \ + /** revive speed */ i(float, MUTATOR_ARGV_1_float) \ + /** frozen type */ i(int, MUTATOR_ARGV_2_int) \ + /**/ +MUTATOR_HOOKABLE(Freeze, EV_Freeze); + +/** + * Called when an entity (monster or player) is defrosted + */ +#define EV_Unfreeze(i, o) \ + /** targ */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(Unfreeze, EV_Unfreeze); + +/** + * Called when a player is trying to join, argument is the number of players allowed to join the match + */ +#define EV_GetPlayerLimit(i, o) \ + /** g_maxplayers */ i(int, MUTATOR_ARGV_0_int) \ + /**/ o(int, MUTATOR_ARGV_0_int) \ + /**/ +MUTATOR_HOOKABLE(GetPlayerLimit, EV_GetPlayerLimit); + +/** include special item codes for a death to the game log */ +#define EV_LogDeath_AppendItemCodes(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** item codes */ i(string, MUTATOR_ARGV_1_string) \ + /**/ o(string, MUTATOR_ARGV_1_string) \ + /**/ +MUTATOR_HOOKABLE(LogDeath_AppendItemCodes, EV_LogDeath_AppendItemCodes); + +/** Allows disabling or enabling rocket jumping independently of balance, use the parameter to force a preferred setting */ +#define EV_AllowRocketJumping(i, o) \ + /** allow_rocketjump */ i(bool, MUTATOR_ARGV_0_bool) \ + /**/ o(bool, MUTATOR_ARGV_0_bool) \ + /**/ +MUTATOR_HOOKABLE(AllowRocketJumping, EV_AllowRocketJumping);