/******************************************************************* * Decompiled By: Bog * Decompiled File: maps/mp/killstreaks/_warbird.gsc * Game: Call of Duty: Advanced Warfare * Platform: PC * Function Count: 93 * Decompile Time: 1583 ms * Timestamp: 10/27/2023 1:52:30 AM *******************************************************************/ //Function Number: 1 init() { level.warbirdsetting = []; level.warbirdsetting["Warbird"] = spawnstruct(); level.warbirdsetting["Warbird"].vehicle = "warbird_player_mp"; level.warbirdsetting["Warbird"].modelbase = "vehicle_xh9_warbird_low_cloaked_in_out_mp_cloak"; level.warbirdsetting["Warbird"].helitype = "warbird"; level.warbirdsetting["Warbird"].maxhealth = level.heli_maxhealth; level.killstreakfuncs["warbird"] = ::tryusewarbird; level.killstreakwieldweapons["warbird_remote_turret_mp"] = "warbird"; level.killstreakwieldweapons["warbird_player_turret_mp"] = "warbird"; level.killstreakwieldweapons["warbird_missile_mp"] = "warbird"; level.killstreakwieldweapons["paint_missile_killstreak_mp"] = "warbird"; if(!isdefined(level.spawnedwarbirds)) { level.spawnedwarbirds = []; } if(!isdefined(level.warbirdinuse)) { level.warbirdinuse = 0; } level.chopper_fx["light"]["warbird"] = loadfx("vfx/lights/air_light_wingtip_red"); level.chopper_fx["engine"]["warbird"] = loadfx("vfx/distortion/distortion_warbird_mp"); maps\mp\killstreaks\_aerial_utility::makehelitype("warbird","vfx/explosion/vehicle_warbird_explosion_midair",::warbirdlightfx); maps\mp\killstreaks\_aerial_utility::addairexplosion("warbird","vfx/explosion/vehicle_warbird_explosion_midair"); game["dialog"]["assist_mp_warbird"] = "ks_warbird_joinreq"; game["dialog"]["pilot_sup_mp_warbird"] = "pilot_sup_mp_warbird"; game["dialog"]["pilot_aslt_mp_warbird"] = "pilot_aslt_mp_warbird"; game["dialog"]["ks_warbird_destroyed"] = "ks_warbird_destroyed"; } //Function Number: 2 tryusewarbird(param_00,param_01) { if(!canusewarbird()) { self iprintlnbold(&"KILLSTREAKS_AIR_SPACE_TOO_CROWDED"); return 0; } else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + 1 >= maps\mp\_utility::maxvehiclesallowed()) { self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); return 0; } maps\mp\_utility::incrementfauxvehiclecount(); level.warbirdinuse = 1; var_02 = common_scripts\utility::array_contains(param_01,"warbird_ai_attack") || common_scripts\utility::array_contains(param_01,"warbird_ai_follow"); if(!var_02) { thread playerclearwarbirdonteamchange(); var_03 = maps\mp\killstreaks\_killstreaks::initridekillstreak("warbird"); if(var_03 != "success") { maps\mp\_utility::decrementfauxvehiclecount(); level.warbirdinuse = 0; return 0; } maps\mp\_utility::setusingremote("warbird"); } var_03 = setupwarbirdkillstreak(param_00,param_01); if(var_03) { maps\mp\_matchdata::logkillstreakevent("warbird",self.origin); } return var_03; } //Function Number: 3 playerclearwarbirdonteamchange() { self endon("rideKillstreakBlack"); self endon("rideKillstreakFailed"); self waittill("joined_team"); level.warbirdinuse = 0; maps\mp\_utility::decrementfauxvehiclecount(); } //Function Number: 4 canusewarbird() { return !level.warbirdinuse; } //Function Number: 5 iscontrollingwarbird() { return isdefined(self.controllingwarbird) && self.controllingwarbird; } //Function Number: 6 warbirdmakevehiclesolidcapsule() { self endon("death"); wait 0.05; self makevehiclesolidcapsule(300,-9,160); } //Function Number: 7 setupplayercommands(param_00) { if(isbot(self)) { return; } self notifyonplayercommand("SwitchVisionMode","+actionslot 1"); self notifyonplayercommand("SwitchWeapon","weapnext"); self notifyonplayercommand("ToggleControlState","+activate"); self notifyonplayercommand("ToggleControlCancel","-activate"); self notifyonplayercommand("ToggleControlState","+usereload"); self notifyonplayercommand("ToggleControlCancel","-usereload"); self notifyonplayercommand("StartFire","+attack"); self notifyonplayercommand("StartFire","+attack_akimbo_accessible"); if(isdefined(param_00) && common_scripts\utility::array_contains(param_00,"warbird_cloak")) { self notifyonplayercommand("Cloak","+smoke"); } } //Function Number: 8 disableplayercommands(param_00) { if(isbot(self)) { return; } self notifyonplayercommandremove("SwitchVisionMode","+actionslot 1"); self notifyonplayercommandremove("SwitchWeapon","weapnext"); self notifyonplayercommandremove("ToggleControlState","+activate"); self notifyonplayercommandremove("ToggleControlCancel","-activate"); self notifyonplayercommandremove("ToggleControlState","+usereload"); self notifyonplayercommandremove("ToggleControlCancel","-usereload"); self notifyonplayercommandremove("StartFire","+attack"); self notifyonplayercommandremove("StartFire","+attack_akimbo_accessible"); if(isdefined(param_00) && param_00.cancloak) { self notifyonplayercommandremove("Cloak","+smoke"); } } //Function Number: 9 setupwarbirdkillstreak(param_00,param_01) { self endon("warbirdStreakComplete"); setupplayercommands(param_01); self.possesswarbird = 0; self.controllingwarbird = 0; self.warbirdinit = 1; var_02 = buildvalidflightpaths(); var_03 = findbestspawnlocation(var_02); var_03 = rotatehelispawn(var_03); var_04 = spawnhelicopter(self,var_03.origin,var_03.angles,level.warbirdsetting["Warbird"].vehicle,level.warbirdsetting["Warbird"].modelbase); var_04.currentnode = var_03; if(!isdefined(var_04)) { return 0; } var_04 thread warbird_audio(); var_04 hide(); var_04 thread warbirdmakevehiclesolidcapsule(); var_04.targetent = spawn("script_origin",(0,0,0)); var_04.vehicletype = "Warbird"; var_04.heli_type = level.warbirdsetting["Warbird"].helitype; var_04.helitype = level.warbirdsetting["Warbird"].helitype; var_04.attractor = missile_createattractorent(var_04,level.heli_attract_strength,level.heli_attract_range); var_04.lifeid = param_00; var_04.team = self.pers["team"]; var_04.pers["team"] = self.pers["team"]; var_04.owner = self; var_04.maxhealth = level.warbirdsetting["Warbird"].maxhealth; var_04.zoffset = (0,0,0); var_04.targeting_delay = level.heli_targeting_delay; var_04.primarytarget = undefined; var_04.secondarytarget = undefined; var_04.attacker = undefined; var_04.currentstate = "ok"; var_04.picknewtarget = 1; var_04.lineofsight = 0; var_04.overheattime = 6; var_04.firetime = 0; var_04.weaponfire = 0; var_04.ismoving = 1; var_04.cloakcooldown = 0; var_04.iscrashing = 0; var_04.ispossessed = 0; var_04.modules = param_01; var_04.aiattack = common_scripts\utility::array_contains(var_04.modules,"warbird_ai_attack"); var_04.aifollow = common_scripts\utility::array_contains(var_04.modules,"warbird_ai_follow"); var_04.hasai = var_04.aiattack || var_04.aifollow; var_04.cancloak = common_scripts\utility::array_contains(var_04.modules,"warbird_cloak"); var_04.hasrockets = common_scripts\utility::array_contains(var_04.modules,"warbird_rockets"); var_04.coopoffensive = common_scripts\utility::array_contains(var_04.modules,"warbird_coop_offensive"); var_04.extraflare = common_scripts\utility::array_contains(var_04.modules,"warbird_flares"); if(var_04.extraflare) { var_04.numextraflares = 1; } else { var_04.numextraflares = 0; } if(var_04.hasrockets) { var_04.rocketclip = 3; } else { var_04.rocketclip = 0; } var_04.remainingrocketshots = var_04.rocketclip; if(var_04.hasai) { var_04.usableent = spawn("script_origin",(0,0,0)); var_04.usableent linkto(var_04); var_04.usableent maps\mp\_utility::makegloballyusablebytype("killstreakRemote",&"MP_WARBIRD_PLAYER_PROMPT",self); } var_04 thread [[ level.lightfxfunc["warbird"] ]](); var_04 common_scripts\utility::make_entity_sentient_mp(var_04.team); if(!isdefined(level.spawnedwarbirds)) { level.spawnedwarbirds = []; } level.spawnedwarbirds = common_scripts\utility::array_add(level.spawnedwarbirds,var_04); var_04 maps\mp\killstreaks\_aerial_utility::addtohelilist(); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_flares_monitor(var_04.numextraflares); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_leave_on_disconnect(self); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_leave_on_changeteams(self); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_leave_on_gameended(self); var_05 = 30; if(common_scripts\utility::array_contains(var_04.modules,"warbird_time")) { var_05 = 45; } if(maps\mp\_utility::_hasperk("specialty_blackbox") && isdefined(self.specialty_blackbox_bonus)) { var_05 = var_05 * self.specialty_blackbox_bonus; } var_04.endtime = gettime() + var_05 * 1000; var_04 thread maps\mp\killstreaks\_aerial_utility::heli_leave_on_timeout(var_05); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_monitoremp(); var_04 thread maps\mp\gametypes\_damage::setentitydamagecallback(var_04.maxhealth,undefined,::warbirdondeath,::maps\mp\killstreaks\_aerial_utility::heli_modifydamage,1); var_04 thread warbird_health(); var_04 thread maps\mp\killstreaks\_aerial_utility::heli_existance(); thread monitoraiwarbirddeathortimeout(var_04); thread monitorplayerdisconnect(var_04); var_04.warbirdturret = var_04 spawn_warbird_turret("warbird_remote_turret_mp","vehicle_xh9_warbird_turret_cloaked_inout_killstreak_mp_cloak","tag_player_mp",0); var_04.warbirdturret hide(); if(!var_04.aiattack && !var_04.aifollow) { var_04.warbirdturret showtoplayer(self); } var_06 = "orbitalsupport_big_turret_mp"; if(var_04.coopoffensive) { var_06 = "warbird_remote_turret_mp"; } var_04.warbirdbuddyturret = var_04 spawn_warbird_turret(var_06,"vehicle_xh9_warbird_turret_cloaked_inout_killstreak_mp_cloak","tag_playerbuddy_mp",1); var_04.warbirdbuddyturret hide(); thread setupcloaking(var_04); thread warbirdoverheatbarcolormonitor(var_04,var_04.warbirdturret); if(var_04.aiattack || var_04.aifollow) { thread playermonitorwarbirdpossession(var_04); } else { thread playercontrolwarbirdsetup(var_04); } if(isdefined(var_04)) { if(level.teambased) { level thread handlecoopjoining(var_04,self); } return 1; } return 0; } //Function Number: 10 playermonitorwarbirdpossession(param_00) { self endon("warbirdStreakComplete"); param_00 waittill("cloaked"); wait 0.05; for(;;) { monitoraiwarbirdswitch(param_00); param_00.usableent waittill("trigger"); thread manuallyjoinwarbird(); playercontrolwarbirdsetup(param_00); } } //Function Number: 11 manuallyjoinwarbird() { self.manuallyjoiningkillstreak = 1; common_scripts\utility::waittill_any("death","initRideKillstreak_complete","warbirdStreakComplete"); self.manuallyjoiningkillstreak = 0; } //Function Number: 12 warbirdondeath(param_00,param_01,param_02,param_03) { maps\mp\gametypes\_damage::onkillstreakkilled(param_00,param_01,param_02,param_03,"warbird_destroyed","ks_warbird_destroyed","callout_destroyed_warbird",1); } //Function Number: 13 setupcloaking(param_00) { param_00.cloakstate = 0; cloakingtransition(param_00,1,1); } //Function Number: 14 warbirdrockethudupdate(param_00) { if(!param_00.hasrockets) { return; } switch(param_00.remainingrocketshots) { case 0: break; case 1: break; case 2: break; case 3: break; } } //Function Number: 15 setupwarbirdhud(param_00,param_01,param_02) { self endon("warbirdStreakComplete"); param_00 endon("death"); self endon("ResumeWarbirdAI"); if(!isdefined(param_01)) { param_01 = 0; } self forcefirstpersonwhenfollowed(); maps\mp\killstreaks\_aerial_utility::playerdisablestreakstatic(); wait(0.05); if(param_01) { self setclientomnvar("ui_warbird_toggle",2); } else { self setclientomnvar("ui_warbird_toggle",1); } maps\mp\killstreaks\_aerial_utility::playerenablestreakstatic(); self setclientomnvar("ui_warbird_cloak",0); self setclientomnvar("ui_warbird_countdown",param_00.endtime); if(!param_01) { warbirdrockethudupdate(param_00); } if(param_01 && !param_00.coopoffensive) { self setclientomnvar("ui_warbird_weapon",3); } else if(param_01 && param_00.coopoffensive) { self setclientomnvar("ui_warbird_weapon",0); } else if(param_00.hasrockets) { self setclientomnvar("ui_warbird_weapon",1); } else { self setclientomnvar("ui_warbird_weapon",0); } if(param_01) { var_03 = param_02 getentitynumber(); self setclientomnvar("ui_coop_primary_num",var_03); } if(param_00.cancloak && !param_01) { self setclientomnvar("ui_warbird_cloaktext",1); } else { self setclientomnvar("ui_warbird_cloaktext",0); } self setclientomnvar("ui_killstreak_optic",0); } //Function Number: 16 warbirdoverheatbarcolormonitor(param_00,param_01) { self endon("warbirdStreakComplete"); param_00 endon("death"); for(;;) { param_01.heat_level = param_01 getturretheat(); self setclientomnvar("ui_warbird_heat",param_01.heat_level); var_02 = 0; if(isdefined(param_01)) { var_02 = param_01 isturretoverheated(); } if(var_02) { self setclientomnvar("ui_warbird_fire",1); } else if(param_01.heat_level > 0.7) { self setclientomnvar("ui_warbird_fire",2); } else { self setclientomnvar("ui_warbird_fire",0); } while(var_02) { wait(0.05); var_02 = param_01 isturretoverheated(); param_01.heat_level = param_01 getturretheat(); self setclientomnvar("ui_warbird_heat",param_01.heat_level); } self notify("overheatFinished"); wait 0.05; } } //Function Number: 17 spawn_warbird_turret(param_00,param_01,param_02,param_03) { var_04 = spawnturret("misc_turret",self gettagorigin(param_02),param_00,0); var_04.angles = self gettagangles(param_02); var_04 setmodel(param_01); var_04 setdefaultdroppitch(45); var_04 linkto(self,param_02,(0,0,0),(0,0,0)); var_04.owner = self.owner; var_04.health = 99999; var_04.maxhealth = 1000; var_04.damagetaken = 0; var_04.stunned = 0; var_04.stunnedtime = 0; var_04 setcandamage(0); var_04 setcanradiusdamage(0); var_04.team = self.team; var_04.pers["team"] = self.team; if(level.teambased) { var_04 setturretteam(self.team); } var_04 setmode("sentry_manual"); var_04 setsentryowner(self.owner); var_04 setturretminimapvisible(0); var_04.chopper = self; if(param_03) { var_04.firesoundent = spawn("script_model",self gettagorigin(param_02)); var_04.firesoundent setmodel("tag_origin"); var_04.firesoundent vehicle_jetbikesethoverforcescale(self,param_02,(0,0,0),(0,0,0)); } return var_04; } //Function Number: 18 takeover_warbird_turret_buddy(param_00) { if(getdvarint("camera_thirdPerson")) { maps\mp\_utility::setthirdpersondof(0); } param_00.warbirdbuddyturret.owner = self; param_00.warbirdbuddyturret setmode("sentry_manual"); param_00.warbirdbuddyturret setsentryowner(self); self playerlinkweaponviewtodelta(param_00.warbirdbuddyturret,"tag_player",0,180,180,-20,180,0); self playerlinkedsetviewznear(0); self playerlinkedsetusebaseangleforviewclamp(1); self remotecontrolturret(param_00.warbirdbuddyturret,45,param_00.angles[1]); } //Function Number: 19 findbestspawnlocation(param_00) { var_01 = common_scripts\utility::get_array_of_closest(self.origin,param_00); return var_01[0]; } //Function Number: 20 rotatehelispawn(param_00) { var_01 = maps\mp\killstreaks\_aerial_utility::gethelianchor(); var_02 = anglestoforward(param_00.angles); var_03 = var_01.origin - param_00.origin; var_04 = vectortoangles(var_03); param_00.angles = var_04; return param_00; } //Function Number: 21 buildvalidflightpaths() { self endon("warbirdStreakComplete"); if(!isdefined(level.warbirdflightpathnodes)) { level.warbirdflightpathnodes = []; } else { return level.warbirdflightpathnodes; } var_00 = maps\mp\killstreaks\_aerial_utility::getentorstruct("heli_loop_start","targetname"); var_01 = var_00; var_02 = maps\mp\killstreaks\_aerial_utility::gethelianchor(); var_03 = var_02.origin[2]; for(;;) { var_04 = maps\mp\killstreaks\_aerial_utility::getentorstruct(var_01.target,"targetname"); var_01.next = var_04; var_04.prev = var_01; var_04.origin = (var_04.origin[0],var_04.origin[1],var_03); if(isinarray(level.warbirdflightpathnodes,var_04)) { break; } level.warbirdflightpathnodes = common_scripts\utility::array_add(level.warbirdflightpathnodes,var_04); var_01 = var_04; } foreach(var_06 in level.warbirdflightpathnodes) { } return level.warbirdflightpathnodes; } //Function Number: 22 isinarray(param_00,param_01) { if(isdefined(param_00)) { foreach(var_03 in param_00) { if(var_03 == param_01) { return 1; } } } return 0; } //Function Number: 23 monitorwarbirdsafearea(param_00) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); thread maps\mp\killstreaks\_aerial_utility::playerhandleboundarystatic(param_00,"warbirdStreakComplete","ResumeWarbirdAI"); param_00 waittill("outOfBounds"); wait(2); param_00 thread maps\mp\killstreaks\_aerial_utility::heli_leave(); } //Function Number: 24 warbirdaiattack(param_00) { thread warbirdfire(param_00); thread warbirdlookatenemy(param_00); thread warbirdmovetoattackpoint(param_00); } //Function Number: 25 warbirdmovetoattackpoint(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); if(!isdefined(level.warbirdaiattackbasespeed)) { level.warbirdaiattackbasespeed = 40; } if(!isdefined(level.warbirdaiattackneargoal)) { level.warbirdaiattackneargoal = 100; } var_01 = level.warbirdaiattackbasespeed; param_00 vehicle_setspeed(var_01,var_01 / 4,var_01 / 4); param_00 setneargoalnotifydist(level.warbirdaiattackneargoal); var_02 = param_00.currentnode; if(!isdefined(var_02)) { var_03 = common_scripts\utility::get_array_of_closest(param_00.origin,buildvalidflightpaths()); var_04 = param_00.origin; for(var_05 = 0;var_05 < var_03.size;var_05++) { var_06 = var_03[var_05].origin; if(maps\mp\killstreaks\_aerial_utility::flynodeorgtracepassed(var_04,var_06,param_00)) { var_07 = var_06 - var_04; var_08 = distance(var_04,var_06); var_09 = rotatevector(var_07,(0,90,0)); var_0A = var_04 + var_09 * 100; var_0B = var_0A + var_07 * var_08; if(maps\mp\killstreaks\_aerial_utility::flynodeorgtracepassed(var_0A,var_0B,param_00)) { var_0C = rotatevector(var_07,(0,-90,0)); var_0A = var_04 + var_0C * 100; var_0B = var_0A + var_07 * var_08; if(maps\mp\killstreaks\_aerial_utility::flynodeorgtracepassed(var_0A,var_0B,param_00)) { var_02 = var_03[var_05]; break; } } } wait 0.05; } } else { var_02 = var_02.next; } if(!isdefined(var_02)) { return; } for(;;) { var_0D = 0; if(param_00.aifollow) { var_0D = 1; } param_00 setvehgoalpos(var_02.origin,var_0D); param_00.ismoving = 1; param_00 waittill("near_goal"); param_00.currentnode = var_02; param_00.ismoving = 0; var_02 = waituntilmovereturnnode(param_00); param_00.currentnode = undefined; } } //Function Number: 26 waituntilmovereturnnode(param_00) { if(param_00.aifollow && isdefined(param_00.owner)) { var_01 = param_00.currentnode; var_02 = var_01.next; var_03 = var_01.prev; while(isdefined(param_00.owner)) { var_04 = distance2dsquared(param_00.owner.origin,var_01.origin); var_05 = distance2dsquared(param_00.owner.origin,var_02.origin); var_06 = distance2dsquared(param_00.owner.origin,var_03.origin); if(var_05 < var_04 && var_05 < var_06) { return var_02; } else if(var_06 < var_04 && var_06 < var_05) { return var_03; } wait 0.05; } return; } return var_06.currentnode.next; } //Function Number: 27 warbirdlookatenemy(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); for(;;) { if(isdefined(param_00.enemy_target)) { monitorlookatent(param_00); param_00.warbirdturret cleartargetentity(); } wait 0.05; } } //Function Number: 28 monitorlookatent(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); param_00 endon("pickNewTarget"); param_00 setlookatent(param_00.enemy_target); param_00.warbirdturret settargetentity(param_00.enemy_target); param_00.enemy_target common_scripts\utility::waittill_either("death","disconnect"); param_00.picknewtarget = 1; param_00.lineofsight = 0; } //Function Number: 29 warbirdfire(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); thread fireai(param_00); for(;;) { if(param_00.picknewtarget) { var_01 = level.participants; var_02 = []; foreach(var_04 in var_01) { if(var_04.team != self.team) { var_02 = common_scripts\utility::array_add(var_02,var_04); } } if(param_00.aiattack) { var_02 = sortbydistance(var_02,param_00.origin); } else { var_02 = sortbydistance(var_02,self.origin); } var_06 = undefined; foreach(var_04 in var_02) { if(!isdefined(var_04)) { continue; } if(!isalive(var_04)) { continue; } if(var_04 maps\mp\_utility::_hasperk("specialty_blindeye")) { continue; } if(isdefined(var_04.spawntime) && gettime() - var_04.spawntime / 1000 < 5) { continue; } var_06 = var_04; param_00.enemy_target = var_06; checkwarbirdtargetlos(param_00); break; } } param_00 notify("LostLOS"); wait(0.05); } } //Function Number: 30 fireai(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); param_00.remainingrocketshots = param_00.rocketclip; for(;;) { wait 0.05; if(!isdefined(param_00.enemy_target) || !isalive(param_00.enemy_target) || !param_00.lineofsight) { continue; } if(param_00.hasrockets && param_00.remainingrocketshots) { fireairocket(param_00); } param_00.warbirdturret shootturret(); } } //Function Number: 31 fireairocket(param_00) { var_01 = param_00 gettagorigin("tag_missile_right"); var_02 = vectornormalize(anglestoforward(param_00.angles)); var_03 = param_00 vehicle_getvelocity(); var_04 = magicbullet("warbird_missile_mp",var_01 + var_03 / 10,self geteye() + var_03 + var_02 * 1000,self); var_04.killcament = param_00; playfxontag(level.chopper_fx["rocketlaunch"]["warbird"],param_00,"tag_missile_right"); var_04 missile_settargetent(param_00.enemy_target); var_04 missile_setflightmodedirect(); param_00.remainingrocketshots--; if(param_00.remainingrocketshots <= 0) { thread warbirdairocketreload(param_00); } waittillrocketdeath(param_00,var_04); } //Function Number: 32 warbirdairocketreload(param_00) { param_00 endon("warbirdStreakComplete"); wait(6); param_00.remainingrocketshots = param_00.rocketclip; } //Function Number: 33 waittillrocketdeath(param_00,param_01) { param_00.enemy_target endon("death"); param_00.enemy_target endon("disconnect"); param_01 waittill("death"); } //Function Number: 34 checkwarbirdtargetlos(param_00) { self endon("warbirdPlayerControlled"); self endon("warbirdStreakComplete"); param_00.enemy_target endon("death"); param_00.enemy_target endon("disconnect"); for(;;) { var_01 = param_00 gettagorigin("TAG_FLASH1"); var_02 = param_00.enemy_target geteye(); var_03 = vectornormalize(var_02 - var_01); var_04 = var_01 + var_03 * 20; var_05 = bullettrace(var_04,var_02,0,param_00,0,0,0,0,0); if(!checktargetisinvision(param_00) && var_05["fraction"] < 1) { param_00.lineofsight = 0; param_00.picknewtarget = 1; param_00.enemy_target = undefined; param_00 notify("pickNewTarget"); return; } param_00.lineofsight = 1; wait(0.25); } } //Function Number: 35 checktargetisinvision(param_00) { var_01 = anglestoforward(param_00.angles); var_02 = param_00.enemy_target.origin - param_00.origin; var_03 = vectordot(var_01,var_02); return var_03 < 0; } //Function Number: 36 playercontrolwarbirdsetup(param_00) { self endon("warbirdStreakComplete"); self.possesswarbird = 1; self.controllingwarbird = 1; param_00.player = self; param_00.currentnode = undefined; maps\mp\_utility::playersaveangles(); wait 0.05; self notify("warbirdPlayerControlled"); param_00.ispossessed = 1; param_00.killcamstarttime = undefined; param_00.warbirdturret.killcament = undefined; if(self.warbirdinit != 1) { maps\mp\_utility::_giveweapon("killstreak_predator_missile_mp"); self switchtoweapon("killstreak_predator_missile_mp"); while(self getcurrentweapon() != "killstreak_predator_missile_mp") { wait 0.05; } thread playerdoridekillstreak(param_00,0); self waittill("initRideKillstreak_complete",var_01); if(!var_01) { return; } maps\mp\_utility::setusingremote("Warbird"); } thread setupwarbirdhud(param_00); thread monitorwarbirdsafearea(param_00); thread waitsetthermal(0.5); thread setwarbirdvisionsetpermap(0.5); self enableslowaim(0.3,0.3); pausewarbirdenginefxforplayer(param_00); param_00.playerattachpoint = spawn("script_model",(0,0,0)); param_00.playerattachpoint setmodel("tag_player"); param_00.playerattachpoint hide(); var_02 = param_00 gettagorigin("tag_origin"); var_03 = param_00 gettagangles("tag_origin"); var_04 = anglestoforward(var_03); var_02 = var_02 + var_04 * 165; var_02 = var_02 + (0,0,-10); param_00.playerattachpoint.origin = var_02; param_00.playerattachpoint.angles = var_03; param_00.playerattachpoint linkto(param_00,"tag_player_mp"); self unlink(); param_00 cancelaimove(param_00); thread warbirdrocketdamageindicator(param_00); self remotecontrolvehicle(param_00); thread weaponsetup(param_00); thread playercloakready(param_00); param_00.warbirdturret setmode("sentry_manual"); self remotecontrolturret(param_00.warbirdturret,45); while(self.possesswarbird) { exitwarbirdcontrolstate(param_00); } maps\mp\_utility::playerrestoreangles(); if(!param_00.aiattack && !param_00.aifollow) { param_00 thread maps\mp\killstreaks\_aerial_utility::heli_leave(); } } //Function Number: 37 setwarbirdvisionsetpermap(param_00) { self endon("disconnect"); self endon("warbirdStreakComplete"); wait(param_00); if(isdefined(level.warbirdvisionset)) { self setclienttriggervisionset(level.warbirdvisionset,0); } } //Function Number: 38 removewarbirdvisionsetpermap(param_00) { self setclienttriggervisionset("",param_00); } //Function Number: 39 playerdoridekillstreak(param_00,param_01) { if(!isdefined(param_01)) { param_01 = 0; } var_02 = "warbird"; if(param_01) { var_02 = "coop"; } var_03 = maps\mp\killstreaks\_killstreaks::initridekillstreak(var_02); if(var_03 != "success" || param_01 && !level.warbirdinuse || !isdefined(param_00) || isdefined(param_00.isleaving) && param_00.isleaving) { if(param_01) { removewarbirdbuddy(param_00,var_03 == "disconnect"); } else if(var_03 != "disconnect") { playerreset(param_00); } self notify("initRideKillstreak_complete",0); return; } self notify("initRideKillstreak_complete",1); } //Function Number: 40 exitwarbirdcontrolstate(param_00) { self endon("warbirdStreakComplete"); self waittill("ToggleControlState"); thread cancelexitbuttonpressmonitor(); self.possesswarbird = 0; wait(0.5); self notify("ExitHoldTimeComplete"); } //Function Number: 41 cancelexitbuttonpressmonitor() { self endon("warbirdStreakComplete"); self endon("ExitHoldTimeComplete"); self waittill("ToggleControlCancel"); self.possesswarbird = 1; } //Function Number: 42 waitsetthermal(param_00) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); wait(param_00); self thermalvisionfofoverlayon(); self setblurforplayer(1.1,0); var_01 = 135; var_02 = 0; var_03 = 60; var_04 = 0; var_05 = 12; var_06 = 5; maps\mp\killstreaks\_aerial_utility::thermalvision("warbirdThermalOff",var_01,var_02,var_03,var_04,var_05,var_06); } //Function Number: 43 waitsetthermalbuddy(param_00) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); wait(param_00); self thermalvisionfofoverlayon(); self setblurforplayer(1.1,0); var_01 = 100; var_02 = 60; var_03 = 512; var_04 = 0; var_05 = 12; var_06 = 5; maps\mp\killstreaks\_aerial_utility::thermalvision("warbirdThermalOff",var_01,var_02,var_03,var_04,var_05,var_06); } //Function Number: 44 playercloakready(param_00,param_01) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); if(isdefined(self.warbirdinit) && self.warbirdinit == 1) { param_00 waittill("cloaked"); common_scripts\utility::waittill_any_return_no_endon_death("ForceUncloak","Cloak","ResumeWarbirdAI"); switchtovisible(param_00); param_00.playerattachpoint play_sound_on_entity("warbird_cloak_deactivate"); } for(;;) { thread playercloakactivated(param_00); thread playercloakcooldown(param_00); if(param_00.cloakcooldown != 0) { self setclientomnvar("ui_warbird_cloaktext",3); wait(param_00.cloakcooldown); } thread cloakreadydialog(); if(param_00.cancloak) { self setclientomnvar("ui_warbird_cloaktext",1); } self waittill("Cloak"); self notify("ActivateCloak"); param_00 play_sound_on_entity("warbird_cloak_activate"); self waittill("CloakCharged"); } } //Function Number: 45 playercloakactivated(param_00) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); self waittill("ActivateCloak"); var_01 = 10000; self setclientomnvar("ui_warbird_cloaktime",var_01 + gettime()); switchtocloaked(param_00); thread cloakactivateddialog(param_00); self setclientomnvar("ui_warbird_cloaktext",2); param_00.cloakcooldown = 5; thread cloakcooldown(param_00); thread playercloakwaitforexit(param_00); } //Function Number: 46 playercloakcooldown(param_00) { self endon("warbirdStreakComplete"); self waittill("UnCloak"); thread playcloakoverheatdialog(param_00); switchtovisible(param_00); self setclientomnvar("ui_warbird_cloaktext",3); thread cloakdeactivateddialog(param_00); } //Function Number: 47 cloakcooldown(param_00) { self endon("warbirdStreakComplete"); self waittill("UnCloak"); while(param_00.cloakcooldown > 0) { param_00.cloakcooldown = param_00.cloakcooldown - 0.5; wait(0.5); } param_00.cloakcooldown = 0; self notify("CloakCharged"); } //Function Number: 48 playercloakwaitforexit(param_00) { self endon("warbirdStreakComplete"); var_01 = gettime(); common_scripts\utility::waittill_any_timeout_no_endon_death(10,"ForceUncloak","Cloak","ResumeWarbirdAI"); var_02 = gettime(); var_03 = max(var_02 - var_01,5000); param_00.cloakcooldown = var_03 / 1000; var_04 = gettime() + var_03; self setclientomnvar("ui_warbird_cloakdur",var_04); self notify("UnCloak"); } //Function Number: 49 switchtocloaked(param_00) { if(isdefined(param_00)) { thread cloakingtransition(param_00,1); missile_deleteattractor(param_00.attractor); self setclientomnvar("ui_warbird_cloak",1); thread monitordamagewhilecloaking(param_00); } } //Function Number: 50 switchtovisible(param_00) { if(isdefined(param_00)) { thread cloakingtransition(param_00,0); param_00.attractor = missile_createattractorent(param_00,level.heli_attract_strength,level.heli_attract_range); self setclientomnvar("ui_warbird_cloak",0); } } //Function Number: 51 cloakingtransition(param_00,param_01,param_02) { param_00 notify("cloaking_transition"); param_00 endon("cloaking_transition"); param_00 endon("warbirdStreakComplete"); if(param_01) { if(param_00.cloakstate == -2) { return; } param_00.cloakstate = -1; param_00 cloakingenable(); param_00.warbirdturret cloakingenable(); if(param_00.coopoffensive) { param_00.warbirdbuddyturret cloakingenable(); } param_00 vehicle_setminimapvisible(0); if(!isdefined(param_02) || !param_02) { wait(0.2); } else { wait(1.5); } param_00 show(); param_00.warbirdturret show(); if(param_00.coopoffensive) { param_00.warbirdbuddyturret show(); } param_00.cloakstate = -2; param_00 notify("cloaked"); param_00 stopwarbirdenginefx(); return; } if(param_00.cloakstate == 2) { return; } param_00.cloakstate = 1; param_00 cloakingdisable(); param_00 vehicle_setminimapvisible(1); param_00.warbirdturret cloakingdisable(); if(param_00.coopoffensive) { param_00.warbirdbuddyturret cloakingdisable(); } wait(2.2); param_00.cloakstate = 2; param_00 playwarbirdenginefx(); } //Function Number: 52 cloakdeactivateddialog(param_00) { self endon("CloakCharged"); self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); for(;;) { self waittill("Cloak"); param_00.playerattachpoint play_sound_on_entity("warbird_cloak_notready"); wait(1); } } //Function Number: 53 cloakreadydialog() { } //Function Number: 54 cloakactivateddialog(param_00) { } //Function Number: 55 playcloakoverheatdialog(param_00) { param_00.playerattachpoint play_sound_on_entity("warbird_cloak_deactivate"); } //Function Number: 56 cloakwarbirdexit(param_00,param_01) { if(isdefined(param_00) && param_00.iscrashing == 0) { if(isdefined(param_01)) { param_01 notify("ActivateCloak"); } thread cloakingtransition(param_00,1); missile_deleteattractor(param_00.attractor); } } //Function Number: 57 monitordamagewhilecloaking(param_00) { self endon("UnCloak"); self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); wait(1); param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); self notify("ForceUncloak"); } //Function Number: 58 warbirdrocketdamageindicator(param_00) { self endon("ResumeWarbirdAI"); self endon("warbirdStreakComplete"); for(;;) { param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); if(var_05 == "MOD_PROJECTILE") { earthquake(0.75,1,param_00.origin,1000); self shellshock("frag_grenade_mp",0.5); } } } //Function Number: 59 updateshootinglocation(param_00) { self endon("warbirdStreakComplete"); level endon("ResumeWarbirdAI"); for(;;) { var_01 = self getplayerangles(); var_02 = param_00.playerattachpoint.origin; var_03 = anglestoforward(var_01); var_04 = var_02 + var_03 * 4000; param_00.targetent.origin = var_04; wait(0.05); } } //Function Number: 60 monitorweaponselection(param_00) { self endon("warbirdStreakComplete"); self endon("ResumeWarbirdAI"); self.current_warbird_weapon = "turret"; param_00.warbirdturret turretfireenable(); if(!param_00.hasrockets) { return; } for(;;) { self waittill("SwitchWeapon"); if(self.current_warbird_weapon == "turret") { self.current_warbird_weapon = "missiles"; param_00.warbirdturret turretfiredisable(); self setclientomnvar("ui_warbird_weapon",2); } else if(self.current_warbird_weapon == "missiles") { self.current_warbird_weapon = "turret"; param_00.warbirdturret turretfireenable(); self setclientomnvar("ui_warbird_weapon",1); } self playlocalsound("warbird_weapon_cycle_plr"); } } //Function Number: 61 weaponsetup(param_00) { if(param_00.hasrockets) { thread firewarbirdrockets(param_00); } thread monitorweaponselection(param_00); thread updateshootinglocation(param_00); thread force_uncloak_on_fire(param_00); } //Function Number: 62 waittillturretfired(param_00) { param_00 endon("warbirdStreakComplete"); param_00.warbirdturret endon("turret_fire"); if(param_00.coopoffensive) { param_00.warbirdbuddyturret endon("turret_fire"); } level waittill("forever"); } //Function Number: 63 force_uncloak_on_fire(param_00) { level endon("game_ended"); self endon("warbirdStreakComplete"); for(;;) { waittillturretfired(param_00); self notify("ForceUncloak"); wait(0.05); } } //Function Number: 64 firewarbirdthreatgrenades(param_00) { param_00 endon("warbirdStreakComplete"); self endon("warbirdStreakComplete"); self endon("warbird_player_removed"); for(;;) { self waittill("StartFire"); maps\mp\killstreaks\_aerial_utility::playerfakeshootpaintmissile(param_00.warbirdbuddyturret.firesoundent); playfxontag(level.chopper_fx["rocketlaunch"]["warbird"],param_00,"tag_origin"); wait(2); } } //Function Number: 65 firewarbirdrockets(param_00) { self endon("ResumeWarbirdAI"); self endon("warbirdStreakComplete"); param_00.remainingrocketshots = param_00.rocketclip; for(;;) { if(self.guid == "bot0" || self.guid == "bot1" || self.guid == "bot2" || self.guid == "bot3") { wait(3); } else { self waittill("StartFire"); } if(self.current_warbird_weapon == "missiles" || self.guid == "bot0" || self.guid == "bot1" || self.guid == "bot2" || self.guid == "bot3") { earthquake(0.4,1,param_00.origin,1000); self playrumbleonentity("ac130_105mm_fire"); var_01 = param_00 gettagorigin("tag_missile_right"); var_02 = vectornormalize(anglestoforward(self getplayerangles())); var_03 = param_00 getentityvelocity(); var_04 = magicbullet("warbird_missile_mp",var_01 + var_03 / 10,self geteye() + var_03 + var_02 * 1000,self); playfxontag(level.chopper_fx["rocketlaunch"]["warbird"],param_00,"tag_missile_right"); var_04 missile_settargetent(param_00.targetent); var_04 missile_setflightmodedirect(); param_00.remainingrocketshots--; self notify("ForceUncloak"); warbirdrockethudupdate(param_00); if(param_00.remainingrocketshots == 0) { thread warbirdrocketreloadsound(param_00,6); wait(6); param_00.remainingrocketshots = param_00.rocketclip; self notify("rocketReloadComplete"); warbirdrockethudupdate(param_00); } else { wait(0.05); } } } } //Function Number: 66 warbirdrocketreloadsound(param_00,param_01) { self endon("rocketReloadComplete"); self endon("ResumeWarbirdAI"); self endon("warbirdStreakComplete"); var_02 = 3; self playlocalsound("warbird_missile_reload_bed"); wait(0.5); for(;;) { self playlocalsound("warbird_missile_reload"); wait(param_01 / var_02); } } //Function Number: 67 handlecoopjoining(param_00,param_01) { var_02 = "warbird_coop_defensive"; var_03 = &"MP_JOIN_WARBIRD_DEF"; var_04 = "pilot_sup_mp_warbird"; var_05 = "copilot_sup_mp_paladin"; if(param_00.coopoffensive) { var_02 = "warbird_coop_offensive"; var_03 = &"MP_JOIN_WARBIRD_OFF"; var_04 = "pilot_aslt_mp_warbird"; var_05 = "copilot_aslt_mp_paladin"; } for(;;) { var_06 = maps\mp\killstreaks\_coop_util::promptforstreaksupport(param_01.team,var_03,var_02,"assist_mp_warbird",var_04,param_01,var_05); level thread watchforjoin(var_06,param_00,param_01); var_07 = waittillpromptcomplete(param_00,"buddyJoinedStreak"); maps\mp\killstreaks\_coop_util::stoppromptforstreaksupport(var_06); if(!isdefined(var_07)) { return; } var_07 = waittillpromptcomplete(param_00,"buddyLeftWarbird"); if(!isdefined(var_07)) { return; } } } //Function Number: 68 waittillpromptcomplete(param_00,param_01) { param_00 endon("warbirdStreakComplete"); param_00 waittill(param_01); return 1; } //Function Number: 69 watchforjoin(param_00,param_01,param_02) { param_01 endon("warbirdStreakComplete"); var_03 = maps\mp\killstreaks\_coop_util::waittillbuddyjoinedstreak(param_00); param_01 notify("buddyJoinedStreak"); var_03 thread buddyjoinwarbirdsetup(param_01,param_02); } //Function Number: 70 buddyjoinwarbirdsetup(param_00,param_01) { param_00 endon("warbirdStreakComplete"); self endon("warbirdStreakComplete"); self endon("warbird_player_removed"); thread warbirdoverheatbarcolormonitor(param_00,param_00.warbirdbuddyturret); param_00.buddy = self; self.controllingwarbird = 1; thread playerdoridekillstreak(param_00,1); self waittill("initRideKillstreak_complete",var_02); if(!var_02) { return; } maps\mp\_utility::setusingremote("Warbird"); maps\mp\_utility::playersaveangles(); thread setupwarbirdhud(param_00,1,param_01); thread monitorbuddywarbirddeathortimeout(param_00); thread monitorbuddydisconnect(param_00); thread waitsetthermalbuddy(0.5); thread setwarbirdvisionsetpermap(0.5); pausewarbirdenginefxforplayer(param_00); thread warbirdrocketdamageindicator(param_00); takeover_warbird_turret_buddy(param_00); setupplayercommands(); if(!param_00.coopoffensive) { thread firewarbirdthreatgrenades(param_00); } if(!isbot(self)) { thread removewarbirdbuddyoncommand(param_00); } } //Function Number: 71 removewarbirdbuddy(param_00,param_01) { self notify("warbird_player_removed"); if(!param_01) { playerresetwarbirdomnvars(); self setblurforplayer(0,0); self notify("warbirdThermalOff"); maps\mp\killstreaks\_aerial_utility::disableorbitalthermal(self); thread removewarbirdvisionsetpermap(1.5); self thermalvisionfofoverlayoff(); if(isdefined(param_00.warbirdbuddyturret) && iscontrollingwarbird()) { self remotecontrolturretoff(param_00.warbirdbuddyturret); } self.controllingwarbird = undefined; self enableweapons(); self unlink(); maps\mp\killstreaks\_coop_util::playerresetaftercoopstreak(); self disableslowaim(); disableplayercommands(param_00); restartwarbirdenginefxforplayer(param_00); if(maps\mp\_utility::isusingremote()) { maps\mp\_utility::clearusingremote(); } maps\mp\_utility::playerremotekillstreakshowhud(); maps\mp\_utility::playerrestoreangles(); } param_00 notify("buddyLeftWarbird"); param_00.buddy = undefined; } //Function Number: 72 monitorbuddywarbirddeathortimeout(param_00) { self endon("disconnect"); param_00 common_scripts\utility::waittill_any("leaving","death","crashing"); self notify("warbirdStreakComplete"); self notify("StopWaitForDisconnect"); waittillframeend; maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); thread removewarbirdbuddy(param_00,0); } //Function Number: 73 monitorbuddydisconnect(param_00) { self endon("StopWaitForDisconnect"); self waittill("disconnect"); thread removewarbirdbuddy(param_00,1); } //Function Number: 74 removewarbirdbuddyoncommand(param_00) { self endon("warbird_player_removed"); for(;;) { self waittill("ToggleControlState"); thread startwarbirdbuddyexitcommand(param_00); thread cancelwarbirdbuddyexitcommand(); } } //Function Number: 75 startwarbirdbuddyexitcommand(param_00) { self endon("warbird_player_removed"); self endon("ToggleControlCancel"); self.warbird_buddy_exit = 1; wait(0.5); if(self.warbird_buddy_exit == 1) { thread removewarbirdbuddy(param_00,0); } } //Function Number: 76 cancelwarbirdbuddyexitcommand() { self endon("warbird_player_removed"); self waittill("ToggleControlCancel"); self.warbird_buddy_exit = 0; } //Function Number: 77 monitoraiwarbirdswitch(param_00,param_01) { self endon("warbirdStreakComplete"); self.warbirdinit = 0; self notify("ResumeWarbirdAI"); self notify("warbirdThermalOff"); param_00.ispossessed = 0; thread cloakingtransition(param_00,0); param_00.warbirdturret setmode("auto_nonai"); playerresetwarbirdomnvars(); waittillframeend; thread warbirdaiattack(param_00); param_00.killcamstarttime = gettime(); param_00.warbirdturret.killcament = param_00; param_00.player = undefined; if(maps\mp\_utility::isusingremote()) { playerreset(param_00); } wait 0.05; } //Function Number: 78 monitoraiwarbirddeathortimeout(param_00) { self endon("disconnect"); thread checkforcrashing(param_00); var_01 = param_00 common_scripts\utility::waittill_any_return("leaving","death","crashing"); playerresetafterwarbird(param_00); level thread warbirdcleanup(param_00,self,var_01 != "death"); } //Function Number: 79 warbirdcleanup(param_00,param_01,param_02) { level.spawnedwarbirds = common_scripts\utility::array_remove(level.spawnedwarbirds,param_00); level.warbirdinuse = 0; if(isdefined(param_00.usableent)) { param_00.usableent maps\mp\_utility::makegloballyunusablebytype(); } thread cloakwarbirdexit(param_00,param_01); if(isdefined(param_00.attractor)) { missile_deleteattractor(param_00.attractor); } if(isdefined(param_00.playerattachpoint)) { param_00.playerattachpoint delete(); } param_00.enemy_target = undefined; if(param_02) { param_00 waittill("death"); } else { waittillframeend; } var_03 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); if(var_03 != 0) { wait 0.05; } param_00.warbirdturret delete(); if(isdefined(param_00.warbirdbuddyturret)) { if(isdefined(param_00.warbirdbuddyturret.firesoundent)) { param_00.warbirdbuddyturret.firesoundent delete(); } param_00.warbirdbuddyturret delete(); } if(isdefined(param_00.usableent)) { param_00.usableent delete(); } } //Function Number: 80 playerresetafterwarbird(param_00) { self notify("warbirdStreakComplete"); param_00 notify("warbirdStreakComplete"); waittillframeend; playerresetwarbirdomnvars(); if(param_00.ispossessed && !maps\mp\_utility::isinremotetransition()) { playerreset(param_00); param_00.ispossessed = 0; } disableplayercommands(param_00); self notify("StopWaitForDisconnect"); } //Function Number: 81 playerreset(param_00) { self setblurforplayer(0,0); maps\mp\killstreaks\_aerial_utility::disableorbitalthermal(self); self thermalvisionfofoverlayoff(); thread removewarbirdvisionsetpermap(1.5); self remotecontrolvehicleoff(); if(isdefined(param_00.warbirdturret) && iscontrollingwarbird()) { self remotecontrolturretoff(param_00.warbirdturret); } self.controllingwarbird = undefined; self.possesswarbird = undefined; self enableweapons(); self unlink(); if(maps\mp\_utility::isusingremote()) { maps\mp\_utility::clearusingremote(); } else { var_01 = self getcurrentweapon(); if(var_01 == "none" || maps\mp\_utility::iskillstreakweapon(var_01)) { self switchtoweapon(common_scripts\utility::getlastweapon()); } maps\mp\_utility::playerremotekillstreakshowhud(); } thread playerdelaycontrol(); if(param_00.hasai) { maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe("killstreak_predator_missile_mp"); } self enableweaponswitch(); self disableslowaim(); if(!isdefined(param_00.isleaving) || !param_00.isleaving) { restartwarbirdenginefxforplayer(param_00); } maps\mp\_utility::playerrestoreangles(); } //Function Number: 82 playerdelaycontrol() { self endon("disconnect"); maps\mp\_utility::freezecontrolswrapper(1); wait(0.5); maps\mp\_utility::freezecontrolswrapper(0); } //Function Number: 83 checkforcrashing(param_00) { param_00 common_scripts\utility::waittill_any("crashing","death"); param_00.iscrashing = 1; } //Function Number: 84 monitorplayerdisconnect(param_00) { self endon("StopWaitForDisconnect"); self waittill("disconnect"); param_00 notify("warbirdStreakComplete"); self notify("warbirdStreakComplete"); self notify("warbirdThermalOff"); param_00 thread maps\mp\killstreaks\_aerial_utility::heli_leave(); level thread warbirdcleanup(param_00,self,1); } //Function Number: 85 play_sound_on_entity(param_00) { self playsound(param_00); } //Function Number: 86 warbird_health() { self endon("death"); self endon("leaving"); self endon("crashing"); self.currentstate = "ok"; self.laststate = "ok"; self setdamagestage(3); var_00 = 3; self setdamagestage(var_00); for(;;) { if(self.damagetaken >= self.maxhealth * 0.33 && var_00 == 3) { var_00 = 2; self setdamagestage(var_00); self.currentstate = "light smoke"; playfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_static_main_rotor_l"); } else if(self.damagetaken >= self.maxhealth * 0.66 && var_00 == 2) { var_00 = 1; self setdamagestage(var_00); self.currentstate = "heavy smoke"; stopfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_static_main_rotor_l"); playfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_static_main_rotor_l"); } else if(self.damagetaken >= self.maxhealth) { var_00 = 0; self setdamagestage(var_00); if(isdefined(self.largeprojectiledamage) && self.largeprojectiledamage) { thread maps\mp\killstreaks\_aerial_utility::heli_explode(1); } else { playfxontag(level.chopper_fx["damage"]["on_fire"],self,"TAG_TAIL_FX"); thread maps\mp\killstreaks\_aerial_utility::heli_crash(); } } wait(0.05); } } //Function Number: 87 playerresetwarbirdomnvars() { self setclientomnvar("ui_warbird_heat",0); self setclientomnvar("ui_warbird_flares",0); self setclientomnvar("ui_warbird_fire",0); self setclientomnvar("ui_warbird_cloak",0); self setclientomnvar("ui_warbird_cloaktime",0); self setclientomnvar("ui_warbird_cloakdur",0); self setclientomnvar("ui_warbird_countdown",0); self setclientomnvar("ui_warbird_missile",-1); self setclientomnvar("ui_warbird_weapon",0); self setclientomnvar("ui_warbird_cloaktext",0); self setclientomnvar("ui_warbird_toggle",0); self setclientomnvar("ui_coop_primary_num",0); maps\mp\killstreaks\_aerial_utility::playerdisablestreakstatic(); self disableforcefirstpersonwhenfollowed(); } //Function Number: 88 playwarbirdenginefx() { playfxontag(level.chopper_fx["engine"]["warbird"],self,"tag_static_main_rotor_r"); playfxontag(level.chopper_fx["engine"]["warbird"],self,"tag_static_main_rotor_l"); if(isdefined(self.player)) { self.player pausewarbirdenginefxforplayer(self); } if(isdefined(self.buddy)) { self.buddy pausewarbirdenginefxforplayer(self); } } //Function Number: 89 stopwarbirdenginefx() { stopfxontag(level.chopper_fx["engine"]["warbird"],self,"tag_static_main_rotor_r"); stopfxontag(level.chopper_fx["engine"]["warbird"],self,"tag_static_main_rotor_l"); } //Function Number: 90 pausewarbirdenginefxforplayer(param_00) { if(!isdefined(param_00)) { return; } stopfxontagforclient(level.chopper_fx["engine"]["warbird"],param_00,"tag_static_main_rotor_r",self); stopfxontagforclient(level.chopper_fx["engine"]["warbird"],param_00,"tag_static_main_rotor_l",self); } //Function Number: 91 restartwarbirdenginefxforplayer(param_00) { if(!isdefined(param_00)) { return; } if(maps\mp\killstreaks\_aerial_utility::vehicleiscloaked()) { return; } playfxontagforclients(level.chopper_fx["engine"]["warbird"],param_00,"tag_static_main_rotor_r",self); playfxontagforclients(level.chopper_fx["engine"]["warbird"],param_00,"tag_static_main_rotor_l",self); } //Function Number: 92 warbird_audio() { if(isdefined(self)) { } } //Function Number: 93 warbirdlightfx() { self endon("death"); for(;;) { self.owner waittill("UnCloak"); playfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_body_L"); wait(0.05); playfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_body_R"); wait(0.05); playfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_tail"); self.owner waittill("ActivateCloak"); stopfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_body_L"); wait(0.05); stopfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_body_R"); wait(0.05); stopfxontag(level.chopper_fx["light"]["warbird"],self,"tag_light_tail"); } }