]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/vampirehook/sv_vampirehook.qc
Reduce name space of resource constants and variables (RESOURCE_* --> RES_*, resour...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / vampirehook / sv_vampirehook.qc
1 #include "sv_vampirehook.qh"
2
3 string autocvar_g_vampirehook;
4 REGISTER_MUTATOR(vh, expr_evaluate(autocvar_g_vampirehook));
5
6 bool autocvar_g_vampirehook_teamheal;
7 float autocvar_g_vampirehook_damage;
8 float autocvar_g_vampirehook_damagerate;
9 float autocvar_g_vampirehook_health_steal;
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(GetResourceAmount(thehook.aiment, RES_HEALTH) > 0)
25         if(autocvar_g_vampirehook_damage)
26         {
27                 thehook.last_dmg = time + autocvar_g_vampirehook_damagerate;
28                 thehook.owner.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                 SetResourceAmount(targ, RES_HEALTH, min(GetResourceAmount(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 }