]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Survival: Moving player stats to Player Templates mutator.
authorLyberta <lyberta@lyberta.net>
Thu, 25 May 2017 19:27:37 +0000 (22:27 +0300)
committerLyberta <lyberta@lyberta.net>
Thu, 25 May 2017 19:27:37 +0000 (22:27 +0300)
qcsrc/server/mutators/mutator/gamemode_survival.qc
survival.cfg

index 475958411a9bafa58f38bb4887ea9b6159d0ee09..856d2e6ee1ac9d4c8c863e5edfeddd8c251fa11f 100644 (file)
@@ -1,5 +1,6 @@
 #include "gamemode_survival.qh"
 
+#include <common/mutators/mutator/playertemplates/sv_playertemplates.qh>
 #include <common/mutators/mutator/overkill/hmg.qh>
 #include <common/mutators/mutator/overkill/rpc.qh>
 
@@ -71,34 +72,6 @@ int autocvar_g_surv_defender_force_overkill_models;
 /// \brief Whether to force overkill player models for cannon fodder.
 int autocvar_g_surv_cannon_fodder_force_overkill_models;
 
-/// \brief Number of weapons that can be randomly given to attackers during
-/// spawn.
-int autocvar_g_surv_attacker_num_random_start_weapons;
-
-/// \brief How much health do defenders get during spawn.
-int autocvar_g_surv_defender_start_health;
-/// \brief How much armor do defenders get during spawn.
-int autocvar_g_surv_defender_start_armor;
-/// \brief How many shells do defenders get during spawn.
-int autocvar_g_surv_defender_start_ammo_shells;
-/// \brief How many bullets do defenders get during spawn.
-int autocvar_g_surv_defender_start_ammo_bullets;
-/// \brief How many rockets do defenders get during spawn.
-int autocvar_g_surv_defender_start_ammo_rockets;
-/// \brief How many cells do defenders get during spawn.
-int autocvar_g_surv_defender_start_ammo_cells;
-/// \brief Number of weapons that can be randomly given to defenders during
-/// spawn.
-int autocvar_g_surv_defender_num_random_start_weapons;
-
-/// \brief How much health does cannon fodder get during spawn.
-int autocvar_g_surv_cannon_fodder_start_health;
-/// \brief How much armor does cannon fodder get during spawn.
-int autocvar_g_surv_cannon_fodder_start_armor;
-/// \brief Number of weapons that can be randomly given to cannon fodder during
-/// spawn.
-int autocvar_g_surv_cannon_fodder_num_random_start_weapons;
-
 /// \brief How much health do attackers get when they pickup ammo.
 int autocvar_g_surv_attacker_pickup_ammo_health;
 /// \brief How much armor do attackers get when they pickup ammo.
@@ -169,17 +142,6 @@ int autocvar_g_surv_defender_pickup_cells_mega;
 /// \brief How much score attackers gain per 1 point of damage.
 float autocvar_g_surv_attacker_damage_score;
 
-/// \brief How much defenders damage others. Higher values mean more damage.
-float autocvar_g_surv_defender_attack_scale;
-/// \brief How much defenders get damaged. High values mean less damage.
-float autocvar_g_surv_defender_defense_scale;
-
-/// \brief How much cannon fodder damages others. Higher values mean more
-/// damage.
-float autocvar_g_surv_cannon_fodder_attack_scale;
-/// \brief How much cannon fodder gets damaged. Higher values mean less damage.
-float autocvar_g_surv_cannon_fodder_defense_scale;
-
 /// \brief How much score attackers get for fragging defenders.
 float autocvar_g_surv_attacker_frag_score;
 
@@ -350,6 +312,33 @@ void Surv_Initialize()
                autocvar_timelimit_override, -1);
 }
 
