Files
IL-GSC/MW3/PC/MP/maps/mp/_javelin.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

509 lines
9.0 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_javelin.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 15
* Decompile Time: 260 ms
* Timestamp: 10/27/2023 2:15:03 AM
*******************************************************************/
//Function Number: 1
initjavelinusage()
{
self.javelinstage = undefined;
self.javelinpoints = undefined;
self.javelinnormals = undefined;
self.javelinlockmisses = undefined;
self.javelintargetpoint = undefined;
self.javelintargetnormal = undefined;
self.javelinlockstarttime = undefined;
}
//Function Number: 2
resetjavelinlocking()
{
if(!isdefined(self.javelinuseentered))
{
return;
}
self.javelinuseentered = undefined;
self notify("stop_lockon_sound");
self weaponlockfree();
self weaponlocktargettooclose(0);
self weaponlocknoclearance(0);
self.currentlylocking = 0;
self.currentlylocked = 0;
self.javelintarget = undefined;
self stoplocalsound("javelin_clu_lock");
self stoplocalsound("javelin_clu_aquiring_lock");
initjavelinusage();
}
//Function Number: 3
eyetraceforward()
{
var_00 = self geteye();
var_01 = self getplayerangles();
var_02 = anglestoforward(var_01);
var_03 = var_00 + var_02 * 15000;
var_04 = bullettrace(var_00,var_03,0,undefined);
if(var_04["surfacetype"] == "none")
{
return undefined;
}
if(var_04["surfacetype"] == "default")
{
return undefined;
}
var_05 = var_04["entity"];
if(isdefined(var_05))
{
if(var_05 == level.ac130.planemodel)
{
return undefined;
}
}
var_06 = [];
return var_7B;
}
//Function Number: 4
lockmissesreset()
{
self.javelinlockmisses = undefined;
}
//Function Number: 5
lockmissesincr()
{
if(!isdefined(self.javelinlockmisses))
{
self.javelinlockmisses = 1;
return;
}
self.javelinlockmisses++;
}
//Function Number: 6
lockmissespassedthreshold()
{
var_00 = 4;
if(isdefined(self.javelinlockmisses) && self.javelinlockmisses >= var_00)
{
return 1;
}
return 0;
}
//Function Number: 7
targetpointtooclose(param_00)
{
var_01 = 1100;
var_02 = distance(self.origin,param_00);
if(var_02 < var_01)
{
return 1;
}
return 0;
}
//Function Number: 8
looplocalseeksound(param_00,param_01)
{
self endon("death");
self endon("disconnect");
self endon("stop_lockon_sound");
for(;;)
{
self playlocalsound(param_00);
wait param_01;
}
}
//Function Number: 9
topattackpasses(param_00,param_01)
{
var_02 = param_00 + param_01 * 10;
var_03 = var_02 + (0,0,2000);
var_04 = bullettrace(var_02,var_03,0,undefined);
if(sighttracepassed(var_02,var_03,0,undefined))
{
return 1;
}
return 0;
}
//Function Number: 10
javelinusageloop()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
var_00 = 1150;
var_01 = 25;
var_02 = 100;
var_03 = 400;
var_04 = 12;
var_05 = 0;
var_06 = 0;
self.javelintarget = undefined;
initjavelinusage();
for(;;)
{
wait 0.05;
var_07 = 0;
if(getdvar("missileDebugDraw") == "1")
{
var_07 = 1;
}
var_08 = 0;
if(getdvar("missileDebugText") == "1")
{
var_08 = 1;
}
var_09 = self getcurrentweapon();
if(!issubstr(var_09,"javelin") || maps\mp\_utility::isemped())
{
resetjavelinlocking();
continue;
}
if(self playerads() < 0.95)
{
var_06 = gettime();
resetjavelinlocking();
continue;
}
self.javelinuseentered = 1;
if(!isdefined(self.javelinstage))
{
self.javelinstage = 1;
}
if(self.javelinstage == 1)
{
var_0A = maps\mp\_stinger::gettargetlist();
if(var_0A.size != 0)
{
var_0B = [];
foreach(var_0D in var_0A)
{
var_0E = self worldpointinreticle_circle(var_0D.origin,65,40);
if(var_0E)
{
var_0B[var_0B.size] = var_0D;
}
}
if(var_0B.size != 0)
{
var_10 = sortbydistance(var_0B,self.origin);
if(!vehiclelocksighttest(var_10[0]))
{
continue;
}
if(var_08)
{
}
self.javelintarget = var_10[0];
if(!isdefined(self.javelinlockstarttime))
{
self.javelinlockstarttime = gettime();
}
self.javelinstage = 2;
self.javelinlostsightlinetime = 0;
javelinlockvehicle(var_00);
self.javelinstage = 1;
continue;
}
}
if(lockmissespassedthreshold())
{
resetjavelinlocking();
continue;
}
var_11 = gettime() - var_06;
if(var_11 < var_02)
{
continue;
}
var_11 = gettime() - var_05;
if(var_11 < var_01)
{
continue;
}
var_05 = gettime();
var_15 = eyetraceforward();
if(!isdefined(var_15))
{
lockmissesincr();
continue;
}
if(targetpointtooclose(var_15[0]))
{
self weaponlocktargettooclose(1);
continue;
}
else
{
self weaponlocktargettooclose(0);
}
if(isdefined(self.javelinpoints))
{
var_16 = averagepoint(self.javelinpoints);
var_17 = distance(var_16,var_15[0]);
if(var_17 > var_03)
{
lockmissesincr();
continue;
}
}
else
{
self.javelinpoints = [];
self.javelinnormals = [];
}
self.javelinpoints[self.javelinpoints.size] = var_15[0];
self.javelinnormals[self.javelinnormals.size] = var_15[1];
lockmissesreset();
if(self.javelinpoints.size < var_04)
{
continue;
}
self.javelintargetpoint = averagepoint(self.javelinpoints);
self.javelintargetnormal = averagenormal(self.javelinnormals);
self.javelinlockmisses = undefined;
self.javelinpoints = undefined;
self.javelinnormals = undefined;
self.javelinlockstarttime = gettime();
self weaponlockstart(self.javelintargetpoint);
thread looplocalseeksound("javelin_clu_aquiring_lock",0.6);
self.javelinstage = 2;
}
if(self.javelinstage == 2)
{
var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45);
if(!var_0E)
{
resetjavelinlocking();
continue;
}
if(targetpointtooclose(self.javelintargetpoint))
{
self weaponlocktargettooclose(1);
}
else
{
self weaponlocktargettooclose(0);
}
var_11 = gettime() - self.javelinlockstarttime;
if(var_11 < var_00)
{
continue;
}
self weaponlockfinalize(self.javelintargetpoint,(0,0,0),1);
self notify("stop_lockon_sound");
self playlocalsound("javelin_clu_lock");
self.javelinstage = 3;
}
if(self.javelinstage == 3)
{
var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45);
if(!var_0E)
{
resetjavelinlocking();
continue;
}
if(targetpointtooclose(self.javelintargetpoint))
{
self weaponlocktargettooclose(1);
}
else
{
self weaponlocktargettooclose(0);
}
continue;
}
}
}
//Function Number: 11
debugsightline(param_00,param_01,param_02)
{
}
//Function Number: 12
vehiclelocksighttest(param_00)
{
var_01 = self geteye();
var_02 = param_00 getpointinbounds(0,0,0);
var_03 = sighttracepassed(var_01,var_02,0,param_00);
debugsightline(var_01,var_02,var_03);
if(var_03)
{
return 1;
}
var_04 = param_00 getpointinbounds(1,0,0);
var_03 = sighttracepassed(var_01,var_04,0,param_00);
debugsightline(var_01,var_04,var_03);
if(var_03)
{
return 1;
}
var_05 = param_00 getpointinbounds(-1,0,0);
var_03 = sighttracepassed(var_01,var_05,0,param_00);
debugsightline(var_01,var_05,var_03);
if(var_03)
{
return 1;
}
return 0;
}
//Function Number: 13
javelinlockvehicle(param_00)
{
if(self.javelinstage == 2)
{
self weaponlockstart(self.javelintarget);
if(!stillvalidjavelinlock(self.javelintarget))
{
resetjavelinlocking();
self.javelinlockstarttime = undefined;
return;
}
var_01 = softsighttest();
if(!var_01)
{
self.javelinlockstarttime = undefined;
return;
}
if(!isdefined(self.currentlylocking) || !self.currentlylocking)
{
thread looplocalseeksound("javelin_clu_aquiring_lock",0.6);
self.currentlylocking = 1;
}
var_02 = gettime() - self.javelinlockstarttime;
if(maps\mp\_utility::_hasperk("specialty_fasterlockon"))
{
if(var_02 < param_00 * 0.5)
{
return;
}
}
else if(var_02 < param_00)
{
return;
}
if(isplayer(self.javelintarget))
{
self weaponlockfinalize(self.javelintarget,(0,0,64),0);
}
else
{
self weaponlockfinalize(self.javelintarget,(0,0,0),0);
}
self notify("stop_lockon_sound");
if(!isdefined(self.currentlylocked) || !self.currentlylocked)
{
self playlocalsound("javelin_clu_lock");
self.currentlylocked = 1;
}
self.javelinstage = 3;
}
if(self.javelinstage == 3)
{
var_01 = softsighttest();
if(!var_01)
{
return;
}
if(!stillvalidjavelinlock(self.javelintarget))
{
resetjavelinlocking();
return;
}
}
}
//Function Number: 14
stillvalidjavelinlock(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(!self worldpointinreticle_circle(param_00.origin,65,85))
{
return 0;
}
return 1;
}
//Function Number: 15
softsighttest()
{
var_00 = 500;
if(vehiclelocksighttest(self.javelintarget))
{
self.javelinlostsightlinetime = 0;
return 1;
}
if(self.javelinlostsightlinetime == 0)
{
self.javelinlostsightlinetime = gettime();
}
var_01 = gettime() - self.javelinlostsightlinetime;
if(var_01 >= var_00)
{
resetjavelinlocking();
return 0;
}
return 1;
}