newpos = race_readPos(map, t);
float i;
+ player_prevpos = 0;
for(i = 1; i <= RANKINGS_CNT; ++i)
{
if(race_readUID(map, i) == myuid)
}
float oldrec;
- string recorddifference, oldrec_holder;
+ string oldrec_holder;
if (player_prevpos && (player_prevpos < newpos || !newpos))
{
oldrec = race_readTime(GetMapname(), player_prevpos);
- recorddifference = strcat(" ^1[+", TIME_ENCODED_TOSTRING(t - oldrec), "]");
- bprint(mynetname, "^7 couldn't break their ", race_placeName(player_prevpos), " place record of ", TIME_ENCODED_TOSTRING(oldrec), recorddifference, "\n");
race_SendStatus(0, e); // "fail"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_FAIL, MSG_RACE);
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_FAIL_RANKED, mynetname, player_prevpos, t, oldrec);
return;
} else if (!newpos) { // no ranking, time worse than the worst ranked
- recorddifference = strcat(" ^1[+", TIME_ENCODED_TOSTRING(t - race_readTime(GetMapname(), RANKINGS_CNT)), "]");
- bprint(mynetname, "^7 couldn't break the ", race_placeName(RANKINGS_CNT), " place record of ", TIME_ENCODED_TOSTRING(race_readTime(GetMapname(), RANKINGS_CNT)), recorddifference, "\n");
+ oldrec = race_readTime(GetMapname(), RANKINGS_CNT);
race_SendStatus(0, e); // "fail"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_FAIL, MSG_RACE);
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_FAIL_UNRANKED, mynetname, RANKINGS_CNT, t, oldrec);
return;
}
// if the player does not have a UID we can unfortunately not store the record, as the rankings system relies on UIDs
if(myuid == "")
{
- bprint(mynetname, "^1 scored a new record with ^7", TIME_ENCODED_TOSTRING(t), "^1, but lacks a UID, so the record will unfortunately be lost.\n");
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_NEW_MISSING_UID, mynetname, t);
return;
}
if(rankings_reply)
strunzone(rankings_reply);
rankings_reply = strzone(getrankings());
- if(newpos == 1) {
- if(newpos == player_prevpos) {
- recorddifference = strcat(" ^2[-", TIME_ENCODED_TOSTRING(oldrec - t), "]");
- bprint(mynetname, "^1 improved their 1st place record with ", TIME_ENCODED_TOSTRING(t), recorddifference, "\n");
- } else if (oldrec == 0) {
- bprint(mynetname, "^1 set the 1st place record with ", TIME_ENCODED_TOSTRING(t), "\n");
- } else {
- recorddifference = strcat(" ^2[-", TIME_ENCODED_TOSTRING(oldrec - t), "]");
- bprint(mynetname, "^1 broke ", oldrec_holder, "^1's 1st place record with ", strcat(TIME_ENCODED_TOSTRING(t), recorddifference, "\n"));
- }
- race_SendStatus(3, e); // "new server record"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_SERVER_RECORD, MSG_RACE);
- } else {
- if(newpos == player_prevpos) {
- recorddifference = strcat(" ^2[-", TIME_ENCODED_TOSTRING(oldrec - t), "]");
- bprint(mynetname, "^5 improved their ", race_placeName(newpos), " ^5place record with ", TIME_ENCODED_TOSTRING(t), recorddifference, "\n");
- race_SendStatus(1, e); // "new time"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_NEW_TIME, MSG_RACE);
- } else if (oldrec == 0) {
- bprint(mynetname, "^2 set the ", race_placeName(newpos), " ^2place record with ", TIME_ENCODED_TOSTRING(t), "\n");
- race_SendStatus(2, e); // "new rank"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_NEW_RANK, MSG_RACE);
- } else {
- recorddifference = strcat(" ^2[-", TIME_ENCODED_TOSTRING(oldrec - t), "]");
- bprint(mynetname, "^2 broke ", oldrec_holder, "^2's ", race_placeName(newpos), " ^2place record with ", strcat(TIME_ENCODED_TOSTRING(t), recorddifference, "\n"));
- race_SendStatus(2, e); // "new rank"
- Send_KillNotification(e.netname, TIME_ENCODED_TOSTRING(t), "", RACE_NEW_TIME, MSG_RACE);
- }
+
+ if(newpos == player_prevpos)
+ {
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_NEW_IMPROVED, mynetname, newpos, t, oldrec);
+ if(newpos == 1) { race_SendStatus(3, e); } // "new server record"
+ else { race_SendStatus(1, e); } // "new time"
+ }
+ else if(oldrec == 0)
+ {
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_NEW_SET, mynetname, newpos, t);
+ if(newpos == 1) { race_SendStatus(3, e); } // "new server record"
+ else { race_SendStatus(2, e); } // "new rank"
+ }
+ else
+ {
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_NEW_BROKEN, mynetname, oldrec_holder, newpos, t, oldrec);
+ if(newpos == 1) { race_SendStatus(3, e); } // "new server record"
+ else { race_SendStatus(2, e); } // "new rank"
}
}
}
else
{
+ s = PlayerScore_Add(e, SP_RACE_FASTEST, 0);
+ if(!s || t < s)
+ PlayerScore_Add(e, SP_RACE_FASTEST, t - s);
+
s = PlayerScore_Add(e, SP_RACE_TIME, 0);
snew = TIME_ENCODE(time - game_starttime);
PlayerScore_Add(e, SP_RACE_TIME, snew - s);
{
e.race_completed = 1;
MAKE_INDEPENDENT_PLAYER(e);
- bprint(e.netname, "^7 has finished the race.\n");
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_FINISHED, e.netname);
ClientData_Touch(e);
}
}
self.race_checkpoint = other.race_checkpoint;
}
- float largest_cp_id;
- float cp_amount;
+ float largest_cp_id = 0;
+ float cp_amount = 0;
for(cp = world; (cp = find(cp, classname, "target_checkpoint"));) {
cp_amount += 1;
if(cp.race_checkpoint > largest_cp_id) // update the finish id if someone hit a new checkpoint
g_race_qualifying = 1;
self.race_place = race_lowest_place_spawn;
if(!Spawn_FilterOutBadSpots(findchain(classname, "info_player_deathmatch"), 0, FALSE))
- error(strcat("Checkpoint ", ftos(i), " misses a spawnpoint with race_place==", ftos(self.race_place), " (used for qualifying) - bailing out"));
+ error(strcat("Checkpoint 0 misses a spawnpoint with race_place==", ftos(self.race_place), " (used for qualifying) - bailing out"));
}
else
{
}
if(defragcpexists != -1){
- float largest_cp_id;
+ float largest_cp_id = 0;
for(cp = world; (cp = find(cp, classname, "target_checkpoint"));)
if(cp.race_checkpoint > largest_cp_id)
largest_cp_id = cp.race_checkpoint;
self = oldself;
}
-vector trigger_race_checkpoint_spawn_evalfunc(entity player, entity spot, float teamcheck, vector current)
+vector trigger_race_checkpoint_spawn_evalfunc(entity player, entity spot, vector current)
{
if(g_race_qualifying)
{
waypoint_spawnforitem_force(self, trace_endpos);
self.nearestwaypointtimeout = time + 1000000000;
- if(!self.message)
+ if(self.message == "")
self.message = "went backwards";
- if (!self.message2)
+ if (self.message2 == "")
self.message2 = "was pushed backwards by";
- if (!self.race_penalty_reason)
+ if (self.race_penalty_reason == "")
self.race_penalty_reason = "missing a checkpoint";
self.race_checkpoint = self.cnt;
waypoint_spawnforitem_force(self, trace_endpos);
self.nearestwaypointtimeout = time + 1000000000;
- if(!self.message)
+ if(self.message == "")
self.message = "went backwards";
- if (!self.message2)
+ if (self.message2 == "")
self.message2 = "was pushed backwards by";
- if (!self.race_penalty_reason)
+ if (self.race_penalty_reason == "")
self.race_penalty_reason = "missing a checkpoint";
if(self.classname == "target_startTimer")
{
p.race_completed = 1;
MAKE_INDEPENDENT_PLAYER(p);
- bprint(p.netname, "^7 has abandoned the race.\n");
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_ABANDONED, p.netname);
ClientData_Touch(p);
}
}
Score_NicePrint(world);
race_ClearRecords();
- PlayerScore_Sort(race_place);
+ PlayerScore_Sort(race_place, 0, 1, 0);
entity e;
FOR_EACH_CLIENT(e)
if not(self.spawnflags & 1)
self.touch = penalty_touch;
- if (!self.race_penalty_reason)
+ if (self.race_penalty_reason == "")
self.race_penalty_reason = "missing a checkpoint";
if (!self.race_penalty)
self.race_penalty = 5;