+string Surv_GetPlayerTemplate(entity player)
+{
+       switch (player.team)
+       {
+               case surv_attackerteam:
+               {
+                       switch (player.surv_role)
+                       {
+                               case SURVIVAL_ROLE_NONE:
+                               case SURVIVAL_ROLE_PLAYER:
+                               {
+                                       return "surv_attacker";
+                               }
+                               case SURVIVAL_ROLE_CANNON_FODDER:
+                               {
+                                       return "surv_cannon_fodder";
+                               }
+                       }
+               }
+               case surv_defenderteam:
+               {
+                       return "surv_defender";
+               }
+       }
+       return "default";
+}
+
 /// \brief Changes the number of players in a team.
 /// \param[in] teamnum Team to adjust.
 /// \param[in] delta Amount to adjust by.
@@ -878,9 +867,9 @@ void Surv_UpdateAliveStats()
 /// \return No return.
 void Surv_UpdateDefenderHealthStat()
 {
-       float maxhealth = surv_numdefenders * (
-               autocvar_g_surv_defender_start_health +
-               autocvar_g_surv_defender_start_armor);
+       float maxhealth = surv_numdefenders * (PlayerTemplate_GetFloatCvar(
+               "surv_defender", "start_health") + PlayerTemplate_GetFloatCvar(
+               "surv_defender", "start_armor"));
        float totalhealth = 0;
        FOREACH_CLIENT(IS_PLAYER(it),
        {
@@ -1100,111 +1089,6 @@ void Surv_DeterminePlayerModel(entity player)
        }
 }
 
-/// \brief Gives start weapons to the player.
-/// \param[in,out] player Player to give weapons to.
-/// \return No return.
-void Surv_GiveStartWeapons(entity player)
-{
-       int numrandomweapons = 0;
-       string randomweaponlist = "";
-       switch (player.team)
-       {
-               case surv_attackerteam:
-               {
-                       FOREACH(Weapons, it != WEP_Null,
-                       {
-                               if (it.weaponstart)
-                               {
-                                       player.weapons |= it.m_wepset;
-                               }
-                       });
-                       switch (player.surv_role)
-                       {
-                               case SURVIVAL_ROLE_PLAYER:
-                               {
-                                       numrandomweapons =
-                                               autocvar_g_surv_attacker_num_random_start_weapons;
-                                       randomweaponlist = "g_surv_attacker_random_start_weapons";
-                                       break;
-                               }
-                               case SURVIVAL_ROLE_CANNON_FODDER:
-                               {
-                                       numrandomweapons =
-                                               autocvar_g_surv_cannon_fodder_num_random_start_weapons;
-                                       randomweaponlist =
-                                               "g_surv_cannon_fodder_random_start_weapons";
-                                       break;
-                               }
-                       }
-                       break;
-               }
-               case surv_defenderteam:
-               {
-                       int numweapons = tokenize_console(cvar_string(
-                               "g_surv_defender_start_weapons"));
-                       for (int i = 0; i < numweapons; ++i)
-                       {
-                               string weapon = argv(i);
-                               FOREACH(Weapons, it != WEP_Null,
-                               {
-                                       if (it.netname == weapon)
-                                       {
-                                               player.weapons |= it.m_wepset;
-                                               break;
-                                       }
-                               });
-                       }
-                       numrandomweapons =
-                               autocvar_g_surv_defender_num_random_start_weapons;
-                       randomweaponlist = "g_surv_defender_random_start_weapons";
-                       break;
-               }
-       }
-       if (numrandomweapons == 0)
-       {
-               return;
-       }
-       int numweapons = tokenize_console(cvar_string(randomweaponlist));
-       if (warmup_stage)
-       {
-               // Give all weapons during warmup stage.
-               for (int i = 0; i < numweapons; ++i)
-               {
-                       string weapon = argv(i);
-                       FOREACH(Weapons, it != WEP_Null,
-                       {
-                               if (it.netname == weapon)
-                               {
-                                       player.weapons |= it.m_wepset;
-                                       break;
-                               }
-                       });
-               }
-               return;
-       }
-       for (int i = 0; i < numrandomweapons; ++i)
-       {
-               // Finding weapon which player doesn't have.
-               WepSet weaponbit = WEPSET(Null);
-               int numattempts = 0;
-               do
-               {
-                       string weapon = argv(floor(random() * numweapons));
-                       FOREACH(Weapons, it != WEP_Null,
-                       {
-                               if (it.netname == weapon)
-                               {
-                                       weaponbit = it.m_wepset;
-                                       break;
-                               }
-                       });
-                       ++numattempts;
-               }
-               while ((player.weapons & weaponbit) && (numattempts < 10));
-               player.weapons |= weaponbit;
-       }
-}
-
 //=============================== Callbacks ===================================
 
 bool Surv_CanRoundStart()
@@ -1383,8 +1267,9 @@ void Surv_RoundStart()
                                                NULL, surv_attackerteam, it, surv_attack_sprite, false,
                                                RADARICON_OBJECTIVE);
                                        WaypointSprite_UpdateMaxHealth(it.surv_attack_sprite,
-                                               autocvar_g_surv_defender_start_health +
-                                               autocvar_g_surv_defender_start_armor);
+                                               PlayerTemplate_GetFloatCvar("surv_defender",
+                                               "start_health") + PlayerTemplate_GetFloatCvar(
+                                               "surv_defender", "start_armor"));
                                        WaypointSprite_UpdateHealth(it.surv_attack_sprite,
                                                it.health + it.armorvalue);
                                }
