]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/miscfunctions.qc
Merge branch 'master' into Mario/weaponarena_available
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / miscfunctions.qc
index 47c0cb2fe4615af49105c651d2bc3192c9452b5f..aa5146419a0be981ff96246e70112d3dc47f83fc 100644 (file)
@@ -218,12 +218,12 @@ string AmmoNameFromWeaponentity(Weapon wep)
        string ammoitems = "batteries";
        switch (wep.ammo_type)
        {
-               case RESOURCE_SHELLS:  ammoitems = ITEM_Shells.m_name;      break;
-               case RESOURCE_BULLETS: ammoitems = ITEM_Bullets.m_name;     break;
-               case RESOURCE_ROCKETS: ammoitems = ITEM_Rockets.m_name;     break;
-               case RESOURCE_CELLS:   ammoitems = ITEM_Cells.m_name;       break;
-               case RESOURCE_PLASMA:  ammoitems = ITEM_Plasma.m_name;      break;
-               case RESOURCE_FUEL:    ammoitems = ITEM_JetpackFuel.m_name; break;
+               case RES_SHELLS:  ammoitems = ITEM_Shells.m_name;      break;
+               case RES_BULLETS: ammoitems = ITEM_Bullets.m_name;     break;
+               case RES_ROCKETS: ammoitems = ITEM_Rockets.m_name;     break;
+               case RES_CELLS:   ammoitems = ITEM_Cells.m_name;       break;
+               case RES_PLASMA:  ammoitems = ITEM_Plasma.m_name;      break;
+               case RES_FUEL:    ammoitems = ITEM_JetpackFuel.m_name; break;
        }
        return ammoitems;
 }
@@ -280,8 +280,8 @@ string formatmessage(entity this, string msg)
                        case "%": replacement = "%"; break;
                        case "\\":replacement = "\\"; break;
                        case "n": replacement = "\n"; break;
-                       case "a": replacement = ftos(floor(GetResourceAmount(this, RESOURCE_ARMOR))); break;
-                       case "h": replacement = ftos(floor(GetResourceAmount(this, RESOURCE_HEALTH))); break;
+                       case "a": replacement = ftos(floor(GetResource(this, RES_ARMOR))); break;
+                       case "h": replacement = ftos(floor(GetResource(this, RES_HEALTH))); break;
                        case "l": replacement = NearestLocation(this.origin); break;
                        case "y": replacement = NearestLocation(cursor); break;
                        case "d": replacement = NearestLocation(this.death_origin); break;
@@ -418,6 +418,10 @@ REPLICATE(cvar_g_xonoticversion, string, "g_xonoticversion");
 
 REPLICATE(cvar_cl_cts_noautoswitch, bool, "cl_cts_noautoswitch");
 
+REPLICATE(cvar_cl_weapon_switch_reload, bool, "cl_weapon_switch_reload");
+
+REPLICATE(cvar_cl_weapon_switch_fallback_to_impulse, bool, "cl_weapon_switch_fallback_to_impulse");
+
 /**
  * @param f -1: cleanup, 0: request, 1: receive
  */
@@ -495,12 +499,7 @@ float want_weapon(entity weaponinfo, float allguns) // WEAPONTODO: what still ne
        allow_mutatorblocked = M_ARGV(3, bool);
 
        if(allguns)
-       {
-               if(weaponinfo.spawnflags & WEP_FLAG_NORMAL)
-                       d = true;
-               else
-                       d = false;
-       }
+               d = boolean(weaponinfo.spawnflags & WEP_FLAG_NORMAL);
        else if(!mutator_returnvalue)
                d = !(!weaponinfo.weaponstart);
 
@@ -523,6 +522,22 @@ float want_weapon(entity weaponinfo, float allguns) // WEAPONTODO: what still ne
        return t;
 }
 
+void weaponarena_available_update(entity this)
+{
+       if(!weaponsInMap)
+       {
+               // if no weapons are available, just fall back to most weapons arena
+               FOREACH(Weapons, it != WEP_Null, {
+                       if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED) && (it.spawnflags & WEP_FLAG_NORMAL) && !(it.spawnflags & WEP_FLAG_HIDDEN))
+                               g_weaponarena_weapons |= (it.m_wepset);
+               });
+               start_weapons = g_weaponarena_weapons;
+               return;
+       }
+       g_weaponarena_weapons |= weaponsInMap;
+       start_weapons = g_weaponarena_weapons;
+}
+
 void readplayerstartcvars()
 {
        float i, t;
@@ -584,11 +599,22 @@ void readplayerstartcvars()
                g_weaponarena = 1;
                g_weaponarena_list = "Most Weapons";
                FOREACH(Weapons, it != WEP_Null, {
-                       if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED))
-                               if(it.spawnflags & WEP_FLAG_NORMAL)
-                                       g_weaponarena_weapons |= (it.m_wepset);
+                       if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED) && (it.spawnflags & WEP_FLAG_NORMAL) && !(it.spawnflags & WEP_FLAG_HIDDEN))
+                               g_weaponarena_weapons |= (it.m_wepset);
                });
        }
