this.alpha = -1;
}
- if(!veh_hud)
- if(this.ItemStatus & ITS_STAYWEP)
+ if((!veh_hud) && (this.ItemStatus & ITS_STAYWEP))
{
this.colormod = this.glowmod = autocvar_cl_weapon_stay_color;
this.alpha = autocvar_cl_weapon_stay_alpha;
}
+
+ this.drawmask = ((this.alpha <= 0) ? 0 : MASK_NORMAL);
}
void ItemDraw(entity this)
{
if(warpzone_warpzones_exist)
{
- // just incase warpzones were initialized last, reset these
- //this.alpha = 1; // alpha is already set by the draw function
- this.drawmask = MASK_NORMAL;
+ setpredraw(this, func_null); // no need to keep running this
return;
}
float alph;
vector org = getpropertyvec(VF_ORIGIN);
- if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones
- alph = 0;
- else if(this.fade_start)
- alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1);
+ //if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones
+ //alph = 0; // this shouldn't be needed, since items behind walls are culled anyway
+ if(this.fade_start)
+ {
+ if(vdist(org - this.origin, >, this.fade_end))
+ alph = 0; // save on some processing
+ else if(vdist(org - this.origin, <, this.fade_start))
+ alph = 1; // more processing saved
+ else
+ alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1);
+ }
else
alph = 1;
//printf("%v <-> %v\n", view_origin, this.origin + 0.5 * (this.mins + this.maxs));
this.alpha = alph;
if(alph <= 0)
this.drawmask = 0;
- else
- this.drawmask = MASK_NORMAL;
+ //else
+ //this.drawmask = MASK_NORMAL; // reset by the setalpha function
}
void ItemRemove(entity this)
setsize(this, '-16 -16 0', (use_bigsize) ? '16 16 48' : '16 16 32');
}
- if(sf & ISF_STATUS) // need to read/write status frist so model can handle simple, fb etc.
+ if(sf & ISF_STATUS) // need to read/write status first so model can handle simple, fb etc.
{
this.ItemStatus = ReadByte();
this.fade_end = ReadShort();
this.fade_start = ReadShort();
- if(this.fade_start && !autocvar_cl_items_nofade)
+ if(!warpzone_warpzones_exist && this.fade_start && !autocvar_cl_items_nofade)
setpredraw(this, Item_PreDraw);
if(this.mdl)
string _fn2 = substring(_fn, 0 , strlen(_fn) -4);
this.draw = ItemDrawSimple;
- if(fexists(sprintf("%s%s.md3", _fn2, autocvar_cl_simpleitems_postfix)))
- this.mdl = strzone(sprintf("%s%s.md3", _fn2, autocvar_cl_simpleitems_postfix));
- else if(fexists(sprintf("%s%s.dpm", _fn2, autocvar_cl_simpleitems_postfix)))
- this.mdl = strzone(sprintf("%s%s.dpm", _fn2, autocvar_cl_simpleitems_postfix));
- else if(fexists(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix)))
- this.mdl = strzone(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix));
- else if(fexists(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix)))
- this.mdl = strzone(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix));
+ if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".md3")))
+ this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".md3"));
+ else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".dpm")))
+ this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".dpm"));
+ else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".iqm")))
+ this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".iqm"));
+ else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".mdl")))
+ this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".mdl"));
else
{
this.draw = ItemDraw;
e.spawnshieldtime = 1;
e.ItemStatus &= ~ITS_AVAILABLE;
}
- else {
- bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.weapons & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons
- || e.team // weapon stay isn't supported for teamed weapons
- ;
- if(def.instanceOfWeaponPickup && !nostay && g_weapon_stay)
- {
- // make the item translucent and not touchable
- e.model = e.mdl;
- e.solid = SOLID_TRIGGER; // can STILL be picked up!
- e.effects |= EF_STARDUST;
- e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon
- e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP);
- }
else
{
- //setmodel(e, "null");
- e.solid = SOLID_NOT;
- e.colormod = '0 0 0';
- //e.glowmod = e.colormod;
- e.spawnshieldtime = 1;
- e.ItemStatus &= ~ITS_AVAILABLE;
- }}
+ bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.weapons & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons
+ || e.team // weapon stay isn't supported for teamed weapons
+ ;
+ if(def.instanceOfWeaponPickup && !nostay && g_weapon_stay)
+ {
+ // make the item translucent and not touchable
+ e.model = e.mdl;
+ e.solid = SOLID_TRIGGER; // can STILL be picked up!
+ e.effects |= EF_STARDUST;
+ e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon
+ e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP);
+ }
+ else
+ {
+ //setmodel(e, "null");
+ e.solid = SOLID_NOT;
+ e.colormod = '0 0 0';
+ //e.glowmod = e.colormod;
+ e.spawnshieldtime = 1;
+ e.ItemStatus &= ~ITS_AVAILABLE;
+ }
+ }
if (def.m_glow)
e.ItemStatus |= ITS_GLOW;
sound(this, CH_TRIGGER, this.itemdef.m_respawnsound, VOL_BASE, ATTEN_NORM); // play respawn sound
setorigin(this, this.origin);
- if (Item_ItemsTime_Allow(this.itemdef) || this.weapons & WEPSET_SUPERWEAPONS)
+ if (Item_ItemsTime_Allow(this.itemdef) || (this.weapons & WEPSET_SUPERWEAPONS))
{
float t = Item_ItemsTime_UpdateTime(this, 0);
Item_ItemsTime_SetTime(this, t);
this.count += 1;
if(this.count == 1)
{
- MUTATOR_CALLHOOK(Item_RespawnCountdown, string_null, '0 0 0');
do {
{
entity wi = Weapons_from(this.weapon);
}
}
} while (0);
+ bool mutator_returnvalue = MUTATOR_CALLHOOK(Item_RespawnCountdown, this);
if(this.waypointsprite_attached)
{
GameItem def = this.itemdef;
- if (Item_ItemsTime_SpectatorOnly(def))
+ if (Item_ItemsTime_SpectatorOnly(def) && !mutator_returnvalue)
WaypointSprite_UpdateRule(this.waypointsprite_attached, 0, SPRITERULE_SPECTATOR);
WaypointSprite_UpdateBuildFinished(this.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
}
void Item_ScheduleRespawnIn(entity e, float t)
{
// if the respawn time is longer than 10 seconds, show a waypoint, otherwise, just respawn normally
- if ((Item_ItemsTime_Allow(e.itemdef) || e.weapons & WEPSET_SUPERWEAPONS) && (t - ITEM_RESPAWN_TICKS) > 0)
+ if ((Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS) || MUTATOR_CALLHOOK(Item_ScheduleRespawn, e, t)) && (t - ITEM_RESPAWN_TICKS) > 0)
{
setthink(e, Item_RespawnCountdown);
e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
e.scheduledrespawntime = e.nextthink + ITEM_RESPAWN_TICKS;
e.count = 0;
- t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
- Item_ItemsTime_SetTime(e, t);
- Item_ItemsTime_SetTimesForAllPlayers();
+ if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS))
+ {
+ t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
+ Item_ItemsTime_SetTime(e, t);
+ Item_ItemsTime_SetTimesForAllPlayers();
+ }
}
else
{
e.nextthink = time;
e.scheduledrespawntime = time + t;
e.wait = time + t;
+
+ if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS))
+ {
+ t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
+ Item_ItemsTime_SetTime(e, t);
+ Item_ItemsTime_SetTimesForAllPlayers();
+ }
}
}
void Item_ScheduleInitialRespawn(entity e)
{
Item_Show(e, 0);
- Item_ScheduleRespawnIn(e, game_starttime - time + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e)));
+ Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e)));
+}
+
+void GivePlayerResource(entity player, .float resource_type, float amount)
+{
+ if (amount == 0)
+ {
+ return;
+ }
+ switch (resource_type)
+ {
+ case health:
+ {
+ // Ugly hack. We do not check if health goes beyond hard limit since
+ // currently it is done in player_regen. We need to bring back this
+ // check when other code is ported to this function.
+ player.health = bound(player.health, player.health + amount,
+ autocvar_g_balance_health_limit);
+ // Correct code:
+ //player.health = bound(player.health, player.health + amount,
+ // min(autocvar_g_balance_health_limit, ITEM_COUNT_HARD_LIMIT));
+ player.pauserothealth_finished = max(player.pauserothealth_finished,
+ time + autocvar_g_balance_pause_health_rot);
+ return;
+ }
+ case armorvalue:
+ {
+ // Ugly hack. We do not check if armor goes beyond hard limit since
+ // currently it is done in player_regen. We need to bring back this
+ // check when other code is ported to this function.
+ player.armorvalue = bound(player.armorvalue, player.armorvalue +
+ amount, autocvar_g_balance_armor_limit);
+ // Correct code:
+ //player.armorvalue = bound(player.armorvalue, player.armorvalue +
+ // amount, min(autocvar_g_balance_armor_limit,
+ // ITEM_COUNT_HARD_LIMIT));
+ player.pauserotarmor_finished = max(player.pauserotarmor_finished,
+ time + autocvar_g_balance_pause_armor_rot);
+ return;
+ }
+ case ammo_shells:
+ case ammo_nails:
+ case ammo_rockets:
+ case ammo_cells:
+ case ammo_plasma:
+ {
+ GivePlayerAmmo(player, resource_type, amount);
+ return;
+ }
+ case ammo_fuel:
+ {
+ player.ammo_fuel = bound(player.ammo_fuel, player.ammo_fuel +
+ amount, min(g_pickup_fuel_max, ITEM_COUNT_HARD_LIMIT));
+ player.pauserotfuel_finished = max(player.pauserotfuel_finished,
+ time + autocvar_g_balance_pause_fuel_rot);
+ return;
+ }
+ }
+}
+
+void GivePlayerHealth(entity player, float amount)
+{
+ GivePlayerResource(player, health, amount);
+}
+
+void GivePlayerArmor(entity player, float amount)
+{
+ GivePlayerResource(player, armorvalue, amount);
+}
+
+void GivePlayerAmmo(entity player, .float ammotype, float amount)
+{
+ if (amount == 0)
+ {
+ return;
+ }
+ float maxvalue = ITEM_COUNT_HARD_LIMIT;
+ switch (ammotype)
+ {
+ case ammo_shells:
+ {
+ maxvalue = g_pickup_shells_max;
+ break;
+ }
+ case ammo_cells:
+ {
+ maxvalue = g_pickup_cells_max;
+ break;
+ }
+ case ammo_rockets:
+ {
+ maxvalue = g_pickup_rockets_max;
+ break;
+ }
+ case ammo_plasma:
+ {
+ maxvalue = g_pickup_plasma_max;
+ break;
+ }
+ case ammo_nails:
+ {
+ maxvalue = g_pickup_nails_max;
+ break;
+ }
+ }
+ player.(ammotype) = min(player.(ammotype) + amount,
+ min(maxvalue, ITEM_COUNT_HARD_LIMIT));
}
-float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax, float mode)
+void GivePlayerFuel(entity player, float amount)
+{
+ GivePlayerResource(player, ammo_fuel, amount);
+}
+
+float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax)
{
if (!item.(ammotype))
return false;
{
if ((player.(ammotype) < ammomax) || item.pickup_anyway > 0)
{
- player.(ammotype) = bound(player.(ammotype), ammomax, player.(ammotype) + item.(ammotype));
- goto YEAH;
+ float amount = item.(ammotype);
+ if ((player.(ammotype) + amount) > ammomax)
+ {
+ amount = ammomax - player.(ammotype);
+ }
+ GivePlayerResource(player, ammotype, amount);
+ return true;
}
}
else if(g_weapon_stay == 2)
float mi = min(item.(ammotype), ammomax);
if (player.(ammotype) < mi)
{
- player.(ammotype) = mi;
- goto YEAH;
+ GivePlayerResource(player, ammotype, mi - player.(ammotype));
}
+ return true;
}
-
return false;
-
-LABEL(YEAH)
- switch(mode)
- {
- case ITEM_MODE_FUEL:
- player.pauserotfuel_finished = max(player.pauserotfuel_finished, time + autocvar_g_balance_pause_fuel_rot);
- break;
- case ITEM_MODE_HEALTH:
- player.pauserothealth_finished = max(player.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot);
- break;
- case ITEM_MODE_ARMOR:
- player.pauserotarmor_finished = max(player.pauserotarmor_finished, time + autocvar_g_balance_pause_armor_rot);
- break;
- default:
- break;
- }
- return true;
}
float Item_GiveTo(entity item, entity player)
// if the player is using their best weapon before items are given, they
// probably want to switch to an even better weapon after items are given
- if(player.autoswitch)
+ if(CS(player).autoswitch)
{
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
}
}
}
-
- pickedup |= Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max, ITEM_MODE_FUEL);
- pickedup |= Item_GiveAmmoTo(item, player, ammo_shells, g_pickup_shells_max, ITEM_MODE_NONE);
- pickedup |= Item_GiveAmmoTo(item, player, ammo_nails, g_pickup_nails_max, ITEM_MODE_NONE);
- pickedup |= Item_GiveAmmoTo(item, player, ammo_rockets, g_pickup_rockets_max, ITEM_MODE_NONE);
- pickedup |= Item_GiveAmmoTo(item, player, ammo_cells, g_pickup_cells_max, ITEM_MODE_NONE);
- pickedup |= Item_GiveAmmoTo(item, player, ammo_plasma, g_pickup_plasma_max, ITEM_MODE_NONE);
- pickedup |= Item_GiveAmmoTo(item, player, health, item.max_health, ITEM_MODE_HEALTH);
- pickedup |= Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue, ITEM_MODE_ARMOR);
-
+ pickedup |= Item_GiveAmmoTo(item, player, health, item.max_health);
+ pickedup |= Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_shells, g_pickup_shells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_nails, g_pickup_nails_max);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_rockets, g_pickup_rockets_max);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_cells, g_pickup_cells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_plasma, g_pickup_plasma_max);
+ pickedup |= Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max);
if (item.itemdef.instanceOfWeaponPickup)
{
WepSet w;
_sound (toucher, (this.itemdef.instanceOfPowerup ? CH_TRIGGER_SINGLE : CH_TRIGGER), (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM);
if (this.classname == "droppedweapon")
- delete (this);
+ delete(this);
else if (this.spawnshieldtime)
{
entity e;
}
});
e = RandomSelection_chosen_ent;
-
+ Item_Show(e, 1); // reset its state so it is visible (extra sendflags doesn't matter, this happens anyway)
}
else
e = this;
switch(it.ammo_field)
{
- case ammo_shells: need_shells = true; break;
case ammo_shells: need_shells = true; break;
case ammo_nails: need_nails = true; break;
case ammo_rockets: need_rockets = true; break;
rating = item.bot_pickupbasevalue;
}
- if (need_shells)
- if (item.ammo_shells)
- if (player.ammo_shells < g_pickup_shells_max)
- c = item.ammo_shells / player.ammo_shells;
- if (need_nails)
- if (item.ammo_nails)
- if (player.ammo_nails < g_pickup_nails_max)
- c = item.ammo_nails / player.ammo_nails;
- if (need_rockets)
- if (item.ammo_rockets)
- if (player.ammo_rockets < g_pickup_rockets_max)
- c = item.ammo_rockets / player.ammo_rockets;
- if (need_cells)
- if (item.ammo_cells)
- if (player.ammo_cells < g_pickup_cells_max)
- c = item.ammo_cells / player.ammo_cells;
- if (need_plasma)
- if (item.ammo_plasma)
- if (player.ammo_plasma < g_pickup_plasma_max)
- c = item.ammo_plasma / player.ammo_plasma;
- if (need_fuel)
- if (item.ammo_fuel)
- if (player.ammo_fuel < g_pickup_fuel_max)
- c = item.ammo_fuel / player.ammo_fuel;
+ float noammorating = 0.5;
- rating *= min(2, c);
+ if ((need_shells) && (item.ammo_shells) && (player.ammo_shells < g_pickup_shells_max))
+ c = item.ammo_shells / max(noammorating, player.ammo_shells);
+
+ if ((need_nails) && (item.ammo_nails) && (player.ammo_nails < g_pickup_nails_max))
+ c = item.ammo_nails / max(noammorating, player.ammo_nails);
+
+ if ((need_rockets) && (item.ammo_rockets) && (player.ammo_rockets < g_pickup_rockets_max))
+ c = item.ammo_rockets / max(noammorating, player.ammo_rockets);
+
+ if ((need_cells) && (item.ammo_cells) && (player.ammo_cells < g_pickup_cells_max))
+ c = item.ammo_cells / max(noammorating, player.ammo_cells);
+
+ if ((need_plasma) && (item.ammo_plasma) && (player.ammo_plasma < g_pickup_plasma_max))
+ c = item.ammo_plasma / max(noammorating, player.ammo_plasma);
+
+ if ((need_fuel) && (item.ammo_fuel) && (player.ammo_fuel < g_pickup_fuel_max))
+ c = item.ammo_fuel / max(noammorating, player.ammo_fuel);
+
+ rating *= min(c, 2);
if(wpn)
rating += wpn.bot_pickupbasevalue * 0.1;
return rating;
float itemarmor = item.armorvalue;
float itemhealth = item.health;
+
if(item.item_group)
{
itemarmor *= min(4, item.item_group_count);
itemhealth *= min(4, item.item_group_count);
}
- if (itemarmor)
- if (player.armorvalue < item.max_armorvalue)
+
+ if (itemarmor && (player.armorvalue < item.max_armorvalue))
c = itemarmor / max(1, player.armorvalue * 2/3 + player.health * 1/3);
- if (itemhealth)
- if (player.health < item.max_health)
+
+ if (itemhealth && (player.health < item.max_health))
c = itemhealth / max(1, player.health);
rating *= min(2, c);
if(!have_pickup_item(this))
{
startitem_failed = true;
- delete (this);
+ delete(this);
return;
}
// target_give not yet supported; maybe later
print("removed targeted ", this.classname, "\n");
startitem_failed = true;
- remove (this);
+ delete(this);
return;
}
*/
{
int grY = it.item_group;
// move all items of item_group Y to item_group X
- FOREACH_ENTITY(IS_SMALL(it.itemdef),
+ IL_EACH(g_items, IS_SMALL(it.itemdef),
{
if(it.item_group == grY)
it.item_group = this.item_group;
for (int k = 1; k <= group_count; k++)
{
int count = 0;
- FOREACH_ENTITY(IS_SMALL(it.itemdef) && it.item_group == k, { count++; });
+ IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { count++; });
if (count)
- FOREACH_ENTITY(IS_SMALL(it.itemdef) && it.item_group == k, { it.item_group_count = count; });
+ IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { it.item_group_count = count; });
}
}
spawnfunc(item_bullets)
{
- if(!weaponswapping)
- if(autocvar_sv_q3acompat_machineshotgunswap)
- if(this.classname != "droppedweapon")
+ if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap &&
+ (this.classname != "droppedweapon"))
{
weaponswapping = true;
spawnfunc_item_shells(this);
spawnfunc(item_shells)
{
- if(!weaponswapping)
- if(autocvar_sv_q3acompat_machineshotgunswap)
- if(this.classname != "droppedweapon")
+ if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap &&
+ (this.classname != "droppedweapon"))
{
weaponswapping = true;
spawnfunc_item_bullets(this);
return;
}
- if (!IS_PLAYER(actor))
- return;
- if(IS_DEAD(actor))
+ if (!IS_PLAYER(actor) || IS_DEAD(actor))
return;
+
if(trigger.solid == SOLID_TRIGGER)
{
EXACTTRIGGER_TOUCH(this, trigger);
spawnfunc(target_items)
{
- int n, j;
+ int n;
string s;
this.use = target_items_use;
}
else
{
- for(j = 0; j < n; ++j)
+ for(int j = 0; j < n; ++j)
{
if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO;
else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_WEAPON_AMMO;
//print(this.netname, "\n");
n = tokenize_console(this.netname);
- for(j = 0; j < n; ++j)
+ for(int j = 0; j < n; ++j)
{
FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(argv(j)) == it.netname, {
it.wr_init(it);
int _switchweapon = 0;
- if(e.autoswitch)
+ if(CS(e).autoswitch)
{
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
{
.entity weaponentity = weaponentities[slot];
if(_switchweapon & BIT(slot))
- W_SwitchWeapon_Force(e, w_getbestweapon(e, weaponentity), weaponentity);
+ {
+ Weapon wep = w_getbestweapon(e, weaponentity);
+ if(wep != e.(weaponentity).m_switchweapon)
+ W_SwitchWeapon_Force(e, wep, weaponentity);
+ }
}
}