for(e = world; (e = findfloat(e, weapon, wpn)); )
{
- if(e.classname == "droppedweapon")
+ if(e.classname == "droppedweapon" && autocvar_g_showweaponspawns < 2)
continue;
if(!(e.flags & FL_ITEM))
continue;
WaypointSprite_Spawn(
(get_weaponinfo(wpn)).wpmodel,
1, 0,
- world, e.origin,
+ world, e.origin + ('0 0 1' * e.maxs_z) * 1.2,
self, 0,
world, enemy,
0,
// function. Thus we must use car/cdr.
float weaponwant, first_valid, prev_valid, switchtonext, switchtolast, c;
string rest;
+ WepSet wepset = '0 0 0';
switchtonext = switchtolast = 0;
first_valid = prev_valid = 0;
float weaponcur;
{
weaponwant = stof(car(rest)); rest = cdr(rest);
wep = get_weaponinfo(weaponwant);
+ wepset = WepSet_FromWeapon(weaponwant);
if(imp >= 0)
- if(wep.impulse != imp)
- continue;
+ if(wep.impulse != imp)
+ continue;
+
+ float i, have_other = FALSE;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ {
+ if(i != weaponwant)
+ if((get_weaponinfo(i)).impulse == imp || imp < 0)
+ if((pl.weapons & WepSet_FromWeapon(i)) || (weaponsInMap & WepSet_FromWeapon(i)))
+ have_other = TRUE;
+ }
// skip weapons we don't own that aren't normal and aren't in the map
- if(!(pl.weapons & WepSet_FromWeapon(weaponwant)))
- if(!((get_weaponinfo(weaponwant)).spawnflags & WEP_FLAG_NORMAL))
- if(!(weaponsInMap & WepSet_FromWeapon(weaponwant)))
- continue;
+ if(!(pl.weapons & wepset))
+ if(!(weaponsInMap & wepset))
+ if((wep.spawnflags & WEP_FLAG_MUTATORBLOCKED) || have_other)
+ continue;
++c;
{
weaponwant = stof(car(rest)); rest = cdr(rest);
wep = get_weaponinfo(weaponwant);
+ wepset = WepSet_FromWeapon(weaponwant);
if(imp >= 0)
if(wep.impulse != imp)
continue;
+ float i, have_other = FALSE;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ {
+ if(i != weaponwant)
+ if((get_weaponinfo(i)).impulse == imp || imp < 0)
+ if((pl.weapons & WepSet_FromWeapon(i)) || (weaponsInMap & WepSet_FromWeapon(i)))
+ have_other = TRUE;
+ }
+
// skip weapons we don't own that aren't normal and aren't in the map
- if(!(pl.weapons & WepSet_FromWeapon(weaponwant)))
- if(!((get_weaponinfo(weaponwant)).spawnflags & WEP_FLAG_NORMAL))
- if(!(weaponsInMap & WepSet_FromWeapon(weaponwant)))
- continue;
+ if(!(pl.weapons & wepset))
+ if(!(weaponsInMap & wepset))
+ if((wep.spawnflags & WEP_FLAG_MUTATORBLOCKED) || have_other)
+ continue;
--c;
if(c == 0)
else
self.selectweapon = imp; // update selectweapon ANYWAY
}
- else { WEP_ACTION(self.weapon, WR_RELOAD); }
+ else if(!forbidWeaponUse()) { WEP_ACTION(self.weapon, WR_RELOAD); }
}
void W_CycleWeapon(string weaponorder, float dir)