]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/breakablehook/breakablehook.qc
Add a mutator hook for CopyBody
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / breakablehook / breakablehook.qc
1 #ifdef IMPLEMENTATION
2 #include <common/deathtypes/all.qh>
3 #include <server/g_hook.qh>
4
5 REGISTER_MUTATOR(breakablehook, cvar("g_breakablehook"));
6
7 bool autocvar_g_breakablehook; // allow toggling mid match?
8 bool autocvar_g_breakablehook_owner;
9
10 MUTATOR_HOOKFUNCTION(breakablehook, PlayerDamage_Calculate)
11 {
12         entity frag_attacker = M_ARGV(1, entity);
13         entity frag_target = M_ARGV(2, entity);
14
15         if(frag_target.classname == "grapplinghook")
16         {
17                 if((!autocvar_g_breakablehook)
18                 || (!autocvar_g_breakablehook_owner && frag_attacker == frag_target.realowner)
19                         ) { M_ARGV(4, float) = 0; }
20
21                 // hurt the owner of the hook
22                 if(DIFF_TEAM(frag_attacker, frag_target.realowner))
23                 {
24                         Damage (frag_target.realowner, frag_attacker, frag_attacker, 5, WEP_HOOK.m_id | HITTYPE_SPLASH, frag_target.realowner.origin, '0 0 0');
25                         RemoveGrapplingHook(frag_target.realowner);
26                         return; // dead
27                 }
28         }
29 }
30 #endif