summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/gokz-racing/announce.sp
diff options
context:
space:
mode:
authornavewindre <nw@moneybot.cc>2023-12-04 18:06:10 +0100
committernavewindre <nw@moneybot.cc>2023-12-04 18:06:10 +0100
commitaef0d1c1268ab7d4bc18996c9c6b4da16a40aadc (patch)
tree43e766b51704f4ab8b383583bdc1871eeeb9c698 /sourcemod/scripting/gokz-racing/announce.sp
parent38f1140c11724da05a23a10385061200b907cf6e (diff)
bbbbbbbbwaaaaaaaaaaa
Diffstat (limited to 'sourcemod/scripting/gokz-racing/announce.sp')
-rw-r--r--sourcemod/scripting/gokz-racing/announce.sp229
1 files changed, 229 insertions, 0 deletions
diff --git a/sourcemod/scripting/gokz-racing/announce.sp b/sourcemod/scripting/gokz-racing/announce.sp
new file mode 100644
index 0000000..7b6a920
--- /dev/null
+++ b/sourcemod/scripting/gokz-racing/announce.sp
@@ -0,0 +1,229 @@
+/*
+ Chat messages of race and racer events.
+*/
+
+
+
+// =====[ PUBLIC ]=====
+
+/**
+ * Prints a message to chat for all clients in a race, formatting colours
+ * and optionally adding the chat prefix. If using the chat prefix, specify
+ * a colour at the beginning of the message e.g. "{default}Hello!".
+ *
+ * @param raceID ID of the race.
+ * @param specs Whether to also include racer spectators.
+ * @param addPrefix Whether to add the chat prefix.
+ * @param format Formatting rules.
+ * @param any Variable number of format parameters.
+ */
+void PrintToChatAllInRace(int raceID, bool specs, bool addPrefix, const char[] format, any...)
+{
+ char buffer[1024];
+ for (int client = 1; client <= MaxClients; client++)
+ {
+ if (IsClientInGame(client) && GetRaceID(client) == raceID)
+ {
+ SetGlobalTransTarget(client);
+ VFormat(buffer, sizeof(buffer), format, 5);
+ GOKZ_PrintToChat(client, addPrefix, buffer);
+
+ if (specs)
+ {
+ for (int target = 1; target <= MaxClients; target++)
+ {
+ if (IsClientInGame(target) && GetObserverTarget(target) == client && GetRaceID(target) != raceID)
+ {
+ SetGlobalTransTarget(target);
+ VFormat(buffer, sizeof(buffer), format, 5);
+ GOKZ_PrintToChat(target, addPrefix, buffer);
+ }
+ }
+ }
+ }
+ }
+}
+
+
+
+// =====[ EVENTS ]=====
+
+void OnFinish_Announce(int client, int raceID, int place)
+{
+ switch (GetRaceInfo(raceID, RaceInfo_Type))
+ {
+ case RaceType_Normal:
+ {
+ if (place == 1)
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Won", client);
+ }
+ else
+ {
+ ArrayList unfinishedRacers = GetUnfinishedRacers(raceID);
+ if (unfinishedRacers.Length >= 1)
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Placed", client, place);
+ }
+ else
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Lost", client, place);
+ }
+ delete unfinishedRacers;
+ }
+ }
+ case RaceType_Duel:
+ {
+ ArrayList unfinishedRacers = GetUnfinishedRacers(raceID);
+ if (unfinishedRacers.Length == 1)
+ {
+ int opponent = unfinishedRacers.Get(0);
+ GOKZ_PrintToChatAll(true, "%t", "Duel Won", client, opponent);
+ }
+ delete unfinishedRacers;
+ }
+ }
+}
+
+void OnSurrender_Announce(int client, int raceID)
+{
+ switch (GetRaceInfo(raceID, RaceInfo_Type))
+ {
+ case RaceType_Normal:
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Surrendered", client);
+ }
+ case RaceType_Duel:
+ {
+ ArrayList unfinishedRacers = GetUnfinishedRacers(raceID);
+ if (unfinishedRacers.Length == 1)
+ {
+ int opponent = unfinishedRacers.Get(0);
+ GOKZ_PrintToChatAll(true, "%t", "Duel Surrendered", client, opponent);
+ }
+ delete unfinishedRacers;
+ }
+ }
+}
+
+void OnRequestReceived_Announce(int client, int raceID)
+{
+ int host = GetRaceHost(raceID);
+
+ switch (GetRaceInfo(raceID, RaceInfo_Type))
+ {
+ case RaceType_Normal:
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Race Request Received", host);
+ }
+ case RaceType_Duel:
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Duel Request Received", host);
+ }
+ }
+
+ int cpRule = GetRaceInfo(raceID, RaceInfo_CheckpointRule);
+ int cdRule = GetRaceInfo(raceID, RaceInfo_CooldownRule);
+ int mode = GetRaceInfo(raceID, RaceInfo_Mode);
+ int course = GetRaceInfo(raceID, RaceInfo_Course);
+
+ char courseStr[32];
+ if (course == 0)
+ {
+ FormatEx(courseStr, sizeof(courseStr), "%T", "Race Rules - Main Course", client);
+ }
+ else
+ {
+ FormatEx(courseStr, sizeof(courseStr), "%T %d", "Race Rules - Bonus Course", client, course);
+ }
+
+ if (cpRule == -1 && cdRule == 0)
+ {
+ GOKZ_PrintToChat(client, false, "%t", "Race Rules - Unlimited", gC_ModeNames[mode], courseStr);
+ }
+ if (cpRule == -1 && cdRule > 0)
+ {
+ GOKZ_PrintToChat(client, false, "%t", "Race Rules - Limited Cooldown", gC_ModeNames[mode], courseStr, cdRule);
+ }
+ if (cpRule == 0)
+ {
+ GOKZ_PrintToChat(client, false, "%t", "Race Rules - No Checkpoints", gC_ModeNames[mode], courseStr);
+ }
+ if (cpRule > 0 && cdRule == 0)
+ {
+ GOKZ_PrintToChat(client, false, "%t", "Race Rules - Limited Checkpoints", gC_ModeNames[mode], courseStr, cpRule);
+ }
+ if (cpRule > 0 && cdRule > 0)
+ {
+ GOKZ_PrintToChat(client, false, "%t", "Race Rules - Limited", gC_ModeNames[mode], courseStr, cpRule, cdRule);
+ }
+
+ GOKZ_PrintToChat(client, false, "%t", "You Have Seconds To Accept", RoundFloat(RC_REQUEST_TIMEOUT_TIME));
+}
+
+void OnRequestAccepted_Announce(int client, int raceID)
+{
+ int host = GetRaceHost(raceID);
+
+ switch (GetRaceInfo(raceID, RaceInfo_Type))
+ {
+ case RaceType_Normal:
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Request Accepted", client, host);
+ }
+ case RaceType_Duel:
+ {
+ GOKZ_PrintToChatAll(true, "%t", "Duel Request Accepted", client, host);
+ }
+ }
+}
+
+void OnRequestDeclined_Announce(int client, int raceID, bool timeout)
+{
+ int host = GetRaceHost(raceID);
+
+ if (timeout)
+ {
+ switch (GetRaceInfo(raceID, RaceInfo_Type))
+ {
+ case RaceType_Normal:
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Race Request Not Accepted In Time (Target)");
+ GOKZ_PrintToChat(host, true, "%t", "Race Request Not Accepted In Time (Host)", client);
+ }
+ case RaceType_Duel:
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Duel Request Not Accepted In Time (Target)");
+ GOKZ_PrintToChat(host, true, "%t", "Duel Request Not Accepted In Time (Host)", client);
+ }
+ }
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "You Have Declined");
+ GOKZ_PrintToChat(host, true, "%t", "Player Has Declined", client);
+ }
+}
+
+void OnRaceStarted_Announce(int raceID)
+{
+ if (GetRaceInfo(raceID, RaceInfo_Type) == RaceType_Normal)
+ {
+ PrintToChatAllInRace(raceID, true, true, "%t", "Race Host Started Countdown", GetRaceHost(raceID));
+ }
+}
+
+void OnRaceAborted_Announce(int raceID)
+{
+ for (int client = 1; client <= MaxClients; client++)
+ {
+ if (IsClientInGame(client) && GetRaceID(client) == raceID)
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Race Has Been Aborted");
+ if (GetStatus(client) == RacerStatus_Racing)
+ {
+ GOKZ_PlayErrorSound(client);
+ }
+ }
+ }
+} \ No newline at end of file