From 10d80d450be010dec3c153292bb096d6558f60ed Mon Sep 17 00:00:00 2001 From: Samual Date: Sat, 31 Mar 2012 02:55:05 -0400 Subject: [PATCH] I swear i'm going to sleep after this --- qcsrc/server/autocvars.qh | 6 ++++-- qcsrc/server/mutators/base.qh | 5 +++++ qcsrc/server/mutators/gamemode_ctf.qc | 20 +++++++++----------- qcsrc/server/portals.qc | 7 +++++-- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 68191f127..f08c88e53 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -781,8 +781,10 @@ float autocvar_g_ctf_flag_red_skin; float autocvar_g_ctf_flag_returntime; float autocvar_g_ctf_flag_return_when_unreachable; float autocvar_g_ctf_flag_take_damage; -float autocvar_g_ctf_flagcarrier_selfdamage; -float autocvar_g_ctf_flagcarrier_selfforce; +float autocvar_g_ctf_flagcarrier_selfdamagefactor; +float autocvar_g_ctf_flagcarrier_selfforcefactor; +float autocvar_g_ctf_flagcarrier_damagefactor; +float autocvar_g_ctf_flagcarrier_forcefactor; float autocvar_g_ctf_fullbrightflags; float autocvar_g_ctf_ignore_frags; float autocvar_g_ctf_shield_force; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 137eebadb..f2d740c39 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -205,3 +205,8 @@ MUTATOR_HOOKABLE(SV_StartFrame); MUTATOR_HOOKABLE(SetModname); // OUT string modname; // name of the mutator/mod if it warrants showing as such in the server browser + +MUTATOR_HOOKABLE(PortalTeleport); + // called whenever a player goes through a portal gun teleport + // allows you to strip a player of an item if they go through the teleporter to help prevent cheating + entity self; \ No newline at end of file diff --git a/qcsrc/server/mutators/gamemode_ctf.qc b/qcsrc/server/mutators/gamemode_ctf.qc index 309198eca..110f20177 100644 --- a/qcsrc/server/mutators/gamemode_ctf.qc +++ b/qcsrc/server/mutators/gamemode_ctf.qc @@ -429,7 +429,7 @@ void ctf_Handle_Pickup_Base(entity flag, entity player) void ctf_Handle_Pickup_Dropped(entity flag, entity player) { // declarations - float returnscore = (autocvar_g_ctf_flag_returntime ? bound(0, ((flag.ctf_droptime + autocvar_g_ctf_flag_returntime) - time) / autocvar_g_ctf_flag_returntime, 1) : 0); + float returnscore = (autocvar_g_ctf_flag_returntime ? bound(0, ((flag.ctf_droptime + autocvar_g_ctf_flag_returntime) - time) / autocvar_g_ctf_flag_returntime, 1) : 1); entity tmp_player; // temporary entity which the FOR_EACH_PLAYER loop uses to scan players string verbosename; // holds the name of the player OR no name at all for printing in the centerprints @@ -792,7 +792,7 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag // Hook Functions // ============== -MUTATOR_HOOKFUNCTION(ctf_RemovePlayer) +MUTATOR_HOOKFUNCTION(ctf_HookedDrop) { if(self.flagcarried) { ctf_Handle_Drop(self, DROPTYPE_NORMAL); } return 0; @@ -828,7 +828,7 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerPreThink) } MUTATOR_HOOKFUNCTION(ctf_PlayerDamage) // for changing damage and force values that are applied to players in g_damage.qc -{ /* +{ if(frag_attacker.flagcarried) // if the attacker is a flagcarrier { if(frag_target == frag_attacker) // damage done to yourself @@ -836,12 +836,12 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerDamage) // for changing damage and force values t frag_damage *= autocvar_g_ctf_flagcarrier_selfdamagefactor; frag_force *= autocvar_g_ctf_flagcarrier_selfforcefactor; } - else // damage done to noncarriers + else // damage done everyone else { frag_damage *= autocvar_g_ctf_flagcarrier_damagefactor; frag_force *= autocvar_g_ctf_flagcarrier_forcefactor; } - }*/ + } return 0; } @@ -1027,8 +1027,6 @@ void ctf_Initialize() ctf_captureshield_min_negscore = autocvar_g_ctf_shield_min_negscore; ctf_captureshield_max_ratio = autocvar_g_ctf_shield_max_ratio; ctf_captureshield_force = autocvar_g_ctf_shield_force; - - //g_ctf_win_mode = cvar("g_ctf_win_mode"); InitializeEntity(world, ctf_DelayedInit, INITPRIO_GAMETYPE); } @@ -1036,14 +1034,14 @@ void ctf_Initialize() MUTATOR_DEFINITION(gamemode_ctf) { - MUTATOR_HOOK(MakePlayerObserver, ctf_RemovePlayer, CBC_ORDER_ANY); - MUTATOR_HOOK(ClientDisconnect, ctf_RemovePlayer, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerDies, ctf_RemovePlayer, CBC_ORDER_ANY); + MUTATOR_HOOK(MakePlayerObserver, ctf_HookedDrop, CBC_ORDER_ANY); + MUTATOR_HOOK(ClientDisconnect, ctf_HookedDrop, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerDies, ctf_HookedDrop, CBC_ORDER_ANY); + MUTATOR_HOOK(PortalTeleport, ctf_HookedDrop, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, ctf_GiveFragsForKill, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPreThink, ctf_PlayerPreThink, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDamage_Calculate, ctf_PlayerDamage, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerUseKey, ctf_PlayerUseKey, CBC_ORDER_ANY); - //MUTATOR_HOOK(PlayerPowerups, ctf_PlayerPowerups, CBC_ORDER_ANY); MUTATOR_ONADD { diff --git a/qcsrc/server/portals.qc b/qcsrc/server/portals.qc index 1c09b8b0c..75dae14bf 100644 --- a/qcsrc/server/portals.qc +++ b/qcsrc/server/portals.qc @@ -154,8 +154,11 @@ float Portal_TeleportPlayer(entity teleporter, entity player) // factor -1 allows chaining portals, but may be weird player.right_vector = -1 * AnglesTransform_Apply(transform, player.right_vector); - if(player.flagcarried) - ctf_Handle_Drop(player, DROPTYPE_NORMAL); // FIXCTF + entity oldself = self; + self = player; + MUTATOR_CALLHOOK(PortalTeleport); + player = self; + self = oldself; if not(teleporter.enemy) { -- 2.39.2