]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/bloodloss/sv_bloodloss.qc
Disable bloodloss when the match has ended, fixes cases where players instantly die...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / bloodloss / sv_bloodloss.qc
1 #include "sv_bloodloss.qh"
2
3 float autocvar_g_bloodloss;
4 REGISTER_MUTATOR(bloodloss, autocvar_g_bloodloss);
5
6 .float bloodloss_timer;
7
8 MUTATOR_HOOKFUNCTION(bloodloss, PlayerPreThink)
9 {
10         entity player = M_ARGV(0, entity);
11
12         if(game_stopped)
13                 return; // during intermission, the player's health changes to strange values for the engine, let's not cause damage during this phase!
14
15         if(IS_PLAYER(player))
16         if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss && !IS_DEAD(player))
17         {
18                 PHYS_INPUT_BUTTON_CROUCH(player) = true;
19
20                 if(time >= player.bloodloss_timer)
21                 {
22                         if(player.vehicle)
23                                 vehicles_exit(player.vehicle, VHEF_RELEASE);
24                         if(player.event_damage)
25                                 player.event_damage(player, player, player, 1, DEATH_ROT.m_id, DMG_NOWEP, player.origin, '0 0 0');
26                         player.bloodloss_timer = time + 0.5 + random() * 0.5;
27                 }
28         }
29 }
30
31 MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
32 {
33         entity player = M_ARGV(0, entity);
34
35         if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss)
36                 return true;
37 }
38
39 MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsString)
40 {
41         M_ARGV(0, string) = strcat(M_ARGV(0, string), ":bloodloss");
42 }
43
44 MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsPrettyString)
45 {
46         M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Blood loss");
47 }