#include "throwing.qh"
-#include "weaponsystem.qh"
-#include "../resources.qh"
-#include "../items.qh"
-#include <server/mutators/_mod.qh>
-#include <common/t_items.qh>
-#include "../g_damage.qh"
#include <common/items/item.qh>
#include <common/mapinfo.qh>
-#include <common/notifications/all.qh>
#include <common/mapobjects/subs.qh>
+#include <common/mutators/mutator/status_effects/_mod.qh>
+#include <common/notifications/all.qh>
+#include <common/resources/sv_resources.qh>
+#include <common/state.qh>
#include <common/util.qh>
#include <common/weapons/_all.qh>
-#include <common/state.qh>
#include <common/wepent.qh>
-
-void thrown_wep_think(entity this)
-{
- this.nextthink = time;
- if(this.oldorigin != this.origin)
- {
- this.SendFlags |= ISF_LOCATION;
- this.oldorigin = this.origin;
- }
- this.owner = NULL;
- float timeleft = this.savenextthink - time;
- if(timeleft > 1)
- SUB_SetFade(this, this.savenextthink - 1, 1);
- else if(timeleft > 0)
- SUB_SetFade(this, time, timeleft);
- else
- SUB_VanishOrRemove(this);
-}
+#include <server/damage.qh>
+#include <server/items/items.qh>
+#include <server/items/spawning.qh>
+#include <server/mutators/_mod.qh>
+#include <server/weapons/selection.qh>
+#include <server/weapons/weaponsystem.qh>
+#include <server/world.qh>
// returns amount of ammo used, or -1 for failure, or 0 for no ammo count
float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo, .entity weaponentity)
{
Weapon info = REGISTRY_GET(Weapons, wpn);
- int ammotype = info.ammo_type;
+ Resource ammotype = info.ammo_type;
entity wep = spawn();
- Item_SetLoot(wep, true);
+ ITEM_SET_LOOT(wep, true);
setorigin(wep, org);
wep.velocity = velo;
wep.owner = wep.enemy = own;
wep.flags |= FL_TOSSED;
wep.colormap = own.colormap;
- wep.glowmod = weaponentity_glowmod(info, own, own.clientcolors, own.(weaponentity));
+ // wep.glowmod will be set in weapon_defaultspawnfunc
navigation_dynamicgoal_init(wep, false);
W_DropEvent(wr_drop,own,wpn,wep,weaponentity);
if(WepSet_FromWeapon(REGISTRY_GET(Weapons, wpn)) & WEPSET_SUPERWEAPONS)
{
- Item_SetExpiring(wep, true);
+ ITEM_SET_EXPIRING(wep, true);
if(own.items & IT_UNLIMITED_SUPERWEAPONS)
{
wep.superweapons_finished = time + autocvar_g_balance_superweapons_time;
});
if(superweapons <= 1)
{
- wep.superweapons_finished = STAT(SUPERWEAPONS_FINISHED, own);
- STAT(SUPERWEAPONS_FINISHED, own) = 0;
+ wep.superweapons_finished = StatusEffects_gettime(STATUSEFFECT_Superweapons, own);
+ StatusEffects_remove(STATUSEFFECT_Superweapons, own, STATUSEFFECT_REMOVE_CLEAR);
}
else
{
- float timeleft = STAT(SUPERWEAPONS_FINISHED, own) - time;
+ float timeleft = StatusEffects_gettime(STATUSEFFECT_Superweapons, own) - time;
float weptimeleft = timeleft / superweapons;
wep.superweapons_finished = time + weptimeleft;
- STAT(SUPERWEAPONS_FINISHED, own) -= weptimeleft;
+ if(own.statuseffects)
+ {
+ // TODO: this doesn't explicitly enable the effect, use apply here?
+ own.statuseffects.statuseffect_time[STATUSEFFECT_Superweapons.m_id] -= weptimeleft;
+ StatusEffects_update(own);
+ }
}
}
}
weapon_defaultspawnfunc(wep, info);
if(startitem_failed)
return -1;
- setthink(wep, thrown_wep_think);
- wep.savenextthink = wep.nextthink;
- wep.nextthink = min(wep.nextthink, time + 0.5);
+
wep.pickup_anyway = true; // these are ALWAYS pickable
//wa = W_AmmoItemCode(wpn);
Weapon w = this.(weaponentity).m_weapon;
if (w == WEP_Null)
return; // just in case
+ if (time < game_starttime)
+ return;
if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon, this, this.(weaponentity)))
return;
if(!autocvar_g_weapon_throwable)