X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fmutators%2Fevents.qh;h=12f04fdfbb13383950228f8822b566127c58a1de;hb=646949cbbd4c3c945e766e1e38c0a2a6efd0c5bd;hp=fe2e3fd33ffb6f915b06e160b171d88927ffd116;hpb=6cc2d1aa115907d16ae84fb07c3fe6c3329cd9b5;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/mutators/events.qh b/qcsrc/client/mutators/events.qh index fe2e3fd33f..12f04fdfbb 100644 --- a/qcsrc/client/mutators/events.qh +++ b/qcsrc/client/mutators/events.qh @@ -1,13 +1,6 @@ -#ifndef CLIENT_MUTATORS_EVENTS_H -#define CLIENT_MUTATORS_EVENTS_H +#pragma once -#include "../../common/mutators/base.qh" - -// globals - -string cmd_name; -int cmd_argc; -string cmd_string; +#include /** * Called when a client command is parsed @@ -17,6 +10,8 @@ string cmd_string; * // example: * MUTATOR_HOOKFUNCTION(foo, CSQC_ConsoleCommand) { * if (MUTATOR_RETURNVALUE) return false; // command was already handled + * string cmd_name = M_ARGV(0, string); + * int cmd_argc = M_ARGV(1, int); * if (cmd_name == "echocvar" && cmd_argc >= 2) { * print(cvar_string(argv(1)), "\n"); * return true; @@ -29,49 +24,25 @@ string cmd_string; * } */ #define EV_CSQC_ConsoleCommand(i, o) \ - /** command name */ i(string, cmd_name) \ - /** also, argv() can be used */ i(int, cmd_argc) \ - /** whole command, use only if you really have to */ i(string, cmd_string) \ - /**/ + /** command name */ i(string, MUTATOR_ARGV_0_string) \ + /** argc (also, argv() can be used) */ i(int, MUTATOR_ARGV_1_int) \ + /** whole command, use only if you really have to */ i(string, MUTATOR_ARGV_2_string) \ + /**/ MUTATOR_HOOKABLE(CSQC_ConsoleCommand, EV_CSQC_ConsoleCommand); /* Called when the crosshair is being updated */ MUTATOR_HOOKABLE(UpdateCrosshair, EV_NO_ARGS); -/** - * Called when a temp entity is parsed - * NOTE: hooks MUST start with: - * if (MUTATOR_RETURNVALUE) return; - * if (!ReadMutatorEquals(mutator_argv_int_0, name_of_mutator)) return; - * return = true; - */ -#define EV_CSQC_Parse_TempEntity(i, o) \ - /** mutator id */ i(int, mutator_argv_int_0) \ - /**/ -MUTATOR_HOOKABLE(CSQC_Parse_TempEntity, EV_CSQC_Parse_TempEntity); - -/** - * Called when a shared entity is updated - * if (MUTATOR_RETURNVALUE) return; - * if (!ReadMutatorEquals(mutator_argv_int_0, name_of_mutator)) return; - * return = true; - */ -#define EV_CSQC_Ent_Update(i, o) \ - /** mutator id */ i(int, mutator_argv_int_0) \ - /** bIsNewEntity */ i(bool, mutator_argv_bool_0) \ - /**/ -MUTATOR_HOOKABLE(CSQC_Ent_Update, EV_CSQC_Ent_Update); - /** Called when a projectile is linked with CSQC */ #define EV_Ent_Projectile(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(Ent_Projectile, EV_Ent_Projectile); /** Called when a projectile's properties are being modified */ #define EV_EditProjectile(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(EditProjectile, EV_EditProjectile); /* Called when projectiles are precached */ @@ -79,26 +50,26 @@ MUTATOR_HOOKABLE(PrecacheProjectiles, EV_NO_ARGS); /** Called when updating the attached tags index */ #define EV_TagIndex_Update(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(TagIndex_Update, EV_TagIndex_Update); /** Called when setting the attached tags */ #define EV_TagIndex_Apply(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(TagIndex_Apply, EV_TagIndex_Apply); /** Called when setting up skeleton bones */ #define EV_Skeleton_CheckBones(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(Skeleton_CheckBones, EV_Skeleton_CheckBones); /** Called when setting up bones from the loaded model */ #define EV_Skeleton_CheckModel(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(Skeleton_CheckModel, EV_Skeleton_CheckModel); /** Called when clearing the global parameters for a model */ @@ -106,27 +77,86 @@ MUTATOR_HOOKABLE(ClearModelParams, EV_NO_ARGS); /** Called when getting the global parameters for a model */ #define EV_GetModelParams(i, o) \ - /** entity id */ i(string, checkmodel_input) \ - /** entity id */ i(string, checkmodel_command) \ - /**/ -string checkmodel_input, checkmodel_command; + /** input */ i(string, MUTATOR_ARGV_0_string) \ + /** command */ i(string, MUTATOR_ARGV_1_string) \ + /**/ MUTATOR_HOOKABLE(GetModelParams, EV_GetModelParams); -/** called when a player presses the jump key */ -#define EV_PlayerJump(i, o) \ - /**/ i(float, player_multijump) \ - /**/ i(float, player_jumpheight) \ - /**/ o(float, player_multijump) \ - /**/ o(float, player_jumpheight) \ - /**/ -float player_multijump; -float player_jumpheight; -MUTATOR_HOOKABLE(PlayerJump, EV_PlayerJump); - /** Called checking if 3rd person mode should be forced on */ #define EV_WantEventchase(i, o) \ - /** entity id */ i(entity, self) \ - /**/ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /**/ MUTATOR_HOOKABLE(WantEventchase, EV_WantEventchase); -#endif +/** allow customizing 3rd person mode effect */ +#define EV_CustomizeEventchase(i, o) \ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /* current_view_origin_override */ o(vector, MUTATOR_ARGV_0_vector) \ + /* view_offset_override */ o(vector, MUTATOR_ARGV_1_vector) \ + /* chase_distance_override */ o(float, MUTATOR_ARGV_0_float) \ + /**/ +MUTATOR_HOOKABLE(CustomizeEventchase, EV_CustomizeEventchase); + +#define EV_AnnouncerOption(i, o) \ + /** announcer string */ i(string, MUTATOR_ARGV_0_string) \ + /** announcer string */ o(string, MUTATOR_ARGV_0_string) \ + /**/ +MUTATOR_HOOKABLE(AnnouncerOption, EV_AnnouncerOption); + +MUTATOR_HOOKABLE(Ent_Init, EV_NO_ARGS); + +#define EV_HUD_Draw_overlay(i, o) \ + /**/ o(vector, MUTATOR_ARGV_0_vector) \ + /**/ o(float, MUTATOR_ARGV_1_float) \ + /**/ +MUTATOR_HOOKABLE(HUD_Draw_overlay, EV_HUD_Draw_overlay); + +MUTATOR_HOOKABLE(HUD_Powerups_add, EV_NO_ARGS); + +/** Return true to not draw any vortex beam */ +#define EV_Particles_VortexBeam(i, o) \ + /** beam shot origin */ i(vector, MUTATOR_ARGV_0_vector) \ + /** beam end position */ i(vector, MUTATOR_ARGV_1_vector) \ + /**/ +MUTATOR_HOOKABLE(Particles_VortexBeam, EV_Particles_VortexBeam); + +/** Return true to not draw any impact effect */ +#define EV_Weapon_ImpactEffect(i, o) \ + /** weapon */ i(entity, MUTATOR_ARGV_0_entity) \ + /** damage entity */ i(entity, MUTATOR_ARGV_1_entity) \ + /**/ +MUTATOR_HOOKABLE(Weapon_ImpactEffect, EV_Weapon_ImpactEffect); + +/* NOTE: hooks MUST start with if (MUTATOR_RETURNVALUE) return false; +*/ +#define EV_HUD_Command(i, o) \ + /** argc (also, argv() can be used) */ i(int, MUTATOR_ARGV_0_int) \ + /**/ +MUTATOR_HOOKABLE(HUD_Command, EV_HUD_Command); + +/** Draw the grapple hook, allows changing hook texture and colour */ +#define EV_DrawGrapplingHook(i, o) \ + /** hook */ i(entity, MUTATOR_ARGV_0_entity) \ + /** texture */ i(string, MUTATOR_ARGV_1_string) \ + /***/ o(string, MUTATOR_ARGV_1_string) \ + /** colour */ i(vector, MUTATOR_ARGV_2_vector) \ + /***/ o(vector, MUTATOR_ARGV_2_vector) \ + /** team */ i(float, MUTATOR_ARGV_3_float) \ + /**/ +MUTATOR_HOOKABLE(DrawGrapplingHook, EV_DrawGrapplingHook); + +/** Called when an entity is updated (either by SVQC networking or PVS) */ +#define EV_Ent_Update(i, o) \ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /** is new to client */ i(bool, MUTATOR_ARGV_1_bool) \ + /**/ +MUTATOR_HOOKABLE(Ent_Update, EV_Ent_Update); + +/** Return true to not draw crosshair */ +MUTATOR_HOOKABLE(DrawCrosshair, EV_NO_ARGS); + +/** Return true to not draw scoreboard */ +MUTATOR_HOOKABLE(DrawScoreboard, EV_NO_ARGS); + +/** Called when drawing info messages, allows adding new info messages */ +MUTATOR_HOOKABLE(DrawInfoMessages, EV_NO_ARGS);