@@ -1696,7 +1581,7 @@ MUTATOR_HOOKFUNCTION(surv, PlayerSpawn)
        LOG_TRACE("Survival: PlayerSpawn, player = ", player.netname);
        player.surv_state = SURVIVAL_STATE_PLAYING;
        Surv_DeterminePlayerModel(player);
-       Surv_GiveStartWeapons(player);
+       PlayerTemplate_PlayerSpawn(player, Surv_GetPlayerTemplate(player));
        switch (player.team)
        {
                case surv_attackerteam:
@@ -1705,19 +1590,10 @@ MUTATOR_HOOKFUNCTION(surv, PlayerSpawn)
                        {
                                case SURVIVAL_ROLE_PLAYER:
                                {
-                                       player.items |= IT_UNLIMITED_AMMO;
                                        Send_Notification(NOTIF_ONE, player, MSG_CENTER,
                                                CENTER_ASSAULT_ATTACKING);
                                        break;
                                }
-                               case SURVIVAL_ROLE_CANNON_FODDER:
-                               {
-                                       player.health = autocvar_g_surv_cannon_fodder_start_health;
-                                       player.armorvalue =
-                                               autocvar_g_surv_cannon_fodder_start_armor;
-                                       player.items |= IT_UNLIMITED_AMMO;
-                                       break;
-                               }
                                default:
                                {
                                        LOG_TRACE("Survival: PlayerSpawn: Invalid attacker role.");
@@ -1733,12 +1609,6 @@ MUTATOR_HOOKFUNCTION(surv, PlayerSpawn)
                                LOG_TRACE("Survival: PlayerSpawn: ", player.netname,
                                        " has invalid defender role.");
                        }
-                       player.health = autocvar_g_surv_defender_start_health;
-                       player.armorvalue = autocvar_g_surv_defender_start_armor;
-                       player.ammo_shells = autocvar_g_surv_defender_start_ammo_shells;
-                       player.ammo_nails = autocvar_g_surv_defender_start_ammo_bullets;
-                       player.ammo_rockets = autocvar_g_surv_defender_start_ammo_rockets;
-                       player.ammo_cells = autocvar_g_surv_defender_start_ammo_cells;
                        Send_Notification(NOTIF_ONE, player, MSG_CENTER,
                                CENTER_ASSAULT_DEFENDING);
                        break;
@@ -2116,47 +1986,9 @@ MUTATOR_HOOKFUNCTION(surv, Damage_Calculate)
        entity frag_attacker = M_ARGV(1, entity);
        entity frag_target = M_ARGV(2, entity);
        float damage = M_ARGV(4, float);
-       switch (frag_attacker.team)
-       {
-               case surv_attackerteam:
-               {
-                       switch (frag_attacker.surv_role)
-                       {
-                               case SURVIVAL_ROLE_CANNON_FODDER:
-                               {
-                                       damage *= autocvar_g_surv_cannon_fodder_attack_scale;
-                                       break;
-                               }
-                       }
-                       break;
-               }
-               case surv_defenderteam:
-               {
-                       damage *= autocvar_g_surv_defender_attack_scale;
-                       break;
-               }
-       }
-       switch (frag_target.team)
-       {
-               case surv_attackerteam:
-               {
-                       switch (frag_target.surv_role)
-                       {
-                               case SURVIVAL_ROLE_CANNON_FODDER:
-                               {
-                                       damage /= autocvar_g_surv_cannon_fodder_defense_scale;
-                                       break;
-                               }
-                       }
-                       break;
-               }
-               case surv_defenderteam:
-               {
-                       damage /= autocvar_g_surv_defender_defense_scale;
-                       break;
-               }
-       }
-       M_ARGV(4, float) = damage;
+       M_ARGV(4, float) = PlayerTemplate_Damage_Calculate(frag_attacker,
+               Surv_GetPlayerTemplate(frag_attacker), frag_target,
+               Surv_GetPlayerTemplate(frag_target), damage);
 }
 
 /// \brief Hook which is called when the player was damaged.
index 97021804a3d24bd4437fabfce46cc116a84e015a..55af9c904be457fe5ca8756ec21e2b20e0ffd8c9 100644 (file)
@@ -25,23 +25,41 @@ set g_surv_attacker_force_overkill_models 0 "Whether to force overkill player mo
 set g_surv_defender_force_overkill_models 1 "Whether to force overkill player models for defenders"
 set g_surv_cannon_fodder_force_overkill_models 0 "Whether to force overkill player models for cannon fodder"
 
-set g_surv_attacker_num_random_start_weapons 2 "Number of weapons that can be randomly given to attackers during spawn"
-set g_surv_attacker_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" "Weapons that can be randomly given to attackers during spawn"
-
-set g_surv_defender_start_health 200 "How much health do defenders get during spawn"
-set g_surv_defender_start_armor 200 "How much armor do defenders get during spawn"
-set g_surv_defender_start_ammo_shells 20 "How many shells do defenders get during spawn"
-set g_surv_defender_start_ammo_bullets 15 "How many bullets do defenders get during spawn"
-set g_surv_defender_start_ammo_rockets 0 "How many rockets do defenders get during spawn"
-set g_surv_defender_start_ammo_cells 30 "How many cells do defenders get during spawn"
-set g_surv_defender_start_weapons "okshotgun okmachinegun okvortex" "Which weapons to give to defenders during spawn"
-set g_surv_defender_num_random_start_weapons 0 "Number of weapons that can be randomly given to defenders during spawn"
-set g_surv_defender_random_start_weapons "" "Weapons that can be randomly given to defenders during spawn"
-
-set g_surv_cannon_fodder_start_health 100 "How much health does cannon fodder get during spawn"
-set g_surv_cannon_fodder_start_armor 0 "How much armor does cannon fodder get during spawn"
-set g_surv_cannon_fodder_num_random_start_weapons 2 "Number of weapons that can be randomly given to cannon fodder during spawn"
-set g_surv_cannon_fodder_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" "Weapons that can be randomly given to cannon fodder during spawn"
+set g_player_template_surv_attacker_start_health 100 "How much health do attackers get during spawn"
+set g_player_template_surv_attacker_start_armor 0 "How much armor do attackers get during spawn"
+set g_player_template_surv_attacker_unlimited_ammo 1 "Whether to give attackers unlimited ammo"
+set g_player_template_surv_attacker_start_ammo_shells 0 "How many shells do attackers get during spawn"
+set g_player_template_surv_attacker_start_ammo_bullets 0 "How many bullets do attackers get during spawn"
+set g_player_template_surv_attacker_start_ammo_rockets 0 "How many rockets do attackers get during spawn"
+set g_player_template_surv_attacker_start_ammo_cells 0 "How many cells do attackers get during spawn"
+set g_player_template_surv_attacker_default_start_weapons 1 "Whether to give attackers default start weapons"
+set g_player_template_surv_attacker_start_weapons "" "Which weapons do attackers get during spawn"
+set g_player_template_surv_attacker_num_random_start_weapons 2 "Number of weapons that can be randomly given to attackers during spawn"
+set g_player_template_surv_attacker_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" "Weapons that can be randomly given to attackers during spawn"
+
+set g_player_template_surv_defender_start_health 200 "How much health do defenders get during spawn"
+set g_player_template_surv_defender_start_armor 200 "How much armor do defenders get during spawn"
+set g_player_template_surv_defender_unlimited_ammo 0 "Whether to give defenders unlimited ammo"
+set g_player_template_surv_defender_start_ammo_shells 20 "How many shells do defenders get during spawn"
+set g_player_template_surv_defender_start_ammo_bullets 15 "How many bullets do defenders get during spawn"
+set g_player_template_surv_defender_start_ammo_rockets 0 "How many rockets do defenders get during spawn"
+set g_player_template_surv_defender_start_ammo_cells 30 "How many cells do defenders get during spawn"
+set g_player_template_surv_defender_default_start_weapons 0 "Whether to give defenders default start weapons"
+set g_player_template_surv_defender_start_weapons "okshotgun okmachinegun okvortex" "Which weapons do defenders get during spawn"
+set g_player_template_surv_defender_num_random_start_weapons 0 "Number of weapons that can be randomly given to defenders during spawn"
+set g_player_template_surv_defender_random_start_weapons "" "Weapons that can be randomly given to defenders during spawn"
+
+set g_player_template_surv_cannon_fodder_start_health 100 "How much health does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_start_armor 0 "How much armor does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_unlimited_ammo 1 "Whether to give cannon fodder unlimited ammo"
+set g_player_template_surv_cannon_fodder_start_ammo_shells 0 "How many shells does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_start_ammo_bullets 0 "How many bullets does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_start_ammo_rockets 0 "How many rockets does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_start_ammo_cells 0 "How many cells does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_default_start_weapons 1 "Whether to give cannon fodder default start weapons"
+set g_player_template_surv_cannon_fodder_start_weapons "" "Which weapons does cannon fodder get during spawn"
+set g_player_template_surv_cannon_fodder_num_random_start_weapons 2 "Number of weapons that can be randomly given to cannon fodder during spawn"
+set g_player_template_surv_cannon_fodder_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" "Weapons that can be randomly given to cannon fodder during spawn"
 
 set g_surv_attacker_pickup_ammo_health 25 "How much health do attackers get when they pickup ammo"
 set g_surv_attacker_pickup_ammo_armor 25 "How much armor do attackers get when they pickup ammo"
@@ -77,11 +95,14 @@ set g_surv_defender_pickup_cells_mega 50 "How many cells do defenders get when t
 
 set g_surv_attacker_damage_score 0.025 "How much score attackers gain per 1 point of damage"
 
-set g_surv_defender_attack_scale 1 "How much defenders damage others. Higher values mean more damage"
-set g_surv_defender_defense_scale 2 "How much defenders get damaged. Higher values mean less damage"
+set g_player_template_surv_attacker_attack_scale 1 "How much attackers damage others. Higher values mean more damage"
+set g_player_template_surv_attacker_defense_scale 1 "How much attackers get damaged. Higher values mean less damage"
+
+set g_player_template_surv_defender_attack_scale 1 "How much defenders damage others. Higher values mean more damage"
+set g_player_template_surv_defender_defense_scale 2 "How much defenders get damaged. Higher values mean less damage"
 
-set g_surv_cannon_fodder_attack_scale 1 "How much cannon fodder damages others. Higher values mean more damage"
-set g_surv_cannon_fodder_defense_scale 1 "How much cannon fodder gets damaged. Higher values mean less damage"
+set g_player_template_surv_cannon_fodder_attack_scale 1 "How much cannon fodder damages others. Higher values mean more damage"
+set g_player_template_surv_cannon_fodder_defense_scale 1 "How much cannon fodder gets damaged. Higher values mean less damage"
 
 set g_surv_attacker_frag_score 10 "How much score attackers get for fragging defenders"