Files
IL-GSC/MW3/PC/MP/maps/mp/killstreaks/_nuke.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

403 lines
9.5 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_nuke.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 20
* Decompile Time: 362 ms
* Timestamp: 10/27/2023 2:14:23 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheitem("nuke_mp");
precachelocationselector("map_nuke_selector");
precachestring(&"MP_TACTICAL_NUKE_CALLED");
precachestring(&"MP_FRIENDLY_TACTICAL_NUKE");
precachestring(&"MP_TACTICAL_NUKE");
level.nukevisionset = "aftermath";
level._effect["nuke_player"] = loadfx("explosions/player_death_nuke");
level._effect["nuke_flash"] = loadfx("explosions/player_death_nuke_flash");
level._effect["nuke_aftermath"] = loadfx("dust/nuke_aftermath_mp");
game["strings"]["nuclear_strike"] = &"MP_TACTICAL_NUKE";
level.killstreakfuncs["nuke"] = ::tryusenuke;
setdvarifuninitialized("scr_nukeTimer",10);
setdvarifuninitialized("scr_nukeCancelMode",0);
level.nuketimer = getdvarint("scr_nukeTimer");
level.cancelmode = getdvarint("scr_nukeCancelMode");
level.teamnukeemped["allies"] = 0;
level.teamnukeemped["axis"] = 0;
level.nukeemptimeout = 60;
level.nukeemptimeremaining = int(level.nukeemptimeout);
level.nukeinfo = spawnstruct();
level.nukeinfo.var_36 = 2;
level.nukedetonated = undefined;
level thread nuke_empteamtracker();
level thread onplayerconnect();
}
//Function Number: 2
tryusenuke(param_00,param_01)
{
if(isdefined(level.nukeincoming))
{
self iprintlnbold(&"MP_NUKE_ALREADY_INBOUND");
return 0;
}
if(maps\mp\_utility::isusingremote() && !isdefined(level.gtnw) || !level.gtnw)
{
return 0;
}
if(!isdefined(param_01))
{
param_01 = 1;
}
thread donuke(param_01);
self notify("used_nuke");
maps\mp\_matchdata::logkillstreakevent("nuke",self.origin);
return 1;
}
//Function Number: 3
delaythread_nuke(param_00,param_01)
{
level endon("nuke_cancelled");
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00);
thread [[ param_01 ]]();
}
//Function Number: 4
donuke(param_00)
{
level endon("nuke_cancelled");
level.nukeinfo.player = self;
level.nukeinfo.team = self.pers["team"];
level.nukeincoming = 1;
setdvar("ui_bomb_timer",4);
if(level.teambased)
{
thread maps\mp\_utility::teamplayercardsplash("used_nuke",self,self.team);
}
else if(!level.hardcoremode)
{
self iprintlnbold(&"MP_FRIENDLY_TACTICAL_NUKE");
}
level thread delaythread_nuke(level.nuketimer - 3.3,::nukesoundincoming);
level thread delaythread_nuke(level.nuketimer,::nukesoundexplosion);
level thread delaythread_nuke(level.nuketimer,::nukeslowmo);
level thread delaythread_nuke(level.nuketimer,::nukeeffects);
level thread delaythread_nuke(level.nuketimer + 0.25,::nukevision);
level thread delaythread_nuke(level.nuketimer + 1.5,::nukedeath);
level thread delaythread_nuke(level.nuketimer + 1.5,::nukeearthquake);
level thread nukeaftermatheffect();
level thread update_ui_timers();
if(level.cancelmode && param_00)
{
level thread cancelnukeondeath(self);
}
if(!isdefined(level.nuke_clockobject))
{
level.nuke_clockobject = spawn("script_origin",(0,0,0));
level.nuke_clockobject hide();
}
if(!isdefined(level.nuke_soundobject))
{
level.nuke_soundobject = spawn("script_origin",(0,0,1));
level.nuke_soundobject hide();
}
for(var_01 = level.nuketimer;var_01 > 0;var_01--)
{
level.nuke_clockobject playsound("ui_mp_nukebomb_timer");
wait 1;
}
}
//Function Number: 5
cancelnukeondeath(param_00)
{
param_00 common_scripts\utility::waittill_any("death","disconnect");
if(isdefined(param_00) && level.cancelmode == 2)
{
param_00 thread maps\mp\killstreaks\_emp::emp_use(0,0);
}
setdvar("ui_bomb_timer",0);
level.nukeincoming = undefined;
level notify("nuke_cancelled");
}
//Function Number: 6
nukesoundincoming()
{
level endon("nuke_cancelled");
if(isdefined(level.nuke_soundobject))
{
level.nuke_soundobject playsound("nuke_incoming");
}
}
//Function Number: 7
nukesoundexplosion()
{
level endon("nuke_cancelled");
if(isdefined(level.nuke_soundobject))
{
level.nuke_soundobject playsound("nuke_explosion");
level.nuke_soundobject playsound("nuke_wave");
}
}
//Function Number: 8
nukeeffects()
{
level endon("nuke_cancelled");
setdvar("ui_bomb_timer",0);
level.nukedetonated = 1;
foreach(var_01 in level.players)
{
var_02 = anglestoforward(var_01.angles);
var_02 = (var_02[0],var_02[1],0);
var_02 = vectornormalize(var_02);
var_03 = 5000;
var_04 = spawn("script_model",var_01.origin + var_02 * var_03);
var_04 setmodel("tag_origin");
var_04.angles = (0,var_01.angles[1] + 180,90);
var_04 thread nukeeffect(var_01);
}
}
//Function Number: 9
nukeeffect(param_00)
{
level endon("nuke_cancelled");
param_00 endon("disconnect");
common_scripts\utility::waitframe();
playfxontagforclients(level._effect["nuke_flash"],self,"tag_origin",param_00);
}
//Function Number: 10
nukeaftermatheffect()
{
level endon("nuke_cancelled");
level waittill("spawning_intermission");
var_00 = getentarray("mp_global_intermission","classname");
var_00 = var_00[0];
var_01 = anglestoup(var_00.angles);
var_02 = anglestoright(var_00.angles);
playfx(level._effect["nuke_aftermath"],var_00.origin,var_01,var_02);
}
//Function Number: 11
nukeslowmo()
{
level endon("nuke_cancelled");
setslowmotion(1,0.25,0.5);
level waittill("nuke_death");
setslowmotion(0.25,1,2);
}
//Function Number: 12
nukevision()
{
level endon("nuke_cancelled");
level.nukevisioninprogress = 1;
visionsetnaked("mpnuke",3);
level waittill("nuke_death");
visionsetnaked(level.nukevisionset,5);
visionsetpain(level.nukevisionset);
}
//Function Number: 13
nukedeath()
{
level endon("nuke_cancelled");
level notify("nuke_death");
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
ambientstop(1);
foreach(var_01 in level.players)
{
if(level.teambased)
{
if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team)
{
continue;
}
}
else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player)
{
continue;
}
var_01.nuked = 1;
if(isalive(var_01))
{
var_01 thread maps\mp\gametypes\_damage::finishplayerdamagewrapper(level.nukeinfo.player,level.nukeinfo.player,999999,0,"MOD_EXPLOSIVE","nuke_mp",var_01.origin,var_01.origin,"none",0,0);
}
}
level thread nuke_empjam();
level.nukeincoming = undefined;
}
//Function Number: 14
nukeearthquake()
{
level endon("nuke_cancelled");
level waittill("nuke_death");
}
//Function Number: 15
nuke_empjam()
{
level endon("game_ended");
level maps\mp\killstreaks\_emp::func_35BE(level.nukeinfo.player,maps\mp\_utility::getotherteam(level.nukeinfo.team));
level notify("nuke_EMPJam");
level endon("nuke_EMPJam");
if(level.teambased)
{
level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1;
}
else
{
level.teamnukeemped[level.nukeinfo.team] = 1;
level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1;
}
level notify("nuke_emp_update");
level thread keepnukeemptimeremaining();
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.nukeemptimeout);
if(level.teambased)
{
level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0;
}
else
{
level.teamnukeemped[level.nukeinfo.team] = 0;
level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0;
}
foreach(var_01 in level.players)
{
if(level.teambased && var_01.team == level.nukeinfo.team)
{
continue;
}
var_01.nuked = undefined;
}
level notify("nuke_emp_update");
level notify("nuke_emp_ended");
}
//Function Number: 16
keepnukeemptimeremaining()
{
level notify("keepNukeEMPTimeRemaining");
level endon("keepNukeEMPTimeRemaining");
level endon("nuke_emp_ended");
level.nukeemptimeremaining = int(level.nukeemptimeout);
while(level.nukeemptimeremaining)
{
wait 1;
level.nukeemptimeremaining--;
}
}
//Function Number: 17
nuke_empteamtracker()
{
level endon("game_ended");
for(;;)
{
level common_scripts\utility::waittill_either("joined_team","nuke_emp_update");
foreach(var_01 in level.players)
{
if(var_01.team == "spectator")
{
continue;
}
if(level.teambased)
{
if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team)
{
continue;
}
}
else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player)
{
continue;
}
if(!level.teamnukeemped[var_01.team] && !var_01 maps\mp\_utility::isemped())
{
var_01 setempjammed(0);
continue;
}
var_01 setempjammed(1);
}
}
}
//Function Number: 18
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 19
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if(level.teamnukeemped[self.team])
{
if(level.teambased)
{
self setempjammed(1);
}
else if(!isdefined(level.nukeinfo.player) || isdefined(level.nukeinfo.player) && self != level.nukeinfo.player)
{
self setempjammed(1);
}
}
if(isdefined(level.nukedetonated))
{
self visionsetnakedforplayer(level.nukevisionset,0);
}
}
}
//Function Number: 20
update_ui_timers()
{
level endon("game_ended");
level endon("disconnect");
level endon("nuke_cancelled");
level endon("nuke_death");
var_00 = level.nuketimer * 1000 + gettime();
setdvar("ui_nuke_end_milliseconds",var_00);
level waittill("host_migration_begin");
var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(var_01 > 0)
{
setdvar("ui_nuke_end_milliseconds",var_00 + var_01);
}
}