]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Use new weapon loop logic on spawnfuncs
authorMario <mario@smbclan.net>
Wed, 23 Dec 2015 23:15:34 +0000 (09:15 +1000)
committerMario <mario@smbclan.net>
Wed, 23 Dec 2015 23:15:34 +0000 (09:15 +1000)
qcsrc/server/weapons/spawning.qc

index d6a108b52d6092e24ac79ae1b43998746849364f..3732db3b9c26e252421fe497a79e568067194472 100644 (file)
@@ -24,7 +24,7 @@ string W_Apply_Weaponreplace(string in)
 
 void weapon_defaultspawnfunc(entity this, Weapon e)
 {
-       int wpn = e.m_id;
+       Weapon wpn = e;
        if (this.classname != "droppedweapon" && this.classname != "replacedweapon")
        {
                if (e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
@@ -50,45 +50,31 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
                        for (int i = 1; i < t; ++i)
                        {
                                s = argv(i);
-                               int j;
-                               for (j = WEP_FIRST; j <= WEP_LAST; ++j)
-                               {
-                                       e = Weapons_from(j);
-                                       if (e.netname == s)
+                               FOREACH(Weapons, it != WEP_Null, LAMBDA(
+                                       if(it.netname == s)
                                        {
                                                entity replacement = spawn();
                                                copyentity(this, replacement);
                                                replacement.classname = "replacedweapon";
-                                               weapon_defaultspawnfunc(replacement, e);
+                                               weapon_defaultspawnfunc(replacement, it);
                                                break;
                                        }
-                               }
-                               if (j > WEP_LAST)
-                               {
-                                       LOG_INFO("The weapon replace list for ", this.classname, " contains an unknown weapon ", s, ". Skipped.\n");
-                               }
+                               ));
                        }
                }
                if (t >= 1) // always the case!
                {
                        s = argv(0);
-                       wpn = 0;
-                       int j;
-                       for (j = WEP_FIRST; j <= WEP_LAST; ++j)
-                       {
-                               e = Weapons_from(j);
-                               if (e.netname == s)
+                       wpn = WEP_Null;
+                       FOREACH(Weapons, it != WEP_Null, LAMBDA(
+                               if(it.netname == s)
                                {
-                                       wpn = j;
+                                       wpn = it;
                                        break;
                                }
-                       }
-                       if (j > WEP_LAST)
-                       {
-                               LOG_INFO("The weapon replace list for ", this.classname, " contains an unknown weapon ", s, ". Skipped.\n");
-                       }
+                       ));
                }
-               if (wpn == 0)
+               if (wpn == WEP_Null)
                {
                        remove(this);
                        startitem_failed = true;
@@ -96,11 +82,9 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
                }
        }
 
-       e = Weapons_from(wpn);
-
        if (!this.respawntime)
        {
-               if (e.spawnflags & WEP_FLAG_SUPERWEAPON)
+               if (wpn.spawnflags & WEP_FLAG_SUPERWEAPON)
                {
                        this.respawntime = g_pickup_respawntime_superweapon;
                        this.respawntimejitter = g_pickup_respawntimejitter_superweapon;
@@ -112,14 +96,14 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
                }
        }
 
-       if (e.spawnflags & WEP_FLAG_SUPERWEAPON)
+       if (wpn.spawnflags & WEP_FLAG_SUPERWEAPON)
                if (!this.superweapons_finished)
                        this.superweapons_finished = autocvar_g_balance_superweapons_time;
 
        // if we don't already have ammo, give us some ammo
-       if (!this.(e.ammo_field))
+       if (!this.(wpn.ammo_field))
        {
-               switch (e.ammo_field)
+               switch (wpn.ammo_field)
                {
                        case ammo_shells:  this.ammo_shells  = cvar("g_pickup_shells_weapon");  break;
                        case ammo_nails:   this.ammo_nails   = cvar("g_pickup_nails_weapon");   break;
@@ -131,11 +115,11 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
        }
 
        #if 0 // WEAPONTODO
-       if (e.items)
+       if (wpn.items)
        {
                for (int i = 0, j = 1; i < 24; ++i, j <<= 1)
                {
-                       if (e.items & j)
+                       if (wpn.items & j)
                        {
                                ammotype = Item_CounterField(j);
                                if (!this.ammotype)
@@ -149,7 +133,7 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
        if (g_pickup_weapons_anyway)
                this.pickup_anyway = true;
 
-       GameItem def = e.m_pickup;
+       GameItem def = wpn.m_pickup;
        _StartItem(
                this,
                this.itemdef = def,
@@ -158,7 +142,7 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
        );
        #if 0 // WEAPONTODO
        if (this.modelindex) { // don't precache if this was removed
-               e.wr_init(e);
+               wpn.wr_init(wpn);
        }
        #endif
 }