]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add g_ctf_portalteleport cvar to toggle whether flag carriers can go through portal...
authorSamual <samual@xonotic.org>
Sun, 1 Apr 2012 21:25:24 +0000 (17:25 -0400)
committerSamual <samual@xonotic.org>
Sun, 1 Apr 2012 21:25:24 +0000 (17:25 -0400)
defaultXonotic.cfg
qcsrc/server/autocvars.qh
qcsrc/server/mutators/gamemode_ctf.qc

index 0a3cf937650cf6120d2015a4b707893207c23386..f471d449c36b0bf0e8e80419629040fc5bb028f2 100644 (file)
@@ -599,23 +599,25 @@ set g_ctf_flagcarrier_selfdamagefactor 1
 set g_ctf_flagcarrier_selfforcefactor 1
 set g_ctf_flagcarrier_damagefactor 1
 set g_ctf_flagcarrier_forcefactor 1
+set g_ctf_dropped_capture_radius 100 "allow dropped flags to be automatically captured by base flags if the dropped flag is within this radius of it"
 set g_ctf_fullbrightflags 0
 set g_ctf_dynamiclights 0
 set g_ctf_flag_damageforcescale 2
-set g_ctf_allow_drop 1 "dropping allows circumventing carrierkill score, so enable this with care!"
+set g_ctf_portalteleport 0 "allow flag carriers to go through portals made in portal gun without dropping the flag"
 set g_ctf_reverse 0    "if enabled, flags positions are switched: you have to capture the enemy's flag from your own base by bringing it to your own flag in the enemy base"
 set g_ctf_flag_collect_delay 1
 set g_ctf_flag_health 0
 set g_ctf_flag_dropped_waypoint 2 "show dropped flag waypointsprite when a flag is lost. 1 = team only, 2 = for all players"
 set g_ctf_flag_pickup_verbosename 0 "show the name of the person who picked up the flag too"
-set g_ctf_throw_velocity 700 "how fast or far a player can throw the flag"
-set g_ctf_allow_pass 1 "allow passing of flags to nearby team mates"
+set g_ctf_drop 1 "dropping allows circumventing carrierkill score, so enable this with care!"
+set g_ctf_drop_velocity 500 "how fast or far a player can throw the flag"
+set g_ctf_pass 1 "allow passing of flags to nearby team mates"
 set g_ctf_pass_radius 500 "maximum radius that you can pass to a team mate in"
 set g_ctf_pass_wait 2 "delay in seconds between how often players can pass the flag (antispam, essentially)"
-set g_ctf_dropped_capture_radius 100 "allow dropped flags to be automatically captured by base flags if the dropped flag is within this radius of it"
 set g_ctf_pass_request 1 "allow players to request the flag carrier to pass the flag to them"
 set g_ctf_pass_turnrate 50 "how well the flag follows the best direction to its target while passing"
 set g_ctf_pass_timelimit 2 "how long a flag can stay trying to pass before it gives up and just becomes dropped"
+set g_ctf_pass_velocity 750 "how fast or far a player can pass the flag"
 
 set g_ctf_shield_max_ratio 0   "shield at most this percentage of a team from the enemy flag (try: 0.4 for 40%)"
 set g_ctf_shield_min_negscore 20       "shield the player from the flag if he's got this negative amount of points or less"
index 9271e23fae119248e8be268d327fdcc492ad409b..d0950bcc929245596ba201cc38dfe9f302858cb6 100644 (file)
@@ -760,14 +760,16 @@ float autocvar_g_chat_flood_spl_team;
 float autocvar_g_chat_flood_spl_tell;
 float autocvar_g_chat_nospectators;
 float autocvar_g_chat_teamcolors;
-float autocvar_g_ctf_allow_drop;
-float autocvar_g_ctf_allow_pass;
+float autocvar_g_ctf_drop;
+float autocvar_g_ctf_drop_velocity;
+float autocvar_g_ctf_portalteleport;
+float autocvar_g_ctf_pass;
 float autocvar_g_ctf_pass_radius;
 float autocvar_g_ctf_pass_wait;
 float autocvar_g_ctf_pass_request;
 float autocvar_g_ctf_pass_turnrate;
 float autocvar_g_ctf_pass_timelimit;
