void calculate_player_respawn_time()
{
+ if(g_ca)
+ return;
+
float gametype_setting_tmp;
float sdelay_max = GAMETYPE_DEFAULTED_SETTING(respawn_delay_max);
float sdelay_small = GAMETYPE_DEFAULTED_SETTING(respawn_delay_small);
self.health = self.health - take;
// pause regeneration for 5 seconds
if(take)
- self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
+ self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
if (time > self.pain_finished) //Don't switch pain sequences like crazy
{
}
if(sound_allowed(MSG_BROADCAST, attacker))
- if(!DEATH_ISWEAPON(deathtype, WEP_BLASTER) || attacker != self || self.health < 2 * WEP_CVAR_PRI(blaster, damage) * autocvar_g_balance_selfdamagepercent + 1) // WEAPONTODO: create separate limit for pain notification with laser
+ if((self.health < 2 * WEP_CVAR_PRI(blaster, damage) * autocvar_g_balance_selfdamagepercent + 1) || !((get_weaponinfo(DEATH_WEAPONOF(deathtype))).spawnflags & WEP_FLAG_CANCLIMB) || attacker != self) // WEAPONTODO: create separate limit for pain notification with laser
if(self.health > 1)
// exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two
{
PlayerSound(playersound_pain25, CH_PAIN, VOICETYPE_PLAYERSOUND);
}
}
+ }
- // throw off bot aim temporarily
- float shake;
+ // throw off bot aim temporarily
+ float shake;
+ if(IS_BOT_CLIENT(self) && self.health >= 1)
+ {
shake = damage * 5 / (bound(0,skill,100) + 1);
self.v_angle_x = self.v_angle_x + (random() * 2 - 1) * shake;
self.v_angle_y = self.v_angle_y + (random() * 2 - 1) * shake;
+ self.v_angle_x = bound(-90, self.v_angle_x, 90);
}
}
else
if(self.alivetime)
{
- PlayerStats_Event(self, PLAYERSTATS_ALIVETIME, time - self.alivetime);
+ PS_GR_P_ADDVAL(self, PLAYERSTATS_ALIVETIME, time - self.alivetime);
self.alivetime = 0;
}
self.flags &= ~FL_ONGROUND;
// dying animation
self.deadflag = DEAD_DYING;
+
// when to allow respawn
calculate_player_respawn_time();
flood = Say(self, ownteam, world, msg, 1);
- if (flood > 0)
- GlobalSound(self.sample, CH_VOICE, voicetype);
- else if (flood < 0)
+ if(IS_SPEC(self) || IS_OBSERVER(self) || flood < 0)
FakeGlobalSound(self.sample, CH_VOICE, voicetype);
+ else if (flood > 0)
+ GlobalSound(self.sample, CH_VOICE, voicetype);
}
void MoveToTeam(entity client, float team_colour, float type)