]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
I swear i'm going to sleep after this
authorSamual <samual@xonotic.org>
Sat, 31 Mar 2012 06:55:05 +0000 (02:55 -0400)
committerSamual <samual@xonotic.org>
Sat, 31 Mar 2012 06:55:05 +0000 (02:55 -0400)
qcsrc/server/autocvars.qh
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/portals.qc

index 68191f127ab33205a99d8dc215bb426871d78936..f08c88e53ff95ad01898052345b5da9bc955a639 100644 (file)
@@ -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;
index 137eebadb87edc1e56719e1e4be70dc6ce93fad0..f2d740c39ed9b63f4593790d435e55f57d1eac43 100644 (file)
@@ -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
index 309198eca568e34b4fb8876a270a6735ea0165e3..110f2017779d30c2afe2a2e998398e3de77eab24 100644 (file)
@@ -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
        {
index 1c09b8b0c4f7f041af248cb4a740b7771aa16cbe..75dae14bf5f28d666e9beb91e820e912389a1a54 100644 (file)
@@ -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)
        {