-float autocvar_g_ctf_throw_velocity;
+float autocvar_g_ctf_pass_velocity;
 float autocvar_g_ctf_captimerecord_always;
 float autocvar_g_ctf_dynamiclights;
 string autocvar_g_ctf_flag_blue_model;
index dfee4bfefc49f72b3f8e22a4979ef2af75dd813d..721407f4554350156f8def992ab5b78a9e2ccc9a 100644 (file)
@@ -270,14 +270,14 @@ void ctf_Handle_Throw(entity player, entity reciever, float droptype)
                case DROP_PASS:
                {
                        vector targ_origin = (0.5 * (reciever.absmin + reciever.absmax));
-                       flag.velocity = (normalize(targ_origin - player.origin) * autocvar_g_ctf_throw_velocity);
+                       flag.velocity = (normalize(targ_origin - player.origin) * autocvar_g_ctf_pass_velocity);
                        break;
                }
                
                case DROP_THROW:
                {
                        makevectors((player.v_angle_y * '0 1 0') + (player.v_angle_x * '0.5 0 0'));
-                       flag.velocity = W_CalculateProjectileVelocity(player.velocity, ('0 0 200' + (v_forward * autocvar_g_ctf_throw_velocity)), FALSE);
+                       flag.velocity = W_CalculateProjectileVelocity(player.velocity, ('0 0 200' + (v_forward * autocvar_g_ctf_drop_velocity)), FALSE);
                        break;
                }
                
@@ -620,7 +620,7 @@ void ctf_FlagThink()
                                vector desired_direction = normalize(targ_origin - self.origin);
                                vector current_direction = normalize(self.velocity);
                                
-                               self.velocity = (normalize(current_direction + (desired_direction * autocvar_g_ctf_pass_turnrate)) * autocvar_g_ctf_throw_velocity); 
+                               self.velocity = (normalize(current_direction + (desired_direction * autocvar_g_ctf_pass_turnrate)) * autocvar_g_ctf_pass_velocity); 
                        }
                        return;
                }
@@ -863,9 +863,20 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
 // Hook Functions
 // ==============
 
-MUTATOR_HOOKFUNCTION(ctf_HookedDrop)
+MUTATOR_HOOKFUNCTION(ctf_RemovePlayer)
 {
-       if(self.flagcarried) { ctf_Handle_Throw(self, world, DROP_NORMAL); }
+       if(self.flagcarried)
+               { ctf_Handle_Throw(self, world, DROP_NORMAL); }
+               
+       return 0;
+}
+
+MUTATOR_HOOKFUNCTION(ctf_PortalTeleport)
+{
+       if(self.flagcarried) 
+       if(!autocvar_g_ctf_portalteleport)
+               { ctf_Handle_Throw(self, world, DROP_NORMAL); }
+
        return 0;
 }
 
@@ -931,7 +942,7 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
        if(time > player.throw_antispam)
        {
                // pass the flag to a team mate
-               if(autocvar_g_ctf_allow_pass)
+               if(autocvar_g_ctf_pass)
                {
                        entity head, closest_target;
                        head = findradius(player.origin, autocvar_g_ctf_pass_radius);
@@ -974,7 +985,7 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
                }
                
                // throw the flag in front of you
-               if(autocvar_g_ctf_allow_drop && player.flagcarried && !player.speedrunning)
+               if(autocvar_g_ctf_drop && player.flagcarried && !player.speedrunning)
                        { ctf_Handle_Throw(player, world, DROP_THROW); }
        }
                
@@ -1128,10 +1139,10 @@ void ctf_Initialize()
 
 MUTATOR_DEFINITION(gamemode_ctf)
 {
-       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(MakePlayerObserver, ctf_RemovePlayer, CBC_ORDER_ANY);
+       MUTATOR_HOOK(ClientDisconnect, ctf_RemovePlayer, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDies, ctf_RemovePlayer, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PortalTeleport, ctf_PortalTeleport, 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);