this.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
navigation_goalrating_start(this);
- for(e = world; (e = find(e, classname, "trigger_race_checkpoint")) != world; )
+ for(e = NULL; (e = find(e, classname, "trigger_race_checkpoint")) != NULL; )
{
if(e.cnt == this.race_checkpoint)
{
ScoreRules_basics(race_teams, 0, 0, false);
if(race_teams)
{
- ScoreInfo_SetLabel_TeamScore( ST_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
+ ScoreInfo_SetLabel_TeamScore( ST_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
ScoreInfo_SetLabel_PlayerScore(SP_RACE_TIME, "time", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
ScoreInfo_SetLabel_PlayerScore(SP_RACE_FASTEST, "fastest", SFL_LOWER_IS_BETTER | SFL_TIME);
void race_EventLog(string mode, entity actor) // use an alias for easy changing and quick editing later
{
if(autocvar_sv_eventlog)
- GameLogEcho(strcat(":race:", mode, ":", ((actor != world) ? (strcat(":", ftos(actor.playerid))) : "")));
+ GameLogEcho(strcat(":race:", mode, ":", ((actor != NULL) ? (strcat(":", ftos(actor.playerid))) : "")));
}
float WinningCondition_Race(float fraglimit)
MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
{
entity player = M_ARGV(0, entity);
+ float dt = M_ARGV(1, float);
- player.race_movetime_frac += PHYS_INPUT_TIMELENGTH;
+ player.race_movetime_frac += dt;
float f = floor(player.race_movetime_frac);
player.race_movetime_frac -= f;
player.race_movetime_count += f;
if(player.race_penalty)
{
player.velocity = '0 0 0';
- player.movetype = MOVETYPE_NONE;
+ set_movetype(player, MOVETYPE_NONE);
player.disableclientprediction = 2;
}
}
{
float s;
- Score_NicePrint(world);
+ Score_NicePrint(NULL);
race_ClearRecords();
PlayerScore_Sort(race_place, 0, 1, 0);
cvar_set("timelimit", ftos(race_timelimit));
race_ScoreRules();
}
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, ClientConnect)
race_SendRankings(i, 0, 0, MSG_ONE);
}
}
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, MakePlayerObserver)
player.race_respawn_spotref = spawn_spot;
player.race_place = 0;
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, PutClientInServer)
race_AbandonRaceCheck(player);
}
- return false;
}
MUTATOR_HOOKFUNCTION(rc, PlayerDies)
{
entity frag_target = M_ARGV(2, entity);
-
+
frag_target.respawn_flags |= RESPAWN_FORCE;
race_AbandonRaceCheck(frag_target);
- return false;
}
MUTATOR_HOOKFUNCTION(rc, HavocBot_ChooseRole)
{
if(g_race_qualifying)
return true; // in qualifying, you don't lose score by observing
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, GetTeamCount, CBC_ORDER_EXCLUSIVE)
// announce remaining frags if not in qualifying mode
if(!g_race_qualifying)
return true;
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, GetRecords)
return true;
}
}
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, ReadLevelCvars)
{
if(g_race_qualifying == 2)
warmup_stage = 0;
- return false;
}
void race_Initialize()
{
ActivateTeamplay();
race_teams = bound(2, autocvar_g_race_teams, 4);
+ int teams = 0;
+ if(race_teams >= 1) teams |= BIT(0);
+ if(race_teams >= 2) teams |= BIT(1);
+ if(race_teams >= 3) teams |= BIT(2);
+ if(race_teams >= 4) teams |= BIT(3);
+
+ race_teams = teams; // now set it?
+
have_team_spawns = -1; // request team spawns
}
else