mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
282 lines
7.3 KiB
Plaintext
282 lines
7.3 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: _helicopter_ai.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 10
|
|
* Decompile Time: 177 ms
|
|
* Timestamp: 4/22/2024 2:21:19 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
evasive_think(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
while(param_00.health > 0)
|
|
{
|
|
param_00 waittill("missile_lock",var_01);
|
|
var_02 = evasive_createmaneuvers(param_00,"random");
|
|
evasive_startmaneuvers(param_00,var_02);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 2
|
|
evasive_createmaneuvers(param_00,param_01)
|
|
{
|
|
switch(param_01)
|
|
{
|
|
case "strafe_left_right":
|
|
param_00 evasive_addpoint(3000,-1500,500,"average");
|
|
param_00 evasive_addpoint(6000,3000,-700,"average");
|
|
param_00 evasive_addpoint(3000,-1500,200,"average");
|
|
break;
|
|
|
|
case "strafe_right_left":
|
|
param_00 evasive_addpoint(3000,1500,500,"average");
|
|
param_00 evasive_addpoint(6000,-3000,-700,"average");
|
|
param_00 evasive_addpoint(3000,1500,200,"average");
|
|
break;
|
|
|
|
case "360_clockwise":
|
|
param_00 evasive_addpoint(1500,1500,200,"none");
|
|
param_00 evasive_addpoint(0,1500,200,"none");
|
|
param_00 evasive_addpoint(-1500,1500,200,"none");
|
|
param_00 evasive_addpoint(-1500,0,0,"none");
|
|
param_00 evasive_addpoint(-1000,-1000,-200,"none");
|
|
param_00 evasive_addpoint(0,-1000,-200,"none");
|
|
param_00 evasive_addpoint(1000,-1000,-200,"none");
|
|
break;
|
|
|
|
case "360_counter_clockwise":
|
|
param_00 evasive_addpoint(1500,-1500,200,"none");
|
|
param_00 evasive_addpoint(0,-1500,200,"none");
|
|
param_00 evasive_addpoint(-1500,-1500,200,"none");
|
|
param_00 evasive_addpoint(-1500,0,0,"none");
|
|
param_00 evasive_addpoint(-1000,1000,-200,"none");
|
|
param_00 evasive_addpoint(0,1000,-200,"none");
|
|
param_00 evasive_addpoint(1000,1000,-200,"none");
|
|
break;
|
|
|
|
case "random":
|
|
var_02 = [];
|
|
var_02[0] = "strafe_left_right";
|
|
var_02[1] = "strafe_right_left";
|
|
var_02[2] = "360_clockwise";
|
|
var_02[3] = "360_counter_clockwise";
|
|
return evasive_createmaneuvers(param_00,var_02[randomint(var_02.size)]);
|
|
}
|
|
|
|
var_03 = evasive_getallpoints(param_01);
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 3
|
|
evasive_startmaneuvers(param_00,param_01)
|
|
{
|
|
param_00 notify("taking_evasive_actions");
|
|
param_00 endon("taking_evasive_actions");
|
|
param_00 endon("death");
|
|
param_00 notify("evasive_action_done");
|
|
thread evasive_endmaneuvers(param_00);
|
|
if(getdvar("cobrapilot_debug") == "1")
|
|
{
|
|
param_00 evasive_drawpoints(param_01);
|
|
}
|
|
|
|
param_00 setneargoalnotifydist(1500);
|
|
param_00 vehicle_setspeed(100,30,30);
|
|
var_02 = param_00.angles[1];
|
|
for(var_03 = 1;var_03 < param_01.size;var_03++)
|
|
{
|
|
if(isdefined(param_01[var_03 + 1]))
|
|
{
|
|
var_04 = vectortoangles(param_01[var_03 + 1]["pos"] - param_01[var_03]["pos"]);
|
|
}
|
|
else
|
|
{
|
|
var_04 = (0,var_02,0);
|
|
}
|
|
|
|
var_05 = var_04[1];
|
|
if(param_01[var_03]["goalYawMethod"] == "average")
|
|
{
|
|
var_05 = var_04[1] + var_02 / 2;
|
|
}
|
|
else if(param_01[var_03]["goalYawMethod"] == "forward")
|
|
{
|
|
var_05 = param_00.angles[1];
|
|
}
|
|
|
|
if(getdvar("cobrapilot_debug") == "1")
|
|
{
|
|
thread maps\_utility::draw_line_until_notify(param_01[var_03]["pos"],param_01[var_03]["pos"] + anglestoforward((0,var_05,0)) * 250,1,1,0.2,param_00,"evasive_action_done");
|
|
}
|
|
|
|
param_00 settargetyaw(var_05);
|
|
param_00 thread maps\_vehicle_code::setvehgoalpos_wrap(param_01[var_03]["pos"],0);
|
|
param_00 waittill("near_goal");
|
|
}
|
|
|
|
param_00 notify("evasive_action_done");
|
|
param_00 thread maps\_utility::vehicle_resumepath();
|
|
}
|
|
|
|
//Function Number: 4
|
|
evasive_endmaneuvers(param_00)
|
|
{
|
|
param_00 notify("end_maneuvers");
|
|
param_00 endon("end_maneuvers");
|
|
param_00 endon("evasive_action_done");
|
|
param_00 endon("death");
|
|
param_00 waittill("missile_lock_ended");
|
|
param_00 thread maps\_utility::vehicle_resumepath();
|
|
}
|
|
|
|
//Function Number: 5
|
|
evasive_addpoint(param_00,param_01,param_02,param_03)
|
|
{
|
|
if(!isdefined(self.evasive_points))
|
|
{
|
|
self.evasive_points = [];
|
|
self.evasive_points[0]["pos"] = self.origin;
|
|
self.evasive_points[0]["ang"] = (0,self.angles[1],0);
|
|
}
|
|
|
|
var_04 = self.evasive_points.size;
|
|
if(!isdefined(param_03))
|
|
{
|
|
param_03 = "none";
|
|
}
|
|
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = 0;
|
|
}
|
|
|
|
self.evasive_points[var_04]["forward"] = param_00;
|
|
self.evasive_points[var_04]["side"] = param_01;
|
|
self.evasive_points[var_04]["up"] = param_02;
|
|
var_05 = anglestoforward(self.evasive_points[0]["ang"]);
|
|
var_06 = anglestoright(self.evasive_points[0]["ang"]);
|
|
self.evasive_points[var_04]["pos"] = self.evasive_points[var_04 - 1]["pos"] + var_05 * self.evasive_points[var_04]["forward"] + var_06 * self.evasive_points[var_04]["side"] + (0,0,param_02);
|
|
self.evasive_points[var_04]["goalYawMethod"] = param_03;
|
|
}
|
|
|
|
//Function Number: 6
|
|
evasive_getallpoints(param_00)
|
|
{
|
|
var_01 = param_00.evasive_points;
|
|
param_00.evasive_points = undefined;
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 7
|
|
evasive_drawpoints(param_00)
|
|
{
|
|
for(var_01 = 1;var_01 < param_00.size;var_01++)
|
|
{
|
|
thread maps\_utility::draw_line_until_notify(param_00[var_01 - 1]["pos"],param_00[var_01]["pos"],1,0.2,0.2,self,"evasive_action_done");
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
wingman_think(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
level.playervehicle endon("death");
|
|
var_01 = 2200;
|
|
var_02 = 1500;
|
|
var_03 = 0;
|
|
var_04 = 1;
|
|
var_05 = 1.2;
|
|
var_06 = 50;
|
|
var_07 = 60;
|
|
var_08 = 2000;
|
|
var_09 = getplayerhelispeed();
|
|
var_0A = 0;
|
|
var_0B = gettime();
|
|
var_0C = wingman_getgoalpos(var_01,var_02,var_03);
|
|
param_00 vehicle_setspeed(30,20,20);
|
|
param_00 settargetyaw(level.playervehicle.angles[1]);
|
|
param_00 setvehgoalpos(var_0C,1);
|
|
for(;;)
|
|
{
|
|
var_0C = wingman_getgoalpos(var_01,var_02,var_03);
|
|
if(getdvar("cobrapilot_debug") == "1")
|
|
{
|
|
thread common_scripts\utility::draw_line_for_time(level.playervehicle.origin,var_0C,0,1,0,var_04);
|
|
thread common_scripts\utility::draw_line_for_time(level.playervehicle.origin,param_00.origin,0,0,1,var_04);
|
|
thread common_scripts\utility::draw_line_for_time(param_00.origin,var_0C,1,1,0,var_04);
|
|
}
|
|
|
|
var_0D = gettime();
|
|
if(var_0D >= var_0B + var_08)
|
|
{
|
|
var_0B = var_0D;
|
|
var_0A = var_09;
|
|
var_09 = getplayerhelispeed();
|
|
}
|
|
|
|
var_0E = 0;
|
|
var_0F = 0;
|
|
if(var_0A > 20)
|
|
{
|
|
var_0F = var_0A;
|
|
var_0E = 1;
|
|
}
|
|
else if(var_0A <= 20 && getplayerhelispeed() > 20)
|
|
{
|
|
var_0F = getplayerhelispeed();
|
|
var_0E = 1;
|
|
}
|
|
|
|
if(var_0E && var_0F > 0)
|
|
{
|
|
var_0F = var_0F * var_05;
|
|
var_10 = var_06;
|
|
var_11 = var_07;
|
|
if(var_10 >= var_0F / 2)
|
|
{
|
|
var_10 = var_0F / 2;
|
|
}
|
|
|
|
if(var_11 >= var_0F / 2)
|
|
{
|
|
var_11 = var_0F / 2;
|
|
}
|
|
|
|
param_00 vehicle_setspeed(var_0F,var_10,var_11);
|
|
param_00 settargetyaw(level.playervehicle.angles[1]);
|
|
var_12 = 0;
|
|
if(getplayerhelispeed() <= 30)
|
|
{
|
|
var_12 = 1;
|
|
}
|
|
|
|
if(getdvar("cobrapilot_debug") == "1")
|
|
{
|
|
iprintln("wingman speed: " + var_0F + " : " + var_12);
|
|
}
|
|
|
|
param_00 setvehgoalpos(var_0C,var_12);
|
|
}
|
|
|
|
wait(var_04);
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
wingman_getgoalpos(param_00,param_01,param_02)
|
|
{
|
|
var_03 = anglestoforward(common_scripts\utility::flat_angle(level.playervehicle.angles));
|
|
var_04 = anglestoright(common_scripts\utility::flat_angle(level.playervehicle.angles));
|
|
var_05 = level.playervehicle.origin + var_03 * param_00 + var_04 * param_01 + (0,0,param_02);
|
|
return var_05;
|
|
}
|
|
|
|
//Function Number: 10
|
|
getplayerhelispeed()
|
|
{
|
|
return level.playervehicle vehicle_getspeed();
|
|
} |