accuracy_resend(this);
if (this.team < 0)
- JoinBestTeam(this, false, true);
+ JoinBestTeam(this, true);
entity spot = SelectSpawnPoint(this, false);
if (!spot) {
this.health = start_health;
this.armorvalue = start_armorvalue;
this.weapons = start_weapons;
- GiveRandomWeapons(this, random_start_weapons_count,
- autocvar_g_random_start_weapons, random_start_ammo);
+ if (MUTATOR_CALLHOOK(ForbidRandomStartWeapons, this) == false)
+ {
+ GiveRandomWeapons(this, random_start_weapons_count,
+ autocvar_g_random_start_weapons, random_start_ammo);
+ }
}
SetSpectatee_status(this, 0);
this.fire_endtime = -1;
this.revive_progress = 0;
this.revival_time = 0;
+
this.air_finished = time + 12;
+ this.waterlevel = WATERLEVEL_NONE;
+ this.watertype = CONTENT_EMPTY;
entity spawnevent = new_pure(spawnevent);
spawnevent.owner = this;
setorigin(this, spot.origin + '0 0 1' * (1 - this.mins.z - 24));
// don't reset back to last position, even if new position is stuck in solid
this.oldorigin = this.origin;
- this.lastteleporttime = time; // prevent insane speeds due to changing origin
if(this.conveyor)
IL_REMOVE(g_conveyed, this);
this.conveyor = NULL; // prevent conveyors at the previous location from moving a freshly spawned player
PHYS_INPUT_BUTTON_ATCK(this) = PHYS_INPUT_BUTTON_JUMP(this) = PHYS_INPUT_BUTTON_ATCK2(this) = false;
+ // player was spectator
if (CS(this).killcount == FRAGS_SPECTATOR) {
PlayerScore_Clear(this);
CS(this).killcount = 0;
+ CS(this).startplaytime = time;
}
for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
if(this.killindicator_teamchange == -1)
{
- JoinBestTeam( this, false, true );
+ JoinBestTeam( this, true );
}
else if(this.killindicator_teamchange == -2)
{
}
if (!teamplay && this.team_forced > 0) this.team_forced = 0;
- {
- int id = this.playerid;
- this.playerid = 0; // silent
- JoinBestTeam(this, false, false); // if the team number is valid, keep it
- this.playerid = id;
- }
+ int playerid_save = this.playerid;
+ this.playerid = 0; // silent
+ JoinBestTeam(this, false); // if the team number is valid, keep it
+ this.playerid = playerid_save;
if (autocvar_sv_spectate || autocvar_g_campaign || this.team_forced < 0) {
TRANSMUTE(Observer, this);
if(!this.team_selected)
if(autocvar_g_campaign || autocvar_g_balance_teams)
- JoinBestTeam(this, false, true);
+ JoinBestTeam(this, true);
if(autocvar_g_campaign)
campaign_bots_may_start = true;
void DrownPlayer(entity this)
{
- if(IS_DEAD(this))
+ if(IS_DEAD(this) || game_stopped || time < game_starttime)
return;
if (this.waterlevel != WATERLEVEL_SUBMERGED || this.vehicle)
}
if (IS_PLAYER(this)) {
+ if(this.death_time == time && IS_DEAD(this))
+ {
+ this.maxs.z = 5;
+ setsize(this, this.mins, this.maxs);
+ }
DrownPlayer(this);
UpdateChatBubble(this);
if (CS(this).impulse) ImpulseCommands(this);