Files
IL-GSC/IW/PC/ALL/scripts/mp/_spectating.gsc
2023-10-27 03:49:01 -04:00

562 lines
11 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: scripts\mp\_spectating.gsc
* Game: Call of Duty: Infinite Warfare
* Platform: PC
* Function Count: 20
* Decompile Time: 799 ms
* Timestamp: 10/27/2023 12:21:38 AM
*******************************************************************/
//Function Number: 1
init()
{
level.var_10978["allies"] = spawnstruct();
level.var_10978["axis"] = spawnstruct();
level thread func_C56E();
if(getdvarint("cg_mlg_static_cameras",0) != 0)
{
level thread func_7F6C();
}
}
//Function Number: 2
func_49F0(param_00,param_01)
{
precacheshader(param_00);
var_02 = spawn("script_model",(0,0,0));
var_02 setmodel("tag_origin");
var_02.angles = (0,0,0);
return var_02;
}
//Function Number: 3
func_F780(param_00,param_01)
{
var_02 = param_00;
if(var_02 >= 4)
{
var_02 = var_02 - 4;
}
var_03 = tolower(getdvar("mapname"));
var_04 = tablelookup(param_01,0,var_03,var_02 * 2 + 1);
if(var_04 != "")
{
var_05 = param_00 + 1;
if(param_00 >= 5)
{
var_05 = var_05 - 4;
}
level.var_37C3[param_00] = func_49F0("compass_icon_codcaster_cam",1);
level.var_C215[param_00] = func_49F0("compass_icon_codcaster_num" + var_05,0);
var_06 = tablelookup(param_01,0,var_03,var_02 * 2 + 2);
level.var_37C8[param_00] = func_7E16(var_04);
level.var_37C1[param_00] = func_7E16(var_06);
level.camerahighestindex = param_00;
}
}
//Function Number: 4
func_7F6C()
{
while(!isdefined(level.objidpool))
{
wait(0.05);
}
var_00 = "mp/CameraPositions";
var_01 = var_00 + "_" + level.gametype + ".csv";
var_00 = var_00 + ".csv";
level.var_37C3 = [];
level.var_C215 = [];
for(var_02 = 0;var_02 < 4;var_02++)
{
func_F780(var_02,var_00);
}
for(var_02 = 4;var_02 < 8;var_02++)
{
func_F780(var_02,var_01);
}
}
//Function Number: 5
func_7E16(param_00)
{
var_01 = strtok(param_00," ");
var_02 = (0,0,0);
if(isdefined(var_01[0]) && isdefined(var_01[1]) && isdefined(var_01[2]))
{
var_02 = (int(var_01[0]),int(var_01[1]),int(var_01[2]));
}
return var_02;
}
//Function Number: 6
func_C56E()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread func_C541();
var_00 thread func_C540();
var_00 thread func_C5A1();
var_00 thread func_C531();
var_00 thread func_C5A2();
}
}
//Function Number: 7
func_C541()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
func_F857();
}
}
//Function Number: 8
func_C540()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_spectators");
func_F857();
self setclientomnvar("ui_callout_area_id",-1);
if(self ismlgspectator() || isdefined(self.pers["mlgSpectator"]) && self.pers["mlgSpectator"])
{
self method_830E(1);
self setclientomnvar("ui_use_mlg_hud",1);
self method_85B1(0);
thread updatemlgspectator();
thread autoattachtoplayer();
}
}
}
//Function Number: 9
func_C5A1()
{
self endon("disconnect");
for(;;)
{
self waittill("spectating_cycle");
var_00 = self method_815D();
if(self ismlgspectator() || isdefined(var_00))
{
var_01 = level.var_377C.var_2138[var_00.var_3779];
self setclientomnvar("ui_callout_area_id",var_01);
if(level.gametype == "ball")
{
scripts\mp\gametypes\ball::func_2796(self);
}
}
}
}
//Function Number: 10
func_C5A2()
{
self endon("disconnect");
for(;;)
{
self waittill("spectating_mlg_camera");
var_00 = self method_858E();
if(self ismlgspectator() || isdefined(self.pers["mlgSpectator"]) && self.pers["mlgSpectator"])
{
if(isdefined(var_00))
{
self setclientomnvar("ui_callout_area_id",-1);
continue;
}
}
}
}
//Function Number: 11
func_C531()
{
self endon("disconnect");
for(;;)
{
self waittill("luinotifyserver",var_00,var_01);
if(var_00 == "mlg_view_change")
{
scripts\mp\_playerlogic::func_E27B();
}
}
}
//Function Number: 12
func_12F21()
{
level endon("game_ended");
for(var_00 = 0;var_00 < level.players.size;var_00++)
{
level.players[var_00] func_F857();
}
}
//Function Number: 13
linkcameratoball(param_00)
{
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
for(;;)
{
if(!isdefined(self.codcasterballcamfollow))
{
break;
}
if(self method_85AF())
{
wait(0.05);
continue;
}
self cameralinkto(self.codcasterballcamfollow,"tag_origin",1);
var_01 = level.codcasterball.origin;
var_02 = (0,0,30);
var_02 = var_02 + -80 * param_00;
var_03 = var_01 + var_02;
self.codcasterballcamfollow moveto(var_03,10.5,5.2,5.2);
self.codcasterballcamfollow.angles = vectortoangles(param_00);
break;
}
}
//Function Number: 14
autoattachtoplayer()
{
self endon("disconnect");
self endon("game_ended");
self endon("joined_team");
self endon("joined_spectator");
self endon("spectating_mlg_camera");
for(;;)
{
wait(1);
var_00 = undefined;
if(!self ismlgspectator() || self method_85AF())
{
break;
}
if(level.players.size > 1)
{
var_01 = scripts\mp\_utility::func_81A0("allies",0);
if(var_01.size > 0)
{
var_00 = scripts\mp\_utility::getlowestclientnum(var_01,1);
}
if(!isdefined(var_00))
{
var_01 = scripts\mp\_utility::func_81A0("axis",0);
if(var_01.size > 0)
{
var_00 = scripts\mp\_utility::getlowestclientnum(var_01,1);
}
}
if(isdefined(var_00))
{
self method_85B0(var_00);
break;
}
}
}
}
//Function Number: 15
updatemlgspectator()
{
self endon("joined_team");
self endon("disconnect");
self.iswatchingcodcasterball = 0;
self.codcasterballcamfollow = undefined;
self.spectatingplayerbeforeballcam = undefined;
for(;;)
{
var_00 = isdefined(level.codcasterball);
if(!var_00 || !self method_85B2())
{
if(self.iswatchingcodcasterball)
{
self.iswatchingcodcasterball = 0;
self.codcasterballcamfollow unlink();
self.codcasterballcamfollow delete();
self.codcasterballcamfollow = undefined;
if(!self method_85AF() && isdefined(self.spectatingplayerbeforeballcam))
{
self method_85B0(self.spectatingplayerbeforeballcam getentitynumber());
}
else
{
self cameraunlink();
}
self.spectatingplayerbeforeballcam = undefined;
}
}
else if(!self.iswatchingcodcasterball)
{
if(self method_85B2())
{
var_01 = self method_815D();
if(isdefined(var_01) && isdefined(level.codcasterballowner) && var_01 == level.codcasterballowner)
{
self.iswatchingcodcasterball = 1;
self.spectatingplayerbeforeballcam = var_01;
var_02 = vectornormalize(level.codcasterballinitialforcevector);
var_03 = var_01 method_816E();
self.codcasterballcamfollow = spawn("script_model",var_03);
self.codcasterballcamfollow.angles = vectortoangles(var_02);
self.codcasterballcamfollow setmodel("tag_origin");
function_0321(self getentitynumber());
self cameraunlink();
thread linkcameratoball(var_02);
}
}
}
else if(isdefined(self.codcasterballcamfollow))
{
var_04 = level.codcasterball.origin;
var_05 = self.codcasterballcamfollow.origin;
var_06 = distance2d(var_04,var_05);
var_07 = var_04 - var_05;
var_08 = (var_07[0],var_07[1],0);
var_08 = vectornormalize(var_08);
var_09 = var_04;
var_0A = (0,0,30);
var_0A = var_0A + -80 * var_08;
var_0B = var_09 + var_0A;
if(var_06 > 600)
{
self.codcasterballcamfollow.origin = var_0B;
}
else
{
self.codcasterballcamfollow moveto(var_0B,0.5,0,0.2);
}
self.codcasterballcamfollow rotateto(vectortoangles(var_07),0.15,0.05,0.05);
}
wait(0.05);
}
}
//Function Number: 16
func_F857()
{
if(level.var_7669 && gettime() - level.var_766B >= 2000)
{
if(level.multiteambased)
{
for(var_00 = 0;var_00 < level.teamnamelist.size;var_00++)
{
self allowspectateteam(level.teamnamelist[var_00],0);
}
}
else
{
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
}
self allowspectateteam("freelook",0);
self allowspectateteam("none",1);
return;
}
var_01 = scripts\mp\_tweakables::func_81E7("game","spectatetype");
if(self ismlgspectator())
{
var_01 = 2;
}
if(scripts\mp\_utility::func_2DD9())
{
var_01 = 1;
}
var_02 = self.sessionteam;
switch(var_01)
{
case 0:
func_F6C5();
break;
case 1:
self notify("waitForGameStartSpectate");
if(var_02 != "spectator")
{
func_F87A(var_02);
}
else if(isdefined(self.pers["last_team"]))
{
var_02 = self.pers["last_team"];
func_F87A(var_02);
}
else if(scripts\mp\_utility::func_766C("prematch_done"))
{
if(randomint(2))
{
var_02 = "allies";
}
else
{
var_02 = "axis";
}
func_F87A(var_02);
}
else
{
thread waitforgamestartspectate();
return;
}
break;
case 2:
func_F71A();
break;
case 3:
if(var_02 == "spectator")
{
func_F71A();
}
else
{
func_F87A(var_02);
}
break;
}
if(isdefined(var_02) && var_02 == "axis" || var_02 == "allies")
{
if(isdefined(level.var_10978[var_02].var_1C93))
{
self allowspectateteam("freelook",1);
}
if(isdefined(level.var_10978[var_02].var_1C90))
{
self allowspectateteam(scripts\mp\_utility::getotherteam(var_02),1);
}
}
}
//Function Number: 17
waitforgamestartspectate()
{
self endon("waitForGameStartSpectate");
level waittill("prematch_over");
thread func_F857();
}
//Function Number: 18
func_F6C5()
{
if(level.multiteambased)
{
for(var_00 = 0;var_00 < level.teamnamelist.size;var_00++)
{
self allowspectateteam(level.teamnamelist[var_00],0);
}
}
else
{
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
}
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
}
//Function Number: 19
func_F87A(param_00)
{
if(!level.teambased)
{
self allowspectateteam("allies",1);
self allowspectateteam("axis",1);
self allowspectateteam("none",1);
self allowspectateteam("freelook",0);
return;
}
if(isdefined(param_00) && param_00 == "allies" || param_00 == "axis" && !level.multiteambased)
{
self allowspectateteam(param_00,1);
self allowspectateteam(scripts\mp\_utility::getotherteam(param_00),0);
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
return;
}
if(isdefined(param_00) && issubstr(param_00,"team_") && level.multiteambased)
{
for(var_01 = 0;var_01 < level.teamnamelist.size;var_01++)
{
if(param_00 == level.teamnamelist[var_01])
{
self allowspectateteam(level.teamnamelist[var_01],1);
continue;
}
self allowspectateteam(level.teamnamelist[var_01],0);
}
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
return;
}
if(level.multiteambased)
{
for(var_01 = 0;var_01 < level.teamnamelist.size;var_01++)
{
self allowspectateteam(level.teamnamelist[var_01],0);
}
}
else
{
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
}
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
}
//Function Number: 20
func_F71A()
{
if(level.multiteambased)
{
for(var_00 = 0;var_00 < level.teamnamelist.size;var_00++)
{
self allowspectateteam(level.teamnamelist[var_00],1);
}
}
else
{
self allowspectateteam("allies",1);
self allowspectateteam("axis",1);
}
self allowspectateteam("freelook",1);
self allowspectateteam("none",1);
}