]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix itemstime regressions
authorTimePath <andrew.hardaker1995@gmail.com>
Tue, 25 Aug 2015 00:02:05 +0000 (10:02 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Tue, 25 Aug 2015 00:46:12 +0000 (10:46 +1000)
with hidespawned 0, panel displays all kind of items including ammo
with hidespawned 0, there are free spots in the panel

qcsrc/common/mutators/mutator/itemstime.qc
qcsrc/server/t_items.qc

index f0db281af8c522f3d23e06898f6f745fca7fa69d..b90bd3c2693869cb760651ade0cbde081680f02d 100644 (file)
@@ -24,19 +24,18 @@ MUTATOR_HOOKFUNCTION(itemstime, CSQC_Parse_TempEntity) {
 }
 #endif
 
-#ifdef SVQC
-
-bool Item_ItemsTime_Allow(entity e)
+bool Item_ItemsTime_Allow(GameItem it, WepSet _weapons)
 {
-    GameItem it = e.itemdef;
        return (false
        || it.instanceOfPowerup
        || it == ITEM_ArmorMega     || it == ITEM_ArmorLarge
        || it == ITEM_HealthMega    || it == ITEM_HealthLarge
-       || (e.weapons & WEPSET_SUPERWEAPONS)
+       || (_weapons & WEPSET_SUPERWEAPONS)
        );
 }
 
+#ifdef SVQC
+
 float it_times[MAX_ITEMS];
 
 void Item_ItemsTime_Init()
@@ -222,17 +221,19 @@ void HUD_ItemsTime()
         ItemsTime_time[ITEM_Shield.m_id] = time + 4;
     }
 
-    float i;
-    float count = 0;
+    int count = 0;
     if (autocvar_hud_panel_itemstime_hidespawned == 1)
-        for (i = 0; i < MAX_ITEMS; ++i)
+        FOREACH(ITEMS, Item_ItemsTime_Allow(it, '0 0 0'), LAMBDA(
             count += (ItemsTime_time[i] > time || -ItemsTime_time[i] > time);
+        ));
     else if (autocvar_hud_panel_itemstime_hidespawned == 2)
-        for (i = 0; i < MAX_ITEMS; ++i)
+        FOREACH(ITEMS, Item_ItemsTime_Allow(it, '0 0 0'), LAMBDA(
             count += (ItemsTime_time[i] > time);
+        ));
     else
-        for (i = 0; i < MAX_ITEMS; ++i)
+        FOREACH(ITEMS, Item_ItemsTime_Allow(it, '0 0 0'), LAMBDA(
             count += (ItemsTime_time[i] != -1);
+        ));
     if (count == 0)
         return;
 
@@ -303,7 +304,7 @@ void HUD_ItemsTime()
 
     float row = 0, column = 0;
     bool item_available;
-    FOREACH(ITEMS, ItemsTime_time[i] != -1, LAMBDA(
+    FOREACH(ITEMS, Item_ItemsTime_Allow(it, '0 0 0') && ItemsTime_time[i] != -1, LAMBDA(
         float item_time = ItemsTime_time[i];
         if (item_time < -1)
         {
index 3c944619bfa693a259e86fe808de93a15ec342ae..8213994144ce63aa3b625d4be12efd86d5f7d10c 100644 (file)
@@ -412,7 +412,7 @@ void Item_Think()
        }
 }
 
-bool Item_ItemsTime_Allow(entity e);
+bool Item_ItemsTime_Allow(GameItem it, WepSet _weapons);
 float Item_ItemsTime_UpdateTime(entity e, float t);
 void Item_ItemsTime_SetTime(entity e, float t);
 void Item_ItemsTime_SetTimesForAllPlayers();
@@ -429,7 +429,7 @@ void Item_Respawn (void)
                sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
        setorigin (self, self.origin);
 
-    if (Item_ItemsTime_Allow(self))
+    if (Item_ItemsTime_Allow(self.itemdef, self.weapons))
        {
                float t = Item_ItemsTime_UpdateTime(self, 0);
                Item_ItemsTime_SetTime(self, t);
@@ -529,7 +529,7 @@ void Item_RespawnThink()
 
 void Item_ScheduleRespawnIn(entity e, float t)
 {
-       if (Item_ItemsTime_Allow(e))
+       if (Item_ItemsTime_Allow(e.itemdef, e.weapons))
        {
                e.think = Item_RespawnCountdown;
                e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);