Files
IL-GSC/MW3/PC/SP/1558.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

1973 lines
38 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: 1558.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 82
* Decompile Time: 90 ms
* Timestamp: 10/27/2023 2:21:00 AM
*******************************************************************/
//Function Number: 1
main()
{
func_3C66();
func_3C6A();
func_3C6C();
if(common_scripts\utility::issp_towerdefense())
{
func_3C6B();
func_3C6D();
}
}
//Function Number: 2
func_3C66()
{
precachestring(&"SENTRY_MOVE");
precachestring(&"SENTRY_PICKUP");
precachestring(&"SENTRY_PLACE");
precachestring(&"SENTRY_CANNOT_PLACE");
precachemodel("tag_laser");
level.placed_sentry = [];
level.var_3C68 = [];
level.var_3C69 = [];
level.var_3C69["easy"] = [];
level.var_3C69["easy"]["convergencePitchTime"] = 2.5;
level.var_3C69["easy"]["convergenceYawTime"] = 2.5;
level.var_3C69["easy"]["suppressionTime"] = 3;
level.var_3C69["easy"]["aiSpread"] = 2;
level.var_3C69["easy"]["playerSpread"] = 0.5;
level._effect["sentry_turret_overheat_smoke_sp"] = loadfx("smoke/sentry_turret_overheat_smoke_sp");
level._effect["sentry_turret_explode"] = loadfx("explosions/sentry_gun_explosion");
level._effect["sentry_turret_explode_smoke"] = loadfx("smoke/car_damage_blacksmoke");
}
//Function Number: 3
func_3C6A()
{
precachemodel("sentry_minigun");
precachemodel("sentry_minigun_obj");
precachemodel("sentry_minigun_obj_red");
precachemodel("sentry_minigun_folded_obj");
precachemodel("sentry_minigun_destroyed");
if(common_scripts\utility::issp() && !is_specialop())
{
precacheturret("sentry_minigun");
precacheturret("sentry_minigun_enemy");
}
else if(is_specialop())
{
precacheturret("sentry_minigun_so");
}
else
{
precacheturret("sentry_minigun_mp");
}
level.var_3C68["sentry_minigun"] = spawnstruct();
func_3C7D("sentry_minigun");
func_3C6E("sentry_minigun");
common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_minigun","classname"),::func_3C7F,"sentry_minigun");
}
//Function Number: 4
func_3C6B()
{
precachemodel("sentry_minigun_weak");
precachemodel("sentry_minigun_weak_destroyed");
precachemodel("sentry_minigun_weak_obj");
precachemodel("sentry_minigun_weak_obj_red");
precachemodel("sentry_minigun_weak_folded_obj");
precacheturret("sentry_minigun_weak");
level.var_3C68["sentry_minigun_weak"] = spawnstruct();
func_3C7E("sentry_minigun_weak");
func_3C6E("sentry_minigun_weak");
common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_minigun_weak","classname"),::func_3C7F,"sentry_minigun_weak");
}
//Function Number: 5
func_3C6C()
{
precachemodel("sentry_grenade_launcher_upgrade");
precachemodel("sentry_grenade_launcher_upgrade_destroyed");
precachemodel("sentry_grenade_launcher_upgrade_obj");
precachemodel("sentry_grenade_launcher_upgrade_obj_red");
precachemodel("sentry_grenade_launcher_upgrade_folded_obj");
if(common_scripts\utility::issp() && !is_specialop())
{
precacheturret("sentry_gun");
}
else if(is_specialop())
{
precacheturret("sentry_gun_so");
}
else
{
precacheturret("sentry_gun_mp");
}
level.var_3C68["sentry_gun"] = spawnstruct();
func_3C6F("sentry_gun");
func_3C6E("sentry_gun");
common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_gun","classname"),::func_3C7F,"sentry_gun");
}
//Function Number: 6
func_3C6D()
{
precachemodel("sentry_grenade_launcher");
precachemodel("sentry_grenade_launcher_destroyed");
precachemodel("sentry_grenade_launcher_obj");
precachemodel("sentry_grenade_launcher_obj_red");
precachemodel("sentry_grenade_launcher_folded_obj");
precacheturret("sentry_gun_weak");
level.var_3C68["sentry_gun_weak"] = spawnstruct();
func_3C7C("sentry_gun_weak");
func_3C6E("sentry_gun_weak");
common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_gun_weak","classname"),::func_3C7F,"sentry_gun_weak");
}
//Function Number: 7
func_3C6E(param_00)
{
var_01 = getentarray(param_00,"targetname");
foreach(var_03 in var_01)
{
var_03 func_3C80(undefined,param_00);
}
}
//Function Number: 8
func_3C6F(param_00)
{
level.var_3C68[param_00].ammo = 100;
level.var_3C68[param_00].var_3C70 = 1;
level.var_3C68[param_00].var_3C71 = 1;
level.var_3C68[param_00].var_3C72 = 2;
level.var_3C68[param_00].var_3C73 = 1;
level.var_3C68[param_00].var_3C74 = 1.5;
level.var_3C68[param_00].var_3C75 = 1;
level.var_3C68[param_00].model = "sentry_grenade_launcher_upgrade";
level.var_3C68[param_00].var_3C76 = "sentry_grenade_launcher_upgrade_destroyed";
level.var_3C68[param_00].var_3C77 = "sentry_grenade_launcher_upgrade_folded";
level.var_3C68[param_00].var_3C78 = "sentry_grenade_launcher_upgrade_folded_obj";
level.var_3C68[param_00].var_3C79 = "sentry_grenade_launcher_upgrade_obj";
level.var_3C68[param_00].var_3C7A = "sentry_grenade_launcher_upgrade_obj_red";
level.var_3C68[param_00].health = 350;
if(common_scripts\utility::issp() && !is_specialop())
{
level.var_3C68[param_00].var_3C7B = 15;
level.var_3C68[param_00].weaponinfo = "sentry_gun";
level.var_3C68[param_00].targetname = "sentry_gun";
return;
}
if(is_specialop())
{
level.var_3C68[param_00].ammo = 50;
level.var_3C68[param_00].var_3C7B = 8;
level.var_3C68[param_00].weaponinfo = "sentry_gun_so";
level.var_3C68[param_00].targetname = "sentry_gun_so";
level.var_3C68[param_00].health = 1200;
return;
}
level.var_3C68[param_00].var_3C7B = 5;
level.var_3C68[param_00].weaponinfo = "sentry_gun_mp";
level.var_3C68[param_00].targetname = "sentry_gun_mp";
}
//Function Number: 9
func_3C7C(param_00)
{
level.var_3C68[param_00].var_3C70 = 0;
level.var_3C68[param_00].var_3C71 = 1;
level.var_3C68[param_00].var_3C72 = 2;
level.var_3C68[param_00].var_3C73 = 1;
level.var_3C68[param_00].var_3C74 = 1.5;
level.var_3C68[param_00].var_3C75 = 1;
level.var_3C68[param_00].model = "sentry_grenade_launcher";
level.var_3C68[param_00].var_3C76 = "sentry_grenade_launcher_destroyed";
level.var_3C68[param_00].var_3C77 = "sentry_grenade_launcher_folded";
level.var_3C68[param_00].var_3C78 = "sentry_grenade_launcher_folded_obj";
level.var_3C68[param_00].var_3C79 = "sentry_grenade_launcher_obj";
level.var_3C68[param_00].var_3C7A = "sentry_grenade_launcher_obj_red";
level.var_3C68[param_00].health = int(175);
if(common_scripts\utility::issp())
{
level.var_3C68[param_00].var_3C7B = 15;
level.var_3C68[param_00].weaponinfo = "sentry_gun_weak";
level.var_3C68[param_00].targetname = "sentry_gun_weak";
return;
}
level.var_3C68[param_00].var_3C7B = 5;
level.var_3C68[param_00].weaponinfo = "sentry_gun_mp";
level.var_3C68[param_00].targetname = "sentry_gun_mp";
}
//Function Number: 10
func_3C7D(param_00)
{
level.var_3C68[param_00].ammo = 1000;
level.var_3C68[param_00].var_3C70 = 1;
level.var_3C68[param_00].var_3C71 = 20;
level.var_3C68[param_00].var_3C72 = 60;
level.var_3C68[param_00].var_3C73 = 0.5;
level.var_3C68[param_00].var_3C74 = 1.3;
level.var_3C68[param_00].var_3C75 = 0;
level.var_3C68[param_00].model = "sentry_minigun";
level.var_3C68[param_00].var_3C76 = "sentry_minigun_destroyed";
level.var_3C68[param_00].var_3C77 = "sentry_minigun_folded";
level.var_3C68[param_00].var_3C78 = "sentry_minigun_folded_obj";
level.var_3C68[param_00].var_3C79 = "sentry_minigun_obj";
level.var_3C68[param_00].var_3C7A = "sentry_minigun_obj_red";
level.var_3C68[param_00].health = 190;
if(common_scripts\utility::issp() && !is_specialop())
{
level.var_3C68[param_00].var_3C7B = 15;
level.var_3C68[param_00].anim_loop = %minigun_spin_loop;
level.var_3C68[param_00].weaponinfo = "sentry_minigun";
level.var_3C68[param_00].targetname = "sentry_minigun";
return;
}
if(is_specialop())
{
level.var_3C68[param_00].ammo = 800;
level.var_3C68[param_00].var_3C7B = 8;
level.var_3C68[param_00].anim_loop = %minigun_spin_loop;
level.var_3C68[param_00].weaponinfo = "sentry_minigun_so";
level.var_3C68[param_00].targetname = "sentry_minigun_so";
level.var_3C68[param_00].health = 800;
return;
}
level.var_3C68[param_00].var_3C7B = 5;
level.var_3C68[param_00].weaponinfo = "sentry_minigun_mp";
level.var_3C68[param_00].targetname = "sentry_minigun_mp";
}
//Function Number: 11
func_3C7E(param_00)
{
level.var_3C68[param_00].ammo = 800;
level.var_3C68[param_00].var_3C70 = 0;
level.var_3C68[param_00].var_3C71 = 10;
level.var_3C68[param_00].var_3C72 = 30;
level.var_3C68[param_00].var_3C73 = 1;
level.var_3C68[param_00].var_3C74 = 2.6;
level.var_3C68[param_00].var_3C75 = 0;
level.var_3C68[param_00].model = "sentry_minigun_weak";
level.var_3C68[param_00].var_3C76 = "sentry_minigun_weak_destroyed";
level.var_3C68[param_00].var_3C77 = "sentry_minigun_weak_folded";
level.var_3C68[param_00].var_3C78 = "sentry_minigun_weak_folded_obj";
level.var_3C68[param_00].var_3C79 = "sentry_minigun_weak_obj";
level.var_3C68[param_00].var_3C7A = "sentry_minigun_weak_obj_red";
level.var_3C68[param_00].health = int(95);
if(common_scripts\utility::issp())
{
level.var_3C68[param_00].var_3C7B = 15;
level.var_3C68[param_00].anim_loop = %minigun_spin_loop;
level.var_3C68[param_00].weaponinfo = "sentry_minigun_weak";
level.var_3C68[param_00].targetname = "sentry_minigun_weak";
return;
}
level.var_3C68[param_00].var_3C7B = 5;
level.var_3C68[param_00].weaponinfo = "sentry_minigun_mp";
level.var_3C68[param_00].targetname = "sentry_minigun_mp";
}
//Function Number: 12
func_3C7F(param_00)
{
self setmodel(self.model);
self.sentrytype = param_00;
self setcursorhint("HINT_NOICON");
self sethintstring(&"SENTRY_PICKUP");
self makeusable();
thread func_3CBA(param_00);
}
//Function Number: 13
givesentry(param_00)
{
self.last_sentry = param_00;
thread func_3CAE(param_00);
}
//Function Number: 14
func_3C80(param_00,param_01,param_02)
{
if(common_scripts\utility::issp())
{
level.var_3C81 = 1;
level.var_3C82 = 1;
if(!isdefined(level.var_3C83))
{
level.var_3C83 = 5;
}
if(!isdefined(level.var_3C84))
{
level.var_3C84 = 2;
}
}
if(!isdefined(param_00))
{
if(!isdefined(self.script_team))
{
self.script_team = "axis";
}
param_00 = self.script_team;
}
self setturretmodechangewait(1);
func_3CBF();
self maketurretinoperable();
func_3CC1();
self setcandamage(1);
self setdefaultdroppitch(-89);
if(common_scripts\utility::issp() || level.teambased || is_survival())
{
self setturretteam(param_00);
}
self.sentrytype = param_01;
self.issentrygun = 1;
self.var_3C85 = 350;
self.var_3C86 = 400;
self.var_3C87 = 60;
self.var_3C88 = level.var_3C68[self.sentrytype].ammo;
if(common_scripts\utility::issp())
{
if(self.weaponinfo == "sentry_gun")
{
self.bullet_armor = 2000;
}
else
{
self.bullet_armor = 1200;
}
}
else if(self.weaponinfo == "sentry_gun")
{
self.bullet_armor = 300;
}
else
{
self.bullet_armor = 300;
}
if(common_scripts\utility::issp())
{
self [[ level.makeentitysentient_func ]](param_00);
common_scripts\utility::self_func("seanimtree",#animtree);
if(isdefined(self.script_team) && self.script_team == "axis")
{
thread func_3CBD();
}
}
self.health = level.var_3C68[param_01].health;
func_3C90();
thread func_3CAD();
thread func_3C96();
thread func_3C89();
if(!common_scripts\utility::issp())
{
thread func_3CD4();
thread func_3CD3();
}
thread func_3CBB();
if(getdvarint("survival_chaos") != 1)
{
thread func_3C8F();
}
if(!isdefined(param_02))
{
if(common_scripts\utility::issp())
{
param_02 = level.player;
}
}
func_3CC8(param_02);
thread func_3CCA(param_02);
if(!isdefined(self.damage_functions))
{
self.damage_functions = [];
}
}
//Function Number: 15
func_3C89()
{
self endon("deleted");
self waittill("death",var_00,var_01,var_02);
level notify("a_sentry_died");
if(isdefined(var_00) && isdefined(var_00.team) && self.team != var_00.team && isdefined(level.stat_track_kill_func))
{
var_00 [[ level.stat_track_kill_func ]](self,var_01,var_02);
}
if(!common_scripts\utility::issp())
{
removefromturretlist();
thread func_3CC7();
}
thread func_3CA1();
thread func_3CD7();
self setmodel(level.var_3C68[self.sentrytype].var_3C76);
func_3CC3();
if(common_scripts\utility::issp())
{
self [[ level.freeentitysentient_func ]]();
}
if(!common_scripts\utility::issp() && isdefined(var_00) && isplayer(var_00))
{
if(isdefined(self.owner))
{
self.owner thread [[ level.leaderdialogonplayer_func ]]("destroy_sentry","sentry_status");
}
var_00 thread [[ level.onxpevent ]]("kill");
}
self setsentrycarrier(undefined);
self.carrier = undefined;
self setcandamage(1);
self.ignoreme = 1;
self makeunusable();
self setsentryowner(undefined);
self setturretminimapvisible(0);
self playsound("sentry_explode");
playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim");
if(common_scripts\utility::issp() && !isdefined(self.var_3C8A) || !self.var_3C8A)
{
self setcontents(0);
}
wait 1.5;
self playsound("sentry_explode_smoke");
var_03 = level.var_3C68[self.sentrytype].var_3C7B * 1000;
var_04 = gettime();
for(;;)
{
playfxontag(common_scripts\utility::getfx("sentry_turret_explode_smoke"),self,"tag_aim");
wait 0.4;
if(gettime() - var_04 > var_03)
{
break;
}
}
level.placed_sentry = common_scripts\utility::array_remove(level.placed_sentry,self);
if(!common_scripts\utility::issp() || getdvar("specialops") == "1")
{
thread func_3CCE();
}
}
//Function Number: 16
func_3C8B(param_00)
{
level endon("game_ended");
self endon("sentry_placement_finished");
self waittill("death");
if(common_scripts\utility::issp())
{
param_00 notify("death");
return;
}
if(!self.var_3C8C)
{
param_00 func_3CC7();
param_00 notify("deleted");
waittillframeend;
param_00 delete();
return;
}
if(!common_scripts\utility::issp())
{
thread func_3C94(param_00);
}
}
//Function Number: 17
func_3C8D(param_00)
{
level endon("game_ended");
self endon("sentry_placement_finished");
self waittill("disconnect");
param_00 notify("death");
}
//Function Number: 18
func_3C8E(param_00)
{
level endon("game_ended");
self endon("sentry_placement_finished");
self waittill("sentry_placement_canceled");
param_00 func_3CC7();
func_3CB9();
param_00 notify("death");
}
//Function Number: 19
func_3C8F()
{
level endon("game_ended");
self endon("death");
if(self.health <= 0)
{
return;
}
self makeusable();
for(;;)
{
self waittill("trigger",var_00);
if(isdefined(var_00.placingsentry))
{
continue;
}
if(!common_scripts\utility::issp())
{
}
break;
}
var_00 thread func_3C8E(self);
var_00 thread func_3C8B(self);
var_00 thread func_3C8D(self);
var_00 thread func_3CB1(self);
if(!common_scripts\utility::issp() && !isalive(var_00))
{
return;
}
if(!common_scripts\utility::issp())
{
func_3CC6();
}
func_3CC3();
var_00.placingsentry = self;
self setsentrycarrier(var_00);
self.carrier = var_00;
self.ignoreme = 1;
self setcandamage(0);
self makeunusable();
var_00 common_scripts\utility::_disableweapon();
func_3CC0();
func_3C92();
var_00 thread func_3C93(self);
var_00 thread func_3CB5(self);
}
//Function Number: 20
func_3C90()
{
if(!common_scripts\utility::issp())
{
return;
}
self.var_3C91 = "" + gettime();
[[ level.badplace_cylinder_func ]](self.var_3C91,0,self.origin,32,128,self.team,"neutral");
}
//Function Number: 21
func_3C92()
{
if(!common_scripts\utility::issp())
{
return;
}
[[ level.badplace_delete_func ]](self.var_3C91);
self.var_3C91 = undefined;
}
//Function Number: 22
func_3C93(param_00)
{
level endon("game_ended");
param_00 endon("death");
param_00 endon("deleted");
self endon("death");
self endon("disconnect");
param_00 notify("sentry_move_started",self);
self.carrying_pickedup_sentry = 1;
for(;;)
{
func_3CBE(0);
func_3CBE(1);
func_3CB6(param_00);
if(self.var_3C8C)
{
break;
}
}
param_00 notify("sentry_move_finished",self);
self.carrying_pickedup_sentry = 0;
func_3C94(param_00);
}
//Function Number: 23
func_3C94(param_00)
{
if(!common_scripts\utility::issp())
{
self endon("death");
level endon("end_game");
}
self.placingsentry = undefined;
param_00 setsentrycarrier(undefined);
param_00.carrier = undefined;
param_00 setcandamage(1);
param_00.ignoreme = 0;
common_scripts\utility::_enableweapon();
param_00 func_3CBF();
param_00 setmodel(level.var_3C68[param_00.sentrytype].model);
param_00 func_3C90();
param_00 setcontents(param_00.var_3C95);
param_00 func_3CC8(self);
self notify("sentry_placement_finished",param_00);
param_00 notify("sentry_carried");
param_00.overheated = 0;
func_3CB9();
if(!common_scripts\utility::issp())
{
param_00 func_3CC5();
}
param_00 func_3CC1();
thread common_scripts\utility::play_sound_in_space("sentry_gun_plant",param_00.origin);
func_3CBE(0);
if(getdvarint("survival_chaos") != 1)
{
param_00 thread func_3C8F();
}
}
//Function Number: 24
func_3C96()
{
level endon("game_ended");
self endon("death");
thread func_3C97();
for(;;)
{
common_scripts\utility::waittill_either("turretstatechange","cooled");
if(self isfiringturret())
{
thread func_3C9D();
thread func_3CD6();
continue;
}
thread func_3CA1();
thread func_3CD7();
}
}
//Function Number: 25
func_3C97()
{
self endon("death");
if(self.sentrytype != "sentry_minigun")
{
return;
}
if(!isdefined(level.var_3C81))
{
return;
}
self.overheat = 0;
self.overheated = 0;
if(getdvarint("sentry_overheat_debug") == 1)
{
thread func_3C9A();
}
for(;;)
{
if(self.overheat >= level.var_3C83 * 10)
{
thread func_3C9B();
common_scripts\utility::waittill_either("cooled","sentry_carried");
}
if(self isfiringturret())
{
self.overheat = self.overheat + 1;
}
else if(self.overheat > 0)
{
self.overheat = self.overheat - 1;
}
wait 0.1 / level.var_3C81;
}
}
//Function Number: 26
func_3C99()
{
self endon("death");
while(self.overheated)
{
if(self.overheat > 0)
{
self.overheat = self.overheat - 1;
}
wait 0.1 / level.var_3C81;
}
}
//Function Number: 27
func_3C9A()
{
self endon("death");
for(;;)
{
var_00 = self.overheat / level.var_3C83 * 10;
var_01 = "[ ";
var_02 = " ]";
if(self.overheated)
{
var_01 = "{{{ ";
var_02 = " }}}";
}
wait 0.2;
}
}
//Function Number: 28
func_3C9B()
{
self endon("death");
self notify("overheated");
self.overheated = 1;
func_3CA1();
thread func_3C9C();
}
//Function Number: 29
func_3C9C()
{
self endon("death");
self endon("sentry_carried");
thread func_3C99();
wait level.var_3C84;
self notify("cooled");
self.overheat = 0;
self.overheated = 0;
}
//Function Number: 30
func_3C9D()
{
self endon("death");
level endon("game_ended");
if(level.var_3C68[self.sentrytype].var_3C75)
{
self waittill("turret_on_target");
}
if(isdefined(self.overheated) && self.overheated)
{
return;
}
thread func_3CA5();
self endon("stop_shooting");
self notify("shooting");
var_00 = weaponfiretime(self.weaponinfo);
for(;;)
{
func_3CA3();
var_01 = randomintrange(level.var_3C68[self.sentrytype].var_3C71,level.var_3C68[self.sentrytype].var_3C72);
for(var_02 = 0;var_02 < var_01;var_02++)
{
if(func_3CA0())
{
self shootturret();
}
self notify("bullet_fired");
wait var_00;
}
wait randomfloatrange(level.var_3C68[self.sentrytype].var_3C73,level.var_3C68[self.sentrytype].var_3C74);
}
}
//Function Number: 31
func_3C9E(param_00,param_01)
{
self notify("allowFireThread");
self endon("allowFireThread");
self endon("death");
self.var_3C9F = param_00;
if(isdefined(param_01) && !param_00)
{
wait param_01;
if(isdefined(self))
{
thread func_3C9E(1);
}
}
}
//Function Number: 32
func_3CA0()
{
if(!isdefined(self.var_3C9F))
{
return 1;
}
return self.var_3C9F;
}
//Function Number: 33
func_3CA1()
{
thread func_3CA9();
self notify("stop_shooting");
thread func_3CA2();
}
//Function Number: 34
func_3CA2()
{
self endon("shooting");
self endon("deleted");
wait randomfloatrange(0,1);
var_00 = 6000;
var_01 = gettime();
if(isdefined(self))
{
self playsound("sentry_steam");
}
while(isdefined(self))
{
playfxontag(common_scripts\utility::getfx("sentry_turret_overheat_smoke_sp"),self,"tag_flash");
wait 0.3;
if(gettime() - var_01 > var_00)
{
break;
}
}
}
//Function Number: 35
func_3CA3()
{
if(isdefined(self.var_3CA4) && self.var_3CA4 == 0)
{
self waittill("allow_fire");
}
}
//Function Number: 36
func_3CA5()
{
self notify("anim_state_change");
self endon("anim_state_change");
self endon("stop_shooting");
self endon("deleted");
level endon("game_ended");
self endon("death");
if(!isdefined(level.var_3C68[self.sentrytype].anim_loop))
{
return;
}
self.var_3CA4 = 0;
if(!isdefined(self.momentum))
{
self.momentum = 0;
}
thread func_3CAA();
for(;;)
{
if(self.momentum >= 1)
{
break;
}
self.momentum = self.momentum + 0.1;
self.momentum = clamp(self.momentum,0,1);
if(common_scripts\utility::issp())
{
common_scripts\utility::self_func("setanim",level.var_3C68[self.sentrytype].anim_loop,1,0.2,self.momentum);
}
wait 0.2;
}
self.var_3CA4 = 1;
self notify("allow_fire");
}
//Function Number: 37
func_3CA6()
{
self notify("deleted");
wait 0.05;
self notify("death");
if(isdefined(self.var_3CA7))
{
self.var_3CA7 delete();
}
if(isdefined(self.var_3CA8))
{
self.var_3CA8 delete();
}
self delete();
}
//Function Number: 38
func_3CA9()
{
self notify("anim_state_change");
self endon("anim_state_change");
if(!isdefined(level.var_3C68[self.sentrytype].anim_loop))
{
return;
}
thread func_3CAC();
self.var_3CA4 = 0;
for(;;)
{
if(!isdefined(self.momentum))
{
break;
}
if(self.momentum <= 0)
{
break;
}
self.momentum = self.momentum - 0.1;
self.momentum = clamp(self.momentum,0,1);
if(common_scripts\utility::issp())
{
common_scripts\utility::self_func("setanim",level.var_3C68[self.sentrytype].anim_loop,1,0.2,self.momentum);
}
wait 0.2;
}
}
//Function Number: 39
func_3CAA()
{
self notify("sound_state_change");
self endon("sound_state_change");
self endon("deleted");
if(self.momentum < 0.25)
{
self playsound("sentry_minigun_spinup1");
wait 0.6;
self playsound("sentry_minigun_spinup2");
wait 0.5;
self playsound("sentry_minigun_spinup3");
wait 0.5;
self playsound("sentry_minigun_spinup4");
wait 0.5;
}
else if(self.momentum < 0.5)
{
self playsound("sentry_minigun_spinup2");
wait 0.5;
self playsound("sentry_minigun_spinup3");
wait 0.5;
self playsound("sentry_minigun_spinup4");
wait 0.5;
}
else if(self.momentum < 0.75)
{
self playsound("sentry_minigun_spinup3");
wait 0.5;
self playsound("sentry_minigun_spinup4");
wait 0.5;
}
else if(self.momentum < 1)
{
self playsound("sentry_minigun_spinup4");
wait 0.5;
}
thread func_3CAB();
}
//Function Number: 40
func_3CAB()
{
self endon("death");
self notify("sound_state_change");
self endon("sound_state_change");
for(;;)
{
self playsound("sentry_minigun_spin");
wait 2.5;
}
}
//Function Number: 41
func_3CAC()
{
self notify("sound_state_change");
self endon("sound_state_change");
self endon("deleted");
if(!isdefined(self.momentum))
{
return;
}
if(self.momentum > 0.75)
{
self stopsounds();
self playsound("sentry_minigun_spindown4");
wait 0.5;
self playsound("sentry_minigun_spindown3");
wait 0.5;
self playsound("sentry_minigun_spindown2");
wait 0.5;
self playsound("sentry_minigun_spindown1");
wait 0.65;
return;
}
if(self.momentum > 0.5)
{
self playsound("sentry_minigun_spindown3");
wait 0.5;
self playsound("sentry_minigun_spindown2");
wait 0.5;
self playsound("sentry_minigun_spindown1");
wait 0.65;
return;
}
if(self.momentum > 0.25)
{
self playsound("sentry_minigun_spindown2");
wait 0.5;
self playsound("sentry_minigun_spindown1");
wait 0.65;
return;
}
self playsound("sentry_minigun_spindown1");
wait 0.65;
}
//Function Number: 42
func_3CAD()
{
self endon("death");
for(;;)
{
wait randomfloatrange(3.5,4.5);
thread common_scripts\utility::play_sound_in_space("sentry_gun_beep",self.origin + (0,0,40));
}
}
//Function Number: 43
func_3CAE(param_00,param_01,param_02,param_03)
{
level endon("game_ended");
if(isdefined(self.placingsentry))
{
return undefined;
}
common_scripts\utility::_disableweapon();
self notify("placingSentry");
self.sentry_placement_failed = undefined;
if(!isdefined(param_01))
{
param_01 = self.origin;
}
if(!isdefined(param_02))
{
param_02 = self.angles;
}
if(!isdefined(param_03))
{
param_03 = 0;
}
var_04 = spawnturret("misc_turret",param_01,level.var_3C68[param_00].weaponinfo);
var_04 setmodel(level.var_3C68[param_00].var_3C79);
var_04.weaponinfo = level.var_3C68[param_00].weaponinfo;
var_04.targetname = level.var_3C68[param_00].targetname;
var_04.weaponname = level.var_3C68[param_00].weaponinfo;
var_04.angles = param_02;
var_04.team = self.team;
var_04.attacker = self;
var_04.sentrytype = param_00;
var_04 maketurretinoperable();
var_04 func_3CC3();
var_04 setcandamage(0);
var_04 func_3CC8(self);
var_04 setdefaultdroppitch(-89);
self.placingsentry = var_04;
var_04 setsentrycarrier(self);
var_04.carrier = self;
var_04 setcandamage(0);
var_04.ignoreme = 1;
if(!common_scripts\utility::issp())
{
var_04 addtoturretlist();
}
if(!param_03)
{
thread func_3CB0(var_04);
thread func_3CB1(var_04);
}
thread func_3CB3(var_04,param_03);
if(!param_03)
{
thread func_3CB5(var_04);
if(!common_scripts\utility::issp())
{
common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled","death");
}
else
{
common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled");
}
}
func_3CB9();
common_scripts\utility::_enableweapon();
self.placingsentry = undefined;
self setcandamage(1);
var_04 setsentrycarrier(undefined);
var_04.carrier = undefined;
var_04.ignoreme = 0;
if(is_survival())
{
waittillframeend;
if(isdefined(self.sentry_placement_failed) && self.sentry_placement_failed)
{
return undefined;
}
}
level.placed_sentry[level.placed_sentry.size] = var_04;
self notify("new_sentry",var_04);
return var_04;
}
//Function Number: 44
func_3CB0(param_00)
{
self endon("sentry_placement_finished");
if(!common_scripts\utility::issp())
{
common_scripts\utility::waittill_any("sentry_placement_canceled","death","disconnect");
}
else
{
common_scripts\utility::waittill_any("sentry_placement_canceled");
}
if(is_survival())
{
self.sentry_placement_failed = 1;
}
waittillframeend;
param_00 delete();
}
//Function Number: 45
func_3CB1(param_00)
{
self endon("sentry_placement_finished");
if(common_scripts\utility::issp())
{
return;
}
level waittill("game_ended");
if(!isdefined(param_00))
{
return;
}
if(!self.var_3C8C)
{
param_00 notify("deleted");
waittillframeend;
param_00 delete();
return;
}
thread func_3C94(param_00);
}
//Function Number: 46
func_3CB2()
{
level endon("game_ended");
self endon("disconnect");
self endon("restock_reset");
self notifyonplayercommand("cancel sentry","+actionslot 4");
common_scripts\utility::waittill_any("death","cancel sentry");
self notify("sentry_placement_canceled");
}
//Function Number: 47
func_3CB3(param_00,param_01)
{
level endon("game_ended");
self endon("sentry_placement_canceled");
if(!isdefined(param_01))
{
param_01 = 0;
}
if(!common_scripts\utility::issp())
{
self endon("disconnect");
param_00 thread func_3CD0();
thread func_3CB2();
}
if(!param_01)
{
param_00 makeunusable();
while(self usebuttonpressed())
{
wait 0.05;
}
for(;;)
{
func_3CBE(0);
func_3CBE(1);
func_3CB6(param_00);
if(self.var_3C8C)
{
break;
}
}
}
if(!common_scripts\utility::issp())
{
self notify("restock_reset");
}
if(!common_scripts\utility::issp())
{
param_00.lifeid = self.lifeid;
func_3CC4(param_00);
}
thread common_scripts\utility::play_sound_in_space("sentry_gun_plant",param_00.origin);
param_00 setmodel(level.var_3C68[param_00.sentrytype].model);
param_00 func_3C80(self.team,param_00.sentrytype,self);
self notify("sentry_placement_finished",param_00);
if(!param_01)
{
waittillframeend;
}
if(isdefined(level.var_3CB4) && level.var_3CB4)
{
param_00 thread func_3CCC();
}
if(!common_scripts\utility::issp())
{
param_00 thread func_3CCB();
}
}
//Function Number: 48
func_3CB5(param_00)
{
level endon("game_ended");
param_00 notify("sentry_placement_started");
self endon("sentry_placement_canceled");
self endon("sentry_placement_finished");
param_00 endon("death");
param_00 endon("deleted");
if(!common_scripts\utility::issp())
{
self endon("disconnect");
self endon("death");
}
for(;;)
{
func_3CB6(param_00);
wait 0.05;
}
}
//Function Number: 49
func_3CB6(param_00)
{
var_01 = self canplayerplacesentry();
param_00.origin = var_01["origin"];
param_00.angles = var_01["angles"];
self.var_3C8C = self isonground() && var_01["result"];
func_3CB7(self.var_3C8C);
if(self.var_3C8C)
{
param_00 setmodel(level.var_3C68[param_00.sentrytype].var_3C79);
return;
}
param_00 setmodel(level.var_3C68[param_00.sentrytype].var_3C7A);
}
//Function Number: 50
func_3CB7(param_00)
{
if(isdefined(self.var_3CB8) && self.var_3CB8 == param_00)
{
return;
}
self.var_3CB8 = param_00;
if(getdvarint("survival_chaos") == 1)
{
if(self.var_3CB8)
{
self notify("sentry_notification",&"SENTRY_PLACE");
return;
}
self notify("sentry_notification",&"SENTRY_CANNOT_PLACE");
return;
}
if(self.var_3CB8)
{
self forceusehinton(&"SENTRY_PLACE");
return;
}
self forceusehinton(&"SENTRY_CANNOT_PLACE");
}
//Function Number: 51
func_3CB9()
{
if(!isdefined(self.var_3CB8))
{
return;
}
if(getdvarint("survival_chaos") == 1)
{
self notify("sentry_notification");
}
else
{
self forceusehintoff();
}
self.var_3CB8 = undefined;
}
//Function Number: 52
func_3CBA(param_00)
{
self.var_3CA7 = spawn("script_model",self.origin);
self.var_3CA7.angles = self.angles;
self.var_3CA7 setmodel(level.var_3C68[param_00].var_3C78);
for(;;)
{
self waittill("trigger",var_01);
if(!isdefined(var_01))
{
continue;
}
if(isdefined(var_01.placingsentry))
{
continue;
}
if(!common_scripts\utility::issp())
{
if(var_01 != self.owner)
{
continue;
}
}
break;
}
thread common_scripts\utility::play_sound_in_space("sentry_pickup");
self.var_3CA7 delete();
self delete();
var_01 thread func_3CAE(param_00);
}
//Function Number: 53
func_3CBB()
{
self.healthbuffer = 20000;
self.health = self.health + self.healthbuffer;
self.currenthealth = self.health;
var_00 = undefined;
var_01 = undefined;
var_02 = 0;
var_03 = 0;
var_04 = gettime();
while(self.health > 0)
{
self waittill("damage",var_05,var_00,var_06,var_07,var_01,var_08,var_09);
if(isdefined(var_00) && !isplayer(var_00))
{
var_02 = var_02 + var_05;
var_03 = var_03 + gettime() - var_04;
var_04 = gettime();
if(var_03 < 3000 && var_02 > 300)
{
var_0A = 0;
foreach(var_0C in level.players)
{
if(distancesquared(var_0C.origin,self.origin) <= squared(500))
{
var_0A = 1;
}
}
if(!var_0A)
{
level notify("a_sentry_is_underattack");
}
var_02 = 0;
var_03 = 0;
}
if(var_03 >= 3000)
{
var_02 = 0;
var_03 = 0;
}
}
if(!common_scripts\utility::issp() && isdefined(var_00) && isplayer(var_00) && var_00 func_3CD2(self))
{
self.health = self.currenthealth;
return;
}
if(isdefined(level.stat_track_damage_func) && isdefined(var_00))
{
var_00 [[ level.stat_track_damage_func ]]();
}
if(isdefined(var_00) && isplayer(var_00))
{
if(!common_scripts\utility::issp())
{
var_00 [[ level.func["damagefeedback"] ]]("false");
}
thread func_3C9E(0,2);
}
if(func_3CBC(var_01,var_00))
{
self.health = self.currenthealth;
self.bullet_armor = self.bullet_armor - var_05;
continue;
}
self.currenthealth = self.health;
if(self.health < self.healthbuffer)
{
break;
}
}
if(!common_scripts\utility::issp() && var_00 func_3CD1(self))
{
var_00 thread [[ level.onxpevent ]]("kill");
}
self notify("death",var_00,var_01);
}
//Function Number: 54
func_3CBC(param_00,param_01)
{
if(isdefined(param_01) && isai(param_01) && isdefined(param_01.juggernaut) && param_01.juggernaut)
{
return 0;
}
if(self.bullet_armor <= 0)
{
return 0;
}
if(!isdefined(param_00))
{
return 0;
}
if(!issubstr(param_00,"BULLET"))
{
return 0;
}
return 1;
}
//Function Number: 55
func_3CBD()
{
var_00 = "easy";
self setconvergencetime(level.var_3C69[var_00]["convergencePitchTime"],"pitch");
self setconvergencetime(level.var_3C69[var_00]["convergenceYawTime"],"yaw");
self setsuppressiontime(level.var_3C69[var_00]["suppressionTime"]);
self setaispread(level.var_3C69[var_00]["aiSpread"]);
self setplayerspread(level.var_3C69[var_00]["playerSpread"]);
self.maxrange = 1100;
self.bullet_armor = 0;
}
//Function Number: 56
func_3CBE(param_00)
{
if(!common_scripts\utility::issp())
{
self endon("death");
self endon("disconnect");
}
if(param_00 == 1)
{
while(!self attackbuttonpressed() && !self usebuttonpressed())
{
wait 0.05;
}
return;
}
if(param_00 == 0)
{
while(self attackbuttonpressed() || self usebuttonpressed())
{
wait 0.05;
}
}
}
//Function Number: 57
func_3CBF()
{
self maketurretsolid();
}
//Function Number: 58
func_3CC0()
{
self.var_3C95 = self setcontents(0);
}
//Function Number: 59
func_3CC1()
{
if(!issentient(self) && isdefined(self.owner) && isdefined(self.owner.team))
{
self [[ level.makeentitysentient_func ]](self.owner.team);
}
self setmode("sentry");
self.var_3CC2 = 1;
}
//Function Number: 60
func_3CC3()
{
if(issentient(self))
{
self [[ level.freeentitysentient_func ]]();
}
self setmode("sentry_offline");
self.var_3CC2 = 0;
}
//Function Number: 61
func_3CC4(param_00)
{
if(isdefined(self.pers["team"]))
{
param_00.pers["team"] = self.pers["team"];
}
param_00 func_3CC5();
}
//Function Number: 62
func_3CC5()
{
var_00 = (0,0,65);
if(self.sentrytype == "sentry_gun")
{
var_00 = (0,0,75);
}
self [[ level.func["setTeamHeadIcon"] ]](self.pers["team"],var_00);
}
//Function Number: 63
func_3CC6()
{
self [[ level.func["setTeamHeadIcon"] ]]("none",(0,0,0));
}
//Function Number: 64
func_3CC7()
{
if(!isdefined(self.carrier))
{
return;
}
self.carrier notify("sentry_placement_canceled");
self.carrier common_scripts\utility::_enableweapon();
self.carrier.placingsentry = undefined;
self setsentrycarrier(undefined);
self.carrier = undefined;
self setcandamage(1);
self.ignoreme = 0;
}
//Function Number: 65
func_3CC8(param_00)
{
if(isdefined(self.owner) && self.owner == param_00)
{
return;
}
param_00.var_3CC9 = self;
self.owner = param_00;
self setsentryowner(param_00);
self setturretminimapvisible(1);
}
//Function Number: 66
func_3CCA(param_00)
{
level endon("game_ended");
self endon("death");
param_00 common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators");
self notify("death");
}
//Function Number: 67
func_3CCB()
{
level endon("game_ended");
self endon("death");
self endon("deleted");
self notify("battery_count_started");
self endon("battery_count_started");
while(self.var_3C87 >= 0)
{
if(self.var_3CC2)
{
self.var_3C87 = self.var_3C87 - 1;
}
wait 1;
}
self notify("death");
}
//Function Number: 68
func_3CCC()
{
level endon("game_ended");
self endon("death");
self endon("deleted");
self notify("ammo_count_started");
self endon("ammo_count_started");
thread func_3CCD();
while(self.var_3C88 >= 0)
{
self waittill("bullet_fired");
self.var_3C88 = self.var_3C88 - 1;
}
thread func_3CA1();
thread func_3CD7();
wait 1;
func_3CC3();
wait 5;
self notify("death");
}
//Function Number: 69
func_3CCD()
{
self endon("death");
for(;;)
{
var_00 = level.var_3C68[self.sentrytype].ammo;
var_01 = self.var_3C88;
var_02 = var_01 / var_00;
var_03 = "Ammo: " + var_01 + "/" + var_00;
var_04 = level.var_3C68[self.sentrytype].health;
var_05 = self.health - self.healthbuffer;
var_06 = var_05 / var_04;
var_07 = "Health: " + var_05 + "/" + var_04;
wait 0.05;
}
}
//Function Number: 70
func_3CCE()
{
if(isdefined(self.var_3CCF) && self.var_3CCF)
{
return;
}
func_3CA6();
}
//Function Number: 71
func_3CD0()
{
self endon("death");
self endon("deleted");
self.owner common_scripts\utility::waittill_any("death","disconnect");
if(isdefined(self.owner.placingsentry) && self.owner.placingsentry == self)
{
self.owner.placingsentry = undefined;
self setsentrycarrier(undefined);
self.carrier = undefined;
self setcandamage(1);
self.ignoreme = 0;
self notify("death");
}
}
//Function Number: 72
func_3CD1(param_00)
{
if(!isdefined(self))
{
return 0;
}
if(!isplayer(self))
{
return 0;
}
if(!isdefined(level.onxpevent))
{
return 0;
}
if(!isdefined(self.pers["team"]))
{
return 0;
}
if(!isdefined(param_00.team))
{
return 0;
}
if(!level.teambased && self == param_00.owner)
{
return 0;
}
if(level.teambased && self.pers["team"] == param_00.team)
{
return 0;
}
return 1;
}
//Function Number: 73
func_3CD2(param_00)
{
if(!isdefined(self))
{
return 0;
}
if(!isplayer(self))
{
return 0;
}
if(!level.teambased)
{
return 0;
}
if(self == param_00.owner)
{
return 0;
}
if(self.team != param_00.team)
{
return 0;
}
return 1;
}
//Function Number: 74
func_3CD3()
{
self endon("deleted");
self endon("death");
for(;;)
{
self waittill("emp_damage",var_00,var_01);
thread func_3CA1();
thread func_3CD7();
func_3CC3();
playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim");
wait var_01;
func_3CC1();
}
}
//Function Number: 75
func_3CD4()
{
self endon("deleted");
self endon("death");
for(;;)
{
level waittill("emp_update");
if(level.teamemped[self.team])
{
thread func_3CA1();
thread func_3CD7();
func_3CC3();
playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim");
continue;
}
func_3CC1();
}
}
//Function Number: 76
addtoturretlist()
{
level.turrets[self getentitynumber()] = self;
}
//Function Number: 77
removefromturretlist()
{
level.turrets[self getentitynumber()] = undefined;
}
//Function Number: 78
func_3CD5(param_00,param_01,param_02,param_03)
{
param_00 endon(param_01);
param_02 endon(param_03);
level waittill("hell_freezes_over_AND_THEN_thaws_out");
}
//Function Number: 79
func_3CD6()
{
if(!level.var_3C68[self.sentrytype].var_3C70)
{
return;
}
if(!isdefined(level.laseron_func))
{
return;
}
self [[ level.laseron_func ]]();
}
//Function Number: 80
func_3CD7()
{
if(!level.var_3C68[self.sentrytype].var_3C70)
{
return;
}
if(!isdefined(level.laseroff_func))
{
return;
}
self [[ level.laseroff_func ]]();
}
//Function Number: 81
is_specialop()
{
return getdvarint("specialops") >= 1;
}
//Function Number: 82
is_survival()
{
return is_specialop() && getdvarint("so_survival") > 0;
}