mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-07-01 03:47:51 -05:00
356 lines
6.9 KiB
Plaintext
356 lines
6.9 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\_mg_penetration.gsc
|
|
* Game: Call of Duty: Modern Warfare 3
|
|
* Platform: PC
|
|
* Function Count: 16
|
|
* Decompile Time: 203 ms
|
|
* Timestamp: 10/27/2023 2:25:06 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
gunner_think(param_00)
|
|
{
|
|
self endon("death");
|
|
self notify("end_mg_behavior");
|
|
self endon("end_mg_behavior");
|
|
self.can_fire_turret = 1;
|
|
self.wants_to_fire = 0;
|
|
if(!maps\_mgturret::use_the_turret(param_00))
|
|
{
|
|
self notify("continue_cover_script");
|
|
return;
|
|
}
|
|
|
|
self.last_enemy_sighting_position = undefined;
|
|
thread record_enemy_sightings();
|
|
var_01 = anglestoforward(param_00.angles);
|
|
var_02 = spawn("script_origin",(0,0,0));
|
|
thread target_ent_cleanup(var_02);
|
|
var_02.origin = param_00.origin + var_01 * 500;
|
|
if(isdefined(self.last_enemy_sighting_position))
|
|
{
|
|
var_02.origin = self.last_enemy_sighting_position;
|
|
}
|
|
|
|
param_00 settargetentity(var_02);
|
|
var_03 = undefined;
|
|
for(;;)
|
|
{
|
|
if(!isalive(self.current_enemy))
|
|
{
|
|
stop_firing();
|
|
self waittill("new_enemy");
|
|
}
|
|
|
|
start_firing();
|
|
shoot_enemy_until_he_hides_then_shoot_wall(var_02);
|
|
if(!isalive(self.current_enemy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(self cansee(self.current_enemy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
self waittill("saw_enemy");
|
|
}
|
|
}
|
|
|
|
//Function Number: 2
|
|
target_ent_cleanup(param_00)
|
|
{
|
|
common_scripts\utility::waittill_either("death","end_mg_behavior");
|
|
param_00 delete();
|
|
}
|
|
|
|
//Function Number: 3
|
|
shoot_enemy_until_he_hides_then_shoot_wall(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("new_enemy");
|
|
self.current_enemy endon("death");
|
|
var_01 = self.current_enemy;
|
|
while(self cansee(var_01))
|
|
{
|
|
var_02 = vectortoangles(var_01 geteye() - param_00.origin);
|
|
var_02 = anglestoforward(var_02);
|
|
param_00 moveto(param_00.origin + var_02 * 12,0.1);
|
|
wait 0.1;
|
|
}
|
|
|
|
if(isplayer(var_01))
|
|
{
|
|
self endon("saw_enemy");
|
|
var_03 = var_01 geteye();
|
|
var_02 = vectortoangles(var_03 - param_00.origin);
|
|
var_02 = anglestoforward(var_02);
|
|
var_04 = 150;
|
|
var_05 = distance(param_00.origin,self.last_enemy_sighting_position) / var_04;
|
|
if(var_05 > 0)
|
|
{
|
|
param_00 moveto(self.last_enemy_sighting_position,var_05);
|
|
wait var_05;
|
|
}
|
|
|
|
var_06 = param_00.origin + var_02 * 180;
|
|
var_07 = get_suppress_point(self geteye(),param_00.origin,var_06);
|
|
if(!isdefined(var_07))
|
|
{
|
|
var_07 = param_00.origin;
|
|
}
|
|
|
|
param_00 moveto(param_00.origin + var_02 * 80 + (0,0,randomfloatrange(15,50) * -1),3,1,1);
|
|
wait 3.5;
|
|
param_00 moveto(var_07 + var_02 * -20,3,1,1);
|
|
}
|
|
|
|
wait randomfloatrange(2.5,4);
|
|
stop_firing();
|
|
}
|
|
|
|
//Function Number: 4
|
|
set_firing(param_00)
|
|
{
|
|
if(param_00)
|
|
{
|
|
self.can_fire_turret = 1;
|
|
if(self.wants_to_fire)
|
|
{
|
|
self.turret notify("startfiring");
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
self.can_fire_turret = 0;
|
|
self.turret notify("stopfiring");
|
|
}
|
|
|
|
//Function Number: 5
|
|
stop_firing()
|
|
{
|
|
self.wants_to_fire = 0;
|
|
self.turret notify("stopfiring");
|
|
}
|
|
|
|
//Function Number: 6
|
|
start_firing()
|
|
{
|
|
self.wants_to_fire = 1;
|
|
if(self.can_fire_turret)
|
|
{
|
|
self.turret notify("startfiring");
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
create_mg_team()
|
|
{
|
|
if(isdefined(level.mg_gunner_team))
|
|
{
|
|
level.mg_gunner_team[level.mg_gunner_team.size] = self;
|
|
return;
|
|
}
|
|
|
|
level.mg_gunner_team = [];
|
|
level.mg_gunner_team[level.mg_gunner_team.size] = self;
|
|
waittillframeend;
|
|
var_00 = spawnstruct();
|
|
common_scripts\utility::array_thread(level.mg_gunner_team,::mg_gunner_death_notify,var_00);
|
|
var_01 = level.mg_gunner_team;
|
|
level.mg_gunner_team = undefined;
|
|
var_00 waittill("gunner_died");
|
|
for(var_02 = 0;var_02 < var_01.size;var_02++)
|
|
{
|
|
if(!isalive(var_01[var_02]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01[var_02] notify("stop_using_built_in_burst_fire");
|
|
var_01[var_02] thread solo_fires();
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
mg_gunner_death_notify(param_00)
|
|
{
|
|
self waittill("death");
|
|
param_00 notify("gunner_died");
|
|
}
|
|
|
|
//Function Number: 9
|
|
mgteam_take_turns_firing(param_00)
|
|
{
|
|
wait 1;
|
|
level notify("new_mg_firing_team" + param_00[0].script_noteworthy);
|
|
level endon("new_mg_firing_team" + param_00[0].script_noteworthy);
|
|
for(;;)
|
|
{
|
|
dual_firing(param_00);
|
|
solo_firing(param_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
solo_firing(param_00)
|
|
{
|
|
var_01 = undefined;
|
|
for(var_02 = 0;var_02 < param_00.size;var_02++)
|
|
{
|
|
if(!isalive(param_00[var_02]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 = param_00[var_02];
|
|
break;
|
|
}
|
|
|
|
if(!isdefined(var_01))
|
|
{
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
solo_fires()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self.turret startfiring();
|
|
wait randomfloatrange(0.3,0.7);
|
|
self.turret stopfiring();
|
|
wait randomfloatrange(0.1,1.1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
dual_firing(param_00)
|
|
{
|
|
for(var_01 = 0;var_01 < param_00.size;var_01++)
|
|
{
|
|
param_00[var_01] endon("death");
|
|
}
|
|
|
|
var_02 = 0;
|
|
var_03 = 1;
|
|
for(;;)
|
|
{
|
|
if(isalive(param_00[var_02]))
|
|
{
|
|
param_00[var_02] set_firing(1);
|
|
}
|
|
|
|
if(isalive(param_00[var_03]))
|
|
{
|
|
param_00[var_03] set_firing(0);
|
|
}
|
|
|
|
var_04 = var_02;
|
|
var_02 = var_03;
|
|
var_03 = var_04;
|
|
wait randomfloatrange(2.3,3.5);
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
spotted_an_enemy(param_00,param_01)
|
|
{
|
|
start_firing();
|
|
self endon("death");
|
|
self endon("new_enemy");
|
|
param_01 endon("death");
|
|
while(self cansee(param_01))
|
|
{
|
|
var_02 = vectortoangles(param_01 geteye() - param_00.origin);
|
|
var_02 = anglestoforward(var_02);
|
|
param_00 moveto(param_00.origin + var_02 * 10,0.2);
|
|
wait 0.2;
|
|
}
|
|
|
|
var_02 = vectortoangles(param_01 geteye() - param_00.origin);
|
|
var_02 = anglestoforward(var_02);
|
|
var_03 = 150;
|
|
var_04 = distance(param_00.origin,self.last_enemy_sighting_position) / var_03;
|
|
param_00 moveto(self.last_enemy_sighting_position,var_04);
|
|
wait var_04;
|
|
var_05 = param_00.origin;
|
|
param_00 moveto(param_00.origin + var_02 * 80 + (0,0,-25),3,1,1);
|
|
wait 3.5;
|
|
param_00 moveto(var_05 + var_02 * -20,3,1,1);
|
|
wait 1;
|
|
stop_firing();
|
|
}
|
|
|
|
//Function Number: 14
|
|
get_suppress_point(param_00,param_01,param_02)
|
|
{
|
|
var_03 = distance(param_01,param_02) * 0.05;
|
|
if(var_03 < 5)
|
|
{
|
|
var_03 = 5;
|
|
}
|
|
|
|
if(var_03 > 20)
|
|
{
|
|
var_03 = 20;
|
|
}
|
|
|
|
var_04 = param_02 - param_01;
|
|
var_04 = (var_04[0] / var_03,var_04[1] / var_03,var_04[2] / var_03);
|
|
var_05 = (0,0,0);
|
|
var_06 = undefined;
|
|
for(var_07 = 0;var_07 < var_03 + 2;var_07++)
|
|
{
|
|
var_08 = bullettrace(param_00,param_01 + var_05,0,undefined);
|
|
if(var_08["fraction"] < 1)
|
|
{
|
|
var_06 = var_08["position"];
|
|
break;
|
|
}
|
|
|
|
var_05 = var_05 + var_04;
|
|
}
|
|
|
|
return var_06;
|
|
}
|
|
|
|
//Function Number: 15
|
|
record_enemy_sightings()
|
|
{
|
|
self endon("death");
|
|
self endon("end_mg_behavior");
|
|
self.current_enemy = undefined;
|
|
for(;;)
|
|
{
|
|
record_sighting();
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
record_sighting()
|
|
{
|
|
if(!isalive(self.enemy))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!self cansee(self.enemy))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.last_enemy_sighting_position = self.enemy geteye();
|
|
self notify("saw_enemy");
|
|
if(!isalive(self.current_enemy) || self.current_enemy != self.enemy)
|
|
{
|
|
self.current_enemy = self.enemy;
|
|
self notify("new_enemy");
|
|
}
|
|
} |