game-source/ctf/qwsrc/status.qc
2003-08-27 23:43:13 +00:00

364 lines
9.4 KiB
C++

/*
status.qc
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"
"ÃÁÐÔÕÒÅ ÔÈÅ ÆÌÁÇ!\n");
return;
}
if (gamestart) {
centerprint (self, "Welcome!\nRunning ThreeWave CTF 4.21\n\n"
"ÃÁÐÔÕÒÅ ÔÈÅ ÆÌÁÇ!\n\nChoose an exit...\n"); //red
return;
}
if (self.steam == TEAM_COLOR1)
centerprint (self, "Welcome!\nRunning ThreeWave CTF 4.21\n\n"
"ÃÁÐÔÕÒÅ ÔÈÅ ÆÌÁÇ!\n\nYou are ÒÅÄ team\n"); //red
else
centerprint (self, "Welcome!\nRunning Threewave CTF 4.21\n\n"
"ÃÁÐÔÕÒÅ ÔÈÅ ÆÌÁÇ!\n\nYou are ÂÌÕÅ 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ÃÁÐÔÕÒÅ "
"ÔÈÅ ÆÌÁÇ!\n\nPress 1 for ÒÅÄ team\nPress 2 for ÂÌÕÅ "
"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, "ÒÅÄ team won the level with ");
s = ftos (teamscr1);
bprint (PRINT_HIGH, s);
bprint (PRINT_HIGH, " points!\n");
bprint (PRINT_HIGH, "ÂÌÕÅ team lost with ");
s = ftos (teamscr2);
bprint (PRINT_HIGH, s);
bprint (PRINT_HIGH, " points.\n");
} else if (teamscr1 < teamscr2) {
bprint (PRINT_HIGH, "ÂÌÕÅ team won the level with ");
s = ftos (teamscr2);
bprint (PRINT_HIGH, s);
bprint (PRINT_HIGH, " points!\n");
bprint (PRINT_HIGH, "ÒÅÄ team lost with ");
s = ftos (teamscr1);
bprint (PRINT_HIGH, s);
bprint (PRINT_HIGH, " points.\n");
} else {
bprint (PRINT_HIGH, "ÂÌÕÅ and ÒÅÄ team tied level with ");
s = ftos (teamscr1);
bprint (PRINT_HIGH, s);
bprint (PRINT_HIGH, " points!\n");
}
};
string (entity who)
TeamSetStatRes =
{
switch (who.statstate) {
default: // > 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";
case 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";
case 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";
case 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";
case 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";
case 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";
case 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";
case 1: // 240:
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
case 0: // 200
return "\n\n\n\n\n\n\n\n\n\n\n\n";
}
};
string (entity who)
TeamSetStatRes2 =
{
switch (who.statstate) {
default: // >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";
case 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";
case 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";
case 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";
case 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";
case 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";
case 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";
case 1: // 240
return "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
case 0: // 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 (vote_leader);
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 …";
else if (self.player_flag & ITEM_RUNE2_FLAG)
s1 = "Strength…";
else if (self.player_flag & ITEM_RUNE3_FLAG)
s1 = "Haste …";
else if (self.player_flag & ITEM_RUNE4_FLAG)
s1 = "Regen …";
else
s1 = "";
e = find (world, classname, "item_flag_team1");
if (e.cnt == FLAG_AT_BASE)
s2 = "";
else if (e.cnt == FLAG_CARRIED)
s2 = "R…";
else
s2 = "Ò…";
e = find (world, classname, "item_flag_team2");
if (e.cnt == FLAG_AT_BASE)
s3 = "";
else if (e.cnt == FLAG_CARRIED)
s3 = "B…";
else
s3 = "Â…";
if (teamscr1 == 0 && teamscr2 == 0) {
// CTFBOT
centerprint5 (self, res, s1, s2, s3, " Capture The Flag");
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 res, n;
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;
}
};