float client_hasweapon(entity cl, float wpn, float andammo, float complain)
{
- float weaponbit, f;
+ float f;
entity oldself;
if(time < self.hasweapon_complain_spam)
sprint(self, "Invalid weapon\n");
return FALSE;
}
- weaponbit = W_WeaponBit(wpn);
- if (cl.weapons & weaponbit)
+ if (WEPSET_CONTAINS_EW(cl, wpn))
{
if (andammo)
{
{
// DRESK - 3/16/07
// Report Proper Weapon Status / Modified Weapon Ownership Message
- if(weaponsInMap & weaponbit)
+ if (WEPSET_CONTAINS_AW(weaponsInMap, wpn))
{
sprint(cl, strcat("You do not have the ^2", W_Name(wpn), "\n") );
Send_WeaponComplain (cl, wpn, W_Name(wpn), 1);
e = get_weaponinfo(wpn);
s = e.model2;
- for(e = world; (e = findfloat(e, weapons, weaponbit)); )
+ for(e = world; (e = findfloat(e, weapon, wpn)); )
{
if(e.classname == "droppedweapon")
continue;
entity e;
e = get_weaponinfo(windex);
self.items &~= IT_AMMO;
- self.items = self.items | e.items;
+ self.items = self.items | (e.items & IT_AMMO);
// the two weapon entities will notice this has changed and update their models
self.weapon = windex;
{
// hack to ensure it switches to an OTHER weapon (in case the other fire mode still has ammo, we want that anyway)
float w, ww;
- w = W_WeaponBit(pl.weapon);
- pl.weapons &~= w;
- ww = w_getbestweapon(pl);
- pl.weapons |= w;
+ w = pl.weapon;
+ if(WEPSET_CONTAINS_EW(pl, w))
+ {
+ WEPSET_ANDNOT_EW(pl, w);
+ ww = w_getbestweapon(pl);
+ WEPSET_OR_EW(pl, w);
+ }
+ else
+ ww = w_getbestweapon(pl);
if(ww)
W_SwitchWeapon_Force(pl, ww);
}
// now begin the reloading process
- sound (self, CH_WEAPON_B, self.reload_sound, VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTN_NORM);
// do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
// then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,