Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
sv_vampirehook.qc
Go to the documentation of this file.
1#include "sv_vampirehook.qh"
2
5
10
11.float last_dmg;
12
13MUTATOR_HOOKFUNCTION(vh, GrappleHookThink)
14{
15 entity thehook = M_ARGV(0, entity);
16
17 if (!autocvar_g_vampirehook_damage || thehook.last_dmg > time || time < game_starttime)
18 return;
19
20 entity hook_owner = thehook.realowner;
21 entity hook_aiment = thehook.aiment;
22
23 if (hook_owner != hook_aiment && IS_PLAYER(hook_aiment) && !STAT(FROZEN, hook_aiment)
24 && (DIFF_TEAM(hook_owner, hook_aiment) || autocvar_g_vampirehook_teamheal)
25 && GetResource(hook_aiment, RES_HEALTH) > 0)
26 {
27 thehook.last_dmg = time + autocvar_g_vampirehook_damagerate;
28 hook_owner.hitsound_damage_dealt += autocvar_g_vampirehook_damage;
29 entity dmgent = ((SAME_TEAM(hook_owner, hook_aiment) && autocvar_g_vampirehook_teamheal) ? hook_owner : hook_aiment);
30 Damage(dmgent, thehook, hook_owner, autocvar_g_vampirehook_damage, WEP_HOOK.m_id, DMG_NOWEP, thehook.origin, '0 0 0');
31 entity targ = ((SAME_TEAM(hook_owner, hook_aiment)) ? hook_aiment : hook_owner);
33
34 if(dmgent == hook_owner)
35 TakeResource(dmgent, RES_HEALTH, autocvar_g_vampirehook_damage); // FIXME: friendly fire?!
36 }
37}
#define REGISTER_MUTATOR(...)
Definition base.qh:295
#define MUTATOR_HOOKFUNCTION(...)
Definition base.qh:335
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
void TakeResource(entity receiver, Resource res_type, float amount)
Takes an entity some resource.
#define M_ARGV(x, type)
Definition events.qh:17
#define IS_PLAYER(s)
Definition player.qh:243
float game_starttime
Definition stats.qh:82
float time
ERASEABLE bool expr_evaluate(string s)
Evaluate an expression of the form: [+ | -]?
Definition cvar.qh:48
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
Definition damage.qc:503
bool Heal(entity targ, entity inflictor, float amount, float limit)
Definition damage.qc:987
#define DMG_NOWEP
Definition damage.qh:104
int autocvar_g_pickup_healthsmall_max
Definition health.qh:24
#define STAT(...)
Definition stats.qh:82
string autocvar_g_vampirehook
float last_dmg
float autocvar_g_vampirehook_health_steal
bool autocvar_g_vampirehook_teamheal
float autocvar_g_vampirehook_damagerate
float autocvar_g_vampirehook_damage
#define SAME_TEAM(a, b)
Definition teams.qh:241
#define DIFF_TEAM(a, b)
Definition teams.qh:242