#include "common.qh"
-#include "../t_items.qh"
-#include "../../common/constants.qh"
-#include "../../common/deathtypes/all.qh"
-#include "../../common/notifications.qh"
-#include "../../common/util.qh"
-#include "../../common/weapons/all.qh"
-#include "../../common/items/all.qc"
+#include <server/defs.qh>
+#include <server/miscfunctions.qh>
+#include <common/t_items.qh>
+#include <common/constants.qh>
+#include <common/net_linked.qh>
+#include <common/deathtypes/all.qh>
+#include <common/notifications/all.qh>
+#include <common/state.qh>
+#include <common/util.qh>
+#include <common/weapons/_all.qh>
+#include <common/items/_mod.qh>
-void W_GiveWeapon (entity e, float wep)
-{SELFPARAM();
-
- if (!wep)
- return;
-
- e.weapons |= WepSet_FromWeapon(wep);
-
- setself(e);
+void W_GiveWeapon(entity e, int wep)
+{
+ if (!wep) return;
- if(IS_PLAYER(other))
- { Send_Notification(NOTIF_ONE, other, MSG_MULTI, ITEM_WEAPON_GOT, wep); }
+ e.weapons |= WepSet_FromWeapon(Weapons_from(wep));
- setself(this);
+ if (IS_PLAYER(e)) {
+ Send_Notification(NOTIF_ONE, e, MSG_MULTI, ITEM_WEAPON_GOT, wep);
+ }
}
-void W_PlayStrengthSound(entity player) // void W_PlayStrengthSound
+void W_PlayStrengthSound(entity player)
{
+ entity store = IS_PLAYER(player) ? PS(player) : player; // because non-player entities can fire, but can they have items? TODO
+
if((player.items & ITEM_Strength.m_itemid)
- && ((time > player.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam
- || (time > player.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)))
+ && ((time > store.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam
+ || (time > store.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)))
{
sound(player, CH_TRIGGER, SND_STRENGTH_FIRE, VOL_BASE, ATTEN_NORM);
- player.prevstrengthsound = time;
+ store.prevstrengthsound = time;
}
- player.prevstrengthsoundattempt = time;
+ store.prevstrengthsoundattempt = time;
}
float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, float exception)
return true; // if none of these return, then allow damage anyway.
}
-void W_PrepareExplosionByDamage(entity attacker, void() explode)
-{SELFPARAM();
- self.takedamage = DAMAGE_NO;
- self.event_damage = func_null;
+void W_PrepareExplosionByDamage(entity this, entity attacker, void(entity this) explode)
+{
+ this.takedamage = DAMAGE_NO;
+ this.event_damage = func_null;
+
+ MUTATOR_CALLHOOK(PrepareExplosionByDamage, this, attacker);
if(IS_CLIENT(attacker) && !autocvar_g_projectiles_keep_owner)
{
- self.owner = attacker;
- self.realowner = attacker;
+ this.owner = attacker;
+ this.realowner = attacker;
}
// do not explode NOW but in the NEXT FRAME!
// because recursive calls to RadiusDamage are not allowed
- self.nextthink = time;
- self.think = explode;
+ this.nextthink = time;
+ setthink(this, explode);
}