game-source/ctf/qwsrc/status.qc

346 lines
9.5 KiB
C++
Raw Normal View History

/*
#FILENAME#
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
.float laststattime; // time of last status update
.float motd_count;
.float statstate; // is the status bar on?
float PLAYERSTATTIME = 1.75;
void() MOTD =
{
if (self.motd_count < 4) {
self.motd_count = self.motd_count + 1;
if (self.classname == "spectator") {
centerprint(self, "Welcome!\nRunning ThreeWave CTF 4.21\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n");
return;
}
if (gamestart) {
centerprint(self, "Welcome!\nRunning ThreeWave CTF 4.21\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n\nChoose an exit...\n"); //red
return;
}
if (self.steam == TEAM_COLOR1)
centerprint(self, "Welcome!\nRunning ThreeWave CTF 4.21\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n\nYou are <20><><EFBFBD> team\n"); //red
else
centerprint(self, "Welcome!\nRunning Threewave CTF 4.21\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n\nYou are <20><><EFBFBD><EFBFBD> team"); //blue
return;
}
sprint(self, PRINT_HIGH, "Impulse 70 to turn off status bar\n");
sprint(self, PRINT_HIGH, "Impulse 71 through 81 to set status bar resolution\n");
sprint(self, PRINT_HIGH, "71:200 72:240 73:300 74:350 75:384 76:400 77:480 78:600 79:768 81:1024\n");
self.motd_count = 0;
};
void() MOTD_ChooseTeam =
{
if (self.motd_count < 6) {
self.motd_count = self.motd_count + 1;
centerprint(self, "Welcome!\nRunning ThreeWave CTF 4.2\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n\nPress 1 for <20><><EFBFBD> team\nPress 2 for <20><><EFBFBD><EFBFBD> team\nOr Press Jump for automatic team\n");
return;
}
self.motd_count = 0;
};
void() TeamCaptureCheckUpdate =
{
local entity p;
if (gamestart)
return; // handled by vote exit
if (lastteamscrtime > time)
return;
lastteamscrtime = time + TEAMSCRTIME;
// count up teamscr
teamscr1 = teamscr2 = 0;
p = find(world, classname, "player");
while (p != world) {
if (p.steam == TEAM_COLOR1)
teamscr1 = teamscr1 + p.frags;
else if (p.steam == TEAM_COLOR2)
teamscr2 = teamscr2 + p.frags;
p = find(p, classname, "player");
}
};
void() TeamCaptureResetUpdate =
{
lastteamscrtime = 0;
TeamCaptureCheckUpdate();
};
void() TeamEndScore =
{
local string s;
if (gamestart)
return;
lastteamscrtime = 0;
TeamCaptureCheckUpdate();
if (teamscr1 > teamscr2) {
bprint(PRINT_HIGH, "<EFBFBD><EFBFBD><EFBFBD> team won the level with ");
s = ftos(teamscr1);
bprint(PRINT_HIGH, s);
bprint(PRINT_HIGH, " points!\n");
bprint(PRINT_HIGH, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> team lost with ");
s = ftos(teamscr2);
bprint(PRINT_HIGH, s);
bprint(PRINT_HIGH, " points.\n");
} else if (teamscr1 < teamscr2) {
bprint(PRINT_HIGH, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> team won the level with ");
s = ftos(teamscr2);
bprint(PRINT_HIGH, s);
bprint(PRINT_HIGH, " points!\n");
bprint(PRINT_HIGH, "<EFBFBD><EFBFBD><EFBFBD> team lost with ");
s = ftos(teamscr1);
bprint(PRINT_HIGH, s);
bprint(PRINT_HIGH, " points.\n");
} else {
bprint(PRINT_HIGH, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> and <20><><EFBFBD> team tied level with ");
s = ftos(teamscr1);
bprint(PRINT_HIGH, s);
bprint(PRINT_HIGH, " points!\n");
}
};
string(entity who) TeamSetStatRes =
{
if (who.statstate > 7) // 768
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 7) // 600
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 6) // 480
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 5) // 400
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 4) // 384
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 3) // 350
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 2) // 300
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 1) // 240
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
// 200
return "\n\n\n\n\n\n\n\n\n\n\n\n";
};
string(entity who) TeamSetStatRes2 =
{
if (who.statstate > 7) // 768
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 7) // 600
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 6) // 480
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 5) // 400
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 4) // 384
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 3) // 350
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 2) // 300
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
else if (who.statstate == 1) // 240
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
// 200
return "\n\n\n\n\n\n\n\n\n\n\n";
};
void() TeamCapturePlayerUpdate =
{
local entity e;
local string n, t, s1, s2, s3, res;
if (self.laststattime > time)
return;
TeamCaptureCheckUpdate();
self.laststattime = time + PLAYERSTATTIME;
if (self.motd_count) {
MOTD();
return;
}
if (self.statstate < 0)
return;
res = TeamSetStatRes(self);
if (gamestart) {
if (vote_leader == world)
centerprint2(self, res, " Choose an exit...");
else {
res = TeamSetStatRes2();
n = ftos(voteexit_time - time);
centerprint5(self, res, vote_leader.message,
" leads\n", n, " seconds until exit");
}
return;
}
//.1234567890123456789012345678901234567
// Res.R.B. Capture The Flag
// Res.R.B. BLUE 999
if (self.player_flag & ITEM_RUNE1_FLAG)
s1 = "Resist <20>";
else if (self.player_flag & ITEM_RUNE2_FLAG)
s1 = "Strength<EFBFBD>";
else if (self.player_flag & ITEM_RUNE3_FLAG)
s1 = "Haste <20>";
else if (self.player_flag & ITEM_RUNE4_FLAG)
s1 = "Regen <20>";
else
s1 = " <20>";
e = find(world, classname, "item_flag_team1");
if (e.cnt == FLAG_AT_BASE)
s2 = " <20>";
else if (e.cnt == FLAG_CARRIED)
s2 = "R<EFBFBD>";
else
s2 = "Ò…";
e = find(world, classname, "item_flag_team2");
if (e.cnt == FLAG_AT_BASE)
s3 = " <20>";
else if (e.cnt == FLAG_CARRIED)
s3 = "B<EFBFBD>";
else
s3 = "Â…";
if (teamscr1 == 0 && teamscr2 == 0) {
centerprint5(self, res, s1, s2, s3, " Capture The Flag"); // CTFBOT
return;
}
if (time < (last_flag_capture + 6))
{
if (last_capture_team == TEAM_COLOR1)
{
if (teamscr1 > teamscr2) {
t = "Red Capture! RED ";
n = ftos(teamscr1 - teamscr2);
} else if (teamscr1 < teamscr2) {
t = "Red Capture! BLUE ";
n = ftos(teamscr2 - teamscr1);
} else {
t = "Red Capture! TIED ";
n = "";
}
}
else
{
if (teamscr1 > teamscr2) {
t = "Blue Capture! RED ";
n = ftos(teamscr1 - teamscr2);
} else if (teamscr1 < teamscr2) {
t = "Blue Capture! BLUE ";
n = ftos(teamscr2 - teamscr1);
} else {
t = "Blue Capture! TIED ";
n = "";
}
}
}
else
{
if (teamscr1 > teamscr2) {
t = " RED ";
n = ftos(teamscr1 - teamscr2);
} else if (teamscr1 < teamscr2) {
t = " BLUE ";
n = ftos(teamscr2 - teamscr1);
} else {
t = " TIED ";
n = "";
}
}
centerprint7(self, res, s1, s2, s3, " ", t, n); //
};
void(entity who, string s) TeamPlayerUpdate =
{
local string n, res;
TeamCaptureCheckUpdate();
who.laststattime = time + PLAYERSTATTIME;
if (who.statstate < 0) {
centerprint(who, s);
return;
}
res = TeamSetStatRes2(who);
if (teamscr1 == 0 && teamscr2 == 0) {
centerprint3(who, res, s, "\n Capture The Flag");
} else if (teamscr1 > teamscr2) {
n = ftos(teamscr1 - teamscr2);
centerprint4(who, res, s, "\n RED ", n);
} else if (teamscr1 < teamscr2) {
n = ftos(teamscr2 - teamscr1);
centerprint4(who, res, s, "\n BLUE ", n);
} else
centerprint3(who, res, s, "\n TIED");
};
void(entity who, string s1, string s2) TeamPlayerUpdate2 =
{
local string n, res;
TeamCaptureCheckUpdate();
who.laststattime = time + PLAYERSTATTIME;
if (who.statstate < 0) {
centerprint2(who, s1, s2);
return;
}
res = TeamSetStatRes2(who);
if (teamscr1 == 0 && teamscr2 == 0) {
centerprint4(who, res, s1, s2, "\n Capture The Flag");
return;
} else if (teamscr1 > teamscr2) {
n = ftos(teamscr1 - teamscr2);
centerprint5(who, res, s1, s2, "\n RED ", n);
} else if (teamscr1 < teamscr2) {
n = ftos(teamscr2 - teamscr1);
centerprint5(who, res, s1, s2, "\n BLUE ", n);
} else {
centerprint4(who, res, s1, s2, "\n TIED");
return;
}
};