float previous_game_starttime;
string previous_announcement;
-//remaining maptime announcer sounds, true when sound was already played
+// remaining maptime announcer sounds, true when sound was already played
float announcer_1min;
float announcer_5min;
void Announcer_Play(string announcement)
{
- if((announcement != previous_announcement) || (time >= (previous_announcement_time + autocvar_cl_announcer_antispam)))
- {
- sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/", announcement, ".wav"), VOL_BASEVOICE, ATTN_NONE);
-
- previous_announcement = announcement;
- previous_announcement_time = time;
- }
+ if((announcement != previous_announcement) || (time >= (previous_announcement_time + autocvar_cl_announcer_antispam)))
+ {
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/", announcement, ".wav"), VOL_BASEVOICE, ATTN_NONE);
+
+ if(previous_announcement) { strunzone(previous_announcement); }
+
+ previous_announcement = strzone(announcement);
+ previous_announcement_time = time;
+ }
}
void Announcer_Countdown()
{
float starttime = getstatf(STAT_GAMESTARTTIME);
+ float roundstarttime = getstatf(STAT_ROUNDSTARTTIME);
+ if(roundstarttime == -1)
+ {
+ remove(self);
+ return;
+ }
+ if(roundstarttime >= starttime)
+ starttime = roundstarttime;
+ if(starttime <= time && roundstarttime != starttime) // game start time has passed
+ announcer_5min = announcer_1min = FALSE; // reset maptime announcers now as well
+
float countdown = (starttime - time);
float countdown_rounded = floor(0.5 + countdown);
-
+
if(countdown <= 0) // countdown has finished, starttime is now
{
- if (!spectatee_status)
- centerprint_generic(CPID_GAME_STARTING, _("^1Begin!"), 1, 0);
-
+ Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_BEGIN);
+
Announcer_Play("begin");
- announcer_5min = announcer_1min = FALSE; //reset maptime announcers now as well
remove(self);
return;
}
else // countdown is still going
{
- if (!spectatee_status)
- centerprint_generic(CPID_GAME_STARTING, _("^1Game starts in %d seconds"), 1, countdown_rounded);
+ if(roundstarttime == starttime)
+ Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, countdown_rounded);
+ else
+ Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_GAMESTART, countdown_rounded);
if(countdown_rounded <= 3 && countdown_rounded >= 1)
Announcer_Play(ftos(countdown_rounded));
void Announcer_Gamestart()
{
float startTime = getstatf(STAT_GAMESTARTTIME);
-
- if (previous_game_starttime != startTime)
+ float roundstarttime = getstatf(STAT_ROUNDSTARTTIME);
+ if(roundstarttime > startTime)
+ startTime = roundstarttime;
+
+ if(previous_game_starttime != startTime)
{
- if ((time + 5.0) < startTime) //if connecting to server while restart was active don't always play prepareforbattle
- {
+ if((time + 5.0) < startTime) // if connecting to server while restart was active don't always play prepareforbattle
Announcer_Play("prepareforbattle");
- }
- if (time < startTime)
+
+ if(time < startTime)
{
- entity e;
- e = spawn();
+ entity e;
+ e = spawn();
e.think = Announcer_Countdown;
e.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
}
previous_game_starttime = startTime;
}
-/**
- * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it
- */
-void maptimeAnnouncer() {
- float timelimit;
- timelimit = getstatf(STAT_TIMELIMIT);
- float timeleft;
- timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
-
- float warmuplimit;
- float warmuptimeleft;
- if(warmup_stage) {
- warmuplimit = autocvar_g_warmup_limit;
- if(warmuplimit > 0) {
- warmuptimeleft = max(0, warmuplimit + getstatf(STAT_GAMESTARTTIME) - time);
- }
- }
- //5 minute check
- if (autocvar_cl_sound_maptime_warning >= 2) {
- //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
+// Plays the 1 minute or 5 minutes (of maptime) remaining sound, if client wants it
+void Announcer_Time()
+{
+ float timelimit = getstatf(STAT_TIMELIMIT);
+ float timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
+ float warmup_timeleft = 0;
+
+ if(warmup_stage)
+ if(autocvar_g_warmup_limit > 0)
+ warmup_timeleft = max(0, autocvar_g_warmup_limit + getstatf(STAT_GAMESTARTTIME) - time);
+
+ // 5 minute check
+ if(autocvar_cl_announcer_maptime >= 2)
+ {
+ // make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
if(announcer_5min)
{
- if(((!warmup_stage || warmuplimit == 0) && timeleft > 300) || (warmup_stage && warmuplimit > 0 && warmuptimeleft > 300))
- announcer_5min = FALSE;
+ if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 300)
+ || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft > 300))
+ announcer_5min = FALSE;
}
- else if (((!warmup_stage || warmuplimit == 0) && timelimit > 0 && timeleft < 300 && timeleft > 299) || (warmup_stage && warmuplimit > 0 && warmuptimeleft < 300 && warmuptimeleft > 299))
- //if we're in warmup mode, check whether there's a warmup timelimit
- if not (warmuplimit == -1 && warmup_stage) {
- announcer_5min = TRUE;
- sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/5minutesremain.wav"), VOL_BASEVOICE, ATTN_NONE);
+ else
+ {
+ if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 300 && timeleft > 299)
+ || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft < 300 && warmup_timeleft > 299))
+ {
+ //if we're in warmup mode, check whether there's a warmup timelimit
+ if not(autocvar_g_warmup_limit == -1 && warmup_stage)
+ {
+ announcer_5min = TRUE;
+ Announcer_Play("5minutesremain");
+ }
}
+ }
}
- //1 minute check
- if (autocvar_cl_sound_maptime_warning == 1 || autocvar_cl_sound_maptime_warning == 3) {
+ // 1 minute check
+ if((autocvar_cl_announcer_maptime == 1) || (autocvar_cl_announcer_maptime == 3))
+ {
if (announcer_1min)
{
- if(((!warmup_stage || warmuplimit == 0) && timeleft > 60) || (warmup_stage && warmuplimit > 0 && warmuptimeleft > 60))
- announcer_1min = FALSE;
+ if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 60)
+ || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft > 60))
+ announcer_1min = FALSE;
}
- else if (((!warmup_stage || warmuplimit == 0) && timelimit > 0 && timeleft < 60) || (warmup_stage && warmuplimit > 0 && warmuptimeleft < 60))
- //if we're in warmup mode, check whether there's a warmup timelimit
- if not (warmuplimit == -1 && warmup_stage) {
+ else if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 60)
+ || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft < 60))
+ {
+ // if we're in warmup mode, check whether there's a warmup timelimit
+ if not(autocvar_g_warmup_limit == -1 && warmup_stage)
+ {
announcer_1min = TRUE;
- sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/1minuteremains.wav"), VOL_BASEVOICE, ATTN_NONE);
+ Announcer_Play("1minuteremains");
}
- }
-}
-
-/**
- * Announce carried items (e.g. flags in CTF).
- */
-float redflag_prev;
-float blueflag_prev;
-void carrierAnnouncer() {
- float stat_items, redflag, blueflag;
- float pickup;
- string item;
-
- if not(autocvar_cl_notify_carried_items)
- return;
-
- stat_items = getstati(STAT_ITEMS);
-
- redflag = (stat_items/IT_RED_FLAG_TAKEN) & 3;
- blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3;
-
- if (redflag == 3 && redflag != redflag_prev) {
- item = _("^1RED^7 flag");
- pickup = (redflag_prev == 2);
- }
-
- if (blueflag == 3 && blueflag != blueflag_prev) {
- item = _("^4BLUE^7 flag");
- pickup = (blueflag_prev == 2);
- }
-
- if (item)
- {
- if (pickup) {
- if (autocvar_cl_notify_carried_items & 2)
- centerprint(sprintf(_("You picked up the %s!"), item));
- }
- else {
- if (autocvar_cl_notify_carried_items & 1)
- centerprint(sprintf(_("You got the %s!"), item));
}
}
-
- blueflag_prev = blueflag;
- redflag_prev = redflag;
}
void Announcer()
{
- Announcer_Gamestart();
- maptimeAnnouncer();
- carrierAnnouncer();
+ Announcer_Gamestart();
+ Announcer_Time();
}
-/**
- * Add all future announcer sounds precaches here.
- * TODO: announcer queues
- */
-void Announcer_Precache () {
+void Announcer_Precache ()
+{
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/1minuteremains.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/5minutesremain.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/yoda.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/amazing.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/awesome.wav"));
- precache_sound (strcat("announcer/", autocvar_cl_announcer, "/headshot.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/impressive.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/voteaccept.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/votecall.wav"));
precache_sound (strcat("announcer/", autocvar_cl_announcer, "/votefail.wav"));
-}
\ No newline at end of file
+}