/******************************************************************* * Decompiled By: Bog * Decompiled File: maps\mp\killstreaks\_autosentry.gsc * Game: Call of Duty: Modern Warfare 3 * Platform: PC * Function Count: 56 * Decompile Time: 1119 ms * Timestamp: 10/27/2023 2:13:54 AM *******************************************************************/ //Function Number: 1 init() { level.sentrytype = []; level.sentrytype["sentry_minigun"] = "sentry"; level.sentrytype["sam_turret"] = "sam_turret"; level.killstreakfuncs[level.sentrytype["sentry_minigun"]] = ::tryuseautosentry; level.killstreakfuncs[level.sentrytype["sam_turret"]] = ::tryusesam; level.sentrysettings = []; level.sentrysettings["sentry_minigun"] = spawnstruct(); level.sentrysettings["sentry_minigun"].health = 999999; level.sentrysettings["sentry_minigun"].maxhealth = 1000; level.sentrysettings["sentry_minigun"].burstmin = 20; level.sentrysettings["sentry_minigun"].burstmax = 120; level.sentrysettings["sentry_minigun"].pausemin = 0.15; level.sentrysettings["sentry_minigun"].pausemax = 0.35; level.sentrysettings["sentry_minigun"].sentrymodeon = "sentry"; level.sentrysettings["sentry_minigun"].sentrymodeoff = "sentry_offline"; level.sentrysettings["sentry_minigun"].timeout = 90; level.sentrysettings["sentry_minigun"].spinuptime = 0.05; level.sentrysettings["sentry_minigun"].overheattime = 8; level.sentrysettings["sentry_minigun"].cooldowntime = 0.1; level.sentrysettings["sentry_minigun"].fxtime = 0.3; level.sentrysettings["sentry_minigun"].streakname = "sentry"; level.sentrysettings["sentry_minigun"].weaponinfo = "sentry_minigun_mp"; level.sentrysettings["sentry_minigun"].modelbase = "sentry_minigun_weak"; level.sentrysettings["sentry_minigun"].modelplacement = "sentry_minigun_weak_obj"; level.sentrysettings["sentry_minigun"].modelplacementfailed = "sentry_minigun_weak_obj_red"; level.sentrysettings["sentry_minigun"].modeldestroyed = "sentry_minigun_weak_destroyed"; level.sentrysettings["sentry_minigun"].hintstring = &"SENTRY_PICKUP"; level.sentrysettings["sentry_minigun"].headicon = 1; level.sentrysettings["sentry_minigun"].teamsplash = "used_sentry"; level.sentrysettings["sentry_minigun"].shouldsplash = 0; level.sentrysettings["sentry_minigun"].vodestroyed = "sentry_destroyed"; level.sentrysettings["sam_turret"] = spawnstruct(); level.sentrysettings["sam_turret"].health = 999999; level.sentrysettings["sam_turret"].maxhealth = 1000; level.sentrysettings["sam_turret"].burstmin = 20; level.sentrysettings["sam_turret"].burstmax = 120; level.sentrysettings["sam_turret"].pausemin = 0.15; level.sentrysettings["sam_turret"].pausemax = 0.35; level.sentrysettings["sam_turret"].sentrymodeon = "sentry"; level.sentrysettings["sam_turret"].sentrymodeoff = "sentry_offline"; level.sentrysettings["sam_turret"].timeout = 90; level.sentrysettings["sam_turret"].spinuptime = 0.05; level.sentrysettings["sam_turret"].overheattime = 8; level.sentrysettings["sam_turret"].cooldowntime = 0.1; level.sentrysettings["sam_turret"].fxtime = 0.3; level.sentrysettings["sam_turret"].streakname = "sam_turret"; level.sentrysettings["sam_turret"].weaponinfo = "sam_mp"; level.sentrysettings["sam_turret"].modelbase = "mp_sam_turret"; level.sentrysettings["sam_turret"].modelplacement = "mp_sam_turret_placement"; level.sentrysettings["sam_turret"].modelplacementfailed = "mp_sam_turret_placement_failed"; level.sentrysettings["sam_turret"].modeldestroyed = "mp_sam_turret"; level.sentrysettings["sam_turret"].hintstring = &"SENTRY_PICKUP"; level.sentrysettings["sam_turret"].headicon = 1; level.sentrysettings["sam_turret"].teamsplash = "used_sam_turret"; level.sentrysettings["sam_turret"].shouldsplash = 0; level.sentrysettings["sam_turret"].vodestroyed = "sam_destroyed"; foreach(var_01 in level.sentrysettings) { precacheitem(var_01.weaponinfo); precachemodel(var_01.modelbase); precachemodel(var_01.modelplacement); precachemodel(var_01.modelplacementfailed); precachemodel(var_01.modeldestroyed); precachestring(var_01.hintstring); if(isdefined(var_01.ownerhintstring)) { precachestring(var_01.ownerhintstring); } } precacheitem("sam_projectile_mp"); level._effect["sentry_overheat_mp"] = loadfx("smoke/sentry_turret_overheat_smoke"); level._effect["sentry_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); level._effect["sentry_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); } //Function Number: 2 tryuseautosentry(param_00) { var_01 = givesentry("sentry_minigun"); if(var_01) { maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sentry_minigun"].streakname,self.origin); } return var_01; } //Function Number: 3 tryusesam(param_00) { var_01 = givesentry("sam_turret"); if(var_01) { maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sam_turret"].streakname,self.origin); } return var_01; } //Function Number: 4 givesentry(param_00) { if(!maps\mp\_utility::validateusestreak()) { return 0; } self.last_sentry = param_00; var_01 = createsentryforplayer(param_00,self); removeperks(); var_02 = setcarryingsentry(var_01,1); thread waitrestoreperks(); self.iscarrying = 0; if(isdefined(var_01)) { return 1; } return 0; } //Function Number: 5 setcarryingsentry(param_00,param_01) { self endon("death"); self endon("disconnect"); param_00 sentry_setcarried(self); common_scripts\utility::_disableweapon(); self notifyonplayercommand("place_sentry","+attack"); self notifyonplayercommand("place_sentry","+attack_akimbo_accessible"); self notifyonplayercommand("cancel_sentry","+actionslot 4"); for(;;) { var_02 = common_scripts\utility::waittill_any_return("place_sentry","cancel_sentry","force_cancel_placement"); if(var_02 == "cancel_sentry" || var_02 == "force_cancel_placement") { if(!param_01 && var_02 == "cancel_sentry") { continue; } var_03 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.sentrysettings[param_00.sentrytype].streakname); if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) { maps\mp\_utility::_giveweapon(var_03,0); maps\mp\_utility::_setactionslot(4,"weapon",var_03); } param_00 sentry_setcancelled(); common_scripts\utility::_enableweapon(); return 0; } if(!param_01.canbeplaced) { continue; } param_01 sentry_setplaced(); common_scripts\utility::_enableweapon(); return 1; } } //Function Number: 6 removeweapons() { if(self hasweapon("riotshield_mp")) { self.restoreweapon = "riotshield_mp"; self takeweapon("riotshield_mp"); } } //Function Number: 7 removeperks() { if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) { self.restoreperk = "specialty_explosivebullets"; maps\mp\_utility::_unsetperk("specialty_explosivebullets"); } } //Function Number: 8 restoreweapons() { if(isdefined(self.restoreweapon)) { maps\mp\_utility::_giveweapon(self.restoreweapon); self.restoreweapon = undefined; } } //Function Number: 9 restoreperks() { if(isdefined(self.restoreperk)) { maps\mp\_utility::giveperk(self.restoreperk,0); self.restoreperk = undefined; } } //Function Number: 10 waitrestoreperks() { self endon("death"); self endon("disconnect"); level endon("game_ended"); wait 0.05; restoreperks(); } //Function Number: 11 createsentryforplayer(param_00,param_01) { var_02 = spawnturret("misc_turret",param_01.origin,level.sentrysettings[param_00].weaponinfo); var_02.angles = param_01.angles; var_02 sentry_initsentry(param_00,param_01); return var_02; } //Function Number: 12 sentry_initsentry(param_00,param_01) { self.sentrytype = param_00; self.canbeplaced = 1; self setmodel(level.sentrysettings[self.sentrytype].modelbase); self.shouldsplash = 1; self setcandamage(1); switch(param_00) { case "gl_turret": case "minigun_turret": self setleftarc(80); self setrightarc(80); self setbottomarc(50); self setdefaultdroppitch(0); self.originalowner = param_01; break; case "sam_turret": self maketurretinoperable(); self setleftarc(180); self setrightarc(180); self settoparc(80); self setdefaultdroppitch(-89); self.laser_on = 0; var_02 = spawn("script_model",self gettagorigin("tag_laser")); var_02 linkto(self); self.killcament = var_02; self.killcament setscriptmoverkillcam("explosive"); break; default: self maketurretinoperable(); self setdefaultdroppitch(-89); break; } self setturretmodechangewait(1); sentry_setinactive(); sentry_setowner(param_01); thread sentry_handledamage(); thread sentry_handledeath(); thread sentry_timeout(); switch(param_00) { case "minigun_turret": self.momentum = 0; self.heatlevel = 0; self.overheated = 0; thread sentry_heatmonitor(); break; case "gl_turret": self.momentum = 0; self.heatlevel = 0; self.cooldownwaittime = 0; self.overheated = 0; thread turret_heatmonitor(); thread turret_coolmonitor(); break; case "sam_turret": thread sentry_handleuse(); thread sentry_beepsounds(); break; default: thread sentry_handleuse(); thread sentry_attacktargets(); thread sentry_beepsounds(); break; } } //Function Number: 13 sentry_handledamage() { self endon("death"); level endon("game_ended"); self.health = level.sentrysettings[self.sentrytype].health; self.maxhealth = level.sentrysettings[self.sentrytype].maxhealth; self.damagetaken = 0; for(;;) { self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) { continue; } if(isdefined(var_08) && var_08 & level.idflags_penetration) { self.wasdamagedfrombulletpenetration = 1; } switch(var_09) { case "stealth_bomb_mp": case "artillery_mp": var_00 = var_00 * 4; break; case "bomb_site_mp": var_00 = self.maxhealth; break; } if(var_04 == "MOD_MELEE") { self.damagetaken = self.damagetaken + self.maxhealth; } var_0A = var_00; if(isplayer(var_01)) { var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) { var_0A = var_00 * level.armorpiercingmod; } } if(isdefined(var_01.owner) && isplayer(var_01.owner)) { var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); } if(isdefined(var_09)) { switch(var_09) { case "javelin_mp": case "stinger_mp": case "remote_mortar_missile_mp": case "remotemissile_projectile_mp": case "ac130_40mm_mp": case "ac130_105mm_mp": self.var_30C8 = 1; var_0A = self.maxhealth + 1; break; case "stealth_bomb_mp": case "artillery_mp": self.var_30C8 = 0; var_0A = var_0A + var_00 * 4; break; case "bomb_site_mp": case "emp_grenade_mp": self.var_30C8 = 0; var_0A = self.maxhealth + 1; break; } } self.damagetaken = self.damagetaken + var_0A; if(self.damagetaken >= self.maxhealth) { thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) { var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04); var_01 notify("destroyed_killstreak"); if(isdefined(self.uavremotemarkedby) && self.uavremotemarkedby != var_01) { self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(); } } if(isdefined(self.owner)) { self.owner thread maps\mp\_utility::leaderdialogonplayer(level.sentrysettings[self.sentrytype].vodestroyed); } self notify("death"); return; } } } //Function Number: 14 sentry_watchdisabled() { self endon("carried"); self endon("death"); level endon("game_ended"); for(;;) { self waittill("emp_damage",var_00,var_01); playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_aim"); self setdefaultdroppitch(40); self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); wait var_01; self setdefaultdroppitch(-89); self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); } } //Function Number: 15 sentry_handledeath() { self waittill("death"); if(!isdefined(self)) { return; } self setmodel(level.sentrysettings[self.sentrytype].modeldestroyed); sentry_setinactive(); self setdefaultdroppitch(40); self setsentryowner(undefined); self setturretminimapvisible(0); if(isdefined(self.ownertrigger)) { self.ownertrigger delete(); } self playsound("sentry_explode"); switch(self.sentrytype) { case "gl_turret": case "minigun_turret": self.forcedisable = 1; self turretfiredisable(); break; default: break; } if(isdefined(self.inuseby)) { playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); self.inuseby.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); self.inuseby restoreperks(); self.inuseby restoreweapons(); self notify("deleting"); wait 1; stopfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); stopfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); } else { playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_aim"); wait 1.5; self playsound("sentry_explode_smoke"); var_00 = 8; while(var_00 > 0) { playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); wait 0.4; var_00 = var_00 - 0.4; } self notify("deleting"); } if(isdefined(self.killcament)) { self.killcament delete(); } self delete(); } //Function Number: 16 sentry_handleuse() { self endon("death"); level endon("game_ended"); for(;;) { self waittill("trigger",var_00); if(!maps\mp\_utility::isreallyalive(var_00)) { continue; } if(self.sentrytype == "sam_turret") { self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); } var_00 setcarryingsentry(self,0); } } //Function Number: 17 turret_handlepickup(param_00) { self endon("disconnect"); level endon("game_ended"); param_00 endon("death"); if(!isdefined(param_00.ownertrigger)) { return; } var_01 = 0; for(;;) { if(isalive(self) && self istouching(param_00.ownertrigger) && !isdefined(param_00.inuseby) && !isdefined(param_00.carriedby) && self isonground()) { if(self usebuttonpressed()) { if(isdefined(self.using_remote_turret) && self.using_remote_turret) { continue; } var_01 = 0; while(self usebuttonpressed()) { var_01 = var_01 + 0.05; wait 0.05; } if(var_01 >= 0.5) { continue; } var_01 = 0; while(!self usebuttonpressed() && var_01 < 0.5) { var_01 = var_01 + 0.05; wait 0.05; } if(var_01 >= 0.5) { continue; } if(!maps\mp\_utility::isreallyalive(self)) { continue; } if(isdefined(self.using_remote_turret) && self.using_remote_turret) { continue; } param_00 setmode(level.sentrysettings[param_00.sentrytype].sentrymodeoff); thread setcarryingsentry(param_00,0); param_00.ownertrigger delete(); return; } } wait 0.05; } } //Function Number: 18 turret_handleuse() { self notify("turret_handluse"); self endon("turret_handleuse"); self endon("deleting"); level endon("game_ended"); self.forcedisable = 0; var_00 = (1,0.9,0.7); var_01 = (1,0.65,0); var_02 = (1,0.25,0); for(;;) { self waittill("trigger",var_03); if(isdefined(self.carriedby)) { continue; } if(isdefined(self.inuseby)) { continue; } if(!maps\mp\_utility::isreallyalive(var_03)) { continue; } var_03 removeperks(); var_03 removeweapons(); self.inuseby = var_03; self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); sentry_setowner(var_03); self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); var_03 thread turret_shotmonitor(self); var_03.turret_overheat_bar = var_03 maps\mp\gametypes\_hud_util::createbar(var_00,100,6); var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::setpoint("CENTER","BOTTOM",0,-70); var_03.turret_overheat_bar.alpha = 0.65; var_03.turret_overheat_bar.bar.alpha = 0.65; var_04 = 0; for(;;) { if(!maps\mp\_utility::isreallyalive(var_03)) { self.inuseby = undefined; var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); break; } if(!var_03 isusingturret()) { self notify("player_dismount"); self.inuseby = undefined; var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); var_03 restoreperks(); var_03 restoreweapons(); self sethintstring(level.sentrysettings[self.sentrytype].hintstring); self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); sentry_setowner(self.originalowner); self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); break; } if(self.heatlevel >= level.sentrysettings[self.sentrytype].overheattime) { var_05 = 1; } else { var_05 = self.heatlevel / level.sentrysettings[self.sentrytype].overheattime; } var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::updatebar(var_05); if(self.forcedisable || self.overheated) { self turretfiredisable(); var_03.turret_overheat_bar.bar.color = var_02; var_04 = 0; } else if(self.heatlevel > level.sentrysettings[self.sentrytype].overheattime * 0.75 && self.sentrytype == "minigun_turret") { var_03.turret_overheat_bar.bar.color = var_01; if(randomintrange(0,10) < 6) { self turretfireenable(); } else { self turretfiredisable(); } if(!var_04) { var_04 = 1; thread playheatfx(); } } else { var_03.turret_overheat_bar.bar.color = var_00; self turretfireenable(); var_04 = 0; self notify("not_overheated"); } wait 0.05; } self setdefaultdroppitch(0); } } //Function Number: 19 sentry_handleownerdisconnect() { self endon("death"); level endon("game_ended"); self notify("sentry_handleOwner"); self endon("sentry_handleOwner"); self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); self notify("death"); } //Function Number: 20 sentry_setowner(param_00) { self.owner = param_00; self setsentryowner(self.owner); self setturretminimapvisible(1,self.sentrytype); if(level.teambased) { self.team = self.owner.team; self setturretteam(self.team); } thread sentry_handleownerdisconnect(); } //Function Number: 21 sentry_setplaced() { self setmodel(level.sentrysettings[self.sentrytype].modelbase); if(self getmode() == "manual") { self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); } self setsentrycarrier(undefined); self setcandamage(1); switch(self.sentrytype) { case "gl_turret": case "minigun_turret": self.angles = self.carriedby.angles; if(isalive(self.originalowner)) { self.originalowner maps\mp\_utility::setlowermessage("pickup_hint",level.sentrysettings[self.sentrytype].ownerhintstring,3,undefined,undefined,undefined,undefined,undefined,1); } self.ownertrigger = spawn("trigger_radius",self.origin + (0,0,1),0,105,64); self.originalowner thread turret_handlepickup(self); thread turret_handleuse(); break; default: break; } sentry_makesolid(); self.carriedby forceusehintoff(); self.carriedby = undefined; if(isdefined(self.owner)) { self.owner.iscarrying = 0; } sentry_setactive(); self playsound("sentry_gun_plant"); self notify("placed"); } //Function Number: 22 sentry_setcancelled() { self.carriedby forceusehintoff(); if(isdefined(self.owner)) { self.owner.iscarrying = 0; } self delete(); } //Function Number: 23 sentry_setcarried(param_00) { if(isdefined(self.originalowner)) { } else { } self setmodel(level.sentrysettings[self.sentrytype].modelplacement); self setsentrycarrier(param_00); self setcandamage(0); sentry_makenotsolid(); self.carriedby = param_00; param_00.iscarrying = 1; param_00 thread updatesentryplacement(self); thread sentry_oncarrierdeath(param_00); thread sentry_oncarrierdisconnect(param_00); thread sentry_oncarrierchangedteam(param_00); thread sentry_ongameended(); self setdefaultdroppitch(-89); sentry_setinactive(); self notify("carried"); } //Function Number: 24 updatesentryplacement(param_00) { self endon("death"); self endon("disconnect"); level endon("game_ended"); param_00 endon("placed"); param_00 endon("death"); param_00.canbeplaced = 1; var_01 = -1; for(;;) { var_02 = self canplayerplacesentry(); param_00.origin = var_02["origin"]; param_00.angles = var_02["angles"]; param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; if(param_00.canbeplaced != var_01) { if(param_00.canbeplaced) { param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacement); self forceusehinton(&"SENTRY_PLACE"); } else { param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacementfailed); self forceusehinton(&"SENTRY_CANNOT_PLACE"); } } var_01 = param_00.canbeplaced; wait 0.05; } } //Function Number: 25 sentry_oncarrierdeath(param_00) { self endon("placed"); self endon("death"); param_00 waittill("death"); if(self.canbeplaced) { sentry_setplaced(); return; } self delete(); } //Function Number: 26 sentry_oncarrierdisconnect(param_00) { self endon("placed"); self endon("death"); param_00 waittill("disconnect"); self delete(); } //Function Number: 27 sentry_oncarrierchangedteam(param_00) { self endon("placed"); self endon("death"); param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); self delete(); } //Function Number: 28 sentry_ongameended(param_00) { self endon("placed"); self endon("death"); level waittill("game_ended"); self delete(); } //Function Number: 29 sentry_setactive() { self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); self setcursorhint("HINT_NOICON"); self sethintstring(level.sentrysettings[self.sentrytype].hintstring); if(level.sentrysettings[self.sentrytype].headicon) { if(level.teambased) { maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,65)); } else { maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,65)); } } self makeusable(); foreach(var_01 in level.players) { switch(self.sentrytype) { case "gl_turret": case "minigun_turret": self enableplayeruse(var_01); break; default: var_02 = self getentitynumber(); addtoturretlist(var_02); if(var_01 == self.owner) { self enableplayeruse(var_01); } else { self disableplayeruse(var_01); } break; } } if(self.shouldsplash) { level thread maps\mp\_utility::teamplayercardsplash(level.sentrysettings[self.sentrytype].teamsplash,self.owner,self.owner.team); self.shouldsplash = 0; } if(self.sentrytype == "sam_turret") { thread sam_attacktargets(); } thread sentry_watchdisabled(); } //Function Number: 30 sentry_setinactive() { self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); self makeunusable(); var_00 = self getentitynumber(); switch(self.sentrytype) { case "gl_turret": break; default: removefromturretlist(var_00); break; } if(level.teambased) { maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); return; } if(isdefined(self.owner)) { maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); } } //Function Number: 31 sentry_makesolid() { self maketurretsolid(); } //Function Number: 32 sentry_makenotsolid() { self setcontents(0); } //Function Number: 33 isfriendlytosentry(param_00) { if(level.teambased && self.team == param_00.team) { return 1; } return 0; } //Function Number: 34 addtoturretlist(param_00) { level.turrets[param_00] = self; } //Function Number: 35 removefromturretlist(param_00) { level.turrets[param_00] = undefined; } //Function Number: 36 sentry_attacktargets() { self endon("death"); level endon("game_ended"); self.momentum = 0; self.heatlevel = 0; self.overheated = 0; thread sentry_heatmonitor(); for(;;) { common_scripts\utility::waittill_either("turretstatechange","cooled"); if(self isfiringturret()) { thread sentry_burstfirestart(); continue; } sentry_spindown(); thread sentry_burstfirestop(); } } //Function Number: 37 sentry_timeout() { self endon("death"); level endon("game_ended"); var_00 = level.sentrysettings[self.sentrytype].timeout; while(var_00) { wait 1; maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); if(!isdefined(self.carriedby)) { var_00 = max(0,var_00 - 1); } } if(isdefined(self.owner)) { if(self.sentrytype == "sam_turret") { self.owner thread maps\mp\_utility::leaderdialogonplayer("sam_gone"); } else { self.owner thread maps\mp\_utility::leaderdialogonplayer("sentry_gone"); } } self notify("death"); } //Function Number: 38 sentry_targetlocksound() { self endon("death"); self playsound("sentry_gun_beep"); wait 0.1; self playsound("sentry_gun_beep"); wait 0.1; self playsound("sentry_gun_beep"); } //Function Number: 39 sentry_spinup() { thread sentry_targetlocksound(); while(self.momentum < level.sentrysettings[self.sentrytype].spinuptime) { self.momentum = self.momentum + 0.1; wait 0.1; } } //Function Number: 40 sentry_spindown() { self.momentum = 0; } //Function Number: 41 sentry_burstfirestart() { self endon("death"); self endon("stop_shooting"); level endon("game_ended"); sentry_spinup(); var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); var_01 = level.sentrysettings[self.sentrytype].burstmin; var_02 = level.sentrysettings[self.sentrytype].burstmax; var_03 = level.sentrysettings[self.sentrytype].pausemin; var_04 = level.sentrysettings[self.sentrytype].pausemax; for(;;) { var_05 = randomintrange(var_01,var_02 + 1); for(var_06 = 0;var_06 < var_05 && !self.overheated;var_06++) { self shootturret(); self.heatlevel = self.heatlevel + var_00; wait var_00; } wait randomfloatrange(var_03,var_04); } } //Function Number: 42 sentry_burstfirestop() { self notify("stop_shooting"); } //Function Number: 43 turret_shotmonitor(param_00) { self endon("death"); self endon("disconnect"); level endon("game_ended"); param_00 endon("death"); param_00 endon("player_dismount"); var_01 = weaponfiretime(level.sentrysettings[param_00.sentrytype].weaponinfo); for(;;) { param_00 waittill("turret_fire"); param_00.heatlevel = param_00.heatlevel + var_01; param_00.cooldownwaittime = var_01; } } //Function Number: 44 sentry_heatmonitor() { self endon("death"); var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); var_01 = 0; var_02 = 0; var_03 = level.sentrysettings[self.sentrytype].overheattime; var_04 = level.sentrysettings[self.sentrytype].cooldowntime; for(;;) { if(self.heatlevel != var_01) { wait var_00; } else { self.heatlevel = max(0,self.heatlevel - 0.05); } if(self.heatlevel > var_03) { self.overheated = 1; thread playheatfx(); switch(self.sentrytype) { case "minigun_turret": playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); break; default: break; } while(self.heatlevel) { self.heatlevel = max(0,self.heatlevel - var_04); wait 0.1; } self.overheated = 0; self notify("not_overheated"); } var_01 = self.heatlevel; wait 0.05; } } //Function Number: 45 turret_heatmonitor() { self endon("death"); var_00 = level.sentrysettings[self.sentrytype].overheattime; for(;;) { if(self.heatlevel > var_00) { self.overheated = 1; thread playheatfx(); switch(self.sentrytype) { case "gl_turret": playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); break; default: break; } while(self.heatlevel) { wait 0.1; } self.overheated = 0; self notify("not_overheated"); } wait 0.05; } } //Function Number: 46 turret_coolmonitor() { self endon("death"); for(;;) { if(self.heatlevel > 0) { if(self.cooldownwaittime <= 0) { self.heatlevel = max(0,self.heatlevel - 0.05); } else { self.cooldownwaittime = max(0,self.cooldownwaittime - 0.05); } } wait 0.05; } } //Function Number: 47 playheatfx() { self endon("death"); self endon("not_overheated"); level endon("game_ended"); self notify("playing_heat_fx"); self endon("playing_heat_fx"); for(;;) { playfxontag(common_scripts\utility::getfx("sentry_overheat_mp"),self,"tag_flash"); wait level.sentrysettings[self.sentrytype].fxtime; } } //Function Number: 48 playsmokefx() { self endon("death"); self endon("not_overheated"); level endon("game_ended"); for(;;) { playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); wait 0.4; } } //Function Number: 49 sentry_beepsounds() { self endon("death"); level endon("game_ended"); for(;;) { wait 3; if(!isdefined(self.carriedby)) { self playsound("sentry_gun_beep"); } } } //Function Number: 50 sam_attacktargets() { self endon("carried"); self endon("death"); level endon("game_ended"); self.samtargetent = undefined; self.sammissilegroups = []; for(;;) { self.samtargetent = sam_acquiretarget(); sam_fireontarget(); wait 0.05; } } //Function Number: 51 sam_acquiretarget() { var_00 = self gettagorigin("tag_laser"); if(!isdefined(self.samtargetent)) { if(level.teambased) { foreach(var_02 in level.uavmodels[level.otherteam[self.team]]) { if(isdefined(var_02.isleaving) && var_02.isleaving) { continue; } if(sighttracepassed(var_00,var_02.origin,0,self)) { return var_02; } } foreach(var_05 in level.littlebirds) { if(isdefined(var_05.team) && var_05.team == self.team) { continue; } if(sighttracepassed(var_00,var_05.origin,0,self)) { return var_05; } } foreach(var_08 in level.helis) { if(isdefined(var_08.team) && var_08.team == self.team) { continue; } if(sighttracepassed(var_00,var_08.origin,0,self)) { return var_08; } } if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) { if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) { return level.ac130.planemodel; } } foreach(var_02 in level.remote_uav) { if(!isdefined(var_02)) { continue; } if(isdefined(var_02.team) && var_02.team == self.team) { continue; } if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) { return var_02; } } } else { foreach(var_02 in level.uavmodels) { if(isdefined(var_02.isleaving) && var_02.isleaving) { continue; } if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) { continue; } if(sighttracepassed(var_00,var_02.origin,0,self)) { return var_02; } } foreach(var_05 in level.littlebirds) { if(isdefined(var_05.owner) && isdefined(self.owner) && var_05.owner == self.owner) { continue; } if(sighttracepassed(var_00,var_05.origin,0,self)) { return var_05; } } foreach(var_08 in level.helis) { if(isdefined(var_08.owner) && isdefined(self.owner) && var_08.owner == self.owner) { continue; } if(sighttracepassed(var_00,var_08.origin,0,self)) { return var_08; } } if(level.ac130inuse && isdefined(level.ac130.owner) && isdefined(self.owner) && level.ac130.owner != self.owner) { if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) { return level.ac130.planemodel; } } foreach(var_02 in level.remote_uav) { if(!isdefined(var_02)) { continue; } if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) { continue; } if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) { return var_02; } } } self cleartargetentity(); return undefined; } if(!sighttracepassed(var_08,self.samtargetent.origin,0,self)) { self cleartargetentity(); return undefined; } return self.samtargetent; } //Function Number: 52 sam_fireontarget() { if(isdefined(self.samtargetent)) { if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) { self.samtargetent = undefined; self cleartargetentity(); return; } self settargetentity(self.samtargetent); self waittill("turret_on_target"); if(!isdefined(self.samtargetent)) { return; } if(!self.laser_on) { thread sam_watchlaser(); thread sam_watchcrashing(); thread sam_watchleaving(); thread sam_watchlineofsight(); } wait 2; if(!isdefined(self.samtargetent)) { return; } if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) { self.samtargetent = undefined; self cleartargetentity(); return; } var_00 = []; var_01 = self.sammissilegroups.size; for(var_02 = 0;var_02 < 4;var_02++) { if(!isdefined(self.samtargetent)) { return; } if(isdefined(self.carriedby)) { return; } self shootturret(); var_03 = magicbullet("sam_projectile_mp",var_7B[var_02],self.samtargetent.origin,self.owner); var_03 missile_settargetent(self.samtargetent); var_03 missile_setflightmodedirect(); var_03.samturret = self; var_03.sammissilegroup = var_01; self.sammissilegroups[var_01][var_02] = var_03; level notify("sam_missile_fired",self.owner,var_03,self.samtargetent,var_7B[3],self gettagorigin("tag_ri_missile2"),var_7B[2],self gettagorigin("tag_ri_missile1"),var_7B[1],self gettagorigin("tag_le_missile2"),var_7B[0],self gettagorigin("tag_le_missile1")); if(var_02 == 3) { break; } wait 0.25; } level notify("sam_fired",self.owner,self.sammissilegroups[var_01],self.samtargetent); wait 3; } } //Function Number: 53 sam_watchlineofsight() { level endon("game_ended"); self endon("death"); while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) { var_00 = self gettagorigin("tag_laser"); if(!sighttracepassed(var_00,self.samtargetent.origin,0,self,self.samtargetent)) { self cleartargetentity(); self.samtargetent = undefined; break; } wait 0.05; } } //Function Number: 54 sam_watchlaser() { self endon("death"); self laseron(); self.laser_on = 1; while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) { wait 0.05; } self laseroff(); self.laser_on = 0; } //Function Number: 55 sam_watchcrashing() { self endon("death"); self.samtargetent endon("death"); if(!isdefined(self.samtargetent.helitype)) { return; } self.samtargetent waittill("crashing"); self cleartargetentity(); self.samtargetent = undefined; } //Function Number: 56 sam_watchleaving() { self endon("death"); self.samtargetent endon("death"); if(!isdefined(self.samtargetent.model)) { return; } if(self.samtargetent.model == "vehicle_uav_static_mp") { self.samtargetent waittill("leaving"); self cleartargetentity(); self.samtargetent = undefined; } }