mirror of
https://git.code.sf.net/p/quake/game-source
synced 2024-11-28 22:52:26 +00:00
364 lines
9.4 KiB
C++
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;
|
|
}
|
|
};
|