X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fevents.qh;h=83d39f8bb51100bae80a53746fdad9753d8a6d95;hp=f5bc6c379ca02895491dab56400e5bd145209019;hb=5134c592b8e912ce0f05ff8f8a2f3c258f8924d6;hpb=8acaf6b6479901564ebc1dc4e825c6343f746a29 diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index f5bc6c379c..83d39f8bb5 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -19,7 +19,7 @@ MUTATOR_HOOKABLE(PutClientInServer, EV_PutClientInServer); /** 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) \ - /** spot that was used, or world */ i(entity, MUTATOR_ARGV_1_entity) \ + /** spot that was used, or NULL */ i(entity, MUTATOR_ARGV_1_entity) \ /**/ MUTATOR_HOOKABLE(PlayerSpawn, EV_PlayerSpawn); @@ -58,6 +58,7 @@ MUTATOR_HOOKABLE(PlayerDies, EV_PlayerDies); /** called when a player dies to e.g. remove stuff he was carrying */ #define EV_PlayHitsound(i, o) \ /** victim */ i(entity, MUTATOR_ARGV_0_entity) \ + /** attacker */ i(entity, MUTATOR_ARGV_1_entity) \ /**/ MUTATOR_HOOKABLE(PlayHitsound, EV_PlayHitsound); @@ -98,7 +99,7 @@ MUTATOR_HOOKABLE(MatchEnd, EV_NO_ARGS); /**/ MUTATOR_HOOKABLE(GetTeamCount, EV_GetTeamCount); -/** copies variables for spectating "other" to "self" */ +/** copies variables for spectating "spectatee" to "this" */ #define EV_SpectateCopy(i, o) \ /** spectatee */ i(entity, MUTATOR_ARGV_0_entity) \ /** client */ i(entity, MUTATOR_ARGV_1_entity) \ @@ -157,7 +158,7 @@ MUTATOR_HOOKABLE(SetStartItems, EV_NO_ARGS); MUTATOR_HOOKABLE(CustomizeWaypoint, EV_CustomizeWaypoint); /** - * checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields) + * checks if the current item may be spawned (.items and .weapons may be read and written to, as well as the ammo_ fields) * return error to request removal */ #define EV_FilterItem(i, o) \ @@ -197,7 +198,10 @@ MUTATOR_HOOKABLE(OnEntityPreSpawn, EV_OnEntityPreSpawn); MUTATOR_HOOKABLE(PlayerPreThink, EV_PlayerPreThink); /** TODO change this into a general PlayerPostThink hook? */ -MUTATOR_HOOKABLE(GetPressedKeys, EV_NO_ARGS); +#define EV_GetPressedKeys(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +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 */ #define EV_GetCvars(i, o) \ @@ -268,6 +272,15 @@ MUTATOR_HOOKABLE(MonsterMove, EV_MonsterMove); /** called when a monster looks for another target */ MUTATOR_HOOKABLE(MonsterFindTarget, EV_NO_ARGS); +/** + * called when validating a monster's target + */ +#define EV_MonsterValidTarget(i, o) \ + /** monster */ i(entity, MUTATOR_ARGV_0_entity) \ + /** target */ i(entity, MUTATOR_ARGV_1_entity) \ + /**/ +MUTATOR_HOOKABLE(MonsterValidTarget, EV_MonsterValidTarget); + /** called to change a random monster to a miniboss */ #define EV_MonsterCheckBossFlag(i, o) \ /** monster */ i(entity, MUTATOR_ARGV_0_entity) \ @@ -358,17 +371,30 @@ MUTATOR_HOOKABLE(PlayerPowerups, EV_PlayerPowerups); * called every player think frame * return 1 to disable regen */ -float regen_mod_max; -float regen_mod_regen; -float regen_mod_rot; -float regen_mod_limit; -float regen_health; -float regen_health_linear; -float regen_health_rot; -float regen_health_rotlinear; -float regen_health_stable; -float regen_health_rotstable; -MUTATOR_HOOKABLE(PlayerRegen, EV_NO_ARGS); + #define EV_PlayerRegen(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** max_mod */ i(float, MUTATOR_ARGV_1_float) \ + /**/ o(float, MUTATOR_ARGV_1_float) \ + /** regen_mod */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ + /** rot_mod */ i(float, MUTATOR_ARGV_3_float) \ + /**/ o(float, MUTATOR_ARGV_3_float) \ + /** limit_mod */ i(float, MUTATOR_ARGV_4_float) \ + /**/ o(float, MUTATOR_ARGV_4_float) \ + /** health_regen */ i(float, MUTATOR_ARGV_5_float) \ + /**/ o(float, MUTATOR_ARGV_5_float) \ + /** health_regenlinear */ i(float, MUTATOR_ARGV_6_float) \ + /**/ o(float, MUTATOR_ARGV_6_float) \ + /** health_rot */ i(float, MUTATOR_ARGV_7_float) \ + /**/ o(float, MUTATOR_ARGV_7_float) \ + /** health_rotlinear */ i(float, MUTATOR_ARGV_8_float) \ + /**/ o(float, MUTATOR_ARGV_8_float) \ + /** health_stable */ i(float, MUTATOR_ARGV_9_float) \ + /**/ o(float, MUTATOR_ARGV_9_float) \ + /** health_rotstable */ i(float, MUTATOR_ARGV_10_float) \ + /**/ o(float, MUTATOR_ARGV_10_float) \ + /**/ +MUTATOR_HOOKABLE(PlayerRegen, EV_PlayerRegen); /** * called when the use key is pressed @@ -426,8 +452,8 @@ MUTATOR_HOOKABLE(SV_ParseServerCommand, EV_SV_ParseServerCommand); #define EV_Spawn_Score(i, o) \ /** player wanting to spawn */ i(entity, MUTATOR_ARGV_0_entity) \ /** spot to be evaluated */ i(entity, MUTATOR_ARGV_1_entity) \ - /** spot score, _x is priority, _y is "distance" */ i(vector, MUTATOR_ARGV_0_vector) \ - /**/ o(vector, MUTATOR_ARGV_0_vector) \ + /** spot score, _x is priority, _y is "distance" */ i(vector, MUTATOR_ARGV_2_vector) \ + /**/ o(vector, MUTATOR_ARGV_2_vector) \ /**/ MUTATOR_HOOKABLE(Spawn_Score, EV_Spawn_Score); @@ -484,7 +510,7 @@ MUTATOR_HOOKABLE(PortalTeleport, EV_PortalTeleport); /** * called whenever a player uses impulse 33 (help me) in cl_impulse.qc - * normally help me ping uses self.waypointsprite_attachedforcarrier, + * normally help me ping uses .waypointsprite_attachedforcarrier, * but if your mutator uses something different then you can handle it * in a special manner using this hook */ @@ -542,6 +568,7 @@ MUTATOR_HOOKABLE(AbortSpeedrun, EV_AbortSpeedrun); #define EV_ItemTouch(i, o) \ /** item */ i(entity, MUTATOR_ARGV_0_entity) \ /** toucher */ i(entity, MUTATOR_ARGV_1_entity) \ + /**/ o(entity, MUTATOR_ARGV_1_entity) \ /**/ MUTATOR_HOOKABLE(ItemTouch, EV_ItemTouch); @@ -600,6 +627,7 @@ MUTATOR_HOOKABLE(FireBullet_Hit, EV_FireBullet_Hit); /**/ o(string, MUTATOR_ARGV_0_string) \ /** skin */ i(int, MUTATOR_ARGV_1_int) \ /**/ o(int, MUTATOR_ARGV_1_int) \ + /** player */ i(entity, MUTATOR_ARGV_2_entity) \ /**/ MUTATOR_HOOKABLE(FixPlayermodel, EV_FixPlayermodel); @@ -627,6 +655,7 @@ MUTATOR_HOOKABLE(BuffModel_Customize, EV_BuffModel_Customize); #define EV_BuffTouch(i, o) \ /** buff */ i(entity, MUTATOR_ARGV_0_entity) \ /** player */ i(entity, MUTATOR_ARGV_1_entity) \ + /**/ o(entity, MUTATOR_ARGV_1_entity) \ /**/ MUTATOR_HOOKABLE(BuffTouch, EV_BuffTouch); @@ -637,7 +666,7 @@ MUTATOR_HOOKABLE(SetChangeParms, EV_NO_ARGS); MUTATOR_HOOKABLE(DecodeLevelParms, EV_NO_ARGS); #define EV_GetRecords(i, o) \ - /** page */ i(int, MUTATOR_ARGV_1_int) \ + /** page */ i(int, MUTATOR_ARGV_0_int) \ /** record list */ i(string, MUTATOR_ARGV_1_string) \ /**/ o(string, MUTATOR_ARGV_1_string) \ /**/ @@ -729,7 +758,7 @@ MUTATOR_HOOKABLE(CheckRules_World, EV_CheckRules_World); MUTATOR_HOOKABLE(WantWeapon, EV_WantWeapon); #define EV_AddPlayerScore(i, o) \ - /** score field */ i(int, MUTATOR_ARGV_0_int) \ + /** score field */ i(PlayerScoreField, MUTATOR_ARGV_0_entity) \ /** score */ i(float, MUTATOR_ARGV_1_float) \ /**/ o(float, MUTATOR_ARGV_1_float) \ /** player */ i(entity, MUTATOR_ARGV_2_entity) \ @@ -818,3 +847,19 @@ MUTATOR_HOOKABLE(Player_ChangeTeam, EV_Player_ChangeTeam); /** data */ i(string, MUTATOR_ARGV_2_string) \ /**/ MUTATOR_HOOKABLE(URI_GetCallback, EV_URI_GetCallback); + +/** + * return true to prevent weapon use for a player + */ + #define EV_ForbidWeaponUse(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ +MUTATOR_HOOKABLE(ForbidWeaponUse, EV_ForbidWeaponUse); + +/** called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here) */ +#define EV_CopyBody(i, o) \ + /** player */ i(entity, MUTATOR_ARGV_0_entity) \ + /** newly created clone */ i(entity, MUTATOR_ARGV_1_entity) \ + /** keepvelocity? */ i(bool, MUTATOR_ARGV_2_bool) \ + /**/ +MUTATOR_HOOKABLE(CopyBody, EV_CopyBody);