IL-GSC/BO2/PC/MP/maps/mp/_gameadvertisement.gsc
2023-10-28 00:17:17 -04:00

580 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_gameadvertisement.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 22
* Decompile Time: 3 ms
* Timestamp: 10/28/2023 12:10:56 AM
*******************************************************************/
#include maps/mp/_utility;
#include maps/mp/gametypes/_dev;
#include maps/mp/gametypes/_globallogic_utils;
//Function Number: 1
init()
{
/#
level.sessionadvertstatus = 1;
thread sessionadvertismentupdatedebughud();
#/
thread sessionadvertisementcheck();
}
//Function Number: 2
setadvertisedstatus(onoff)
{
/#
level.sessionadvertstatus = onoff;
#/
changeadvertisedstatus(onoff);
}
//Function Number: 3
sessionadvertisementcheck()
{
if(sessionmodeisprivate())
{
return;
}
if(sessionmodeiszombiesgame())
{
setadvertisedstatus(0);
return;
}
runrules = getgametyperules();
if(!(IsDefined(runrules)))
{
return;
}
level endon("game_end");
level waittill("prematch_over");
while(1)
{
sessionadvertcheckwait = getdvarintdefault("sessionAdvertCheckwait",1);
wait(sessionadvertcheckwait);
advertise = [[ runrules ]]();
setadvertisedstatus(advertise);
}
}
//Function Number: 4
getgametyperules()
{
gametype = level.gametype;
switch(gametype)
{
case "dm":
return ::dm_rules;
case "tdm":
return ::tdm_rules;
case "dom":
return ::dom_rules;
case "hq":
return ::hq_rules;
case "sd":
return ::sd_rules;
case "dem":
return ::dem_rules;
case "ctf":
return ::ctf_rules;
case "koth":
return ::koth_rules;
case "conf":
return ::conf_rules;
case "oic":
return ::oic_rules;
case "sas":
return ::sas_rules;
case "gun":
return ::gun_rules;
case "shrp":
return ::shrp_rules;
}
}
//Function Number: 5
teamscorelimitcheck(rulescorepercent)
{
if(level.scorelimit)
{
minscorepercentageleft = 100;
foreach(team in level.teams)
{
scorepercentageleft = 100 - game["teamScores"][team] / level.scorelimit * 100;
if(minscorepercentageleft > scorepercentageleft)
{
minscorepercentageleft = scorepercentageleft;
}
if(rulescorepercent >= scorepercentageleft)
{
/#
updatedebughud(3,"Score Percentage Left: ",int(scorepercentageleft));
#/
return 0;
}
}
/#
updatedebughud(3,"Score Percentage Left: ",int(minscorepercentageleft));
}
#/
return 1;
}
//Function Number: 6
timelimitcheck(ruletimeleft)
{
maxtime = level.timelimit;
if(maxtime != 0)
{
timeleft = maps/mp/gametypes/_globallogic_utils::gettimeremaining();
if(ruletimeleft >= timeleft)
{
return 0;
}
}
return 1;
}
//Function Number: 7
dm_rules()
{
rulescorepercent = 35;
ruletimeleft = 60000 * 1.5;
/#
updatedebughud(1,"Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Time limit has less than minutes remaining: ",ruletimeleft / 60000);
#/
if(level.scorelimit)
{
highestscore = 0;
players = get_players();
for(i = 0;i < players.size;i++)
{
if(players[i].pointstowin > highestscore)
{
highestscore = players[i].pointstowin;
}
}
scorepercentageleft = 100 - highestscore / level.scorelimit * 100;
/#
updatedebughud(3,"Score Percentage Left: ",int(scorepercentageleft));
#/
if(rulescorepercent >= scorepercentageleft)
{
return 0;
}
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
}
//Function Number: 8
tdm_rules()
{
rulescorepercent = 15;
ruletimeleft = 60000 * 1.5;
/#
updatedebughud(1,"Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Time limit has less than minutes remaining: ",ruletimeleft / 60000);
#/
if(teamscorelimitcheck(rulescorepercent) == 0)
{
return 0;
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
}
//Function Number: 9
dom_rules()
{
rulescorepercent = 15;
ruletimeleft = 60000 * 1.5;
ruleround = 3;
currentround = game["roundsplayed"] + 1;
/#
updatedebughud(1,"Time limit 1.5 minutes remaining in final round. Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Is round: ",ruleround);
updatedebughud(4,"Current Round: ",currentround);
#/
if(currentround >= 2)
{
if(teamscorelimitcheck(rulescorepercent) == 0)
{
return 0;
}
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
if(ruleround <= currentround)
{
return 0;
}
return 1;
}
//Function Number: 10
hq_rules()
{
return koth_rules();
}
//Function Number: 11
sd_rules()
{
ruleround = 3;
/#
updatedebughud(1,"Any team has won rounds: ",ruleround);
#/
maxroundswon = 0;
foreach(team in level.teams)
{
roundswon = game["teamScores"][team];
if(maxroundswon < roundswon)
{
maxroundswon = roundswon;
}
if(ruleround <= roundswon)
{
/#
updatedebughud(3,"Max Rounds Won: ",maxroundswon);
#/
return 0;
}
}
/#
updatedebughud(3,"Max Rounds Won: ",maxroundswon);
#/
return 1;
}
//Function Number: 12
dem_rules()
{
return ctf_rules();
}
//Function Number: 13
ctf_rules()
{
ruleround = 3;
roundsplayed = game["roundsplayed"];
/#
updatedebughud(1,"Is round or later: ",ruleround);
updatedebughud(3,"Rounds Played: ",roundsplayed);
#/
if(ruleround <= roundsplayed)
{
return 0;
}
}
//Function Number: 14
koth_rules()
{
rulescorepercent = 20;
ruletimeleft = 60000 * 1.5;
/#
updatedebughud(1,"Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Time limit has less than minutes remaining: ",ruletimeleft / 60000);
#/
if(teamscorelimitcheck(rulescorepercent) == 0)
{
return 0;
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
}
//Function Number: 15
conf_rules()
{
return tdm_rules();
}
//Function Number: 16
oic_rules()
{
/#
updatedebughud(1,"No join in progress, so shouldnt advertise to matchmaking once the countdown timer ends.",0);
#/
return 0;
}
//Function Number: 17
sas_rules()
{
rulescorepercent = 35;
ruletimeleft = 60000 * 1.5;
/#
updatedebughud(1,"Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Time limit has less than minutes remaining: ",ruletimeleft / 60000);
#/
if(teamscorelimitcheck(rulescorepercent) == 0)
{
return 0;
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
}
//Function Number: 18
gun_rules()
{
ruleweaponsleft = 3;
/#
updatedebughud(1,"Any player is within X weapons from winning: ",ruleweaponsleft);
#/
minweaponsleft = level.gunprogression.size;
foreach(player in level.players)
{
weaponsleft = level.gunprogression.size - player.gunprogress;
if(minweaponsleft > weaponsleft)
{
minweaponsleft = weaponsleft;
}
if(ruleweaponsleft >= minweaponsleft)
{
/#
updatedebughud(3,"Weapons Left: ",minweaponsleft);
#/
return 0;
}
}
/#
updatedebughud(3,"Weapons Left: ",minweaponsleft);
#/
return 1;
}
//Function Number: 19
shrp_rules()
{
rulescorepercent = 35;
ruletimeleft = 60000 * 1.5;
/#
updatedebughud(1,"Any player is within percent of score cap: ",rulescorepercent);
updatedebughud(2,"Time limit has less than minutes remaining: ",ruletimeleft / 60000);
#/
if(teamscorelimitcheck(rulescorepercent) == 0)
{
return 0;
}
if(timelimitcheck(ruletimeleft) == 0)
{
return 0;
}
}
//Function Number: 20
sessionadvertismentcreatedebughud(linenum,alignx)
{
/#
debug_hud = maps/mp/gametypes/_dev::new_hud("session_advert","debug_hud",0,0,1);
debug_hud.hidewheninmenu = 1;
debug_hud.horzalign = "right";
debug_hud.vertalign = "middle";
debug_hud.alignx = "right";
debug_hud.aligny = "middle";
debug_hud.x = alignx;
debug_hud.y = -50 + linenum * 15;
debug_hud.foreground = 1;
debug_hud.font = "default";
debug_hud.fontscale = 1.5;
debug_hud.color = (1,1,1);
debug_hud.alpha = 1;
debug_hud settext("");
return debug_hud;
#/
}
//Function Number: 21
updatedebughud(hudindex,text,value)
{
/#
switch(hudindex)
{
case "1":
level.sessionadverthud_1a_text = text;
level.sessionadverthud_1b_text = value;
break;
case "2":
level.sessionadverthud_2a_text = text;
level.sessionadverthud_2b_text = value;
break;
case "3":
level.sessionadverthud_3a_text = text;
level.sessionadverthud_3b_text = value;
break;
case "4":
level.sessionadverthud_4a_text = text;
level.sessionadverthud_4b_text = value;
break;
}
#/
}
//Function Number: 22
sessionadvertismentupdatedebughud()
{
/#
level endon("game_end");
sessionadverthud_0 = undefined;
sessionadverthud_1a = undefined;
sessionadverthud_1b = undefined;
sessionadverthud_2a = undefined;
sessionadverthud_2b = undefined;
sessionadverthud_3a = undefined;
sessionadverthud_3b = undefined;
sessionadverthud_4a = undefined;
sessionadverthud_4b = undefined;
level.sessionadverthud_0_text = "";
level.sessionadverthud_1a_text = "";
level.sessionadverthud_1b_text = "";
level.sessionadverthud_2a_text = "";
level.sessionadverthud_2b_text = "";
level.sessionadverthud_3a_text = "";
level.sessionadverthud_3b_text = "";
level.sessionadverthud_4a_text = "";
level.sessionadverthud_4b_text = "";
while(1)
{
wait(1);
showdebughud = getdvarintdefault("sessionAdvertShowDebugHud",0);
level.sessionadverthud_0_text = "Session is advertised";
if(level.sessionadvertstatus == 0)
{
level.sessionadverthud_0_text = "Session is not advertised";
}
if(!IsDefined(sessionadverthud_0) && showdebughud != 0)
{
host = gethostplayer();
if(!(IsDefined(host)))
{
continue;
}
sessionadverthud_0 = host sessionadvertismentcreatedebughud(0,0);
sessionadverthud_1a = host sessionadvertismentcreatedebughud(1,-20);
sessionadverthud_1b = host sessionadvertismentcreatedebughud(1,0);
sessionadverthud_2a = host sessionadvertismentcreatedebughud(2,-20);
sessionadverthud_2b = host sessionadvertismentcreatedebughud(2,0);
sessionadverthud_3a = host sessionadvertismentcreatedebughud(3,-20);
sessionadverthud_3b = host sessionadvertismentcreatedebughud(3,0);
sessionadverthud_4a = host sessionadvertismentcreatedebughud(4,-20);
sessionadverthud_4b = host sessionadvertismentcreatedebughud(4,0);
sessionadverthud_1a.color = VectorScale((0,1,0));
sessionadverthud_1b.color = VectorScale((0,1,0));
sessionadverthud_2a.color = VectorScale((0,1,0));
sessionadverthud_2b.color = VectorScale((0,1,0));
}
if(IsDefined(sessionadverthud_0))
{
if(showdebughud == 0)
{
sessionadverthud_0 destroy();
sessionadverthud_1a destroy();
sessionadverthud_1b destroy();
sessionadverthud_2a destroy();
sessionadverthud_2b destroy();
sessionadverthud_3a destroy();
sessionadverthud_3b destroy();
sessionadverthud_4a destroy();
sessionadverthud_4b destroy();
sessionadverthud_0 = undefined;
sessionadverthud_1a = undefined;
sessionadverthud_1b = undefined;
sessionadverthud_2a = undefined;
sessionadverthud_2b = undefined;
sessionadverthud_3a = undefined;
sessionadverthud_3b = undefined;
sessionadverthud_4a = undefined;
sessionadverthud_4b = undefined;
continue;
}
if(level.sessionadvertstatus == 1)
{
sessionadverthud_0.color = (1,1,1);
}
else
{
sessionadverthud_0.color = VectorScale((1,0,0));
}
sessionadverthud_0 settext(level.sessionadverthud_0_text);
if(level.sessionadverthud_1a_text != "")
{
sessionadverthud_1a settext(level.sessionadverthud_1a_text);
sessionadverthud_1b setvalue(level.sessionadverthud_1b_text);
}
if(level.sessionadverthud_2a_text != "")
{
sessionadverthud_2a settext(level.sessionadverthud_2a_text);
sessionadverthud_2b setvalue(level.sessionadverthud_2b_text);
}
if(level.sessionadverthud_3a_text != "")
{
sessionadverthud_3a settext(level.sessionadverthud_3a_text);
sessionadverthud_3b setvalue(level.sessionadverthud_3b_text);
}
if(level.sessionadverthud_4a_text != "")
{
sessionadverthud_4a settext(level.sessionadverthud_4a_text);
sessionadverthud_4b setvalue(level.sessionadverthud_4b_text);
}
}
}
#/
}