W_SwitchWeapon_Force(this, ww, weaponentity);
}
-void W_SwitchWeapon(entity this, Weapon w, .entity weaponentity)
+bool W_SwitchWeapon(entity this, Weapon w, .entity weaponentity)
{
if(this.(weaponentity).m_switchweapon != w)
{
if(client_hasweapon(this, w, weaponentity, true, true))
+ {
W_SwitchWeapon_Force(this, w, weaponentity);
+ return true;
+ }
else
+ {
this.(weaponentity).selectweapon = w.m_id; // update selectweapon anyway
+ return false;
+ }
}
else if(!forbidWeaponUse(this))
{
entity actor = this;
w.wr_reload(w, actor, weaponentity);
}
+
+ return true; // player already has the weapon out or needs to reload
}
void W_SwitchWeapon_TryOthers(entity this, Weapon w, .entity weaponentity)
{
- if(this.(weaponentity).m_switchweapon != w)
- {
- if(client_hasweapon(this, w, weaponentity, true, true)) // NOTE: still complains
- W_SwitchWeapon_Force(this, w, weaponentity);
- else
- {
- this.(weaponentity).selectweapon = w.m_id; // update selectweapon anyway
- W_NextWeaponOnImpulse(this, w.impulse, weaponentity);
- }
- }
- else if(!forbidWeaponUse(this))
- {
- entity actor = this;
- w.wr_reload(w, actor, weaponentity);
- }
+ if(!W_SwitchWeapon(this, w, weaponentity))
+ W_NextWeaponOnImpulse(this, w.impulse, weaponentity);
}
void W_CycleWeapon(entity this, string weaponorder, float dir, .entity weaponentity)
// perform weapon to attack (weaponstate and attack_finished check is here)
void W_SwitchToOtherWeapon(entity this, .entity weaponentity);
-void W_SwitchWeapon(entity this, Weapon imp, .entity weaponentity);
+bool W_SwitchWeapon(entity this, Weapon imp, .entity weaponentity); // returns false if the player does not have the weapon
void W_SwitchWeapon_TryOthers(entity this, Weapon imp, .entity weaponentity);
void W_CycleWeapon(entity this, string weaponorder, float dir, .entity weaponentity);