]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/t_items.qc
fix a stupid interaction between weapon throwing and weapon load (loaded ammo was...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / t_items.qc
index dcc5c15c881722183941775bc6e346174298e8c2..1e9d6a753c426c0708a8c6e6b79b6ec86f027950 100644 (file)
@@ -379,8 +379,6 @@ float Item_GiveTo(entity item, entity player)
 
                        if (item.weapons & WEPBIT_MINSTANEX)
                                W_GiveWeapon (player, WEP_MINSTANEX, item.netname);
-                       if (item.ammo_cells)
-                               player.ammo_cells = bound(player.ammo_cells, 999, player.ammo_cells + autocvar_g_minstagib_ammo_drop);
                        player.health = 100;
                }
 
@@ -440,7 +438,7 @@ float Item_GiveTo(entity item, entity player)
                pickedup |= Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue, ITEM_MODE_ARMOR);
 
                if (item.flags & FL_WEAPON)
-               if ((it = item.weapons - (item.weapons & player.weapons)) || (item.spawnshieldtime && g_pickup_weapons_anyway))
+               if ((it = item.weapons - (item.weapons & player.weapons)) || (item.spawnshieldtime && self.pickup_anyway))
                {
                        pickedup = TRUE;
                        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
@@ -483,7 +481,6 @@ float Item_GiveTo(entity item, entity player)
        if (!pickedup)
                return 0;
 
-       sound (player, CH_TRIGGER, item.item_pickupsound, VOL_BASE, ATTN_NORM);
        if (_switchweapon)
                if (player.switchweapon != w_getbestweapon(player))
                        W_SwitchWeapon_Force(player, w_getbestweapon(player));
@@ -525,13 +522,14 @@ void Item_Touch (void)
                        self.strength_finished += time;
                        self.invincible_finished += time;
                        self.superweapons_finished += time;
-                       return;
                }
+               return;
        }
 
        other.last_pickup = time;
 
        pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1);
+       sound (other, CH_TRIGGER, self.item_pickupsound, VOL_BASE, ATTN_NORM);
 
        if (self.classname == "droppedweapon")
                remove (self);
@@ -568,6 +566,9 @@ void Item_Reset()
                self.think = SUB_Null;
                self.nextthink = 0;
 
+               if(self.waypointsprite_attached)
+                       WaypointSprite_Kill(self.waypointsprite_attached);
+
                if((self.flags & FL_POWERUP) | (self.weapons & WEPBIT_SUPERWEAPONS)) // do not spawn powerups initially!
                        Item_ScheduleInitialRespawn(self);
        }
@@ -750,7 +751,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
 
                // Savage: remove thrown items after a certain period of time ("garbage collection")
                self.think = RemoveItem;
-               self.nextthink = time + 60;
+               self.nextthink = time + 20;
 
                if(self.strength_finished || self.invincible_finished || self.superweapons_finished)
                /*
@@ -987,6 +988,7 @@ void weapon_defaultspawnfunc(float wpn)
        string s;
        entity oldself;
        float i, j;
+       float f;
 
        if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
        {
@@ -1084,15 +1086,26 @@ void weapon_defaultspawnfunc(float wpn)
                }
        }
 
+       // pickup anyway
+       if(g_pickup_weapons_anyway)
+               self.pickup_anyway = TRUE;
+
+       f = FL_WEAPON;
+
        // no weapon-stay on superweapons
-       if(self.weapons & WEPBIT_SUPERWEAPONS)
-               self.flags |= FL_NO_WEAPON_STAY;
+       if(e.weapons & WEPBIT_SUPERWEAPONS)
+               f |= FL_NO_WEAPON_STAY;
 
        // weapon stay isn't supported for teamed weapons
        if(self.team)
-               self.flags |= FL_NO_WEAPON_STAY;
+               f |= FL_NO_WEAPON_STAY;
+
+       // stupid minstagib hack, don't ask
+       if(g_minstagib)
+               if(self.ammo_cells)
+                       self.ammo_cells = autocvar_g_minstagib_ammo_drop;
 
-       StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapons, FL_WEAPON, weapon_pickupevalfunc, e.bot_pickupbasevalue);
+       StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapons, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
        if (self.modelindex) // don't precache if self was removed
                weapon_action(e.weapon, WR_PRECACHE);
 }