From c800c64cc243600a888dd4cf49e66dcb3bb548f4 Mon Sep 17 00:00:00 2001 From: Samual Date: Mon, 2 Apr 2012 01:56:28 -0400 Subject: [PATCH] Add mutator hooks for vehicle entrance and exit -- this way CTF code can handle it directly. --- defaultXonotic.cfg | 1 + qcsrc/server/autocvars.qh | 1 + qcsrc/server/mutators/base.qh | 16 +++++++++++- qcsrc/server/mutators/gamemode_ctf.qc | 35 ++++++++++++++++++++++++++- qcsrc/server/mutators/gamemode_ctf.qh | 4 +++ qcsrc/server/vehicles/vehicles.qc | 26 +++----------------- vehicles.cfg | 1 - 7 files changed, 58 insertions(+), 26 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index cd6a47b05..3732547b3 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -595,6 +595,7 @@ set g_ctf_flag_return_time 15 set g_ctf_flag_return_dropped 100 set g_ctf_flag_return_damage 0 set g_ctf_flag_return_when_unreachable 1 "automatically return the flag if it falls into lava/slime/trigger hurt" +set g_ctf_flagcarrier_allow_vehicle_carry 1 set g_ctf_flagcarrier_selfdamagefactor 1 set g_ctf_flagcarrier_selfforcefactor 1 set g_ctf_flagcarrier_damagefactor 1 diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index cf5e9a3eb..2bf09f197 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -788,6 +788,7 @@ float autocvar_g_ctf_flag_return_time; float autocvar_g_ctf_flag_return_when_unreachable; float autocvar_g_ctf_flag_return_damage; float autocvar_g_ctf_flag_return_dropped; +float autocvar_g_ctf_flagcarrier_allow_vehicle_carry; float autocvar_g_ctf_flagcarrier_selfdamagefactor; float autocvar_g_ctf_flagcarrier_selfforcefactor; float autocvar_g_ctf_flagcarrier_damagefactor; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 374945d0c..a8828f8c6 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -218,4 +218,18 @@ MUTATOR_HOOKABLE(HelpMePing); // but if your mutator uses something different then you can handle it // in a special manner using this hook // INPUT - entity self; // the player who pressed impulse 33 \ No newline at end of file + entity self; // the player who pressed impulse 33 + +MUTATOR_HOOKABLE(VehicleEnter); + // called when a player enters a vehicle + // allows mutators to set special settings in this event + // INPUT + entity other; // the player + entity self; // the vehicle + +MUTATOR_HOOKABLE(VehicleExit); + // called when a player exits a vehicle + // allows mutators to set special settings in this event + // INPUT + entity other; // the player + entity self; // the vehicle \ No newline at end of file diff --git a/qcsrc/server/mutators/gamemode_ctf.qc b/qcsrc/server/mutators/gamemode_ctf.qc index f93498377..01902c077 100644 --- a/qcsrc/server/mutators/gamemode_ctf.qc +++ b/qcsrc/server/mutators/gamemode_ctf.qc @@ -1051,6 +1051,37 @@ MUTATOR_HOOKFUNCTION(ctf_HelpMePing) return 1; } +MUTATOR_HOOKFUNCTION(ctf_VehicleEnter) +{ + if(other.flagcarried) + { + if(!autocvar_g_ctf_flagcarrier_allow_vehicle_carry) + { + ctf_Handle_Throw(self, world, DROP_NORMAL); + } + else + { + setattachment(other.flagcarried, self, ""); + setorigin(other, VEHICLE_FLAG_OFFSET); + other.flagcarried.scale = VEHICLE_FLAG_SCALE; + } + } + + return 0; +} + +MUTATOR_HOOKFUNCTION(ctf_VehicleExit) +{ + if(self.owner.flagcarried) + { + setattachment(self.owner.flagcarried, self.owner, ""); + setorigin(self.owner.flagcarried, FLAG_CARRY_OFFSET); + self.owner.flagcarried.scale = FLAG_SCALE; + } + + return 0; +} + // ========== // Spawnfuncs @@ -1208,7 +1239,9 @@ MUTATOR_DEFINITION(gamemode_ctf) MUTATOR_HOOK(PlayerDamage_Calculate, ctf_PlayerDamage, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerUseKey, ctf_PlayerUseKey, CBC_ORDER_ANY); MUTATOR_HOOK(HelpMePing, ctf_HelpMePing, CBC_ORDER_ANY); - + MUTATOR_HOOK(VehicleEnter, ctf_VehicleEnter, CBC_ORDER_ANY); + MUTATOR_HOOK(VehicleExit, ctf_VehicleExit, CBC_ORDER_ANY); + MUTATOR_ONADD { if(time > 1) // game loads at time 1 diff --git a/qcsrc/server/mutators/gamemode_ctf.qh b/qcsrc/server/mutators/gamemode_ctf.qh index 7befba4ca..f25a0a4a8 100644 --- a/qcsrc/server/mutators/gamemode_ctf.qh +++ b/qcsrc/server/mutators/gamemode_ctf.qh @@ -15,6 +15,7 @@ void spawnfunc_ctf_team(); // flag constants // for most of these, there is just one question to be asked: WHYYYYY? #define FLAG_MIN (PL_MIN + '0 0 -13') #define FLAG_MAX (PL_MAX + '0 0 -13') + #define FLAG_SCALE 0.6 #define FLAG_THINKRATE 0.2 @@ -25,6 +26,9 @@ void spawnfunc_ctf_team(); #define FLAG_SPAWN_OFFSET ('0 0 1' * (PL_MAX_z - 13)) #define FLAG_WAYPOINT_OFFSET ('0 0 64') +#define VEHICLE_FLAG_OFFSET ('0 0 96') +#define VEHICLE_FLAG_SCALE 1.0 + // waypoint colors #define WPCOLOR_ENEMYFC(t) (colormapPaletteColor(t - 1, FALSE) * 0.75) #define WPCOLOR_FLAGCARRIER(t) (('0 0.75 0' + colormapPaletteColor(t - 1, FALSE)) * 0.5) diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 97784315d..f35602a68 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -2,7 +2,6 @@ float autocvar_g_vehicles_crush_dmg; float autocvar_g_vehicles_crush_force; float autocvar_g_vehicles_delayspawn; float autocvar_g_vehicles_delayspawn_jitter; -float autocvar_g_vehicles_allow_flagcarry; void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force); void vehicles_return(); @@ -520,19 +519,7 @@ void vehicles_enter() CSQCVehicleSetup(self.owner, self.hud); - /* FIXCTF // THIS IS A BIG NO-NO, NO GAME MODE SPECIFIC CODE IN VEHICLES. - if(other.flagcarried) - { - if(!autocvar_g_vehicles_allow_flagcarry) - DropFlag(other.flagcarried, world, world); - else - { - other.flagcarried.scale = 1; - setattachment(other.flagcarried, self, ""); - setorigin(other, '0 0 96'); - } - } - */ + MUTATOR_CALLHOOK(VehicleEnter); self.vehicle_enter(); antilag_clear(other); @@ -648,15 +635,8 @@ void vehicles_exit(float eject) self.team = 0; else self.team = self.tur_head.team; - - /* FIXCTF // THIS IS A BIG NO-NO, NO GAME MODE SPECIFIC CODE IN VEHICLES. - if(self.owner.flagcarried) - { - self.owner.flagcarried.scale = 0.6; - setattachment(self.owner.flagcarried, self.owner, ""); - setorigin(self.owner.flagcarried, FLAG_CARRY_POS); - } - */ + + MUTATOR_CALLHOOK(VehicleExit); sound (self, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTN_NORM); self.vehicle_exit(eject); diff --git a/vehicles.cfg b/vehicles.cfg index e00232122..af9a1353e 100644 --- a/vehicles.cfg +++ b/vehicles.cfg @@ -16,4 +16,3 @@ set cl_vehicles_hudscale 0.5way set g_vehicles_delayspawn 1 set g_vehicles_delayspawn_jitter 10 -set g_vehicles_allow_flagcarry 1 -- 2.39.2