#include "weaponsystem.qh"
#include <common/t_items.qh>
#include <common/constants.qh>
+#include <common/net_linked.qh>
#include <common/util.qh>
#include <common/items/item.qh>
#include <common/weapons/_all.qh>
#include <common/state.qh>
#include <common/mutators/mutator/waypoints/waypointsprites.qh>
+#include <common/wepent.qh>
// switch between weapons
void Send_WeaponComplain(entity e, float wpn, float type)
void Weapon_whereis(Weapon this, entity cl)
{
if (!autocvar_g_showweaponspawns) return;
- IL_EACH(g_items, it.weapon == this.m_id,
+ IL_EACH(g_items, it.weapon == this.m_id && (it.ItemStatus & ITS_AVAILABLE),
{
if (it.classname == "droppedweapon" && autocvar_g_showweaponspawns < 2)
continue;
});
}
-bool client_hasweapon(entity this, Weapon wpn, float andammo, bool complain)
+bool client_hasweapon(entity this, Weapon wpn, .entity weaponentity, float andammo, bool complain)
{
float f = 0;
}
else
{
- f = wpn.wr_checkammo1(wpn, this) + wpn.wr_checkammo2(wpn, this);
+ f = wpn.wr_checkammo1(wpn, this, weaponentity) + wpn.wr_checkammo2(wpn, this, weaponentity);
// always allow selecting the Mine Layer if we placed mines, so that we can detonate them
if(wpn == WEP_MINE_LAYER)
- IL_EACH(g_mines, it.owner == this,
+ IL_EACH(g_mines, it.owner == this && it.weaponentity_fld == weaponentity,
{
f = 1;
break; // no need to continue
++c;
- if(!skipmissing || client_hasweapon(this, wep, true, false))
+ if(!skipmissing || client_hasweapon(this, wep, weaponentity, true, false))
{
if(switchtonext)
return weaponwant;
--c;
if(c == 0)
{
- client_hasweapon(this, wep, true, true);
+ client_hasweapon(this, wep, weaponentity, true, true);
break;
}
}
if (this.weapons & set)
{
this.weapons &= ~set;
- ww = w_getbestweapon(this);
+ ww = w_getbestweapon(this, weaponentity);
this.weapons |= set;
}
else
{
- ww = w_getbestweapon(this);
+ ww = w_getbestweapon(this, weaponentity);
}
if (ww == WEP_Null) return;
W_SwitchWeapon_Force(this, ww, weaponentity);
{
if(this.(weaponentity).m_switchweapon != w)
{
- if(client_hasweapon(this, w, true, true))
+ if(client_hasweapon(this, w, weaponentity, true, true))
W_SwitchWeapon_Force(this, w, weaponentity);
else
this.(weaponentity).selectweapon = w.m_id; // update selectweapon anyway
// previously used if exists and has ammo, (second) best otherwise
void W_LastWeapon(entity this, .entity weaponentity)
{
- Weapon wep = Weapons_from(this.cnt);
- if (client_hasweapon(this, wep, true, false))
+ Weapon wep = Weapons_from(this.(weaponentity).cnt);
+ if (client_hasweapon(this, wep, weaponentity, true, false))
W_SwitchWeapon(this, wep, weaponentity);
else
W_SwitchToOtherWeapon(this, weaponentity);