Xonotic
sv_vampirehook.qc
Go to the documentation of this file.
1 #include "sv_vampirehook.qh"
2 
5 
10 
11 .float last_dmg;
12 
13 MUTATOR_HOOKFUNCTION(vh, GrappleHookThink)
14 {
15  entity thehook = M_ARGV(0, entity);
16 
17  entity dmgent = ((SAME_TEAM(thehook.owner, thehook.aiment) && autocvar_g_vampirehook_teamheal) ? thehook.owner : thehook.aiment);
18 
19  if(IS_PLAYER(thehook.aiment))
20  if(thehook.last_dmg < time)
21  if(!STAT(FROZEN, thehook.aiment))
22  if(time >= game_starttime)
23  if(DIFF_TEAM(thehook.owner, thehook.aiment) || autocvar_g_vampirehook_teamheal)
24  if(GetResource(thehook.aiment, RES_HEALTH) > 0)
25  if(autocvar_g_vampirehook_damage)
26  {
27  thehook.last_dmg = time + autocvar_g_vampirehook_damagerate;
28  thehook.owner.hitsound_damage_dealt += autocvar_g_vampirehook_damage;
29  Damage(dmgent, thehook, thehook.owner, autocvar_g_vampirehook_damage, WEP_HOOK.m_id, DMG_NOWEP, thehook.origin, '0 0 0');
30  entity targ = ((SAME_TEAM(thehook.owner, thehook.aiment)) ? thehook.aiment : thehook.owner);
31  // TODO: we can't do this due to an issue with globals and the mutator arguments
32  //Heal(targ, thehook.owner, autocvar_g_vampirehook_health_steal, g_pickup_healthsmall_max);
33  SetResourceExplicit(targ, RES_HEALTH, min(GetResource(targ, RES_HEALTH) + autocvar_g_vampirehook_health_steal, g_pickup_healthsmall_max));
34 
35  if(dmgent == thehook.owner)
36  TakeResource(dmgent, RES_HEALTH, autocvar_g_vampirehook_damage); // FIXME: friendly fire?!
37  }
38 }
float autocvar_g_vampirehook_damage
bool SetResourceExplicit(entity e, Resource res_type, float amount)
Sets the resource amount of an entity without calling any hooks.
Definition: cl_resources.qc:15
entity() spawn
MUTATOR_HOOKFUNCTION(vh, GrappleHookThink)
string autocvar_g_vampirehook
#define DIFF_TEAM(a, b)
Definition: teams.qh:240
#define DMG_NOWEP
Definition: damage.qh:126
void TakeResource(entity receiver, Resource res_type, float amount)
Takes an entity some resource.
Definition: cl_resources.qc:31
float autocvar_g_vampirehook_damagerate
RES_HEALTH
Definition: ent_cs.qc:126
bool autocvar_g_vampirehook_teamheal
float last_dmg
REGISTER_MUTATOR(vh, expr_evaluate(autocvar_g_vampirehook))
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
Definition: damage.qc:583
#define SAME_TEAM(a, b)
Definition: teams.qh:239
#define M_ARGV(x, type)
Definition: events.qh:17
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
Definition: cl_resources.qc:10
float autocvar_g_vampirehook_health_steal
float time
Definition: csprogsdefs.qc:16
#define IS_PLAYER(v)
Definition: utils.qh:9
ERASEABLE bool expr_evaluate(string s)
Evaluate an expression of the form: [+ | -]? [var[op]val | [op]var | val | var] ...
Definition: cvar.qh:48