+       else if (s == "available")
+       {
+               g_weaponarena = 2;
+               g_weaponarena_list = "Most Weapons";
+               // include weapons the player would start with
+               FOREACH(Weapons, it != WEP_Null, {
+                       int w = want_weapon(it, false);
+                       if(w & 1)
+                               g_weaponarena_weapons |= (it.m_wepset);
+               });
+               InitializeEntity(NULL, weaponarena_available_update, INITPRIO_FINDTARGET);
+       }
        else if (s == "none")
        {
                g_weaponarena = 1;
@@ -656,15 +682,15 @@ void readplayerstartcvars()
                start_ammo_plasma = cvar("g_start_ammo_plasma");
                start_ammo_fuel = cvar("g_start_ammo_fuel");
                random_start_weapons_count = cvar("g_random_start_weapons_count");
-               SetResourceAmount(random_start_ammo, RESOURCE_SHELLS, cvar(
+               SetResource(random_start_ammo, RES_SHELLS, cvar(
                        "g_random_start_shells"));
-               SetResourceAmount(random_start_ammo, RESOURCE_BULLETS, cvar(
+               SetResource(random_start_ammo, RES_BULLETS, cvar(
                        "g_random_start_bullets"));
-               SetResourceAmount(random_start_ammo, RESOURCE_ROCKETS,
+               SetResource(random_start_ammo, RES_ROCKETS,
                        cvar("g_random_start_rockets"));
-               SetResourceAmount(random_start_ammo, RESOURCE_CELLS, cvar(
+               SetResource(random_start_ammo, RES_CELLS, cvar(
                        "g_random_start_cells"));
-               SetResourceAmount(random_start_ammo, RESOURCE_PLASMA, cvar(
+               SetResource(random_start_ammo, RES_PLASMA, cvar(
                        "g_random_start_plasma"));
        }
 
@@ -720,30 +746,22 @@ void readplayerstartcvars()
                warmup_start_ammo_fuel = max(warmup_start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
        }
 
-       WepSet precache_weapons = start_weapons;
-       if (g_warmup_allguns != 1)
-               precache_weapons |= warmup_start_weapons;
-       FOREACH(Weapons, it != WEP_Null, {
-               if(precache_weapons & (it.m_wepset))
-                       it.wr_init(it);
-       });
-
        start_ammo_shells = max(0, start_ammo_shells);
        start_ammo_nails = max(0, start_ammo_nails);
        start_ammo_rockets = max(0, start_ammo_rockets);
        start_ammo_cells = max(0, start_ammo_cells);
        start_ammo_plasma = max(0, start_ammo_plasma);
        start_ammo_fuel = max(0, start_ammo_fuel);
-       SetResourceAmount(random_start_ammo, RESOURCE_SHELLS, max(0,
-               GetResourceAmount(random_start_ammo, RESOURCE_SHELLS)));
-       SetResourceAmount(random_start_ammo, RESOURCE_BULLETS, max(0,
-               GetResourceAmount(random_start_ammo, RESOURCE_BULLETS)));
-       SetResourceAmount(random_start_ammo, RESOURCE_ROCKETS, max(0,
-               GetResourceAmount(random_start_ammo, RESOURCE_ROCKETS)));
-       SetResourceAmount(random_start_ammo, RESOURCE_CELLS, max(0,
-               GetResourceAmount(random_start_ammo, RESOURCE_CELLS)));
-       SetResourceAmount(random_start_ammo, RESOURCE_PLASMA, max(0,
-               GetResourceAmount(random_start_ammo, RESOURCE_PLASMA)));
+       SetResource(random_start_ammo, RES_SHELLS, max(0,
+               GetResource(random_start_ammo, RES_SHELLS)));
+       SetResource(random_start_ammo, RES_BULLETS, max(0,
+               GetResource(random_start_ammo, RES_BULLETS)));
+       SetResource(random_start_ammo, RES_ROCKETS, max(0,
+               GetResource(random_start_ammo, RES_ROCKETS)));
+       SetResource(random_start_ammo, RES_CELLS, max(0,
+               GetResource(random_start_ammo, RES_CELLS)));
+       SetResource(random_start_ammo, RES_PLASMA, max(0,
+               GetResource(random_start_ammo, RES_PLASMA)));
 
        warmup_start_ammo_shells = max(0, warmup_start_ammo_shells);
        warmup_start_ammo_nails = max(0, warmup_start_ammo_nails);