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

347 lines
7.2 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_mgturret.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 11
* Decompile Time: 5 ms
* Timestamp: 10/28/2023 12:10:59 AM
*******************************************************************/
#include common_scripts/utility;
#include maps/mp/_utility;
//Function Number: 1
main()
{
if(GetDvar(#"7C9A91DF") == "")
{
setdvar("mgTurret","off");
}
level.magic_distance = 24;
turretinfos = getentarray("turretInfo","targetname");
for(index = 0;index < turretinfos.size;index++)
{
turretinfos[index] delete();
}
}
//Function Number: 2
set_difficulty(difficulty)
{
init_turret_difficulty_settings();
turrets = getentarray("misc_turret","classname");
for(index = 0;index < turrets.size;index++)
{
if(IsDefined(turrets[index].script_skilloverride))
{
switch(turrets[index].script_skilloverride)
{
case "easy":
difficulty = "easy";
break;
case "medium":
difficulty = "medium";
break;
case "hard":
difficulty = "hard";
break;
case "fu":
difficulty = "fu";
break;
default:
break;
}
}
turret_set_difficulty(turrets[index],difficulty);
}
}
//Function Number: 3
init_turret_difficulty_settings()
{
level.mgturretsettings["easy"]["convergenceTime"] = 2.5;
level.mgturretsettings["easy"]["suppressionTime"] = 3;
level.mgturretsettings["easy"]["accuracy"] = 0.38;
level.mgturretsettings["easy"]["aiSpread"] = 2;
level.mgturretsettings["easy"]["playerSpread"] = 0.5;
level.mgturretsettings["medium"]["convergenceTime"] = 1.5;
level.mgturretsettings["medium"]["suppressionTime"] = 3;
level.mgturretsettings["medium"]["accuracy"] = 0.38;
level.mgturretsettings["medium"]["aiSpread"] = 2;
level.mgturretsettings["medium"]["playerSpread"] = 0.5;
level.mgturretsettings["hard"]["convergenceTime"] = 0.8;
level.mgturretsettings["hard"]["suppressionTime"] = 3;
level.mgturretsettings["hard"]["accuracy"] = 0.38;
level.mgturretsettings["hard"]["aiSpread"] = 2;
level.mgturretsettings["hard"]["playerSpread"] = 0.5;
level.mgturretsettings["fu"]["convergenceTime"] = 0.4;
level.mgturretsettings["fu"]["suppressionTime"] = 3;
level.mgturretsettings["fu"]["accuracy"] = 0.38;
level.mgturretsettings["fu"]["aiSpread"] = 2;
level.mgturretsettings["fu"]["playerSpread"] = 0.5;
}
//Function Number: 4
turret_set_difficulty(turret,difficulty)
{
turret.convergencetime = level.mgturretsettings[difficulty]["convergenceTime"];
turret.suppressiontime = level.mgturretsettings[difficulty]["suppressionTime"];
turret.accuracy = level.mgturretsettings[difficulty]["accuracy"];
turret.aispread = level.mgturretsettings[difficulty]["aiSpread"];
turret.playerspread = level.mgturretsettings[difficulty]["playerSpread"];
}
//Function Number: 5
turret_suppression_fire(targets)
{
self endon("death");
self endon("stop_suppression_fire");
if(!(IsDefined(self.suppresionfire)))
{
self.suppresionfire = 1;
}
for(;;)
{
while(self.suppresionfire)
{
self settargetentity(targets[randomint(targets.size)]);
wait(2 + randomfloat(2));
}
self cleartargetentity();
while(!(self.suppresionfire))
{
wait(1);
}
}
}
//Function Number: 6
burst_fire_settings(setting)
{
if(setting == "delay")
{
return 0.2;
}
else if(setting == "delay_range")
{
return 0.5;
}
else if(setting == "burst")
{
return 0.5;
}
else if(setting == "burst_range")
{
return 4;
}
}
//Function Number: 7
burst_fire(turret,manual_target)
{
turret endon("death");
turret endon("stopfiring");
self endon("stop_using_built_in_burst_fire");
if(IsDefined(turret.script_delay_min))
{
turret_delay = turret.script_delay_min;
}
else
{
turret_delay = burst_fire_settings("delay");
}
if(IsDefined(turret.script_delay_max))
{
turret_delay_range = turret.script_delay_max - turret_delay;
}
else
{
turret_delay_range = burst_fire_settings("delay_range");
}
if(IsDefined(turret.script_burst_min))
{
turret_burst = turret.script_burst_min;
}
else
{
turret_burst = burst_fire_settings("burst");
}
if(IsDefined(turret.script_burst_max))
{
turret_burst_range = turret.script_burst_max - turret_burst;
}
else
{
turret_burst_range = burst_fire_settings("burst_range");
}
while(1)
{
turret startfiring();
if(IsDefined(manual_target))
{
turret thread random_spread(manual_target);
}
turret do_shoot();
wait(turret_burst + randomfloat(turret_burst_range));
turret stopshootturret();
turret stopfiring();
wait(turret_delay + randomfloat(turret_delay_range));
}
}
//Function Number: 8
burst_fire_unmanned()
{
self notify("stop_burst_fire_unmanned");
self endon("stop_burst_fire_unmanned");
self endon("death");
self endon("remote_start");
level endon("game_ended");
if(IsDefined(self.controlled) && self.controlled)
{
return;
}
if(IsDefined(self.script_delay_min))
{
turret_delay = self.script_delay_min;
}
else
{
turret_delay = burst_fire_settings("delay");
}
if(IsDefined(self.script_delay_max))
{
turret_delay_range = self.script_delay_max - turret_delay;
}
else
{
turret_delay_range = burst_fire_settings("delay_range");
}
if(IsDefined(self.script_burst_min))
{
turret_burst = self.script_burst_min;
}
else
{
turret_burst = burst_fire_settings("burst");
}
if(IsDefined(self.script_burst_max))
{
turret_burst_range = self.script_burst_max - turret_burst;
}
else
{
turret_burst_range = burst_fire_settings("burst_range");
}
pauseuntiltime = GetTime();
turretstate = "start";
self.script_shooting = 0;
for(;;)
{
if(IsDefined(self.manual_targets))
{
self cleartargetentity();
self settargetentity(self.manual_targets[randomint(self.manual_targets.size)]);
}
duration = pauseuntiltime - GetTime() * 0.001;
if(self isfiringturret() && duration <= 0)
{
if(turretstate != "fire")
{
turretstate = "fire";
self playsound("mpl_turret_alert");
self thread do_shoot();
self.script_shooting = 1;
}
duration = turret_burst + randomfloat(turret_burst_range);
self thread turret_timer(duration);
self waittill("turretstatechange");
self.script_shooting = 0;
duration = turret_delay + randomfloat(turret_delay_range);
pauseuntiltime = GetTime() + int(duration * 1000);
continue;
}
if(turretstate != "aim")
{
turretstate = "aim";
}
self thread turret_timer(duration);
self waittill("turretstatechange");
}
}
//Function Number: 9
do_shoot()
{
self endon("death");
self endon("turretstatechange");
for(;;)
{
self shootturret();
wait(0.112);
}
}
//Function Number: 10
turret_timer(duration)
{
if(duration <= 0)
{
return;
}
self endon("turretstatechange");
wait(duration);
if(IsDefined(self))
{
self notify("turretstatechange");
}
}
//Function Number: 11
random_spread(ent)
{
self endon("death");
self notify("stop random_spread");
self endon("stop random_spread");
self endon("stopfiring");
self settargetentity(ent);
self.manual_target = ent;
while(1)
{
if(isplayer(ent))
{
ent.origin = self.manual_target getorigin();
}
else
{
ent.origin = self.manual_target.origin;
}
ent.origin = ent.origin + (20 - randomfloat(40),20 - randomfloat(40),20 - randomfloat(60));
wait(0.2);
}
}