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

514 lines
10 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: scripts\mp\_stinger.gsc
* Game: Call of Duty: Infinite Warfare
* Platform: PC
* Function Count: 17
* Decompile Time: 624 ms
* Timestamp: 10/27/2023 12:21:41 AM
*******************************************************************/
//Function Number: 1
func_98D5()
{
self.var_10FA9 = undefined;
self.var_10FAA = undefined;
self.var_10FA6 = undefined;
self.var_10FA7 = undefined;
thread func_E273();
level.var_10FAB = [];
}
//Function Number: 2
func_E272()
{
if(!isdefined(self.var_10FAE))
{
return;
}
self.var_10FAE = undefined;
self notify("stop_javelin_locking_feedback");
self notify("stop_javelin_locked_feedback");
self notify("stinger_lock_lost");
self weaponlockfree();
self stoplocalsound("maaws_reticle_tracking");
self stoplocalsound("maaws_reticle_locked");
func_E12E(self.var_10FAA);
func_98D5();
}
//Function Number: 3
func_E273()
{
self endon("disconnect");
self notify("ResetStingerLockingOnDeath");
self endon("ResetStingerLockingOnDeath");
for(;;)
{
self waittill("death");
func_E272();
}
}
//Function Number: 4
func_B06A()
{
self endon("stop_javelin_locking_feedback");
for(;;)
{
if(isdefined(level.var_3F14) && isdefined(level.var_3F14.var_8712) && isdefined(self.var_10FAA) && self.var_10FAA == level.var_3F14.var_8712)
{
level.var_1541 playlocalsound("maaws_incoming_lp");
}
if(isdefined(level.var_1541) && isdefined(self.var_10FAA) && self.var_10FAA == level.var_1537.var_CC44)
{
level.var_1541 playlocalsound("maaws_incoming_lp");
}
self playlocalsound("maaws_reticle_tracking");
self playrumbleonentity("ac130_25mm_fire");
wait(0.6);
}
}
//Function Number: 5
func_B069()
{
self endon("stop_javelin_locked_feedback");
for(;;)
{
if(isdefined(level.var_3F14) && isdefined(level.var_3F14.var_8712) && isdefined(self.var_10FAA) && self.var_10FAA == level.var_3F14.var_8712)
{
level.var_1541 playlocalsound("maaws_incoming_lp");
}
if(isdefined(level.var_1541) && isdefined(self.var_10FAA) && self.var_10FAA == level.var_1537.var_CC44)
{
level.var_1541 playlocalsound("maaws_incoming_lp");
}
self playlocalsound("maaws_reticle_locked");
self playrumbleonentity("ac130_25mm_fire");
wait(0.25);
}
}
//Function Number: 6
func_103EC(param_00)
{
var_01 = 500;
if(param_00 stingtargstruct_isinlos())
{
self.var_10FA7 = 0;
return 1;
}
if(self.var_10FA7 == 0)
{
self.var_10FA7 = gettime();
}
var_02 = gettime() - self.var_10FA7;
if(var_02 >= var_01)
{
func_E272();
return 0;
}
return 1;
}
//Function Number: 7
func_10FAD()
{
if(!isplayer(self))
{
return;
}
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
func_98D5();
for(;;)
{
wait(0.05);
if(self method_822E() < 0.95)
{
func_E272();
continue;
}
var_00 = scripts\mp\_utility::func_821D(self getcurrentweapon());
if(var_00 != "iw7_lockon_mp")
{
func_E272();
continue;
}
self.var_10FAE = 1;
if(!isdefined(self.var_10FA9))
{
self.var_10FA9 = 0;
}
if(self.var_10FA9 == 0)
{
var_01 = scripts\mp\_weapons::func_AF2B(0);
if(var_01.size == 0)
{
continue;
}
var_01 = sortbydistance(var_01,self.origin);
var_02 = undefined;
var_03 = 0;
foreach(var_05 in var_01)
{
if(!isdefined(var_05))
{
continue;
}
var_02 = stingtargstruct_create(self,var_05);
var_02 stingtargstruct_getoffsets();
var_02 stingtargstruct_getorigins();
var_02 stingtargstruct_getinreticle();
if(var_02 stingtargstruct_isinreticle())
{
var_03 = 1;
break;
}
}
if(!var_03)
{
continue;
}
var_02 stingtargstruct_getinlos();
if(!var_02 stingtargstruct_isinlos())
{
continue;
}
self.var_10FAA = var_02.target;
self.var_10FA6 = gettime();
self.var_10FA9 = 1;
self.var_10FA7 = 0;
func_17D0(self.var_10FAA);
thread func_B06A();
}
if(self.var_10FA9 == 1)
{
if(!isdefined(self.var_10FAA))
{
func_E272();
continue;
}
var_02 = stingtargstruct_create(self,self.var_10FAA);
var_02 stingtargstruct_getoffsets();
var_02 stingtargstruct_getorigins();
var_02 stingtargstruct_getinreticle();
if(!var_02 stingtargstruct_isinreticle())
{
func_E272();
continue;
}
var_02 stingtargstruct_getinlos();
if(!func_103EC(var_02))
{
continue;
}
var_07 = gettime() - self.var_10FA6;
if(scripts\mp\_utility::_hasperk("specialty_fasterlockon"))
{
if(var_07 < 375)
{
continue;
}
}
else if(var_07 < 750)
{
continue;
}
self notify("stop_javelin_locking_feedback");
thread func_B069();
var_08 = undefined;
stinger_finalizelock(var_02);
self.var_10FA9 = 2;
}
if(self.var_10FA9 == 2)
{
if(!isdefined(self.var_10FAA))
{
func_E272();
continue;
}
var_02 = stingtargstruct_create(self,self.var_10FAA);
var_02 stingtargstruct_getoffsets();
var_02 stingtargstruct_getorigins();
var_02 stingtargstruct_getinreticle();
var_02 stingtargstruct_getinlos();
if(!func_103EC(var_02))
{
continue;
}
else
{
stinger_finalizelock(var_02);
}
if(!var_02 stingtargstruct_isinreticle())
{
func_E272();
continue;
}
}
}
}
//Function Number: 8
stinger_finalizelock(param_00)
{
var_01 = undefined;
if(isdefined(param_00.inlosid))
{
var_01 = param_00.var_C370[param_00.inlosid];
var_01 = (var_01[1],-1 * var_01[0],var_01[2]);
}
else
{
var_01 = (0,0,0);
}
self method_8402(self.var_10FAA,var_01);
}
//Function Number: 9
func_17D0(param_00)
{
if(!isdefined(param_00))
{
return;
}
var_01 = param_00;
if(isdefined(param_00.var_222) && !scripts\mp\_utility::func_9EF0(param_00))
{
var_01 = param_00.var_222;
}
var_01 setclientomnvar("ui_killstreak_missile_warn",1);
}
//Function Number: 10
func_E12E(param_00)
{
if(!isdefined(param_00))
{
return;
}
var_01 = param_00;
if(isdefined(param_00.var_222) && !scripts\mp\_utility::func_9EF0(param_00))
{
var_01 = param_00.var_222;
}
var_01 setclientomnvar("ui_killstreak_missile_warn",0);
}
//Function Number: 11
stingtargstruct_create(param_00,param_01)
{
var_02 = spawnstruct();
var_02.player = param_00;
var_02.target = param_01;
var_02.var_C370 = [];
var_02.origins = [];
var_02.inreticledistssqr = [];
var_02.inreticlesortedids = [];
var_02.inlosid = undefined;
var_02.useoldlosverification = 1;
return var_02;
}
//Function Number: 12
stingtargstruct_getoffsets()
{
self.var_C370 = [];
if(scripts\mp\_utility::isjackal(self.target))
{
self.var_C370[self.var_C370.size] = (0,0,125);
self.var_C370[self.var_C370.size] = (0,250,125);
self.var_C370[self.var_C370.size] = (0,-425,125);
self.var_C370[self.var_C370.size] = (-250,-215,140);
self.var_C370[self.var_C370.size] = (250,-215,140);
self.useoldlosverification = 0;
return;
}
if(scripts\mp\_utility::func_9F8C(self.target))
{
self.var_C370[self.var_C370.size] = (0,0,30);
self.var_C370[self.var_C370.size] = (0,0,5);
self.useoldlosverification = 0;
return;
}
if(scripts\mp\_utility::ismicroturret(self.target))
{
self.var_C370[self.var_C370.size] = (0,0,15);
self.useoldlosverification = 0;
return;
}
if(scripts\mp\_utility::isturret(self.target))
{
self.var_C370[self.var_C370.size] = (0,0,42);
self.var_C370[self.var_C370.size] = (0,0,5);
self.useoldlosverification = 0;
return;
}
if(scripts\mp\_utility::func_9F22(self.target))
{
self.var_C370[self.var_C370.size] = (0,0,70);
self.var_C370[self.var_C370.size] = (0,0,5);
self.useoldlosverification = 0;
return;
}
self.var_C370[self.var_C370.size] = (0,0,0);
}
//Function Number: 13
stingtargstruct_getorigins()
{
var_00 = self.target.origin;
var_01 = self.target.angles;
var_02 = anglestoforward(var_01);
var_03 = anglestoright(var_01);
var_04 = anglestoup(var_01);
for(var_05 = 0;var_05 < self.var_C370.size;var_05++)
{
var_06 = self.var_C370[var_05];
self.origins[var_05] = var_00 + var_03 * var_06[0] + var_02 * var_06[1] + var_04 * var_06[2];
}
}
//Function Number: 14
stingtargstruct_getinreticle()
{
foreach(var_01 in self.origins)
{
for(var_02 = 0;var_02 < self.origins.size;var_02++)
{
var_03 = self.player method_840B(self.origins[var_02],65);
if(isdefined(var_03))
{
var_04 = length2dsquared(var_03);
if(var_04 <= 7225)
{
self.inreticlesortedids[self.inreticlesortedids.size] = var_02;
self.inreticledistssqr[var_02] = var_04;
}
}
}
}
if(self.inreticlesortedids.size > 1)
{
for(var_02 = 0;var_02 < self.inreticlesortedids.size;var_02++)
{
for(var_06 = var_02 + 1;var_06 < self.inreticlesortedids.size;var_06++)
{
var_07 = self.inreticlesortedids[var_02];
var_08 = self.inreticlesortedids[var_06];
var_09 = self.inreticledistssqr[var_07];
var_0A = self.inreticledistssqr[var_08];
if(var_0A < var_09)
{
var_0B = var_07;
self.inreticlesortedids[var_02] = var_08;
self.inreticlesortedids[var_06] = var_0B;
}
}
}
}
}
//Function Number: 15
stingtargstruct_getinlos()
{
var_00 = self.player geteye();
var_01 = physics_createcontents(["physicscontents_solid","physicscontents_glass","physicscontents_sky","physicscontents_water","physicscontents_vehicle","physicscontents_item"]);
var_02 = [self.player,self.target];
var_03 = self.target getlinkedchildren();
if(isdefined(var_03) && var_03.size > 0)
{
var_02 = scripts\common\utility::array_combine(var_02,var_03);
}
if(!self.useoldlosverification)
{
for(var_04 = 0;var_04 < self.inreticlesortedids.size;var_04++)
{
var_05 = self.inreticlesortedids[var_04];
var_06 = self.origins[var_05];
var_07 = function_0287(var_00,var_06,var_01,var_02,0,"physicsquery_closest",1);
if(!isdefined(var_07) || var_07.size == 0)
{
self.inlosid = var_05;
return;
}
}
return;
}
var_08 = scripts\common\trace::func_DCED(var_00,self.origins[0],var_02,var_01,0);
if(var_08["fraction"] == 1)
{
self.inlosid = 0;
return;
}
var_09 = self.target method_8159(1,0,0);
var_08 = scripts\common\trace::func_DCED(var_00,var_09,var_02,var_01,0);
if(var_08["fraction"] == 1)
{
self.inlosid = 0;
return;
}
var_0A = self.target method_8159(-1,0,0);
var_08 = scripts\common\trace::func_DCED(var_00,var_0A,var_02,var_01,0);
if(var_08["fraction"] == 1)
{
self.inlosid = 0;
return;
}
}
//Function Number: 16
stingtargstruct_isinreticle()
{
return self.inreticlesortedids.size > 0;
}
//Function Number: 17
stingtargstruct_isinlos()
{
return isdefined(self.inlosid);
}