Added MW3 Scripts

This commit is contained in:
InfinityLoader
2023-10-27 03:47:01 -04:00
commit d559c1d414
981 changed files with 539970 additions and 0 deletions

View File

@ -0,0 +1,52 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_animatedmodels.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 2
* Decompile Time: 71 ms
* Timestamp: 10/27/2023 2:14:50 AM
*******************************************************************/
//Function Number: 1
main()
{
if(!isdefined(level.anim_prop_models))
{
level.anim_prop_models = [];
}
var_00 = getarraykeys(level.anim_prop_models);
foreach(var_02 in var_00)
{
var_03 = getarraykeys(level.anim_prop_models[var_02]);
foreach(var_05 in var_03)
{
precachempanim(level.anim_prop_models[var_02][var_05]);
}
}
waittillframeend;
level.init_animatedmodels = [];
var_08 = getentarray("animated_model","targetname");
common_scripts\utility::array_thread(var_08,::animatemodel);
level.init_animatedmodels = undefined;
}
//Function Number: 2
animatemodel()
{
if(isdefined(self.animation))
{
var_00 = self.animation;
}
else
{
var_01 = getarraykeys(level.anim_prop_models[self.model]);
var_02 = var_01[randomint(var_01.size)];
var_00 = level.anim_prop_models[self.model][var_02];
}
self scriptmodelplayanim(var_00);
self willneverchange();
}

View File

@ -0,0 +1,72 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_areas.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 5
* Decompile Time: 95 ms
* Timestamp: 10/27/2023 2:14:51 AM
*******************************************************************/
//Function Number: 1
init()
{
level.softlandingtriggers = getentarray("trigger_multiple_softlanding","classname");
var_00 = getentarray("destructible_vehicle","targetname");
foreach(var_02 in level.softlandingtriggers)
{
if(var_02.script_type != "car")
{
continue;
}
foreach(var_04 in var_00)
{
if(distance(var_02.origin,var_04.origin) > 64)
{
continue;
}
var_02.destructible = var_04;
}
}
thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.softlanding = undefined;
var_00 thread softlandingwaiter();
}
}
//Function Number: 3
playerentersoftlanding(param_00)
{
self.softlanding = param_00;
}
//Function Number: 4
playerleavesoftlanding(param_00)
{
self.softlanding = undefined;
}
//Function Number: 5
softlandingwaiter()
{
self endon("disconnect");
for(;;)
{
self waittill("soft_landing",var_00,var_01);
if(!isdefined(var_00.destructible))
{
continue;
}
}
}

View File

@ -0,0 +1,92 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_audio.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 10
* Decompile Time: 176 ms
* Timestamp: 10/27/2023 2:14:51 AM
*******************************************************************/
//Function Number: 1
init_audio()
{
if(!isdefined(level.audio))
{
level.audio = spawnstruct();
}
init_reverb();
init_whizby();
level.onplayerconnectaudioinit = ::onplayerconnectaudioinit;
}
//Function Number: 2
onplayerconnectaudioinit()
{
apply_reverb("default");
}
//Function Number: 3
init_reverb()
{
add_reverb("default","generic",0.15,0.9,2);
}
//Function Number: 4
add_reverb(param_00,param_01,param_02,param_03,param_04)
{
var_05 = [];
is_roomtype_valid(param_01);
level.audio.reverb_settings[param_01] = var_7B;
}
//Function Number: 5
is_roomtype_valid(param_00)
{
}
//Function Number: 6
apply_reverb(param_00)
{
if(!isdefined(level.audio.reverb_settings[param_00]))
{
var_01 = level.audio.reverb_settings["default"];
}
else
{
var_01 = level.audio.reverb_settings[var_01];
}
self setreverb("snd_enveffectsprio_level",var_01["roomtype"],var_01["drylevel"],var_01["wetlevel"],var_01["fadetime"]);
}
//Function Number: 7
init_whizby()
{
level.audio.whizby_settings = [];
set_whizby_radius(15,30,50);
set_whizby_spread(150,250,350);
}
//Function Number: 8
set_whizby_radius(param_00,param_01,param_02)
{
level.audio.whizby_settings["radius"] = [param_00,param_01,param_02];
}
//Function Number: 9
set_whizby_spread(param_00,param_01,param_02)
{
level.audio.whizby_settings["spread"] = [param_00,param_01,param_02];
}
//Function Number: 10
apply_whizby()
{
var_00 = level.audio.whizby_settings;
var_01 = var_00["spread"];
var_02 = var_00["radius"];
self setwhizbyspreads(var_01[0],var_01[1],var_01[2]);
self setwhizbyradii(var_02[0],var_02[1],var_02[2]);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_compass.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 2
* Decompile Time: 46 ms
* Timestamp: 10/27/2023 2:14:55 AM
*******************************************************************/
//Function Number: 1
setupminimap(param_00)
{
var_01 = level.requiredmapaspectratio;
var_02 = getentarray("minimap_corner","targetname");
if(var_02.size != 2)
{
return;
}
var_03 = (var_02[0].origin[0],var_02[0].origin[1],0);
var_04 = (var_02[1].origin[0],var_02[1].origin[1],0);
var_05 = var_04 - var_03;
var_06 = (cos(getnorthyaw()),sin(getnorthyaw()),0);
var_07 = (0 - var_06[1],var_06[0],0);
if(vectordot(var_05,var_07) > 0)
{
if(vectordot(var_05,var_06) > 0)
{
var_08 = var_04;
var_09 = var_03;
}
else
{
var_0A = vecscale(var_08,vectordot(var_07,var_08));
var_08 = var_04 - var_0A;
var_09 = var_03 + var_0A;
}
}
else if(vectordot(var_07,var_08) > 0)
{
var_0A = vecscale(var_08,vectordot(var_07,var_08));
var_08 = var_03 + var_0A;
var_09 = var_04 - var_0A;
}
else
{
var_08 = var_05;
var_09 = var_05;
}
if(var_01 > 0)
{
var_0B = vectordot(var_08 - var_09,var_06);
var_0C = vectordot(var_08 - var_09,var_07);
var_0D = var_0C / var_0B;
if(var_0D < var_01)
{
var_0E = var_01 / var_0D;
var_0F = vecscale(var_07,var_0C * var_0E - 1 * 0.5);
}
else
{
var_0E = var_0F / var_03;
var_0F = vecscale(var_07,var_0C * var_0F - 1 * 0.5);
}
var_08 = var_08 + var_0F;
var_09 = var_09 - var_0F;
}
level.mapsize = vectordot(var_08 - var_09,var_06);
setminimap(param_00,var_08[0],var_08[1],var_09[0],var_09[1]);
}
//Function Number: 2
vecscale(param_00,param_01)
{
return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01);
}

View File

@ -0,0 +1,67 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_createfx.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 4
* Decompile Time: 77 ms
* Timestamp: 10/27/2023 2:14:56 AM
*******************************************************************/
//Function Number: 1
createfx()
{
level.func_position_player = ::common_scripts\utility::void;
level.func_position_player_get = ::func_position_player_get;
level.func_loopfxthread = ::common_scripts\_fx::loopfxthread;
level.func_oneshotfxthread = ::common_scripts\_fx::oneshotfxthread;
level.func_create_loopsound = ::common_scripts\_fx::create_loopsound;
level.func_updatefx = ::common_scripts\_createfx::restart_fx_looper;
level.func_process_fx_rotater = ::common_scripts\_createfx::process_fx_rotater;
level.mp_createfx = 1;
level.callbackstartgametype = ::common_scripts\utility::void;
level.callbackplayerconnect = ::common_scripts\utility::void;
level.callbackplayerdisconnect = ::common_scripts\utility::void;
level.callbackplayerdamage = ::common_scripts\utility::void;
level.callbackplayerkilled = ::common_scripts\utility::void;
level.callbackcodeendgame = ::common_scripts\utility::void;
level.callbackplayerlaststand = ::common_scripts\utility::void;
level.callbackplayerconnect = ::callback_playerconnect;
level.callbackplayermigrated = ::common_scripts\utility::void;
thread common_scripts\_createfx::func_get_level_fx();
common_scripts\_createfx::createfx_common();
level waittill("eternity");
}
//Function Number: 2
func_position_player_get(param_00)
{
return level.player.origin;
}
//Function Number: 3
callback_playerconnect()
{
self waittill("begin");
if(!isdefined(level.player))
{
var_00 = getentarray("mp_global_intermission","classname");
self spawn(var_00[0].origin,var_00[0].angles);
maps\mp\gametypes\_playerlogic::updatesessionstate("playing","");
self.maxhealth = 10000000;
self.health = 10000000;
level.player = self;
thread common_scripts\_createfx::createfxlogic();
thread ufo_mode();
return;
}
kick(self getentitynumber());
}
//Function Number: 4
ufo_mode()
{
level.player openpopupmenu("painter_mp");
level.player closepopupmenu("painter_mp");
}

View File

@ -0,0 +1,140 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_defcon.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 4
* Decompile Time: 79 ms
* Timestamp: 10/27/2023 2:14:56 AM
*******************************************************************/
//Function Number: 1
init()
{
if(!isdefined(level.defconmode) || level.defconmode == 0)
{
return;
}
if(!isdefined(game["defcon"]))
{
game["defcon"] = 4;
}
makedvarserverinfo("scr_defcon",game["defcon"]);
level.defconstreakadd[5] = 0;
level.defconstreakadd[4] = 0;
level.defconstreakadd[3] = -1;
level.defconstreakadd[2] = -1;
level.defconstreakadd[1] = -1;
level.defconpointmod[5] = 1;
level.defconpointmod[4] = 1;
level.defconpointmod[3] = 1;
level.defconpointmod[2] = 1;
level.defconpointmod[1] = 2;
updatedefcon(game["defcon"]);
thread defconkillstreakthread();
}
//Function Number: 2
defconkillstreakwait(param_00)
{
for(;;)
{
level waittill("player_got_killstreak_" + param_00,var_01);
level notify("defcon_killstreak",param_00,var_01);
}
}
//Function Number: 3
defconkillstreakthread()
{
level endon("game_ended");
var_00 = 10;
level thread defconkillstreakwait(var_00);
level thread defconkillstreakwait(var_00 - 1);
level thread defconkillstreakwait(var_00 - 2);
level thread defconkillstreakwait(var_00 * 2);
level thread defconkillstreakwait(var_00 * 2 - 1);
level thread defconkillstreakwait(var_00 * 2 - 2);
level thread defconkillstreakwait(var_00 * 3);
level thread defconkillstreakwait(var_00 * 3 - 1);
level thread defconkillstreakwait(var_00 * 3 - 2);
for(;;)
{
level waittill("defcon_killstreak",var_01,var_02);
if(game["defcon"] <= 1)
{
continue;
}
if(var_01 % var_00 == var_00 - 2)
{
foreach(var_04 in level.players)
{
if(!isalive(var_04))
{
continue;
}
var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("two_from_defcon",var_02);
}
continue;
}
if(var_01 % var_00 == var_00 - 1)
{
foreach(var_04 in level.players)
{
if(!isalive(var_04))
{
continue;
}
var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("one_from_defcon",var_02);
}
continue;
}
updatedefcon(game["defcon"] - 1,var_02,var_01);
}
}
//Function Number: 4
updatedefcon(param_00,param_01,param_02)
{
param_00 = int(param_00);
var_03 = game["defcon"];
game["defcon"] = param_00;
level.objectivepointsmod = level.defconpointmod[param_00];
setdvar("scr_defcon",game["defcon"]);
if(isdefined(param_01))
{
param_01 notify("changed_defcon");
}
if(param_00 == var_03)
{
return;
}
if(game["defcon"] == 3 && isdefined(param_01))
{
param_01 maps\mp\killstreaks\_killstreaks::givekillstreak("airdrop_mega");
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("caused_defcon",param_02);
}
foreach(var_05 in level.players)
{
if(isalive(var_05))
{
var_05 thread maps\mp\gametypes\_hud_message::defconsplashnotify(game["defcon"],param_00 < var_03);
if(isdefined(param_01))
{
var_05 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("changed_defcon",param_01);
}
}
}
}

View File

@ -0,0 +1,142 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_destructables.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 128 ms
* Timestamp: 10/27/2023 2:14:57 AM
*******************************************************************/
//Function Number: 1
init()
{
var_00 = getentarray("destructable","targetname");
if(getdvar("scr_destructables") == "0")
{
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_00[var_01] delete();
}
return;
}
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_00[var_01] thread destructable_think();
}
}
//Function Number: 2
destructable_think()
{
var_00 = 40;
var_01 = 0;
if(isdefined(self.script_accumulate))
{
var_00 = self.script_accumulate;
}
if(isdefined(self.script_threshold))
{
var_01 = self.script_threshold;
}
if(isdefined(self.script_destructable_area))
{
var_02 = strtok(self.script_destructable_area," ");
for(var_03 = 0;var_03 < var_02.size;var_03++)
{
blockarea(var_02[var_03]);
}
}
if(isdefined(self.script_fxid))
{
self.fx = loadfx(self.script_fxid);
}
var_04 = 0;
self setcandamage(1);
for(;;)
{
self waittill("damage",var_05,var_06);
if(var_05 >= var_01)
{
var_04 = var_04 + var_05;
if(var_04 >= var_00)
{
thread destructable_destruct();
return;
}
}
}
}
//Function Number: 3
destructable_destruct()
{
var_00 = self;
if(isdefined(self.script_destructable_area))
{
var_01 = strtok(self.script_destructable_area," ");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
unblockarea(var_01[var_02]);
}
}
if(isdefined(var_00.fx))
{
playfx(var_00.fx,var_00.origin + (0,0,6));
}
var_00 delete();
}
//Function Number: 4
blockarea(param_00)
{
var_01 = getentarray("mp_tdm_spawn","classname");
blockentsinarea(var_01,param_00);
var_01 = getentarray("mp_dm_spawn","classname");
blockentsinarea(var_01,param_00);
}
//Function Number: 5
blockentsinarea(param_00,param_01)
{
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01)
{
continue;
}
param_00[var_02].blockedoff = 1;
}
}
//Function Number: 6
unblockarea(param_00)
{
var_01 = getentarray("mp_tdm_spawn","classname");
unblockentsinarea(var_01,param_00);
var_01 = getentarray("mp_dm_spawn","classname");
unblockentsinarea(var_01,param_00);
}
//Function Number: 7
unblockentsinarea(param_00,param_01)
{
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01)
{
continue;
}
param_00[var_02].blockedoff = 0;
}
}

View File

@ -0,0 +1,358 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_entityheadicons.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 10
* Decompile Time: 176 ms
* Timestamp: 10/27/2023 2:14:58 AM
*******************************************************************/
//Function Number: 1
init()
{
if(isdefined(level.initedentityheadicons))
{
return;
}
level.initedentityheadicons = 1;
game["entity_headicon_allies"] = maps\mp\gametypes\_teams::init("allies");
game["entity_headicon_axis"] = maps\mp\gametypes\_teams::init("axis");
precacheshader(game["entity_headicon_allies"]);
precacheshader(game["entity_headicon_axis"]);
if(!level.teambased)
{
}
}
//Function Number: 2
setheadicon(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A)
{
if(!isdefined(self.entityheadicons))
{
self.entityheadicons = [];
}
if(!isdefined(param_05))
{
param_05 = 1;
}
if(!isdefined(param_06))
{
param_06 = 0.05;
}
if(!isdefined(param_07))
{
param_07 = 1;
}
if(!isdefined(param_08))
{
param_08 = 1;
}
if(!isdefined(param_09))
{
param_09 = 0;
}
if(!isdefined(param_0A))
{
param_0A = 1;
}
if(!isplayer(param_00) && param_00 == "none")
{
foreach(var_0D, var_0C in self.entityheadicons)
{
if(isdefined(var_0C))
{
var_0C destroy();
}
self.entityheadicons[var_0D] = undefined;
}
return;
}
if(isplayer(param_03))
{
if(isdefined(self.entityheadicons[param_03.guid]))
{
self.entityheadicons[param_03.guid] destroy();
self.entityheadicons[param_03.guid] = undefined;
}
if(param_04 == "")
{
return;
}
if(isdefined(self.entityheadicons[param_03.team]))
{
self.entityheadicons[param_03.team] destroy();
self.entityheadicons[param_03.team] = undefined;
}
var_0C = newclienthudelem(param_03);
self.entityheadicons[param_02.guid] = var_0D;
}
else
{
if(isdefined(self.entityheadicons[param_03]))
{
self.entityheadicons[param_03] destroy();
self.entityheadicons[param_03] = undefined;
}
if(param_04 == "")
{
return;
}
foreach(var_0E in self.entityheadicons)
{
if(var_10 == "axis" || var_10 == "allies")
{
continue;
}
var_0F = maps\mp\_utility::getplayerforguid(var_10);
if(var_0F.team == param_01)
{
self.entityheadicons[var_10] destroy();
self.entityheadicons[var_10] = undefined;
}
}
var_0C = newteamhudelem(param_01);
self.entityheadicons[param_01] = var_0C;
}
if(!isdefined(param_04) || !isdefined(param_05))
{
param_04 = 10;
param_05 = 10;
}
var_0C.archived = param_06;
var_0C.x = self.origin[0] + param_03[0];
var_0C.y = self.origin[1] + param_03[1];
var_0C.z = self.origin[2] + param_03[2];
var_0C.alpha = 0.85;
var_0C setshader(param_02,param_04,param_05);
var_0C setwaypoint(param_08,param_09,param_0A,var_0B);
var_0C thread keeppositioned(self,param_03,param_07);
thread destroyiconsondeath();
if(isplayer(param_01))
{
var_0C thread destroyonownerdisconnect(param_01);
}
if(isplayer(self))
{
var_0C thread destroyonownerdisconnect(self);
}
return var_0C;
}
//Function Number: 3
destroyonownerdisconnect(param_00)
{
self endon("death");
param_00 waittill("disconnect");
self destroy();
}
//Function Number: 4
destroyiconsondeath()
{
self notify("destroyIconsOnDeath");
self endon("destroyIconsOnDeath");
self waittill("death");
foreach(var_01 in self.entityheadicons)
{
if(!isdefined(var_01))
{
continue;
}
var_01 destroy();
}
}
//Function Number: 5
keeppositioned(param_00,param_01,param_02)
{
self endon("death");
param_00 endon("death");
param_00 endon("disconnect");
var_03 = param_00.origin;
for(;;)
{
if(!isdefined(param_00))
{
return;
}
if(var_03 != param_00.origin)
{
var_03 = param_00.origin;
self.x = var_03[0] + param_01[0];
self.y = var_03[1] + param_01[1];
self.z = var_03[2] + param_01[2];
}
if(param_02 > 0.05)
{
self.alpha = 0.85;
self fadeovertime(param_02);
self.alpha = 0;
}
wait param_02;
}
}
//Function Number: 6
setteamheadicon(param_00,param_01)
{
if(!level.teambased)
{
return;
}
if(!isdefined(self.entityheadiconteam))
{
self.entityheadiconteam = "none";
self.entityheadicon = undefined;
}
var_02 = game["entity_headicon_" + param_00];
self.entityheadiconteam = param_00;
if(isdefined(param_01))
{
self.entityheadiconoffset = param_01;
}
else
{
self.entityheadiconoffset = (0,0,0);
}
self notify("kill_entity_headicon_thread");
if(param_00 == "none")
{
if(isdefined(self.entityheadicon))
{
self.entityheadicon destroy();
}
return;
}
var_03 = newteamhudelem(param_00);
var_03.archived = 1;
var_03.x = self.origin[0] + self.entityheadiconoffset[0];
var_03.y = self.origin[1] + self.entityheadiconoffset[1];
var_03.z = self.origin[2] + self.entityheadiconoffset[2];
var_03.alpha = 0.8;
var_03 setshader(var_02,10,10);
var_03 setwaypoint(0,0,0,1);
self.entityheadicon = var_03;
thread keepiconpositioned();
thread destroyheadiconsondeath();
}
//Function Number: 7
setplayerheadicon(param_00,param_01)
{
if(level.teambased)
{
return;
}
if(!isdefined(self.entityheadiconteam))
{
self.entityheadiconteam = "none";
self.entityheadicon = undefined;
}
self notify("kill_entity_headicon_thread");
if(!isdefined(param_00))
{
if(isdefined(self.entityheadicon))
{
self.entityheadicon destroy();
}
return;
}
var_02 = param_00.team;
self.entityheadiconteam = var_02;
if(isdefined(param_01))
{
self.entityheadiconoffset = param_01;
}
else
{
self.entityheadiconoffset = (0,0,0);
}
var_03 = game["entity_headicon_" + var_02];
var_04 = newclienthudelem(param_00);
var_04.archived = 1;
var_04.x = self.origin[0] + self.entityheadiconoffset[0];
var_04.y = self.origin[1] + self.entityheadiconoffset[1];
var_04.z = self.origin[2] + self.entityheadiconoffset[2];
var_04.alpha = 0.8;
var_04 setshader(var_03,10,10);
var_04 setwaypoint(0,0,0,1);
self.entityheadicon = var_04;
thread keepiconpositioned();
thread destroyheadiconsondeath();
}
//Function Number: 8
keepiconpositioned()
{
self endon("kill_entity_headicon_thread");
self endon("death");
var_00 = self.origin;
for(;;)
{
if(var_00 != self.origin)
{
updateheadiconorigin();
var_00 = self.origin;
}
wait 0.05;
}
}
//Function Number: 9
destroyheadiconsondeath()
{
self endon("kill_entity_headicon_thread");
self waittill("death");
if(!isdefined(self.entityheadicon))
{
return;
}
self.entityheadicon destroy();
}
//Function Number: 10
updateheadiconorigin()
{
self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0];
self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1];
self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2];
}

View File

@ -0,0 +1,832 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_events.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 31
* Decompile Time: 538 ms
* Timestamp: 10/27/2023 2:15:00 AM
*******************************************************************/
//Function Number: 1
init()
{
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("execution",100);
maps\mp\gametypes\_rank::registerscoreinfo("avenger",50);
maps\mp\gametypes\_rank::registerscoreinfo("defender",50);
maps\mp\gametypes\_rank::registerscoreinfo("posthumous",25);
maps\mp\gametypes\_rank::registerscoreinfo("revenge",50);
maps\mp\gametypes\_rank::registerscoreinfo("double",50);
maps\mp\gametypes\_rank::registerscoreinfo("triple",75);
maps\mp\gametypes\_rank::registerscoreinfo("multi",100);
maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",100);
maps\mp\gametypes\_rank::registerscoreinfo("firstblood",100);
maps\mp\gametypes\_rank::registerscoreinfo("comeback",100);
maps\mp\gametypes\_rank::registerscoreinfo("longshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",100);
maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",100);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damage",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("heavy_damage",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damaged",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("kill",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("killed",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("healed",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("headshot",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("melee",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("backstab",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("longshot",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedsuicide",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defender",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("avenger",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("execution",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("comeback",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("revenge",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("buzzkill",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("double",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("triple",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("multi",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assist",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("firstBlood",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedCapture",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("plant",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defuse",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("vehicleDestroyed",1);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("3streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("4streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("5streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("6streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("7streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("8streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("9streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("10streak",0);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("regen",0);
precacheshader("crosshair_red");
level._effect["money"] = loadfx("props/cash_player_drop");
level.numkills = 0;
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.killedplayers = [];
var_00.killedplayerscurrent = [];
var_00.killedby = [];
var_00.lastkilledby = undefined;
var_00.greatestuniqueplayerkills = 0;
var_00.recentkillcount = 0;
var_00.lastkilltime = 0;
var_00.damagedplayers = [];
var_00 thread monitorcratejacking();
var_00 thread monitorobjectives();
var_00 thread monitorhealed();
}
}
//Function Number: 3
damagedplayer(param_00,param_01,param_02)
{
if(param_01 < 50 && param_01 > 10)
{
maps\mp\killstreaks\_killstreaks::giveadrenaline("damage");
return;
}
maps\mp\killstreaks\_killstreaks::giveadrenaline("heavy_damage");
}
//Function Number: 4
killedplayer(param_00,param_01,param_02,param_03)
{
var_04 = param_01.guid;
var_05 = self.guid;
var_06 = gettime();
thread updaterecentkills(param_00);
self.lastkilltime = gettime();
self.lastkilledplayer = param_01;
self.modifiers = [];
level.numkills++;
self.damagedplayers[var_04] = undefined;
if(!maps\mp\_utility::iskillstreakweapon(param_02) && !maps\mp\_utility::isjuggernaut() && !maps\mp\_utility::_hasperk("specialty_explosivebullets"))
{
if(param_02 == "none")
{
return 0;
}
if(isdefined(self.pers["copyCatLoadout"]) && isdefined(self.pers["copyCatLoadout"]["owner"]))
{
if(param_01 == self.pers["copyCatLoadout"]["owner"])
{
self.modifiers["clonekill"] = 1;
}
}
if(param_01.attackers.size == 1 && !isdefined(param_01.attackers[param_01.guid]))
{
var_0A = maps\mp\_utility::getweaponclass(param_02);
if(var_0A == "weapon_sniper" && param_03 != "MOD_MELEE" && gettime() == param_01.attackerdata[self.guid].firsttimedamaged)
{
self.modifiers["oneshotkill"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_ONE_SHOT_KILL");
}
}
if(isdefined(param_01.throwinggrenade) && param_01.throwinggrenade == "frag_grenade_mp")
{
self.modifiers["cooking"] = 1;
}
if(isdefined(self.assistedsuicide) && self.assistedsuicide)
{
assistedsuicide(param_00,param_02,param_03);
}
if(level.numkills == 1)
{
firstblood(param_00,param_02,param_03);
}
if(self.pers["cur_death_streak"] > 3)
{
comeback(param_00,param_02,param_03);
}
if(param_03 == "MOD_HEAD_SHOT")
{
if(isdefined(param_01.laststand))
{
execution(param_00,param_02,param_03);
}
else
{
headshot(param_00,param_02,param_03);
}
}
if(isdefined(self.wasti) && self.wasti && gettime() - self.spawntime <= 5000)
{
self.modifiers["jackintheboxkill"] = 1;
}
if(!isalive(self) && self.deathtime + 800 < gettime())
{
postdeathkill(param_00);
}
var_0B = 0;
if(level.teambased && var_06 - param_01.lastkilltime < 500)
{
if(param_01.lastkilledplayer != self)
{
avengedplayer(param_00,param_02,param_03);
}
}
foreach(var_0E, var_0D in param_01.damagedplayers)
{
if(var_0E == self.guid)
{
continue;
}
if(level.teambased && var_06 - var_0D < 500)
{
defendedplayer(param_00,param_02,param_03);
}
}
if(isdefined(param_01.attackerposition))
{
var_0F = param_01.attackerposition;
}
else
{
var_0F = self.origin;
}
if(islongshot(self,param_02,param_03,var_0F,param_01))
{
thread longshot(param_00,param_02,param_03);
}
if(param_01.pers["cur_kill_streak"] > 0 && isdefined(param_01.killstreaks[param_01.pers["cur_kill_streak"] + 1]))
{
buzzkill(param_00,param_01,param_02,param_03);
}
thread checkmatchdatakills(param_00,param_01,param_02,param_03);
}
if(!isdefined(self.killedplayers[var_04]))
{
self.killedplayers[var_04] = 0;
}
if(!isdefined(self.killedplayerscurrent[var_04]))
{
self.killedplayerscurrent[var_04] = 0;
}
if(!isdefined(param_01.killedby[var_05]))
{
param_01.killedby[var_05] = 0;
}
self.killedplayers[var_04]++;
if(self.killedplayers[var_04] > self.greatestuniqueplayerkills)
{
maps\mp\_utility::setplayerstat("killedsameplayer",self.killedplayers[var_04]);
}
self.killedplayerscurrent[var_04]++;
param_01.killedby[var_05]++;
param_01.lastkilledby = self;
}
//Function Number: 5
islongshot(param_00,param_01,param_02,param_03,param_04)
{
if(isalive(param_00) && !param_00 maps\mp\_utility::isusingremote() && param_02 == "MOD_RIFLE_BULLET" || param_02 == "MOD_PISTOL_BULLET" || param_02 == "MOD_HEAD_SHOT" && !maps\mp\_utility::iskillstreakweapon(param_01) && !isdefined(param_00.assistedsuicide))
{
var_05 = maps\mp\_utility::getweaponclass(param_01);
switch(var_05)
{
case "weapon_pistol":
var_06 = 800;
break;
case "weapon_machine_pistol":
case "weapon_smg":
var_06 = 1200;
break;
case "weapon_lmg":
case "weapon_assault":
var_06 = 1500;
break;
case "weapon_sniper":
var_06 = 2000;
break;
case "weapon_shotgun":
var_06 = 500;
break;
case "weapon_projectile":
default:
var_06 = 1536;
break;
}
if(distance(param_03,param_04.origin) > var_06)
{
if(param_00 isitemunlocked("specialty_holdbreath") && param_00 maps\mp\_utility::_hasperk("specialty_holdbreath"))
{
param_00 maps\mp\gametypes\_missions::processchallenge("ch_longdistance");
}
return 1;
}
}
return 0;
}
//Function Number: 6
checkmatchdatakills(param_00,param_01,param_02,param_03)
{
var_04 = maps\mp\_utility::getweaponclass(param_02);
var_05 = 0;
thread campercheck();
if(isdefined(self.lastkilledby) && self.lastkilledby == param_01)
{
self.lastkilledby = undefined;
revenge(param_00);
playfx(level._effect["money"],param_01 gettagorigin("j_spine4"));
}
if(param_01.idflags & level.idflags_penetration)
{
maps\mp\_utility::incplayerstat("bulletpenkills",1);
}
if(self.pers["rank"] < param_01.pers["rank"])
{
maps\mp\_utility::incplayerstat("higherrankkills",1);
}
if(self.pers["rank"] > param_01.pers["rank"])
{
maps\mp\_utility::incplayerstat("lowerrankkills",1);
}
if(isdefined(self.infinalstand) && self.infinalstand)
{
maps\mp\_utility::incplayerstat("laststandkills",1);
}
if(isdefined(param_01.infinalstand) && param_01.infinalstand)
{
maps\mp\_utility::incplayerstat("laststanderkills",1);
}
if(self getcurrentweapon() != self.primaryweapon && self getcurrentweapon() != self.secondaryweapon)
{
maps\mp\_utility::incplayerstat("otherweaponkills",1);
}
var_06 = gettime() - param_01.spawntime;
if(!maps\mp\_utility::matchmakinggame())
{
param_01 maps\mp\_utility::setplayerstatiflower("shortestlife",var_06);
}
param_01 maps\mp\_utility::setplayerstatifgreater("longestlife",var_06);
if(param_03 != "MOD_MELEE")
{
switch(var_04)
{
case "weapon_pistol":
case "weapon_projectile":
case "weapon_shotgun":
case "weapon_lmg":
case "weapon_sniper":
case "weapon_assault":
case "weapon_smg":
checkmatchdataweaponkills(param_01,param_02,param_03,var_04);
break;
case "weapon_explosive":
case "weapon_grenade":
checkmatchdataequipmentkills(param_01,param_02,param_03);
break;
default:
break;
}
}
}
//Function Number: 7
checkmatchdataweaponkills(param_00,param_01,param_02,param_03)
{
var_04 = self;
var_05 = undefined;
var_06 = undefined;
var_07 = undefined;
switch(param_03)
{
case "weapon_pistol":
var_05 = "pistolkills";
var_06 = "pistolheadshots";
break;
case "weapon_smg":
var_05 = "smgkills";
var_06 = "smgheadshots";
break;
case "weapon_assault":
var_05 = "arkills";
var_06 = "arheadshots";
break;
case "weapon_projectile":
if(weaponclass(param_01) == "rocketlauncher")
{
var_05 = "rocketkills";
}
break;
case "weapon_sniper":
var_05 = "sniperkills";
var_06 = "sniperheadshots";
break;
case "weapon_shotgun":
var_05 = "shotgunkills";
var_06 = "shotgunheadshots";
var_07 = "shotgundeaths";
break;
case "weapon_lmg":
var_05 = "lmgkills";
var_06 = "lmgheadshots";
break;
default:
break;
}
if(isdefined(var_05))
{
var_04 maps\mp\_utility::incplayerstat(var_05,1);
}
if(isdefined(var_06) && param_02 == "MOD_HEAD_SHOT")
{
var_04 maps\mp\_utility::incplayerstat(var_06,1);
}
if(isdefined(var_07) && !maps\mp\_utility::matchmakinggame())
{
param_00 maps\mp\_utility::incplayerstat(var_07,1);
}
if(var_04 playerads() > 0.5)
{
var_04 maps\mp\_utility::incplayerstat("adskills",1);
if(param_03 == "weapon_sniper" || issubstr(param_01,"acog"))
{
var_04 maps\mp\_utility::incplayerstat("scopedkills",1);
}
if(issubstr(param_01,"thermal"))
{
var_04 maps\mp\_utility::incplayerstat("thermalkills",1);
return;
}
return;
}
var_04 maps\mp\_utility::incplayerstat("hipfirekills",1);
}
//Function Number: 8
checkmatchdataequipmentkills(param_00,param_01,param_02)
{
var_03 = self;
switch(param_01)
{
case "frag_grenade_mp":
var_03 maps\mp\_utility::incplayerstat("fragkills",1);
var_03 maps\mp\_utility::incplayerstat("grenadekills",1);
var_04 = 1;
break;
case "c4_mp":
var_04 maps\mp\_utility::incplayerstat("c4kills",1);
var_04 = 1;
break;
case "semtex_mp":
var_04 maps\mp\_utility::incplayerstat("semtexkills",1);
var_04 maps\mp\_utility::incplayerstat("grenadekills",1);
var_04 = 1;
break;
case "claymore_mp":
var_04 maps\mp\_utility::incplayerstat("claymorekills",1);
var_04 = 1;
break;
case "throwingknife_mp":
var_04 maps\mp\_utility::incplayerstat("throwingknifekills",1);
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_KNIFETHROW");
var_04 = 1;
break;
default:
var_04 = 0;
break;
}
if(var_04)
{
var_03 maps\mp\_utility::incplayerstat("equipmentkills",1);
}
}
//Function Number: 9
campercheck()
{
self.lastkillwascamping = 0;
if(!isdefined(self.lastkilllocation))
{
self.lastkilllocation = self.origin;
self.lastcampkilltime = gettime();
return;
}
if(distance(self.lastkilllocation,self.origin) < 512 && gettime() - self.lastcampkilltime > 5000)
{
maps\mp\_utility::incplayerstat("mostcamperkills",1);
self.lastkillwascamping = 1;
}
self.lastkilllocation = self.origin;
self.lastcampkilltime = gettime();
}
//Function Number: 10
consolation(param_00)
{
}
//Function Number: 11
proximityassist(param_00)
{
self.modifiers["proximityAssist"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_PROXIMITYASSIST");
thread maps\mp\gametypes\_rank::giverankxp("proximityassist");
}
//Function Number: 12
proximitykill(param_00)
{
self.modifiers["proximityKill"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_PROXIMITYKILL");
thread maps\mp\gametypes\_rank::giverankxp("proximitykill");
}
//Function Number: 13
longshot(param_00,param_01,param_02)
{
self.modifiers["longshot"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_LONGSHOT");
thread maps\mp\gametypes\_rank::giverankxp("longshot",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("longshot");
maps\mp\_utility::incplayerstat("longshots",1);
thread maps\mp\_matchdata::logkillevent(param_00,"longshot");
}
//Function Number: 14
execution(param_00,param_01,param_02)
{
self.modifiers["execution"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_EXECUTION");
thread maps\mp\gametypes\_rank::giverankxp("execution",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("execution");
thread maps\mp\_matchdata::logkillevent(param_00,"execution");
}
//Function Number: 15
headshot(param_00,param_01,param_02)
{
self.modifiers["headshot"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_HEADSHOT");
thread maps\mp\gametypes\_rank::giverankxp("headshot",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("headshot");
thread maps\mp\_matchdata::logkillevent(param_00,"headshot");
}
//Function Number: 16
avengedplayer(param_00,param_01,param_02)
{
self.modifiers["avenger"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_AVENGER");
thread maps\mp\gametypes\_rank::giverankxp("avenger",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("avenger");
thread maps\mp\_matchdata::logkillevent(param_00,"avenger");
maps\mp\_utility::incplayerstat("avengekills",1);
}
//Function Number: 17
assistedsuicide(param_00,param_01,param_02)
{
self.modifiers["assistedsuicide"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_ASSISTEDSUICIDE");
thread maps\mp\gametypes\_rank::giverankxp("assistedsuicide",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedsuicide");
thread maps\mp\_matchdata::logkillevent(param_00,"assistedsuicide");
}
//Function Number: 18
defendedplayer(param_00,param_01,param_02)
{
self.modifiers["defender"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DEFENDER");
thread maps\mp\gametypes\_rank::giverankxp("defender",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("defender");
thread maps\mp\_matchdata::logkillevent(param_00,"defender");
maps\mp\_utility::incplayerstat("rescues",1);
}
//Function Number: 19
postdeathkill(param_00)
{
self.modifiers["posthumous"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_POSTHUMOUS");
thread maps\mp\gametypes\_rank::giverankxp("posthumous");
thread maps\mp\_matchdata::logkillevent(param_00,"posthumous");
}
//Function Number: 20
backstab(param_00)
{
self iprintlnbold("backstab");
}
//Function Number: 21
revenge(param_00)
{
self.modifiers["revenge"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_REVENGE");
thread maps\mp\gametypes\_rank::giverankxp("revenge");
maps\mp\killstreaks\_killstreaks::giveadrenaline("revenge");
thread maps\mp\_matchdata::logkillevent(param_00,"revenge");
maps\mp\_utility::incplayerstat("revengekills",1);
}
//Function Number: 22
multikill(param_00,param_01)
{
if(param_01 == 2)
{
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DOUBLEKILL");
maps\mp\killstreaks\_killstreaks::giveadrenaline("double");
}
else if(param_01 == 3)
{
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_TRIPLEKILL");
maps\mp\killstreaks\_killstreaks::giveadrenaline("triple");
thread maps\mp\_utility::teamplayercardsplash("callout_3xkill",self);
}
else
{
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_MULTIKILL");
maps\mp\killstreaks\_killstreaks::giveadrenaline("multi");
thread maps\mp\_utility::teamplayercardsplash("callout_3xpluskill",self);
}
thread maps\mp\_matchdata::logmultikill(param_00,param_01);
maps\mp\_utility::setplayerstatifgreater("multikill",param_01);
maps\mp\_utility::incplayerstat("mostmultikills",1);
}
//Function Number: 23
firstblood(param_00,param_01,param_02)
{
self.modifiers["firstblood"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_FIRSTBLOOD");
thread maps\mp\gametypes\_rank::giverankxp("firstblood",undefined,param_01,param_02);
thread maps\mp\_matchdata::logkillevent(param_00,"firstblood");
maps\mp\killstreaks\_killstreaks::giveadrenaline("firstBlood");
thread maps\mp\_utility::teamplayercardsplash("callout_firstblood",self);
}
//Function Number: 24
winningshot(param_00)
{
}
//Function Number: 25
buzzkill(param_00,param_01,param_02,param_03)
{
self.modifiers["buzzkill"] = param_01.pers["cur_kill_streak"];
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_BUZZKILL");
thread maps\mp\gametypes\_rank::giverankxp("buzzkill",undefined,param_02,param_03);
maps\mp\killstreaks\_killstreaks::giveadrenaline("buzzkill");
thread maps\mp\_matchdata::logkillevent(param_00,"buzzkill");
}
//Function Number: 26
comeback(param_00,param_01,param_02)
{
self.modifiers["comeback"] = 1;
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_COMEBACK");
thread maps\mp\gametypes\_rank::giverankxp("comeback",undefined,param_01,param_02);
maps\mp\killstreaks\_killstreaks::giveadrenaline("comeback");
thread maps\mp\_matchdata::logkillevent(param_00,"comeback");
maps\mp\_utility::incplayerstat("comebacks",1);
}
//Function Number: 27
disconnected()
{
var_00 = self.guid;
for(var_01 = 0;var_01 < level.players.size;var_01++)
{
if(isdefined(level.players[var_01].killedplayers[var_00]))
{
level.players[var_01].killedplayers[var_00] = undefined;
}
if(isdefined(level.players[var_01].killedplayerscurrent[var_00]))
{
level.players[var_01].killedplayerscurrent[var_00] = undefined;
}
if(isdefined(level.players[var_01].killedby[var_00]))
{
level.players[var_01].killedby[var_00] = undefined;
}
}
}
//Function Number: 28
monitorhealed()
{
level endon("end_game");
self endon("disconnect");
for(;;)
{
self waittill("healed");
maps\mp\killstreaks\_killstreaks::giveadrenaline("healed");
}
}
//Function Number: 29
updaterecentkills(param_00)
{
self endon("disconnect");
level endon("game_ended");
self notify("updateRecentKills");
self endon("updateRecentKills");
self.recentkillcount++;
wait 1;
if(self.recentkillcount > 1)
{
multikill(param_00,self.recentkillcount);
}
self.recentkillcount = 0;
}
//Function Number: 30
monitorcratejacking()
{
level endon("end_game");
self endon("disconnect");
for(;;)
{
self waittill("hijacker",var_00,var_01);
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_HIJACKER");
thread maps\mp\gametypes\_rank::giverankxp("hijacker",100);
var_02 = "hijacked_airdrop";
var_03 = "ch_hijacker";
switch(var_00)
{
case "sentry":
var_02 = "hijacked_sentry";
break;
case "juggernaut":
var_02 = "hijacked_juggernaut";
break;
case "remote_tank":
var_02 = "hijacked_remote_tank";
break;
case "emergency_airdrop":
case "mega":
var_02 = "hijacked_emergency_airdrop";
var_03 = "ch_newjack";
break;
default:
break;
}
if(isdefined(var_01))
{
var_01 maps\mp\gametypes\_hud_message::playercardsplashnotify(var_02,self);
}
self notify("process",var_03);
}
}
//Function Number: 31
monitorobjectives()
{
level endon("end_game");
self endon("disconnect");
for(;;)
{
self waittill("objective",var_00);
if(var_00 == "captured")
{
maps\mp\killstreaks\_killstreaks::giveadrenaline("capture");
if(isdefined(self.laststand) && self.laststand)
{
thread maps\mp\gametypes\_hud_message::splashnotifydelayed("heroic",100);
thread maps\mp\gametypes\_rank::giverankxp("reviver",100);
}
}
if(var_00 == "assistedCapture")
{
maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedCapture");
}
if(var_00 == "plant")
{
maps\mp\killstreaks\_killstreaks::giveadrenaline("plant");
}
if(var_00 == "defuse")
{
maps\mp\killstreaks\_killstreaks::giveadrenaline("defuse");
}
}
}

View File

@ -0,0 +1,174 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_flashgrenades.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 132 ms
* Timestamp: 10/27/2023 2:15:01 AM
*******************************************************************/
//Function Number: 1
main()
{
precacheshellshock("flashbang_mp");
}
//Function Number: 2
startmonitoringflash()
{
thread monitorflash();
}
//Function Number: 3
stopmonitoringflash(param_00)
{
self notify("stop_monitoring_flash");
}
//Function Number: 4
flashrumbleloop(param_00)
{
self endon("stop_monitoring_flash");
self endon("flash_rumble_loop");
self notify("flash_rumble_loop");
var_01 = gettime() + param_00 * 1000;
while(gettime() < var_01)
{
self playrumbleonentity("damage_heavy");
wait 0.05;
}
}
//Function Number: 5
monitorflash()
{
self endon("disconnect");
self.flashendtime = 0;
for(;;)
{
self waittill("flashbang",var_00,var_01,var_02,var_03);
if(!isalive(self))
{
continue;
}
if(isdefined(self.usingremote))
{
continue;
}
var_04 = 0;
var_05 = 1;
if(var_02 < 0.25)
{
var_02 = 0.25;
}
else if(var_02 > 0.8)
{
var_02 = 1;
}
var_06 = var_01 * var_02 * 5.5;
if(isdefined(self.stunscaler))
{
var_06 = var_06 * self.stunscaler;
}
if(var_06 < 0.25)
{
continue;
}
var_07 = undefined;
if(var_06 > 2)
{
var_07 = 0.75;
}
else
{
var_07 = 0.25;
}
if(level.teambased && isdefined(var_03) && isdefined(var_03.pers["team"]) && var_03.pers["team"] == self.pers["team"] && var_03 != self)
{
if(level.friendlyfire == 0)
{
continue;
}
else if(level.friendlyfire == 1)
{
}
else if(level.friendlyfire == 2)
{
var_06 = var_06 * 0.5;
var_07 = var_07 * 0.5;
var_05 = 0;
var_04 = 1;
}
else if(level.friendlyfire == 3)
{
var_06 = var_06 * 0.5;
var_07 = var_07 * 0.5;
var_04 = 1;
}
}
else if(isdefined(var_03))
{
var_03 notify("flash_hit");
if(var_03 != self)
{
var_03 maps\mp\gametypes\_missions::processchallenge("ch_indecentexposure");
}
}
if(var_05 && isdefined(self))
{
thread applyflash(var_06,var_07);
if(isdefined(var_03) && var_03 != self)
{
var_03 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback("flash");
}
}
if(var_04 && isdefined(var_03))
{
var_03 thread applyflash(var_06,var_07);
}
}
}
//Function Number: 6
applyflash(param_00,param_01)
{
if(!isdefined(self.flashduration) || param_00 > self.flashduration)
{
self.flashduration = param_00;
}
if(!isdefined(self.flashrumbleduration) || param_01 > self.flashrumbleduration)
{
self.flashrumbleduration = param_01;
}
wait 0.05;
if(isdefined(self.flashduration))
{
self shellshock("flashbang_mp",self.flashduration);
self.flashendtime = gettime() + self.flashduration * 1000;
}
if(isdefined(self.flashrumbleduration))
{
thread flashrumbleloop(self.flashrumbleduration);
}
self.flashduration = undefined;
self.flashrumbleduration = undefined;
}
//Function Number: 7
isflashbanged()
{
return isdefined(self.flashendtime) && gettime() < self.flashendtime;
}

101
MW3/PC/MP/maps/mp/_fx.gsc Normal file
View File

@ -0,0 +1,101 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_fx.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 144 ms
* Timestamp: 10/27/2023 2:15:01 AM
*******************************************************************/
//Function Number: 1
script_print_fx()
{
if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay))
{
self delete();
return;
}
if(isdefined(self.target))
{
var_00 = getent(self.target).origin;
}
else
{
var_00 = "undefined";
}
if(self.script_fxcommand == "OneShotfx")
{
}
if(self.script_fxcommand == "loopfx")
{
}
if(self.script_fxcommand == "loopsound")
{
}
}
//Function Number: 2
script_playfx(param_00,param_01,param_02)
{
if(!param_00)
{
return;
}
if(isdefined(param_02))
{
playfx(param_00,param_01,param_02);
return;
}
playfx(param_00,param_01);
}
//Function Number: 3
script_playfxontag(param_00,param_01,param_02)
{
if(!param_00)
{
return;
}
playfxontag(param_00,param_01,param_02);
}
//Function Number: 4
grenadeexplosionfx(param_00)
{
playfx(level._effect["mechanical explosion"],param_00);
earthquake(0.15,0.5,param_00,250);
}
//Function Number: 5
soundfx(param_00,param_01,param_02)
{
var_03 = spawn("script_origin",(0,0,0));
var_03.origin = param_01;
var_03 playloopsound(param_00);
if(isdefined(param_02))
{
var_03 thread soundfxdelete(param_02);
}
}
//Function Number: 6
soundfxdelete(param_00)
{
level waittill(param_00);
self delete();
}
//Function Number: 7
blenddelete(param_00)
{
self waittill("death");
param_00 delete();
}

View File

@ -0,0 +1,93 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_global_fx.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 45 ms
* Timestamp: 10/27/2023 2:16:52 AM
*******************************************************************/
//Function Number: 1
main()
{
var_00 = randomfloatrange(-20,-15);
global_fx("barrel_fireFX_origin","global_barrel_fire","fire/firelp_barrel_pm",var_00,"fire_barrel_small");
global_fx("ch_streetlight_02_FX_origin","ch_streetlight_02_FX","misc/lighthaze",var_00);
global_fx("me_streetlight_01_FX_origin","me_streetlight_01_FX","misc/lighthaze_bog_a",var_00);
global_fx("ch_street_light_01_on","lamp_glow_FX","misc/light_glow_white",var_00);
global_fx("lamp_post_globe_on","lamp_glow_FX","misc/light_glow_white",var_00);
global_fx("highway_lamp_post","ch_streetlight_02_FX","misc/lighthaze_villassault",var_00);
global_fx("cs_cargoship_spotlight_on_FX_origin","cs_cargoship_spotlight_on_FX","misc/lighthaze",var_00);
global_fx("me_dumpster_fire_FX_origin","me_dumpster_fire_FX","fire/firelp_med_pm",var_00,"fire_dumpster_medium");
global_fx("com_tires_burning01_FX_origin","com_tires_burning01_FX","fire/tire_fire_med",var_00);
global_fx("icbm_powerlinetower_FX_origin","icbm_powerlinetower_FX","misc/power_tower_light_red_blink",var_00);
global_fx("icbm_mainframe_FX_origin","icbm_mainframe_FX","props/icbm_mainframe_lightblink",var_00);
global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2);
global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2);
global_fx("light_pulse_orange_FX_origin","light_pulse_orange_FX","misc/light_glow_orange_generic_pulse",-2);
global_fx("light_red_blink_FX_origin","light_red_blink","misc/power_tower_light_red_blink",-2);
global_fx("lighthaze_oilrig_FX_origin","lighthaze_oilrig","misc/lighthaze_oilrig",var_00);
global_fx("lighthaze_white_FX_origin","lighthaze_white","misc/lighthaze_white",var_00);
global_fx("light_glow_walllight_white_FX_origin","light_glow_walllight_white","misc/light_glow_walllight_white",var_00);
global_fx("fluorescent_glow_FX_origin","fluorescent_glow","misc/fluorescent_glow",var_00);
global_fx("light_glow_industrial_FX_origin","light_glow_industrial","misc/light_glow_industrial",var_00);
global_fx("light_red_steady_FX_origin","light_red_steady","misc/tower_light_red_steady",-2);
global_fx("light_blue_steady_FX_origin","light_blue_steady","misc/tower_light_blue_steady",-2);
global_fx("light_orange_steady_FX_origin","light_orange_steady","misc/tower_light_orange_steady",-2);
global_fx("glow_stick_pile_FX_origin","glow_stick_pile","misc/glow_stick_glow_pile",-2);
global_fx("glow_stick_orange_pile_FX_origin","glow_stick_pile_orange","misc/glow_stick_glow_pile_orange",-2);
global_fx("highrise_blinky_tower","highrise_blinky_tower_FX","misc/power_tower_light_red_blink_large",var_00);
global_fx("flare_ambient_FX_origin","flare_ambient_FX","misc/flare_ambient",var_00,"emt_road_flare_burn");
global_fx("light_glow_white_bulb_FX_origin","light_glow_white_bulb_FX","misc/light_glow_white_bulb",var_00);
global_fx("light_glow_white_lamp_FX_origin","light_glow_white_lamp_FX","misc/light_glow_white_lamp",var_00);
}
//Function Number: 2
global_fx(param_00,param_01,param_02,param_03,param_04)
{
var_05 = common_scripts\utility::getstructarray(param_00,"targetname");
if(!isdefined(var_05))
{
return;
}
if(var_05.size <= 0)
{
return;
}
for(var_06 = 0;var_06 < var_05.size;var_06++)
{
var_05[var_06] global_fx_create(param_01,param_02,param_03,param_04);
}
}
//Function Number: 3
global_fx_create(param_00,param_01,param_02,param_03)
{
if(!isdefined(level._effect))
{
level._effect = [];
}
if(!isdefined(level._effect[param_00]))
{
level._effect[param_00] = loadfx(param_01);
}
if(!isdefined(self.angles))
{
self.angles = (0,0,0);
}
var_04 = common_scripts\utility::createoneshoteffect(param_00);
var_04.v["origin"] = self.origin;
var_04.v["angles"] = self.angles;
var_04.v["fxid"] = param_00;
var_04.v["delay"] = param_02;
if(isdefined(param_03))
{
var_04.v["soundalias"] = param_03;
}
}

View File

@ -0,0 +1,23 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_highlights.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 1
* Decompile Time: 20 ms
* Timestamp: 10/27/2023 2:16:53 AM
*******************************************************************/
//Function Number: 1
givehighlight(param_00,param_01)
{
var_02 = getclientmatchdata("highlightCount");
if(var_02 < 18)
{
setclientmatchdata("highlights",var_02,"award",param_00);
setclientmatchdata("highlights",var_02,"clientId",self.clientmatchdataid);
setclientmatchdata("highlights",var_02,"value",param_01);
var_02++;
setclientmatchdata("highlightCount",var_02);
}
}

View File

@ -0,0 +1,509 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_javelin.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 15
* Decompile Time: 260 ms
* Timestamp: 10/27/2023 2:15:03 AM
*******************************************************************/
//Function Number: 1
initjavelinusage()
{
self.javelinstage = undefined;
self.javelinpoints = undefined;
self.javelinnormals = undefined;
self.javelinlockmisses = undefined;
self.javelintargetpoint = undefined;
self.javelintargetnormal = undefined;
self.javelinlockstarttime = undefined;
}
//Function Number: 2
resetjavelinlocking()
{
if(!isdefined(self.javelinuseentered))
{
return;
}
self.javelinuseentered = undefined;
self notify("stop_lockon_sound");
self weaponlockfree();
self weaponlocktargettooclose(0);
self weaponlocknoclearance(0);
self.currentlylocking = 0;
self.currentlylocked = 0;
self.javelintarget = undefined;
self stoplocalsound("javelin_clu_lock");
self stoplocalsound("javelin_clu_aquiring_lock");
initjavelinusage();
}
//Function Number: 3
eyetraceforward()
{
var_00 = self geteye();
var_01 = self getplayerangles();
var_02 = anglestoforward(var_01);
var_03 = var_00 + var_02 * 15000;
var_04 = bullettrace(var_00,var_03,0,undefined);
if(var_04["surfacetype"] == "none")
{
return undefined;
}
if(var_04["surfacetype"] == "default")
{
return undefined;
}
var_05 = var_04["entity"];
if(isdefined(var_05))
{
if(var_05 == level.ac130.planemodel)
{
return undefined;
}
}
var_06 = [];
return var_7B;
}
//Function Number: 4
lockmissesreset()
{
self.javelinlockmisses = undefined;
}
//Function Number: 5
lockmissesincr()
{
if(!isdefined(self.javelinlockmisses))
{
self.javelinlockmisses = 1;
return;
}
self.javelinlockmisses++;
}
//Function Number: 6
lockmissespassedthreshold()
{
var_00 = 4;
if(isdefined(self.javelinlockmisses) && self.javelinlockmisses >= var_00)
{
return 1;
}
return 0;
}
//Function Number: 7
targetpointtooclose(param_00)
{
var_01 = 1100;
var_02 = distance(self.origin,param_00);
if(var_02 < var_01)
{
return 1;
}
return 0;
}
//Function Number: 8
looplocalseeksound(param_00,param_01)
{
self endon("death");
self endon("disconnect");
self endon("stop_lockon_sound");
for(;;)
{
self playlocalsound(param_00);
wait param_01;
}
}
//Function Number: 9
topattackpasses(param_00,param_01)
{
var_02 = param_00 + param_01 * 10;
var_03 = var_02 + (0,0,2000);
var_04 = bullettrace(var_02,var_03,0,undefined);
if(sighttracepassed(var_02,var_03,0,undefined))
{
return 1;
}
return 0;
}
//Function Number: 10
javelinusageloop()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
var_00 = 1150;
var_01 = 25;
var_02 = 100;
var_03 = 400;
var_04 = 12;
var_05 = 0;
var_06 = 0;
self.javelintarget = undefined;
initjavelinusage();
for(;;)
{
wait 0.05;
var_07 = 0;
if(getdvar("missileDebugDraw") == "1")
{
var_07 = 1;
}
var_08 = 0;
if(getdvar("missileDebugText") == "1")
{
var_08 = 1;
}
var_09 = self getcurrentweapon();
if(!issubstr(var_09,"javelin") || maps\mp\_utility::isemped())
{
resetjavelinlocking();
continue;
}
if(self playerads() < 0.95)
{
var_06 = gettime();
resetjavelinlocking();
continue;
}
self.javelinuseentered = 1;
if(!isdefined(self.javelinstage))
{
self.javelinstage = 1;
}
if(self.javelinstage == 1)
{
var_0A = maps\mp\_stinger::gettargetlist();
if(var_0A.size != 0)
{
var_0B = [];
foreach(var_0D in var_0A)
{
var_0E = self worldpointinreticle_circle(var_0D.origin,65,40);
if(var_0E)
{
var_0B[var_0B.size] = var_0D;
}
}
if(var_0B.size != 0)
{
var_10 = sortbydistance(var_0B,self.origin);
if(!vehiclelocksighttest(var_10[0]))
{
continue;
}
if(var_08)
{
}
self.javelintarget = var_10[0];
if(!isdefined(self.javelinlockstarttime))
{
self.javelinlockstarttime = gettime();
}
self.javelinstage = 2;
self.javelinlostsightlinetime = 0;
javelinlockvehicle(var_00);
self.javelinstage = 1;
continue;
}
}
if(lockmissespassedthreshold())
{
resetjavelinlocking();
continue;
}
var_11 = gettime() - var_06;
if(var_11 < var_02)
{
continue;
}
var_11 = gettime() - var_05;
if(var_11 < var_01)
{
continue;
}
var_05 = gettime();
var_15 = eyetraceforward();
if(!isdefined(var_15))
{
lockmissesincr();
continue;
}
if(targetpointtooclose(var_15[0]))
{
self weaponlocktargettooclose(1);
continue;
}
else
{
self weaponlocktargettooclose(0);
}
if(isdefined(self.javelinpoints))
{
var_16 = averagepoint(self.javelinpoints);
var_17 = distance(var_16,var_15[0]);
if(var_17 > var_03)
{
lockmissesincr();
continue;
}
}
else
{
self.javelinpoints = [];
self.javelinnormals = [];
}
self.javelinpoints[self.javelinpoints.size] = var_15[0];
self.javelinnormals[self.javelinnormals.size] = var_15[1];
lockmissesreset();
if(self.javelinpoints.size < var_04)
{
continue;
}
self.javelintargetpoint = averagepoint(self.javelinpoints);
self.javelintargetnormal = averagenormal(self.javelinnormals);
self.javelinlockmisses = undefined;
self.javelinpoints = undefined;
self.javelinnormals = undefined;
self.javelinlockstarttime = gettime();
self weaponlockstart(self.javelintargetpoint);
thread looplocalseeksound("javelin_clu_aquiring_lock",0.6);
self.javelinstage = 2;
}
if(self.javelinstage == 2)
{
var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45);
if(!var_0E)
{
resetjavelinlocking();
continue;
}
if(targetpointtooclose(self.javelintargetpoint))
{
self weaponlocktargettooclose(1);
}
else
{
self weaponlocktargettooclose(0);
}
var_11 = gettime() - self.javelinlockstarttime;
if(var_11 < var_00)
{
continue;
}
self weaponlockfinalize(self.javelintargetpoint,(0,0,0),1);
self notify("stop_lockon_sound");
self playlocalsound("javelin_clu_lock");
self.javelinstage = 3;
}
if(self.javelinstage == 3)
{
var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45);
if(!var_0E)
{
resetjavelinlocking();
continue;
}
if(targetpointtooclose(self.javelintargetpoint))
{
self weaponlocktargettooclose(1);
}
else
{
self weaponlocktargettooclose(0);
}
continue;
}
}
}
//Function Number: 11
debugsightline(param_00,param_01,param_02)
{
}
//Function Number: 12
vehiclelocksighttest(param_00)
{
var_01 = self geteye();
var_02 = param_00 getpointinbounds(0,0,0);
var_03 = sighttracepassed(var_01,var_02,0,param_00);
debugsightline(var_01,var_02,var_03);
if(var_03)
{
return 1;
}
var_04 = param_00 getpointinbounds(1,0,0);
var_03 = sighttracepassed(var_01,var_04,0,param_00);
debugsightline(var_01,var_04,var_03);
if(var_03)
{
return 1;
}
var_05 = param_00 getpointinbounds(-1,0,0);
var_03 = sighttracepassed(var_01,var_05,0,param_00);
debugsightline(var_01,var_05,var_03);
if(var_03)
{
return 1;
}
return 0;
}
//Function Number: 13
javelinlockvehicle(param_00)
{
if(self.javelinstage == 2)
{
self weaponlockstart(self.javelintarget);
if(!stillvalidjavelinlock(self.javelintarget))
{
resetjavelinlocking();
self.javelinlockstarttime = undefined;
return;
}
var_01 = softsighttest();
if(!var_01)
{
self.javelinlockstarttime = undefined;
return;
}
if(!isdefined(self.currentlylocking) || !self.currentlylocking)
{
thread looplocalseeksound("javelin_clu_aquiring_lock",0.6);
self.currentlylocking = 1;
}
var_02 = gettime() - self.javelinlockstarttime;
if(maps\mp\_utility::_hasperk("specialty_fasterlockon"))
{
if(var_02 < param_00 * 0.5)
{
return;
}
}
else if(var_02 < param_00)
{
return;
}
if(isplayer(self.javelintarget))
{
self weaponlockfinalize(self.javelintarget,(0,0,64),0);
}
else
{
self weaponlockfinalize(self.javelintarget,(0,0,0),0);
}
self notify("stop_lockon_sound");
if(!isdefined(self.currentlylocked) || !self.currentlylocked)
{
self playlocalsound("javelin_clu_lock");
self.currentlylocked = 1;
}
self.javelinstage = 3;
}
if(self.javelinstage == 3)
{
var_01 = softsighttest();
if(!var_01)
{
return;
}
if(!stillvalidjavelinlock(self.javelintarget))
{
resetjavelinlocking();
return;
}
}
}
//Function Number: 14
stillvalidjavelinlock(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(!self worldpointinreticle_circle(param_00.origin,65,85))
{
return 0;
}
return 1;
}
//Function Number: 15
softsighttest()
{
var_00 = 500;
if(vehiclelocksighttest(self.javelintarget))
{
self.javelinlostsightlinetime = 0;
return 1;
}
if(self.javelinlostsightlinetime == 0)
{
self.javelinlostsightlinetime = gettime();
}
var_01 = gettime() - self.javelinlostsightlinetime;
if(var_01 >= var_00)
{
resetjavelinlocking();
return 0;
}
return 1;
}

430
MW3/PC/MP/maps/mp/_load.gsc Normal file
View File

@ -0,0 +1,430 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_load.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 142 ms
* Timestamp: 10/27/2023 2:15:03 AM
*******************************************************************/
//Function Number: 1
main()
{
if(isdefined(level._loadstarted))
{
return;
}
level._loadstarted = 1;
level.createfx_enabled = getdvar("createfx") != "";
common_scripts\utility::struct_class_init();
maps\mp\_utility::initgameflags();
maps\mp\_utility::initlevelflags();
level.generic_index = 0;
level.flag_struct = spawnstruct();
level.flag_struct common_scripts\utility::assign_unique_id();
if(!isdefined(level.flag))
{
level.flag = [];
level.flags_lock = [];
}
level.requiredmapaspectratio = getdvarfloat("scr_RequiredMapAspectratio",1);
level.createclientfontstring_func = ::maps\mp\gametypes\_hud_util::createfontstring;
level.hudsetpoint_func = ::maps\mp\gametypes\_hud_util::setpoint;
level.leaderdialogonplayer_func = ::maps\mp\_utility::leaderdialogonplayer;
thread maps\mp\gametypes\_tweakables::init();
if(!isdefined(level.func))
{
level.func = [];
}
level.func["precacheMpAnim"] = ::precachempanim;
level.func["scriptModelPlayAnim"] = ::scriptmodelplayanim;
level.func["scriptModelClearAnim"] = ::scriptmodelclearanim;
if(!level.createfx_enabled)
{
thread maps\mp\_minefields::minefields();
thread maps\mp\_radiation::radiation();
thread maps\mp\_shutter::main();
thread maps\mp\_destructables::init();
thread common_scripts\_elevator::init();
thread common_scripts\_dynamic_world::init();
thread common_scripts\_destructible::init();
thread common_scripts\_pipes::main();
}
if(getmapcustom("thermal") == "invert")
{
game["thermal_vision"] = "thermal_snowlevel_mp";
setthermalbodymaterial("thermalbody_snowlevel");
}
else
{
game["thermal_vision"] = "thermal_mp";
}
visionsetnaked("",0);
visionsetnight("default_night_mp");
visionsetmissilecam("missilecam");
visionsetthermal(game["thermal_vision"]);
visionsetpain("near_death_mp",0);
var_00 = getentarray("lantern_glowFX_origin","targetname");
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_00[var_01] thread lanterns();
}
maps\mp\_audio::init_audio();
lib_0375::main();
setupexploders();
thread common_scripts\_fx::initfx();
if(level.createfx_enabled)
{
maps\mp\_createfx::createfx();
}
if(getdvar("r_reflectionProbeGenerate") == "1")
{
maps\mp\gametypes\_spawnlogic::setmapcenterforreflections();
maps\mp\_global_fx::main();
level waittill("eternity");
}
thread maps\mp\_global_fx::main();
for(var_02 = 0;var_02 < 6;var_02++)
{
switch(var_02)
{
case 0:
var_03 = "trigger_multiple";
break;
case 1:
var_03 = "trigger_once";
break;
case 2:
var_03 = "trigger_use";
break;
case 3:
var_03 = "trigger_radius";
break;
case 4:
var_03 = "trigger_lookat";
break;
default:
var_03 = "trigger_damage";
break;
}
var_04 = getentarray(var_03,"classname");
for(var_01 = 0;var_01 < var_04.size;var_01++)
{
if(isdefined(var_04[var_01].script_prefab_exploder))
{
var_04[var_01].script_exploder = var_04[var_01].script_prefab_exploder;
}
if(isdefined(var_04[var_01].script_exploder))
{
level thread exploder_load(var_04[var_01]);
}
}
}
var_05 = getentarray("trigger_hurt","classname");
foreach(var_07 in var_05)
{
var_07 thread hurtplayersthink();
}
thread maps\mp\_animatedmodels::main();
level.func["damagefeedback"] = ::maps\mp\gametypes\_damagefeedback::updatedamagefeedback;
level.func["setTeamHeadIcon"] = ::maps\mp\_entityheadicons::setteamheadicon;
level.laseron_func = ::laseron;
level.laseroff_func = ::laseroff;
setdvar("sm_sunShadowScale",1);
setdvar("sm_spotLightScoreModelScale",0);
setdvar("r_specularcolorscale",2.5);
setdvar("r_diffusecolorscale",1);
setdvar("r_lightGridEnableTweaks",0);
setdvar("r_lightGridIntensity",1);
setdvar("r_lightGridContrast",0);
setupdestructiblekillcaments();
precacheitem("bomb_site_mp");
level.fauxvehiclecount = 0;
}
//Function Number: 2
exploder_load(param_00)
{
level endon("killexplodertridgers" + param_00.script_exploder);
param_00 waittill("trigger");
if(isdefined(param_00.script_chance) && randomfloat(1) > param_00.script_chance)
{
if(isdefined(param_00.script_delay))
{
wait param_00.script_delay;
}
else
{
wait 4;
}
level thread exploder_load(param_00);
return;
}
common_scripts\utility::exploder(param_00.script_exploder);
level notify("killexplodertridgers" + param_00.script_exploder);
}
//Function Number: 3
setupexploders()
{
var_00 = getentarray("script_brushmodel","classname");
var_01 = getentarray("script_model","classname");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_00[var_00.size] = var_01[var_02];
}
for(var_02 = 0;var_02 < var_00.size;var_02++)
{
if(isdefined(var_00[var_02].script_prefab_exploder))
{
var_00[var_02].script_exploder = var_00[var_02].script_prefab_exploder;
}
if(isdefined(var_00[var_02].script_exploder))
{
if(var_00[var_02].model == "fx" && !isdefined(var_00[var_02].targetname) || var_00[var_02].targetname != "exploderchunk")
{
var_00[var_02] hide();
continue;
}
if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploder")
{
var_00[var_02] hide();
var_00[var_02] notsolid();
continue;
}
if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploderchunk")
{
var_00[var_02] hide();
var_00[var_02] notsolid();
}
}
}
var_03 = [];
var_04 = getentarray("script_brushmodel","classname");
for(var_02 = 0;var_02 < var_04.size;var_02++)
{
if(isdefined(var_04[var_02].script_prefab_exploder))
{
var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder;
}
if(isdefined(var_04[var_02].script_exploder))
{
var_03[var_03.size] = var_04[var_02];
}
}
var_04 = getentarray("script_model","classname");
for(var_02 = 0;var_02 < var_04.size;var_02++)
{
if(isdefined(var_04[var_02].script_prefab_exploder))
{
var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder;
}
if(isdefined(var_04[var_02].script_exploder))
{
var_03[var_03.size] = var_04[var_02];
}
}
var_04 = getentarray("item_health","classname");
for(var_02 = 0;var_02 < var_04.size;var_02++)
{
if(isdefined(var_04[var_02].script_prefab_exploder))
{
var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder;
}
if(isdefined(var_04[var_02].script_exploder))
{
var_03[var_03.size] = var_04[var_02];
}
}
if(!isdefined(level.createfxent))
{
level.createfxent = [];
}
var_05 = [];
for(var_03 = 0;var_03 < var_04.size;var_03++ = var_7B["exploder"])
{
var_06 = var_04[var_03];
var_07 = common_scripts\utility::createexploder(var_06.script_fxid);
var_07.v = [];
var_07.v["origin"] = var_06.origin;
var_07.v["angles"] = var_06.angles;
var_07.v["delay"] = var_06.script_delay;
var_07.v["firefx"] = var_06.script_firefx;
var_07.v["firefxdelay"] = var_06.script_firefxdelay;
var_07.v["firefxsound"] = var_06.script_firefxsound;
var_07.v["firefxtimeout"] = var_06.script_firefxtimeout;
var_07.v["earthquake"] = var_06.script_earthquake;
var_07.v["damage"] = var_06.script_damage;
var_07.v["damage_radius"] = var_06.script_radius;
var_07.v["soundalias"] = var_06.script_soundalias;
var_07.v["repeat"] = var_06.script_repeat;
var_07.v["delay_min"] = var_06.script_delay_min;
var_07.v["delay_max"] = var_06.var_7E6;
var_07.v["target"] = var_06.target;
var_07.v["ender"] = var_06.script_ender;
var_07.v["type"] = "exploder";
if(!isdefined(var_06.script_fxid))
{
var_07.v["fxid"] = "No FX";
}
else
{
var_07.v["fxid"] = var_06.script_fxid;
}
var_07.v["exploder"] = var_06.script_exploder;
if(!isdefined(var_07.v["delay"]))
{
var_07.v["delay"] = 0;
}
if(isdefined(var_06.target))
{
var_08 = getent(var_07.v["target"],"targetname").origin;
var_07.v["angles"] = vectortoangles(var_08 - var_07.v["origin"]);
}
if(var_06.classname == "script_brushmodel" || isdefined(var_06.model))
{
var_07.model = var_06;
var_07.model.disconnect_paths = var_06.script_disconnectpaths;
}
if(isdefined(var_06.targetname) && isdefined(var_7B[var_06.targetname]))
{
var_07.v["exploder_type"] = var_06.targetname;
}
else
{
var_07.v["exploder_type"] = "normal";
}
var_07 common_scripts\_createfx::post_entity_creation_function();
}
}
//Function Number: 4
lanterns()
{
if(!isdefined(level._effect["lantern_light"]))
{
level._effect["lantern_light"] = loadfx("props/glow_latern");
}
common_scripts\_fx::loopfx("lantern_light",self.origin,0.3,self.origin + (0,0,1));
}
//Function Number: 5
hurtplayersthink()
{
level endon("game_ended");
wait randomfloat(1);
for(;;)
{
foreach(var_01 in level.players)
{
if(var_01 istouching(self) && maps\mp\_utility::isreallyalive(var_01))
{
var_01 maps\mp\_utility::_suicide();
}
}
wait 0.5;
}
}
//Function Number: 6
setupdestructiblekillcaments()
{
var_00 = getentarray("destructible_vehicle","targetname");
foreach(var_02 in var_00)
{
switch(getdvar("mapname"))
{
case "mp_interchange":
if(var_02.origin[2] > 150)
{
break;
}
break;
}
var_03 = var_02.origin + (0,0,5);
var_04 = var_02.origin + (0,0,128);
var_05 = bullettrace(var_03,var_04,0,var_02);
var_02.killcament = spawn("script_model",var_05["position"]);
var_02.killcament.targetname = "killCamEnt_destructible_vehicle";
var_02.killcament setscriptmoverkillcam("explosive");
var_02 thread deletedestructiblekillcament();
}
var_07 = getentarray("destructible_toy","targetname");
foreach(var_02 in var_07)
{
var_03 = var_02.origin + (0,0,5);
var_04 = var_02.origin + (0,0,128);
var_05 = bullettrace(var_03,var_04,0,var_02);
var_02.killcament = spawn("script_model",var_05["position"]);
var_02.killcament.targetname = "killCamEnt_destructible_toy";
var_02.killcament setscriptmoverkillcam("explosive");
var_02 thread deletedestructiblekillcament();
}
var_0A = getentarray("explodable_barrel","targetname");
foreach(var_02 in var_0A)
{
var_03 = var_02.origin + (0,0,5);
var_04 = var_02.origin + (0,0,128);
var_05 = bullettrace(var_03,var_04,0,var_02);
var_02.killcament = spawn("script_model",var_05["position"]);
var_02.killcament.targetname = "killCamEnt_explodable_barrel";
var_02.killcament setscriptmoverkillcam("explosive");
var_02 thread deletedestructiblekillcament();
}
}
//Function Number: 7
deletedestructiblekillcament()
{
level endon("game_ended");
var_00 = self.killcament;
var_00 endon("death");
self waittill("death");
wait 10;
if(isdefined(var_00))
{
var_00 delete();
}
}

View File

@ -0,0 +1,704 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_matchdata.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 25
* Decompile Time: 453 ms
* Timestamp: 10/27/2023 2:15:05 AM
*******************************************************************/
//Function Number: 1
init()
{
if(!isdefined(game["gamestarted"]))
{
setmatchdatadef("mp/matchdata.def");
setmatchdata("map",level.script);
if(level.hardcoremode)
{
var_00 = level.gametype + " hc";
setmatchdata("gametype",var_00);
}
else
{
setmatchdata("gametype",level.gametype);
}
setmatchdata("buildVersion",getbuildversion());
setmatchdata("buildNumber",getbuildnumber());
setmatchdata("dateTime",getsystemtime());
setmatchdataid();
}
level.maxlives = 285;
level.maxnamelength = 26;
level.maxevents = 150;
level.maxkillstreaks = 125;
level.maxlogclients = 30;
level.maxnumchallengesperplayer = 10;
level.maxnumawardsperplayer = 10;
level thread gameendlistener();
level thread endofgamesummarylogger();
}
//Function Number: 2
getmatchdatetime()
{
return getmatchdata("dateTime");
}
//Function Number: 3
logkillstreakevent(param_00,param_01)
{
if(!canlogclient(self) || !canlogkillstreak())
{
return;
}
var_02 = getmatchdata("killstreakCount");
setmatchdata("killstreakCount",var_02 + 1);
setmatchdata("killstreaks",var_02,"eventType",param_00);
setmatchdata("killstreaks",var_02,"player",self.clientid);
setmatchdata("killstreaks",var_02,"eventTime",gettime());
setmatchdata("killstreaks",var_02,"eventPos",0,int(param_01[0]));
setmatchdata("killstreaks",var_02,"eventPos",1,int(param_01[1]));
setmatchdata("killstreaks",var_02,"eventPos",2,int(param_01[2]));
}
//Function Number: 4
loggameevent(param_00,param_01)
{
if(!canlogclient(self) || !canlogevent())
{
return;
}
var_02 = getmatchdata("eventCount");
setmatchdata("eventCount",var_02 + 1);
setmatchdata("events",var_02,"eventType",param_00);
setmatchdata("events",var_02,"player",self.clientid);
setmatchdata("events",var_02,"eventTime",gettime());
setmatchdata("events",var_02,"eventPos",0,int(param_01[0]));
setmatchdata("events",var_02,"eventPos",1,int(param_01[1]));
setmatchdata("events",var_02,"eventPos",2,int(param_01[2]));
}
//Function Number: 5
logkillevent(param_00,param_01)
{
if(!canloglife(param_00))
{
return;
}
setmatchdata("lives",param_00,"modifiers",param_01,1);
}
//Function Number: 6
logmultikill(param_00,param_01)
{
if(!canloglife(param_00))
{
return;
}
setmatchdata("lives",param_00,"multikill",param_01);
}
//Function Number: 7
logplayerlife(param_00)
{
if(!canlogclient(self) || !canloglife(param_00))
{
return;
}
setmatchdata("lives",param_00,"player",self.clientid);
setmatchdata("lives",param_00,"spawnPos",0,int(self.spawnpos[0]));
setmatchdata("lives",param_00,"spawnPos",1,int(self.spawnpos[1]));
setmatchdata("lives",param_00,"spawnPos",2,int(self.spawnpos[2]));
setmatchdata("lives",param_00,"wasTacticalInsertion",self.wasti);
setmatchdata("lives",param_00,"team",self.team);
setmatchdata("lives",param_00,"spawnTime",self.spawntime);
setmatchdata("lives",param_00,"duration",gettime() - self.spawntime);
logloadout(param_00);
}
//Function Number: 8
logplayerxp(param_00,param_01)
{
if(!canlogclient(self))
{
return;
}
setmatchdata("players",self.clientid,param_01,param_00);
}
//Function Number: 9
logloadout(param_00)
{
if(!canlogclient(self) || !canloglife(param_00) || self.curclass == "gamemode")
{
return;
}
var_01 = self.curclass;
if(var_01 == "copycat")
{
var_02 = self.pers["copyCatLoadout"];
var_03 = var_02["loadoutPrimary"];
var_04 = var_02["loadoutPrimaryAttachment"];
var_05 = var_02["loadoutPrimaryAttachment2"];
var_06 = var_02["loadoutPrimaryCamo"];
var_07 = var_02["loadoutPrimaryBuff"];
var_08 = var_02["loadoutSecondary"];
var_09 = var_02["loadoutSecondaryAttachment"];
var_0A = var_02["loadoutSecondaryAttachment2"];
var_0B = var_02["loadoutSecondaryCamo"];
var_0C = var_02["loadoutSecondaryBuff"];
var_0D = var_02["loadoutEquipment"];
var_0E = var_02["loadoutPerk1"];
var_0F = var_02["loadoutPerk2"];
var_10 = var_02["loadoutPerk3"];
var_11 = var_02["loadoutOffhand"];
var_12 = var_02["loadoutDeathstreak"];
var_13 = var_02["loadoutStreakType"];
var_14 = var_02["loadoutKillstreak1"];
var_15 = var_02["loadoutKillstreak2"];
var_16 = var_02["loadoutKillstreak3"];
}
else if(issubstr(var_16,"custom"))
{
var_17 = maps\mp\gametypes\_class::getclassindex(var_16);
var_03 = maps\mp\gametypes\_class::cac_getweapon(var_17,0);
var_04 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,0);
var_05 = maps\mp\gametypes\_class::cac_getweaponattachmenttwo(var_17,0);
var_08 = maps\mp\gametypes\_class::cac_getweapon(var_17,1);
var_09 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,1);
var_0A = maps\mp\gametypes\_class::cac_getweaponattachmenttwo(var_17,1);
var_11 = maps\mp\gametypes\_class::cac_getoffhand(var_17);
var_0D = maps\mp\gametypes\_class::cac_getperk(var_17,0);
var_0E = maps\mp\gametypes\_class::cac_getperk(var_17,1);
var_0F = maps\mp\gametypes\_class::cac_getperk(var_17,2);
var_10 = maps\mp\gametypes\_class::cac_getperk(var_17,3);
var_13 = maps\mp\gametypes\_class::cac_getperk(var_17,5);
var_12 = maps\mp\gametypes\_class::cac_getdeathstreak(var_17);
var_07 = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,0);
var_0C = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,1);
var_14 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,0);
var_15 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,1);
var_16 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,2);
}
else
{
var_17 = maps\mp\gametypes\_class::getclassindex(var_17);
var_03 = maps\mp\gametypes\_class::table_getweapon(level.classtablename,var_17,0);
var_04 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,0,0);
var_05 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,0,1);
var_08 = maps\mp\gametypes\_class::table_getweapon(level.classtablename,var_17,1);
var_09 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,1,0);
var_0A = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,1,1);
var_11 = maps\mp\gametypes\_class::table_getoffhand(level.classtablename,var_17);
var_0D = maps\mp\gametypes\_class::table_getequipment(level.classtablename,var_17,0);
var_0E = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,1);
var_0F = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,2);
var_10 = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,3);
var_13 = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,5);
var_12 = maps\mp\gametypes\_class::table_getdeathstreak(level.classtablename,var_17);
var_07 = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,0);
var_0C = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,1);
var_14 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,1);
var_15 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,2);
var_16 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,3);
}
var_04 = maps\mp\_utility::validateattachment(var_04);
var_05 = maps\mp\_utility::validateattachment(var_05);
var_09 = maps\mp\_utility::validateattachment(var_09);
var_0A = maps\mp\_utility::validateattachment(var_0A);
setmatchdata("lives",param_00,"primaryWeapon",var_03);
setmatchdata("lives",param_00,"primaryAttachments",0,var_04);
setmatchdata("lives",param_00,"primaryAttachments",1,var_05);
setmatchdata("lives",param_00,"secondaryWeapon",var_08);
setmatchdata("lives",param_00,"secondaryAttachments",0,var_09);
setmatchdata("lives",param_00,"secondaryAttachments",1,var_09);
setmatchdata("lives",param_00,"offhandWeapon",var_11);
setmatchdata("lives",param_00,"equipment",var_0D);
setmatchdata("lives",param_00,"perks",0,var_0E);
setmatchdata("lives",param_00,"perks",1,var_0F);
setmatchdata("lives",param_00,"perks",2,var_10);
setmatchdata("lives",param_00,"strikePackage",var_13);
setmatchdata("lives",param_00,"deathstreak",var_12);
setmatchdata("lives",param_00,"weaponBuff",0,var_07);
setmatchdata("lives",param_00,"weaponBuff",1,var_0C);
switch(var_13)
{
case "streaktype_assault":
setmatchdata("lives",param_00,"assaultStreaks",0,var_14);
setmatchdata("lives",param_00,"assaultStreaks",1,var_15);
setmatchdata("lives",param_00,"assaultStreaks",2,var_16);
break;
case "streaktype_support":
setmatchdata("lives",param_00,"defenseStreaks",0,var_14);
setmatchdata("lives",param_00,"defenseStreaks",1,var_15);
setmatchdata("lives",param_00,"defenseStreaks",2,var_16);
break;
case "streaktype_specialist":
setmatchdata("lives",param_00,"specialistStreaks",0,var_14);
setmatchdata("lives",param_00,"specialistStreaks",1,var_15);
setmatchdata("lives",param_00,"specialistStreaks",2,var_16);
break;
case "none":
break;
}
}
//Function Number: 10
logplayerdeath(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
{
if(!canlogclient(self) || isplayer(param_01) && !canlogclient(param_01) || !canloglife(param_00))
{
return;
}
if(param_00 >= level.maxlives)
{
return;
}
if(param_04 == "none")
{
var_07 = "none";
var_08 = "none";
}
else
{
var_07 = weaponinventorytype(param_06);
var_08 = weaponclass(param_05);
}
if(issubstr(param_04,"destructible"))
{
param_04 = "destructible";
}
if(isdefined(var_07) && var_07 == "primary" || var_07 == "altmode" && var_08 == "pistol" || var_08 == "smg" || var_08 == "rifle" || var_08 == "spread" || var_08 == "mg" || var_08 == "grenade" || var_08 == "rocketlauncher" || var_08 == "sniper")
{
var_09 = undefined;
if(var_07 == "altmode")
{
var_09 = param_04;
param_04 = param_05;
setmatchdata("lives",param_00,"altMode",1);
}
var_0A = strtok(param_04,"_");
if(var_0A[0] == "iw5")
{
var_0F = var_0A[0] + "_" + var_0A[1];
setmatchdata("lives",param_00,"weapon",var_0F);
if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && issubstr(var_0A[3],"vz"))
{
var_0A[3] = "vzscope";
}
if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && issubstr(var_0A[4],"vz"))
{
var_0A[4] = "vzscope";
}
if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && !issubstr(var_0A[3],"vz"))
{
var_0A[3] = undefined;
}
if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && !issubstr(var_0A[4],"vz"))
{
var_0A[4] = undefined;
}
if(isdefined(var_0A[3]) && maps\mp\_utility::isattachment(var_0A[3]))
{
var_10 = maps\mp\_utility::validateattachment(var_0A[3]);
setmatchdata("lives",param_00,"attachments",0,var_10);
}
if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4]))
{
var_10 = maps\mp\_utility::validateattachment(var_0A[4]);
setmatchdata("lives",param_00,"attachments",1,var_10);
}
}
else if(var_0A[0] == "alt")
{
var_0F = var_0A[1] + "_" + var_0A[2];
setmatchdata("lives",param_00,"weapon",var_0F);
if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4]))
{
var_10 = maps\mp\_utility::validateattachment(var_0A[4]);
setmatchdata("lives",param_00,"attachments",0,var_10);
}
if(isdefined(var_0A[5]) && maps\mp\_utility::isattachment(var_0A[5]))
{
var_10 = maps\mp\_utility::validateattachment(var_0A[5]);
setmatchdata("lives",param_00,"attachments",1,var_10);
}
}
else
{
var_0A[var_0A.size - 1] = undefined;
setmatchdata("lives",param_00,"weapon",var_0A[0]);
if(isdefined(var_0A[1]) && var_07 != "altmode")
{
var_10 = maps\mp\_utility::validateattachment(var_0A[1]);
setmatchdata("lives",param_00,"attachments",0,var_10);
}
if(isdefined(var_0A[2]) && var_07 != "altmode")
{
var_10 = maps\mp\_utility::validateattachment(var_0A[2]);
setmatchdata("lives",param_00,"attachments",1,var_10);
}
}
}
else if(var_07 == "item" || var_07 == "offhand")
{
var_11 = maps\mp\_utility::strip_suffix(param_04,"_mp");
setmatchdata("lives",param_00,"weapon",var_11);
}
else
{
setmatchdata("lives",param_00,"weapon",param_04);
}
if(maps\mp\_utility::iskillstreakweapon(param_04))
{
setmatchdata("lives",param_00,"modifiers","killstreak",1);
}
setmatchdata("lives",param_00,"mod",param_03);
if(isplayer(param_01))
{
setmatchdata("lives",param_00,"attacker",param_01.clientid);
setmatchdata("lives",param_00,"attackerPos",0,int(param_01.origin[0]));
setmatchdata("lives",param_00,"attackerPos",1,int(param_01.origin[1]));
setmatchdata("lives",param_00,"attackerPos",2,int(param_01.origin[2]));
var_12 = anglestoforward((0,self.angles[1],0));
var_13 = self.origin - param_01.origin;
var_13 = vectornormalize((var_13[0],var_13[1],0));
setmatchdata("lives",param_00,"dotOfDeath",vectordot(var_12,var_13));
if(param_01 maps\mp\_utility::isjuggernaut())
{
setmatchdata("lives",param_00,"attackerIsJuggernaut",1);
}
}
else
{
setmatchdata("lives",param_00,"attacker",255);
setmatchdata("lives",param_00,"attackerPos",0,int(self.origin[0]));
setmatchdata("lives",param_00,"attackerPos",1,int(self.origin[1]));
setmatchdata("lives",param_00,"attackerPos",2,int(self.origin[2]));
}
setmatchdata("lives",param_00,"player",self.clientid);
setmatchdata("lives",param_00,"deathPos",0,int(self.origin[0]));
setmatchdata("lives",param_00,"deathPos",1,int(self.origin[1]));
setmatchdata("lives",param_00,"deathPos",2,int(self.origin[2]));
setmatchdata("lives",param_00,"deathAngles",0,int(self.angles[0]));
setmatchdata("lives",param_00,"deathAngles",1,int(self.angles[1]));
setmatchdata("lives",param_00,"deathAngles",2,int(self.angles[2]));
}
//Function Number: 11
logplayerdata()
{
if(!canlogclient(self))
{
return;
}
setmatchdata("players",self.clientid,"score",maps\mp\_utility::getpersstat("score"));
if(maps\mp\_utility::getpersstat("assists") > 255)
{
setmatchdata("players",self.clientid,"assists",255);
}
else
{
setmatchdata("players",self.clientid,"assists",maps\mp\_utility::getpersstat("assists"));
}
if(maps\mp\_utility::getpersstat("longestStreak") > 255)
{
setmatchdata("players",self.clientid,"longestStreak",255);
return;
}
setmatchdata("players",self.clientid,"longestStreak",maps\mp\_utility::getpersstat("longestStreak"));
}
//Function Number: 12
endofgamesummarylogger()
{
level waittill("game_ended");
foreach(var_01 in level.players)
{
wait 0.05;
if(!isdefined(var_01))
{
continue;
}
if(isdefined(var_01.weaponsused))
{
var_01 doublebubblesort();
var_02 = 0;
if(var_01.weaponsused.size > 3)
{
for(var_03 = var_01.weaponsused.size - 1;var_03 > var_01.weaponsused.size - 3;var_03--)
{
var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]);
var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]);
var_02++;
}
}
else
{
for(var_03 = var_01.weaponsused.size - 1;var_03 >= 0;var_03--)
{
var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]);
var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]);
var_02++;
}
}
}
else
{
var_01 setplayerdata("round","weaponsUsed",0,"none");
var_01 setplayerdata("round","weaponsUsed",1,"none");
var_01 setplayerdata("round","weaponsUsed",2,"none");
var_01 setplayerdata("round","weaponXpEarned",0,0);
var_01 setplayerdata("round","weaponXpEarned",1,0);
var_01 setplayerdata("round","weaponXpEarned",2,0);
}
if(isdefined(var_01.challengescompleted))
{
var_01 setplayerdata("round","challengeNumCompleted",var_01.challengescompleted.size);
}
else
{
var_01 setplayerdata("round","challengeNumCompleted",0);
}
for(var_03 = 0;var_03 < 20;var_03++)
{
if(isdefined(var_01.challengescompleted) && isdefined(var_01.challengescompleted[var_03]) && var_01.challengescompleted[var_03] != "ch_prestige" && !issubstr(var_01.challengescompleted[var_03],"_daily") && !issubstr(var_01.challengescompleted[var_03],"_weekly"))
{
var_01 setplayerdata("round","challengesCompleted",var_03,var_01.challengescompleted[var_03]);
continue;
}
var_01 setplayerdata("round","challengesCompleted",var_03,"");
}
}
}
//Function Number: 13
doublebubblesort()
{
var_00 = self.weaponxpearned;
var_01 = self.weaponxpearned.size;
for(var_02 = var_01 - 1;var_02 > 0;var_02--)
{
for(var_03 = 1;var_03 <= var_02;var_03++)
{
if(var_00[var_03 - 1] < var_00[var_03])
{
var_04 = self.weaponsused[var_03];
self.weaponsused[var_03] = self.weaponsused[var_03 - 1];
self.weaponsused[var_03 - 1] = var_04;
var_05 = self.weaponxpearned[var_03];
self.weaponxpearned[var_03] = self.weaponxpearned[var_03 - 1];
self.weaponxpearned[var_03 - 1] = var_05;
var_00 = self.weaponxpearned;
}
}
}
}
//Function Number: 14
gameendlistener()
{
level waittill("game_ended");
foreach(var_01 in level.players)
{
var_01 logplayerdata();
if(!isalive(var_01))
{
continue;
}
var_02 = maps\mp\_utility::getnextlifeid();
var_01 logplayerlife(var_02);
}
}
//Function Number: 15
canlogclient(param_00)
{
return param_00.clientid < level.maxlogclients;
}
//Function Number: 16
canlogevent()
{
return getmatchdata("eventCount") < level.maxevents;
}
//Function Number: 17
canlogkillstreak()
{
return getmatchdata("killstreakCount") < level.maxkillstreaks;
}
//Function Number: 18
canloglife(param_00)
{
return getmatchdata("lifeCount") < level.maxlives;
}
//Function Number: 19
logweaponstat(param_00,param_01,param_02)
{
if(!canlogclient(self))
{
return;
}
if(maps\mp\_utility::iskillstreakweapon(param_00))
{
return;
}
var_03 = getmatchdata("players",self.clientid,"weaponStats",param_00,param_01);
if(param_01 == "kills" || param_01 == "deaths" || param_01 == "headShots")
{
if(var_03 + param_02 > 255)
{
setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,255);
}
else
{
setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02);
}
}
setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02);
}
//Function Number: 20
logattachmentstat(param_00,param_01,param_02)
{
if(!canlogclient(self))
{
return;
}
var_03 = getmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01);
setmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01,var_03 + param_02);
}
//Function Number: 21
buildbaseweaponlist()
{
var_00 = [];
var_01 = 149;
for(var_02 = 0;var_02 <= var_01;var_02++)
{
var_03 = tablelookup("mp/statstable.csv",0,var_02,4);
if(var_03 == "")
{
continue;
}
if(!issubstr(tablelookup("mp/statsTable.csv",0,var_02,2),"weapon_"))
{
continue;
}
if(tablelookup("mp/statsTable.csv",0,var_02,2) == "weapon_other")
{
continue;
}
var_00[var_00.size] = var_03;
}
return var_00;
}
//Function Number: 22
logchallenge(param_00,param_01)
{
if(!canlogclient(self))
{
return;
}
if(issubstr(param_00,"_daily") || issubstr(param_00,"_weekly"))
{
return;
}
var_02 = getmatchdata("players",self.clientid,"challengeCount");
if(var_02 < level.maxnumchallengesperplayer)
{
setmatchdata("players",self.clientid,"challenge",var_02,param_00);
setmatchdata("players",self.clientid,"tier",var_02,param_01);
setmatchdata("players",self.clientid,"challengeCount",var_02 + 1);
}
}
//Function Number: 23
logaward(param_00)
{
if(!canlogclient(self))
{
return;
}
var_01 = getmatchdata("players",self.clientid,"awardCount");
if(var_01 < level.maxnumawardsperplayer)
{
setmatchdata("players",self.clientid,"awards",var_01,param_00);
setmatchdata("players",self.clientid,"awardCount",var_01 + 1);
}
}
//Function Number: 24
logkillsconfirmed()
{
if(!canlogclient(self))
{
return;
}
setmatchdata("players",self.clientid,"killsConfirmed",self.pers["confirmed"]);
}
//Function Number: 25
logkillsdenied()
{
if(!canlogclient(self))
{
return;
}
setmatchdata("players",self.clientid,"killsDenied",self.pers["denied"]);
}

View File

@ -0,0 +1,356 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_matchevents.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 13
* Decompile Time: 236 ms
* Timestamp: 10/27/2023 2:15:06 AM
*******************************************************************/
//Function Number: 1
init()
{
level.match_events_fx["smoke"] = loadfx("smoke/smoke_grenade_11sec_mp");
level.match_events_fx["tracer"] = loadfx("misc/tracer_incoming");
level.match_events_fx["explosion"] = loadfx("explosions/building_explosion_huge_gulag");
level.matchevents["mortar"] = ::domortar;
level.matchevents["smoke"] = ::dosmoke;
level.matchevents["airstrike"] = ::doairstrike;
level.matchevents["pavelow"] = ::dopavelow;
level.matchevents["heli_insertion"] = ::doheliinsertion;
level.matchevents["osprey_insertion"] = ::doospreyinsertion;
level.matcheventstarted = 0;
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
level endon("matchevent_started");
self waittill("spawned_player");
if(level.matcheventstarted == 0)
{
level.matcheventstarted = 1;
if(common_scripts\utility::cointoss())
{
self thread [[ common_scripts\utility::random(level.matchevents) ]]();
}
level notify("matchevent_started");
}
}
//Function Number: 4
getmapcenter()
{
if(isdefined(level.mapcenter))
{
return level.mapcenter;
}
var_00 = getentarray("mp_tdm_spawn_allies_start","classname");
var_01 = getentarray("mp_tdm_spawn_axis_start","classname");
if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0]))
{
var_02 = distance(var_00[0].origin,var_01[0].origin) / 2;
var_03 = vectortoangles(var_00[0].origin - var_01[0].origin);
var_03 = vectornormalize(var_03);
return var_00[0].origin + var_03 * var_02;
}
return (0,0,0);
}
//Function Number: 5
getstartspawns()
{
var_00 = getentarray("mp_tdm_spawn_allies_start","classname");
var_01 = getentarray("mp_tdm_spawn_axis_start","classname");
if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0]))
{
var_02 = [];
return var_7B;
}
return undefined;
}
//Function Number: 6
domortar()
{
var_00 = getmapcenter();
var_01 = 1;
for(var_02 = 0;var_02 < 5;var_02++)
{
var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0);
var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0);
if(isdefined(var_04["position"]))
{
playfx(level.match_events_fx["tracer"],var_03);
thread maps\mp\_utility::playsoundinspace("fast_artillery_round",var_03);
wait randomfloatrange(0.5,1.5);
playfx(level.match_events_fx["explosion"],var_03);
playrumbleonposition("grenade_rumble",var_03);
earthquake(1,0.6,var_03,2000);
thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_03);
physicsexplosionsphere(var_03 + (0,0,30),250,125,2);
var_01 = var_01 * -1;
}
}
}
//Function Number: 7
dosmoke()
{
var_00 = getmapcenter();
var_01 = 1;
for(var_02 = 0;var_02 < 3;var_02++)
{
var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0);
playfx(level.match_events_fx["smoke"],var_03);
var_01 = var_01 * -1;
wait 2;
}
}
//Function Number: 8
doairstrike()
{
level endon("game_ended");
var_00 = 1;
var_01 = getmapcenter();
for(var_02 = 0;var_02 < 3;var_02++)
{
var_03 = var_01 + (randomintrange(100,600) * var_00,randomintrange(100,600) * var_00,0);
var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0);
if(isdefined(var_04["position"]))
{
thread doairstrikeflyby(var_04["position"]);
var_00 = var_00 * -1;
wait randomintrange(2,4);
}
}
}
//Function Number: 9
doairstrikeflyby(param_00)
{
var_01 = randomint(level.spawnpoints.size - 1);
var_02 = level.spawnpoints[var_01].origin * (1,1,0);
var_03 = 8000;
var_04 = 8000;
var_05 = getent("airstrikeheight","targetname");
var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600));
var_07 = anglestoforward((0,randomint(45),0));
var_08 = var_02 + var_06 + var_07 * var_03 * -1;
var_09 = var_02 + var_06 + var_07 * var_04;
var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300));
var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300));
var_0C = spawnplane(self,"script_model",var_08);
var_0D = spawnplane(self,"script_model",var_0A);
if(common_scripts\utility::cointoss())
{
var_0C setmodel("vehicle_av8b_harrier_jet_mp");
var_0D setmodel("vehicle_av8b_harrier_jet_mp");
}
else
{
var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp");
var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp");
}
var_0C.angles = vectortoangles(var_09 - var_08);
var_0C playloopsound("veh_mig29_dist_loop");
var_0C thread playplanefx();
var_0D.angles = vectortoangles(var_09 - var_0A);
var_0D playloopsound("veh_mig29_dist_loop");
var_0D thread playplanefx();
var_0E = distance(var_08,var_09);
var_0C moveto(var_09 * 2,var_0E / 2000,0,0);
wait randomfloatrange(0.25,0.5);
var_0D moveto(var_0B * 2,var_0E / 2000,0,0);
wait var_0E / 2000;
var_0C delete();
var_0D delete();
}
//Function Number: 10
playplanefx()
{
self endon("death");
wait 0.5;
playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right");
wait 0.5;
playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left");
wait 0.5;
playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip");
wait 0.5;
playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip");
}
//Function Number: 11
dopavelow()
{
var_00 = getmapcenter();
var_01 = bullettrace(var_00 + (0,0,500),var_00 - (0,0,500),0);
if(isdefined(var_01["position"]))
{
if(common_scripts\utility::cointoss())
{
var_02 = "vehicle_pavelow";
}
else
{
var_02 = "vehicle_pavelow_opfor";
}
var_03 = spawnhelicopter(self,var_01["position"] + (0,0,1000),(0,0,0),"pavelow_mp",var_02);
if(!isdefined(var_03))
{
return;
}
var_03.team = self.pers["team"];
var_03.heli_type = level.heli_types[var_02];
var_03 thread [[ level.lightfxfunc[level.heli_types[var_02]] ]]();
var_03.zoffset = (0,0,var_03 gettagorigin("tag_origin")[2] - var_03 gettagorigin("tag_ground")[2]);
wait 1;
playfxontag(level.chopper_fx["damage"]["on_fire"],var_03,"tag_engine_left");
var_03 thread maps\mp\killstreaks\_helicopter::heli_crash();
}
}
//Function Number: 12
doheliinsertion()
{
var_00 = getstartspawns();
if(isdefined(var_00))
{
var_01 = 200;
var_02 = 200;
var_03 = 1000;
var_04 = anglestoforward(var_00["allies"][0].angles) * 300;
var_05 = anglestoup(var_00["allies"][0].angles) * var_01;
var_06 = anglestoright(var_00["allies"][0].angles) * 200;
var_07 = anglestoright(var_00["allies"][0].angles) * -200;
var_08 = var_00["allies"][0].origin + var_04 + var_05 + var_06;
var_09 = var_00["allies"][0].origin + var_04 + var_05 + var_07;
var_0A = spawnhelicopter(self,var_08,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench");
var_0B = spawnhelicopter(self,var_09,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench");
var_0C = anglestoforward(var_00["axis"][0].angles) * 300;
var_0D = anglestoup(var_00["axis"][0].angles) * var_01;
var_0E = anglestoright(var_00["axis"][0].angles) * 200;
var_0F = anglestoright(var_00["axis"][0].angles) * -200;
var_10 = var_00["axis"][0].origin + var_0C + var_0D + var_0E;
var_11 = var_00["axis"][0].origin + var_0C + var_0D + var_0F;
var_12 = spawnhelicopter(self,var_10,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench");
var_13 = spawnhelicopter(self,var_11,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench");
var_0A vehicle_setspeed(20,10);
var_0A setyawspeed(3,3,3,0.3);
var_0A setvehgoalpos(var_08 + (0,0,var_02),1);
var_0B vehicle_setspeed(20,10);
var_0B setyawspeed(3,3,3,0.3);
var_0B setvehgoalpos(var_09 + (0,0,var_02),1);
var_12 vehicle_setspeed(20,10);
var_12 setyawspeed(3,3,3,0.3);
var_12 setvehgoalpos(var_10 + (0,0,var_02),1);
var_13 vehicle_setspeed(20,10);
var_13 setyawspeed(3,3,3,0.3);
var_13 setvehgoalpos(var_11 + (0,0,var_02),1);
var_0A waittill("goal");
wait 2;
var_0A vehicle_setspeed(80,60);
var_0A setyawspeed(30,15,15,0.3);
var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2,1);
var_0B vehicle_setspeed(80,60);
var_0B setyawspeed(30,15,15,0.3);
var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2,1);
var_12 vehicle_setspeed(80,60);
var_12 setyawspeed(30,15,15,0.3);
var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2,1);
var_13 vehicle_setspeed(80,60);
var_13 setyawspeed(30,15,15,0.3);
var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2,1);
var_0A waittill("goal");
var_0A vehicle_setspeed(120,120);
var_0A setyawspeed(60,40,40,0.3);
var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2 + var_04 * -20,1);
var_0B vehicle_setspeed(120,120);
var_0B setyawspeed(60,40,40,0.3);
var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2 + var_04 * -20,1);
var_12 vehicle_setspeed(120,120);
var_12 setyawspeed(60,40,40,0.3);
var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2 + var_0C * -20,1);
var_13 vehicle_setspeed(120,120);
var_13 setyawspeed(60,40,40,0.3);
var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2 + var_0C * -20,1);
var_0A waittill("goal");
var_0A delete();
var_0B delete();
var_12 delete();
var_13 delete();
}
}
//Function Number: 13
doospreyinsertion()
{
var_00 = getstartspawns();
if(isdefined(var_00))
{
var_01 = 200;
var_02 = 200;
var_03 = 1000;
var_04 = anglestoforward(var_00["allies"][0].angles) * 300;
var_05 = anglestoup(var_00["allies"][0].angles) * var_01;
var_06 = var_00["allies"][0].origin + var_04 + var_05;
var_07 = spawnhelicopter(self,var_06,var_00["allies"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp");
var_08 = anglestoforward(var_00["axis"][0].angles) * 300;
var_09 = anglestoup(var_00["axis"][0].angles) * var_01;
var_0A = var_00["axis"][0].origin + var_08 + var_09;
var_0B = spawnhelicopter(self,var_0A,var_00["axis"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp");
var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup();
var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup();
var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown();
var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown();
var_07 vehicle_setspeed(20,10);
var_07 setyawspeed(3,3,3,0.3);
var_07 setvehgoalpos(var_06 + (0,0,var_02),1);
var_0B vehicle_setspeed(20,10);
var_0B setyawspeed(3,3,3,0.3);
var_0B setvehgoalpos(var_0A + (0,0,var_02),1);
var_07 waittill("goal");
var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup();
var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup();
wait 2;
var_07 vehicle_setspeed(80,60);
var_07 setyawspeed(30,15,15,0.3);
var_07 setvehgoalpos(var_06 + (0,0,var_03),1);
var_0B vehicle_setspeed(80,60);
var_0B setyawspeed(30,15,15,0.3);
var_0B setvehgoalpos(var_0A + (0,0,var_03),1);
var_07 waittill("goal");
var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsdown();
var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsdown();
var_07 vehicle_setspeed(120,120);
var_07 setyawspeed(100,100,40,0.3);
var_07 setvehgoalpos(var_06 + (0,0,var_03) + var_04 * -20,1);
var_0B vehicle_setspeed(120,120);
var_0B setyawspeed(100,100,40,0.3);
var_0B setvehgoalpos(var_0A + (0,0,var_03) + var_08 * -20,1);
var_07 waittill("goal");
var_07 delete();
var_0B delete();
}
}

View File

@ -0,0 +1,63 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_minefields.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 64 ms
* Timestamp: 10/27/2023 2:15:06 AM
*******************************************************************/
//Function Number: 1
minefields()
{
var_00 = getentarray("minefield","targetname");
if(var_00.size > 0)
{
level._effect["mine_explosion"] = loadfx("explosions/grenadeExp_dirt");
}
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_00[var_01] thread minefield_think();
}
}
//Function Number: 2
minefield_think()
{
for(;;)
{
self waittill("trigger",var_00);
if(isplayer(var_00))
{
var_00 thread minefield_kill(self);
}
}
}
//Function Number: 3
minefield_kill(param_00)
{
if(isdefined(self.minefield))
{
return;
}
self.minefield = 1;
self playsound("minefield_click");
wait 0.5;
wait randomfloat(0.5);
if(isdefined(self) && self istouching(param_00))
{
var_01 = self getorigin();
var_02 = 300;
var_03 = 2000;
var_04 = 50;
self playsound("explo_mine");
playfx(level._effect["mine_explosion"],var_01);
radiusdamage(var_01,var_02,var_03,var_04);
}
self.minefield = undefined;
}

View File

@ -0,0 +1,232 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_radiation.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 10
* Decompile Time: 156 ms
* Timestamp: 10/27/2023 2:16:51 AM
*******************************************************************/
//Function Number: 1
radiation()
{
precachestring(&"SCRIPT_RADIATION_DEATH");
var_00 = getentarray("radiation","targetname");
if(var_00.size > 0)
{
precacheshellshock("mp_radiation_low");
precacheshellshock("mp_radiation_med");
precacheshellshock("mp_radiation_high");
foreach(var_02 in var_00)
{
var_02 thread common_scripts\_dynamic_world::triggertouchthink(::playerenterarea,::playerleavearea);
}
thread onplayerconnect();
}
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.var_2BC2 = 0;
}
}
//Function Number: 3
playerenterarea(param_00)
{
self.var_2BC2++;
if(self.var_2BC2 == 1)
{
radiationeffect();
}
}
//Function Number: 4
playerleavearea(param_00)
{
self.var_2BC2--;
if(self.var_2BC2 != 0)
{
return;
}
self.var_2BC5 = 0;
self notify("leftTrigger");
if(isdefined(self.var_2BC6))
{
self.var_2BC6 fadeoutblackout(0.1,0);
}
}
//Function Number: 5
soundwatcher(param_00)
{
common_scripts\utility::waittill_any("death","leftTrigger");
self stoploopsound();
}
//Function Number: 6
radiationeffect()
{
self endon("disconnect");
self endon("game_ended");
self endon("death");
self endon("leftTrigger");
self.var_2BC5 = 0;
thread soundwatcher(self);
for(;;)
{
self.var_2BC5++;
switch(self.var_2BC5)
{
case 1:
self.var_2BC9 = "item_geigercouner_level2";
self playloopsound(self.var_2BC9);
self viewkick(1,self.origin);
break;
case 3:
self shellshock("mp_radiation_low",4);
self.var_2BC9 = "item_geigercouner_level3";
self stoploopsound();
self playloopsound(self.var_2BC9);
self viewkick(3,self.origin);
doradiationdamage(15);
break;
case 4:
self shellshock("mp_radiation_med",5);
self.var_2BC9 = "item_geigercouner_level3";
self stoploopsound();
self playloopsound(self.var_2BC9);
self viewkick(15,self.origin);
thread blackout();
doradiationdamage(25);
break;
case 6:
self shellshock("mp_radiation_high",5);
self.var_2BC9 = "item_geigercouner_level4";
self stoploopsound();
self playloopsound(self.var_2BC9);
self viewkick(75,self.origin);
doradiationdamage(45);
break;
case 8:
self shellshock("mp_radiation_high",5);
self.var_2BC9 = "item_geigercouner_level4";
self stoploopsound();
self playloopsound(self.var_2BC9);
self viewkick(127,self.origin);
doradiationdamage(175);
break;
}
wait 1;
}
wait 5;
}
//Function Number: 7
blackout()
{
self endon("disconnect");
self endon("game_ended");
self endon("death");
self endon("leftTrigger");
if(!isdefined(self.var_2BC6))
{
self.var_2BC6 = newclienthudelem(self);
self.var_2BC6.x = 0;
self.var_2BC6.y = 0;
self.var_2BC6 setshader("black",640,480);
self.var_2BC6.alignx = "left";
self.var_2BC6.aligny = "top";
self.var_2BC6.horzalign = "fullscreen";
self.var_2BC6.vertalign = "fullscreen";
self.var_2BC6.alpha = 0;
}
var_00 = 1;
var_01 = 2;
var_02 = 0.25;
var_03 = 1;
var_04 = 5;
var_05 = 100;
var_06 = 0;
for(;;)
{
while(self.var_2BC5 > 1)
{
var_07 = var_05 - var_04;
var_06 = self.var_2BC5 - var_04 / var_07;
if(var_06 < 0)
{
var_06 = 0;
}
else if(var_06 > 1)
{
var_06 = 1;
}
var_08 = var_01 - var_00;
var_09 = var_00 + var_08 * 1 - var_06;
var_0A = var_03 - var_02;
var_0B = var_02 + var_0A * var_06;
var_0C = var_06 * 0.5;
if(var_06 == 1)
{
break;
}
var_0D = var_09 / 2;
self.var_2BC6 fadeinblackout(var_0D,var_0B);
self.var_2BC6 fadeoutblackout(var_0D,var_0C);
wait var_06 * 0.5;
}
if(var_06 == 1)
{
break;
}
if(self.var_2BC6.alpha != 0)
{
self.var_2BC6 fadeoutblackout(1,0);
}
wait 0.05;
}
self.var_2BC6 fadeinblackout(2,0);
}
//Function Number: 8
doradiationdamage(param_00)
{
self thread [[ level.callbackplayerdamage ]](self,self,param_00,0,"MOD_SUICIDE","claymore_mp",self.origin,(0,0,0) - self.origin,"none",0);
}
//Function Number: 9
fadeinblackout(param_00,param_01)
{
self fadeovertime(param_00);
self.alpha = param_01;
wait param_00;
}
//Function Number: 10
fadeoutblackout(param_00,param_01)
{
self fadeovertime(param_00);
self.alpha = param_01;
wait param_00;
}

View File

@ -0,0 +1,123 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_scoreboard.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 72 ms
* Timestamp: 10/27/2023 2:15:07 AM
*******************************************************************/
//Function Number: 1
processlobbyscoreboards()
{
foreach(var_01 in level.placement["all"])
{
var_01 setplayerscoreboardinfo();
}
if(level.teambased)
{
var_03 = getteamscore("allies");
var_04 = getteamscore("axis");
if(var_03 == var_04)
{
var_05 = "tied";
}
else if(var_04 > var_05)
{
var_05 = "allies";
}
else
{
var_05 = "axis";
}
if(var_05 == "tied")
{
buildscoreboardtype("allies");
buildscoreboardtype("axis");
foreach(var_01 in level.players)
{
if(var_01.pers["team"] == "spectator")
{
var_01 setplayerdata("round","scoreboardType","allies");
continue;
}
var_01 setplayerdata("round","scoreboardType",var_01.pers["team"]);
}
}
else
{
buildscoreboardtype(var_05);
foreach(var_01 in level.players)
{
var_01 setplayerdata("round","scoreboardType",var_05);
}
}
}
else
{
buildscoreboardtype("neutral");
foreach(var_01 in level.players)
{
var_01 setplayerdata("round","scoreboardType","neutral");
}
}
foreach(var_01 in level.players)
{
var_01 setclientdvars("player_summary_xp",var_01.pers["summary"]["xp"],"player_summary_score",var_01.pers["summary"]["score"],"player_summary_challenge",var_01.pers["summary"]["challenge"],"player_summary_match",var_01.pers["summary"]["match"],"player_summary_misc",var_01.pers["summary"]["misc"]);
}
}
//Function Number: 2
setplayerscoreboardinfo()
{
var_00 = getclientmatchdata("scoreboardPlayerCount");
if(var_00 <= 24)
{
setclientmatchdata("players",self.clientmatchdataid,"score",self.pers["score"]);
var_01 = maps\mp\_utility::getplayerstat("kills");
setclientmatchdata("players",self.clientmatchdataid,"kills",var_01);
var_02 = maps\mp\_utility::getplayerstat("assists");
setclientmatchdata("players",self.clientmatchdataid,"assists",var_02);
var_03 = maps\mp\_utility::getplayerstat("deaths");
setclientmatchdata("players",self.clientmatchdataid,"deaths",var_03);
var_04 = game[self.pers["team"]];
setclientmatchdata("players",self.clientmatchdataid,"faction",var_04);
var_00++;
setclientmatchdata("scoreboardPlayerCount",var_00);
}
}
//Function Number: 3
buildscoreboardtype(param_00)
{
if(param_00 == "neutral")
{
var_01 = 0;
foreach(var_03 in level.placement["all"])
{
setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid);
var_01++;
}
return;
}
var_05 = maps\mp\_utility::getotherteam(var_03);
var_01 = 0;
foreach(var_03 in level.placement[param_00])
{
setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid);
var_01++;
}
foreach(var_03 in level.placement[var_05])
{
setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid);
var_01++;
}
}

View File

@ -0,0 +1,193 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_shutter.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 5
* Decompile Time: 92 ms
* Timestamp: 10/27/2023 2:15:08 AM
*******************************************************************/
//Function Number: 1
main()
{
level.inc = 0;
common_scripts\utility::array_levelthread(getentarray("wire","targetname"),::wirewander);
var_00 = getentarray("shutter_left","targetname");
var_01 = getentarray("shutter_right_open","targetname");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_00[var_00.size] = var_01[var_02];
}
var_01 = getentarray("shutter_left_closed","targetname");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_00[var_00.size] = var_01[var_02];
}
for(var_02 = 0;var_02 < var_00.size;var_02++)
{
var_03 = var_00[var_02];
var_03 rotateto((var_03.angles[0],var_03.angles[1] + 180,var_03.angles[2]),0.1);
}
wait 0.2;
for(var_02 = 0;var_02 < var_00.size;var_02++)
{
var_00[var_02].startyaw = var_00[var_02].angles[1];
}
var_04 = getentarray("shutter_right","targetname");
var_01 = getentarray("shutter_left_open","targetname");
var_02 = 0;
while(var_02 < var_01.size)
{
var_03++ = var_7B[var_04.size];
}
var_02 = getentarray("shutter_right_closed","targetname");
var_03 = 0;
while(var_03 < var_02.size)
{
var_03++ = var_7B[var_7B.size];
}
for(var_03 = 0;var_03 < var_7B.size;var_03++ = var_02[var_03])
{
var_7B[var_03].startyaw = var_7B[var_03].angles[1];
}
var_02 = undefined;
var_05 = "left";
for(;;)
{
common_scripts\utility::array_levelthread(var_01,::shutterwanderleft,var_05);
common_scripts\utility::array_levelthread(var_7B,::shutterwanderright,var_05);
level waittill(var_01[var_02],"wind blows",var_05);
}
}
//Function Number: 2
windcontroller()
{
for(;;)
{
var_00 = "left";
if(randomint(100) > 50)
{
var_00 = "right";
}
level notify("wind blows",var_00);
wait 2 + randomfloat(10);
}
}
//Function Number: 3
shutterwanderleft(param_00,param_01)
{
level.inc++;
level endon("wind blows");
var_02 = param_00.startyaw;
if(param_01 == "left")
{
var_02 = var_02 + 179.9;
}
var_03 = 0.2;
param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03);
wait var_03 + 0.1;
for(;;)
{
var_04 = randomint(80);
if(randomint(100) > 50)
{
var_04 = var_04 * -1;
}
var_02 = param_00.angles[1] + var_04;
var_05 = param_00.angles[1] + var_04 * -1;
if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179)
{
var_02 = var_05;
}
var_06 = abs(param_00.angles[1] - var_02);
var_03 = var_06 * 0.02 + randomfloat(2);
if(var_03 < 0.3)
{
var_03 = 0.3;
}
param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5);
wait var_03;
}
}
//Function Number: 4
shutterwanderright(param_00,param_01)
{
level.inc++;
level endon("wind blows");
var_02 = param_00.startyaw;
if(param_01 == "left")
{
var_02 = var_02 + 179.9;
}
var_03 = 0.2;
param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03);
wait var_03 + 0.1;
for(;;)
{
var_04 = randomint(80);
if(randomint(100) > 50)
{
var_04 = var_04 * -1;
}
var_02 = param_00.angles[1] + var_04;
var_05 = param_00.angles[1] + var_04 * -1;
if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179)
{
var_02 = var_05;
}
var_06 = abs(param_00.angles[1] - var_02);
var_03 = var_06 * 0.02 + randomfloat(2);
if(var_03 < 0.3)
{
var_03 = 0.3;
}
param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5);
wait var_03;
}
}
//Function Number: 5
wirewander(param_00)
{
var_01 = getentarray(param_00.target,"targetname");
var_02 = var_01[0].origin;
var_03 = var_01[1].origin;
var_04 = vectortoangles(var_02 - var_03);
var_05 = spawn("script_model",(0,0,0));
var_05.origin = var_02 * 0.5 + var_03 * 0.5;
var_05.angles = var_04;
param_00 linkto(var_05);
var_06 = 2;
var_07 = 0.9;
var_08 = 4 + randomfloat(2);
var_05 rotateroll(var_08 * 0.5,0.2);
wait 0.2;
for(;;)
{
var_09 = var_06 + randomfloat(var_07) - var_07 * 0.5;
var_05 rotateroll(var_08,var_09,var_09 * 0.5,var_09 * 0.5);
wait var_09;
var_05 rotateroll(var_08 * -1,var_09,var_09 * 0.5,var_09 * 0.5);
wait var_09;
}
}

View File

@ -0,0 +1,461 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_stinger.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 11
* Decompile Time: 222 ms
* Timestamp: 10/27/2023 2:15:09 AM
*******************************************************************/
//Function Number: 1
initstingerusage()
{
self.stingerstage = undefined;
self.stingertarget = undefined;
self.stingerlockstarttime = undefined;
self.stingerlostsightlinetime = undefined;
thread resetstingerlockingondeath();
level.stingertargets = [];
}
//Function Number: 2
resetstingerlocking()
{
if(!isdefined(self.stingeruseentered))
{
return;
}
self.stingeruseentered = undefined;
self notify("stop_javelin_locking_feedback");
self notify("stop_javelin_locked_feedback");
self weaponlockfree();
initstingerusage();
}
//Function Number: 3
resetstingerlockingondeath()
{
self endon("disconnect");
self notify("ResetStingerLockingOnDeath");
self endon("ResetStingerLockingOnDeath");
for(;;)
{
self waittill("death");
resetstingerlocking();
}
}
//Function Number: 4
stillvalidstingerlock(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(!self worldpointinreticle_circle(param_00.origin,65,85))
{
return 0;
}
if(self.stingertarget == level.ac130.planemodel && !isdefined(level.ac130player))
{
return 0;
}
return 1;
}
//Function Number: 5
loopstingerlockingfeedback()
{
self endon("stop_javelin_locking_feedback");
for(;;)
{
if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner)
{
level.chopper.gunner playlocalsound("missile_locking");
}
if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel)
{
level.ac130player playlocalsound("missile_locking");
}
self playlocalsound("stinger_locking");
self playrumbleonentity("ac130_25mm_fire");
wait 0.6;
}
}
//Function Number: 6
loopstingerlockedfeedback()
{
self endon("stop_javelin_locked_feedback");
for(;;)
{
if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner)
{
level.chopper.gunner playlocalsound("missile_locking");
}
if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel)
{
level.ac130player playlocalsound("missile_locking");
}
self playlocalsound("stinger_locked");
self playrumbleonentity("ac130_25mm_fire");
wait 0.25;
}
}
//Function Number: 7
locksighttest(param_00)
{
var_01 = self geteye();
if(!isdefined(param_00))
{
return 0;
}
var_02 = sighttracepassed(var_01,param_00.origin,0,param_00);
if(var_02)
{
return 1;
}
var_03 = param_00 getpointinbounds(1,0,0);
var_02 = sighttracepassed(var_01,var_03,0,param_00);
if(var_02)
{
return 1;
}
var_04 = param_00 getpointinbounds(-1,0,0);
var_02 = sighttracepassed(var_01,var_04,0,param_00);
if(var_02)
{
return 1;
}
return 0;
}
//Function Number: 8
stingerdebugdraw(param_00)
{
}
//Function Number: 9
softsighttest()
{
var_00 = 500;
if(locksighttest(self.stingertarget))
{
self.stingerlostsightlinetime = 0;
return 1;
}
if(self.stingerlostsightlinetime == 0)
{
self.stingerlostsightlinetime = gettime();
}
var_01 = gettime() - self.stingerlostsightlinetime;
if(var_01 >= var_00)
{
resetstingerlocking();
return 0;
}
return 1;
}
//Function Number: 10
gettargetlist()
{
var_00 = [];
if(level.teambased)
{
if(isdefined(level.chopper) && level.chopper.team != self.team || level.chopper.owner == self)
{
}
if(isdefined(level.ac130player) && level.ac130player.team != self.team)
{
}
if(isdefined(level.harriers))
{
foreach(var_02 in level.harriers)
{
if(isdefined(var_02) && var_02.team != self.team || isdefined(var_02.owner) && var_02.owner == self)
{
var_7B[var_7B.size] = var_02;
}
}
}
if(level.uavmodels[level.otherteam[self.team]].size)
{
foreach(var_05 in level.uavmodels[level.otherteam[self.team]])
{
var_7B[var_7B.size] = var_05;
}
}
if(isdefined(level.littlebirds))
{
foreach(var_08 in level.littlebirds)
{
if(!isdefined(var_08))
{
continue;
}
if(self.team != var_08.owner.team || self == var_08.owner)
{
var_7B[var_7B.size] = var_08;
}
}
}
if(isdefined(level.ugvs))
{
foreach(var_0B in level.ugvs)
{
if(!isdefined(var_0B))
{
continue;
}
if(self.team != var_0B.owner.team || self == var_0B.owner)
{
var_7B[var_7B.size] = var_0B;
}
}
}
}
else
{
if(isdefined(level.chopper))
{
}
if(isdefined(level.ac130player))
{
}
if(isdefined(level.harriers))
{
foreach(var_02 in level.harriers)
{
if(isdefined(var_02))
{
var_7B[var_7B.size] = var_02;
}
}
}
if(level.uavmodels.size)
{
foreach(var_05 in level.uavmodels)
{
if(isdefined(var_05.owner) && var_05.owner == self)
{
continue;
}
var_7B[var_7B.size] = var_05;
}
}
if(isdefined(level.littlebirds))
{
foreach(var_08 in level.littlebirds)
{
if(!isdefined(var_08))
{
continue;
}
var_7B[var_7B.size] = var_08;
}
}
if(isdefined(level.ugvs))
{
foreach(var_0B in level.ugvs)
{
if(!isdefined(var_0B))
{
continue;
}
var_7B[var_7B.size] = var_0B;
}
}
foreach(var_16 in level.players)
{
if(!isalive(var_16))
{
continue;
}
if(level.teambased && var_16.team == self.team)
{
continue;
}
if(var_16 == self)
{
continue;
}
if(var_16 maps\mp\_utility::isjuggernaut())
{
var_7B[var_7B.size] = var_16;
}
}
}
return var_7B;
}
//Function Number: 11
stingerusageloop()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
var_00 = 1000;
initstingerusage();
for(;;)
{
wait 0.05;
var_01 = self getcurrentweapon();
if(var_01 != "stinger_mp" && var_01 != "at4_mp" && var_01 != "iw5_smaw_mp")
{
resetstingerlocking();
continue;
}
if(self playerads() < 0.95)
{
resetstingerlocking();
continue;
}
self.stingeruseentered = 1;
if(!isdefined(self.stingerstage))
{
self.stingerstage = 0;
}
stingerdebugdraw(self.stingertarget);
if(self.stingerstage == 0)
{
var_02 = gettargetlist();
if(var_02.size == 0)
{
continue;
}
var_03 = [];
foreach(var_05 in var_02)
{
if(!isdefined(var_05))
{
continue;
}
var_06 = self worldpointinreticle_circle(var_05.origin,65,75);
if(var_06)
{
var_03[var_03.size] = var_05;
}
}
if(var_03.size == 0)
{
continue;
}
var_08 = sortbydistance(var_03,self.origin);
if(!locksighttest(var_08[0]))
{
continue;
}
thread loopstingerlockingfeedback();
self.stingertarget = var_08[0];
self.stingerlockstarttime = gettime();
self.stingerstage = 1;
self.stingerlostsightlinetime = 0;
}
if(self.stingerstage == 1)
{
if(!stillvalidstingerlock(self.stingertarget))
{
resetstingerlocking();
continue;
}
var_09 = softsighttest();
if(!var_09)
{
continue;
}
var_0A = gettime() - self.stingerlockstarttime;
if(maps\mp\_utility::_hasperk("specialty_fasterlockon"))
{
if(var_0A < var_00 * 0.5)
{
continue;
}
}
else if(var_0A < var_00)
{
continue;
}
self notify("stop_javelin_locking_feedback");
thread loopstingerlockedfeedback();
if(self.stingertarget.model == "vehicle_av8b_harrier_jet_opfor_mp" || self.stingertarget.model == "vehicle_av8b_harrier_jet_mp" || self.stingertarget.model == "vehicle_little_bird_armed")
{
self weaponlockfinalize(self.stingertarget);
}
else if(isplayer(self.stingertarget))
{
self weaponlockfinalize(self.stingertarget,(100,0,64));
}
else
{
self weaponlockfinalize(self.stingertarget,(100,0,-32));
}
self.stingerstage = 2;
}
if(self.stingerstage == 2)
{
var_09 = softsighttest();
if(!var_09)
{
continue;
}
if(!stillvalidstingerlock(self.stingertarget))
{
resetstingerlocking();
continue;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,400 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_battlechatter_mp.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 16
* Decompile Time: 235 ms
* Timestamp: 10/27/2023 2:12:10 AM
*******************************************************************/
//Function Number: 1
init()
{
level.isteamspeaking["allies"] = 0;
level.isteamspeaking["axis"] = 0;
level.speakers["allies"] = [];
level.speakers["axis"] = [];
level.bcsounds = [];
level.bcsounds["reload"] = "inform_reloading_generic";
level.bcsounds["frag_out"] = "inform_attack_grenade";
level.bcsounds["flash_out"] = "inform_attack_flashbang";
level.bcsounds["smoke_out"] = "inform_attack_smoke";
level.bcsounds["conc_out"] = "inform_attack_stun";
level.bcsounds["c4_plant"] = "inform_attack_thwc4";
level.bcsounds["claymore_plant"] = "inform_plant_claymore";
level.bcsounds["semtex_out"] = "semtex_use";
level.bcsounds["kill"] = "inform_killfirm_infantry";
level.bcsounds["casualty"] = "inform_casualty_generic";
level.bcsounds["suppressing_fire"] = "cmd_suppressfire";
level.bcsounds["semtex_incoming"] = "semtex_incoming";
level.bcsounds["c4_incoming"] = "c4_incoming";
level.bcsounds["flash_incoming"] = "flash_incoming";
level.bcsounds["stun_incoming"] = "stun_incoming";
level.bcsounds["grenade_incoming"] = "grenade_incoming";
level.bcsounds["rpg_incoming"] = "rpg_incoming";
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
var_00 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team);
if(!isdefined(self.pers["voiceIndex"]) || var_00 != "RU_" && self.pers["voiceNum"] >= 3)
{
if(var_00 == "RU_")
{
self.pers["voiceNum"] = randomintrange(0,4);
}
else
{
self.pers["voiceNum"] = randomintrange(0,2);
}
self.pers["voicePrefix"] = var_00 + self.pers["voiceNum"] + "_";
}
if(level.splitscreen)
{
continue;
}
thread claymoretracking();
thread reloadtracking();
thread grenadetracking();
thread grenadeproximitytracking();
thread suppressingfiretracking();
}
}
//Function Number: 4
grenadeproximitytracking()
{
self endon("disconnect");
self endon("death");
var_00 = self.origin;
for(;;)
{
if(!isdefined(level.grenades) || level.grenades.size < 1 || !maps\mp\_utility::isreallyalive(self))
{
wait 0.05;
continue;
}
var_01 = maps\mp\_utility::combinearrays(level.grenades,level.missiles);
foreach(var_03 in var_01)
{
wait 0.05;
if(!isdefined(var_03))
{
continue;
}
if(isdefined(var_03.weaponname))
{
switch(var_03.weaponname)
{
case "claymore_mp":
break;
}
}
switch(var_03.model)
{
case "mp_trophy_system":
case "weapon_radar":
case "weapon_jammer":
case "weapon_parabolic_knife":
break;
}
if(!isdefined(var_03.owner))
{
var_03.owner = getmissileowner(var_03);
}
if(isdefined(var_03.owner) && level.teambased && var_03.owner.team == self.team)
{
continue;
}
var_04 = distancesquared(var_03.origin,self.origin);
if(var_04 < 147456)
{
if(bullettracepassed(var_03.origin,self.origin,0,self))
{
if(common_scripts\utility::cointoss())
{
continue;
wait 5;
continue;
}
if(var_03.model == "projectile_concussion_grenade")
{
level thread saylocalsound(self,"stun_incoming");
wait 5;
continue;
}
if(var_03.model == "projectile_m84_flashbang_grenade")
{
level thread saylocalsound(self,"flash_incoming");
wait 5;
continue;
}
if(var_03.model == "projectile_rocket")
{
level thread saylocalsound(self,"rpg_incoming");
wait 5;
continue;
}
if(var_03.model == "weapon_c4")
{
level thread saylocalsound(self,"c4_incoming");
wait 5;
continue;
}
if(var_03.model == "projectile_m203grenade")
{
level thread saylocalsound(self,"rpg_incoming");
wait 5;
continue;
}
if(var_03.model == "projectile_semtex_grenade")
{
level thread saylocalsound(self,"semtex_incoming");
wait 5;
continue;
}
level thread saylocalsound(self,"grenade_incoming");
wait 5;
}
}
}
}
}
//Function Number: 5
suppressingfiretracking()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
var_00 = undefined;
for(;;)
{
self waittill("begin_firing");
thread suppresswaiter();
self waittill("end_firing");
self notify("stoppedFiring");
}
}
//Function Number: 6
suppresswaiter()
{
self notify("suppressWaiter");
self endon("suppressWaiter");
self endon("death");
self endon("disconnect");
self endon("stoppedFiring");
wait 2;
level thread saylocalsound(self,"suppressing_fire");
}
//Function Number: 7
claymoretracking()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
for(;;)
{
self waittill("begin_firing");
var_00 = self getcurrentweapon();
if(var_00 == "claymore_mp")
{
level thread saylocalsound(self,"claymore_plant");
}
}
}
//Function Number: 8
reloadtracking()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
for(;;)
{
self waittill("reload_start");
level thread saylocalsound(self,"reload");
}
}
//Function Number: 9
grenadetracking()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
if(var_01 == "frag_grenade_mp")
{
level thread saylocalsound(self,"frag_out");
continue;
}
if(var_01 == "semtex_mp")
{
level thread saylocalsound(self,"semtex_out");
continue;
}
if(var_01 == "flash_grenade_mp")
{
level thread saylocalsound(self,"flash_out");
continue;
}
if(var_01 == "concussion_grenade_mp")
{
level thread saylocalsound(self,"conc_out");
continue;
}
if(var_01 == "smoke_grenade_mp")
{
level thread saylocalsound(self,"smoke_out");
continue;
}
if(var_01 == "c4_mp")
{
level thread saylocalsound(self,"c4_plant");
}
}
}
//Function Number: 10
saylocalsounddelayed(param_00,param_01,param_02)
{
param_00 endon("death");
param_00 endon("disconnect");
wait param_02;
saylocalsound(param_00,param_01);
}
//Function Number: 11
saylocalsound(param_00,param_01)
{
param_00 endon("death");
param_00 endon("disconnect");
if(isspeakerinrange(param_00))
{
return;
}
if(param_00.team != "spectator")
{
var_02 = param_00.pers["voicePrefix"];
var_03 = var_02 + level.bcsounds[param_01];
param_00 thread dosound(var_03);
}
}
//Function Number: 12
dosound(param_00)
{
var_01 = self.pers["team"];
level addspeaker(self,var_01);
self playsoundtoteam(param_00,var_01,self);
thread timehack(param_00);
common_scripts\utility::waittill_any(param_00,"death","disconnect");
level removespeaker(self,var_01);
}
//Function Number: 13
timehack(param_00)
{
self endon("death");
self endon("disconnect");
wait 2;
self notify(param_00);
}
//Function Number: 14
isspeakerinrange(param_00)
{
param_00 endon("death");
param_00 endon("disconnect");
var_01 = 1000000;
if(isdefined(param_00) && isdefined(param_00.pers["team"]) && param_00.pers["team"] != "spectator")
{
for(var_02 = 0;var_02 < level.speakers[param_00.pers["team"]].size;var_02++)
{
var_03 = level.speakers[param_00.pers["team"]][var_02];
if(var_03 == param_00)
{
return 1;
}
if(!isdefined(var_03))
{
continue;
}
if(distancesquared(var_03.origin,param_00.origin) < var_01)
{
return 1;
}
}
}
return 0;
}
//Function Number: 15
addspeaker(param_00,param_01)
{
level.speakers[param_01][level.speakers[param_01].size] = param_00;
}
//Function Number: 16
removespeaker(param_00,param_01)
{
var_02 = [];
for(var_03 = 0;var_03 < level.speakers[param_01].size;var_03++)
{
if(level.speakers[param_01][var_03] == param_00)
{
continue;
}
var_02[var_02.size] = level.speakers[param_01][var_03];
}
level.speakers[param_01] = var_02;
}

View File

@ -0,0 +1,154 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_callbacksetup.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 15
* Decompile Time: 219 ms
* Timestamp: 10/27/2023 2:12:11 AM
*******************************************************************/
//Function Number: 1
codecallback_startgametype()
{
if(getdvar("r_reflectionProbeGenerate") == "1")
{
level waittill("eternity");
}
if(!isdefined(level.gametypestarted) || !level.gametypestarted)
{
[[ level.callbackstartgametype ]]();
level.gametypestarted = 1;
}
}
//Function Number: 2
codecallback_playerconnect()
{
if(getdvar("r_reflectionProbeGenerate") == "1")
{
level waittill("eternity");
}
self endon("disconnect");
[[ level.callbackplayerconnect ]]();
}
//Function Number: 3
codecallback_playerdisconnect()
{
self notify("disconnect");
[[ level.callbackplayerdisconnect ]]();
}
//Function Number: 4
codecallback_playerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
self endon("disconnect");
[[ level.callbackplayerdamage ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09);
}
//Function Number: 5
codecallback_playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
self endon("disconnect");
[[ level.callbackplayerkilled ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08);
}
//Function Number: 6
codecallback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B)
{
if(isdefined(self.damagecallback))
{
self [[ self.damagecallback ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B);
return;
}
self vehicle_finishdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B);
}
//Function Number: 7
codecallback_codeendgame()
{
self endon("disconnect");
[[ level.callbackcodeendgame ]]();
}
//Function Number: 8
codecallback_playerlaststand(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
self endon("disconnect");
[[ level.callbackplayerlaststand ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08);
}
//Function Number: 9
codecallback_playermigrated()
{
self endon("disconnect");
[[ level.callbackplayermigrated ]]();
}
//Function Number: 10
codecallback_hostmigration()
{
[[ level.callbackhostmigration ]]();
}
//Function Number: 11
setupdamageflags()
{
level.idflags_radius = 1;
level.idflags_no_armor = 2;
level.idflags_no_knockback = 4;
level.idflags_penetration = 8;
level.idflags_stun = 16;
level.idflags_shield_explosive_impact = 32;
level.idflags_shield_explosive_impact_huge = 64;
level.idflags_shield_explosive_splash = 128;
level.idflags_no_team_protection = 256;
level.idflags_no_protection = 512;
level.idflags_passthru = 1024;
}
//Function Number: 12
setupcallbacks()
{
setdefaultcallbacks();
setupdamageflags();
}
//Function Number: 13
setdefaultcallbacks()
{
level.callbackstartgametype = ::maps\mp\gametypes\_gamelogic::callback_startgametype;
level.callbackplayerconnect = ::maps\mp\gametypes\_playerlogic::callback_playerconnect;
level.callbackplayerdisconnect = ::maps\mp\gametypes\_playerlogic::callback_playerdisconnect;
level.callbackplayerdamage = ::maps\mp\gametypes\_damage::callback_playerdamage;
level.callbackplayerkilled = ::maps\mp\gametypes\_damage::callback_playerkilled;
level.callbackcodeendgame = ::maps\mp\gametypes\_gamelogic::callback_codeendgame;
level.callbackplayerlaststand = ::maps\mp\gametypes\_damage::callback_playerlaststand;
level.callbackplayermigrated = ::maps\mp\gametypes\_playerlogic::callback_playermigrated;
level.callbackhostmigration = ::maps\mp\gametypes\_hostmigration::callback_hostmigration;
}
//Function Number: 14
abortlevel()
{
level.callbackstartgametype = ::callbackvoid;
level.callbackplayerconnect = ::callbackvoid;
level.callbackplayerdisconnect = ::callbackvoid;
level.callbackplayerdamage = ::callbackvoid;
level.callbackplayerkilled = ::callbackvoid;
level.callbackcodeendgame = ::callbackvoid;
level.callbackplayerlaststand = ::callbackvoid;
level.callbackplayermigrated = ::callbackvoid;
level.callbackhostmigration = ::callbackvoid;
setdvar("g_gametype","dm");
exitlevel(0);
}
//Function Number: 15
callbackvoid()
{
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,118 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_damagefeedback.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 58 ms
* Timestamp: 10/27/2023 2:12:19 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheshader("damage_feedback");
precacheshader("damage_feedback_j");
precacheshader("damage_feedback_lightarmor");
precacheshader("damage_feedback_juggernaut");
precacheshader("scavenger_pickup");
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.hud_damagefeedback = newclienthudelem(var_00);
var_00.hud_damagefeedback.horzalign = "center";
var_00.hud_damagefeedback.vertalign = "middle";
var_00.hud_damagefeedback.x = -12;
var_00.hud_damagefeedback.y = -12;
var_00.hud_damagefeedback.alpha = 0;
var_00.hud_damagefeedback.archived = 1;
var_00.hud_damagefeedback setshader("damage_feedback",24,48);
}
}
//Function Number: 3
updatedamagefeedback(param_00)
{
if(!isplayer(self))
{
return;
}
var_01 = -12;
var_02 = -12;
if(getdvarint("camera_thirdPerson"))
{
var_03 = self getthirdpersoncrosshairoffset() * 240;
}
else
{
var_03 = getdvarfloat("cg_crosshairVerticalOffset") * 240;
}
if(level.splitscreen || self issplitscreenplayer())
{
var_03 = var_03 * 0.5;
}
var_04 = 0;
var_05 = 1;
if(param_00 == "hitBodyArmor")
{
self.hud_damagefeedback setshader("damage_feedback_j",24,48);
self playlocalsound("MP_hit_alert");
}
else if(param_00 == "hitLightArmor")
{
self.hud_damagefeedback setshader("damage_feedback_lightarmor",24,48);
self playlocalsound("MP_hit_alert");
}
else if(param_00 == "hitJuggernaut")
{
self.hud_damagefeedback setshader("damage_feedback_juggernaut",24,48);
self playlocalsound("MP_hit_alert");
}
else if(param_00 == "none")
{
return;
}
else if(param_00 == "scavenger" && !level.hardcoremode)
{
var_01 = -36;
var_02 = 32;
self.hud_damagefeedback setshader("scavenger_pickup",64,32);
var_04 = 2.5;
}
else
{
self.hud_damagefeedback setshader("damage_feedback",24,48);
self playlocalsound("MP_hit_alert");
}
self.hud_damagefeedback.alpha = var_05;
if(var_04 != 0)
{
self.hud_damagefeedback fadeovertime(var_04);
}
else
{
self.hud_damagefeedback fadeovertime(1);
}
self.hud_damagefeedback.alpha = 0;
if(self.hud_damagefeedback.x != var_01)
{
self.hud_damagefeedback.x = var_01;
}
var_02 = var_02 - int(var_03);
if(self.hud_damagefeedback.y != var_02)
{
self.hud_damagefeedback.y = var_02;
}
}

View File

@ -0,0 +1,95 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_deathicons.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 5
* Decompile Time: 89 ms
* Timestamp: 10/27/2023 2:12:20 AM
*******************************************************************/
//Function Number: 1
init()
{
if(!level.teambased)
{
return;
}
precacheshader("headicon_dead");
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.selfdeathicons = [];
}
}
//Function Number: 3
updatedeathiconsenabled()
{
}
//Function Number: 4
adddeathicon(param_00,param_01,param_02,param_03)
{
if(!level.teambased)
{
return;
}
var_04 = param_00.origin;
param_01 endon("spawned_player");
param_01 endon("disconnect");
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
if(getdvar("ui_hud_showdeathicons") == "0")
{
return;
}
if(level.hardcoremode)
{
return;
}
if(isdefined(self.lastdeathicon))
{
self.lastdeathicon destroy();
}
var_05 = newteamhudelem(param_02);
var_05.x = var_04[0];
var_05.y = var_04[1];
var_05.z = var_04[2] + 54;
var_05.alpha = 0.61;
var_05.archived = 1;
if(level.splitscreen)
{
var_05 setshader("headicon_dead",14,14);
}
else
{
var_05 setshader("headicon_dead",7,7);
}
var_05 setwaypoint(0);
self.lastdeathicon = var_05;
var_05 thread destroyslowly(param_03);
}
//Function Number: 5
destroyslowly(param_00)
{
self endon("death");
wait param_00;
self fadeovertime(1);
self.alpha = 0;
wait 1;
self destroy();
}

View File

@ -0,0 +1,322 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_equipment.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 8
* Decompile Time: 125 ms
* Timestamp: 10/27/2023 2:12:20 AM
*******************************************************************/
//Function Number: 1
watchtrophyusage()
{
self endon("spawned_player");
self endon("disconnect");
self.trophyarray = [];
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
if(var_01 == "trophy" || var_01 == "trophy_mp")
{
if(!isalive(self))
{
var_00 delete();
return;
}
var_00 hide();
var_00 waittill("missile_stuck");
var_02 = 40;
if(var_02 * var_02 < distancesquared(var_00.origin,self.origin))
{
var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self);
if(var_03["fraction"] == 1)
{
var_00 delete();
self setweaponammostock("trophy_mp",self getweaponammostock("trophy_mp") + 1);
continue;
}
var_00.origin = var_03["position"];
}
var_00 show();
self.trophyarray = common_scripts\utility::array_removeundefined(self.trophyarray);
if(self.trophyarray.size >= level.maxperplayerexplosives)
{
self.trophyarray[0] detonate();
}
var_04 = spawn("script_model",var_00.origin);
var_04 setmodel("mp_trophy_system");
var_04 thread maps\mp\gametypes\_weapons::createbombsquadmodel("mp_trophy_system_bombsquad","tag_origin",level.otherteam[self.team],self);
var_04.angles = var_00.angles;
self.trophyarray[self.trophyarray.size] = var_04;
var_04.owner = self;
var_04.team = self.team;
var_04.weaponname = var_01;
if(isdefined(self.trophyremainingammo) && self.trophyremainingammo > 0)
{
var_04.ammo = self.trophyremainingammo;
}
else
{
var_04.ammo = 2;
}
var_04.trigger = spawn("script_origin",var_04.origin);
var_04 thread trophydamage(self);
var_04 thread trophyactive(self);
var_04 thread trophydisconnectwaiter(self);
var_04 thread trophyplayerspawnwaiter(self);
var_04 thread trophyuselistener(self);
var_04 thread maps\mp\gametypes\_weapons::c4empkillstreakwait();
if(level.teambased)
{
var_04 maps\mp\_entityheadicons::setteamheadicon(var_04.team,(0,0,65));
}
else
{
var_04 maps\mp\_entityheadicons::setplayerheadicon(var_04.owner,(0,0,65));
}
wait 0.05;
if(isdefined(var_00))
{
var_00 delete();
}
}
}
}
//Function Number: 2
trophyuselistener(param_00)
{
self endon("death");
level endon("game_ended");
param_00 endon("disconnect");
param_00 endon("death");
self.trigger setcursorhint("HINT_NOICON");
self.trigger sethintstring(&"MP_PICKUP_TROPHY");
self.trigger maps\mp\_utility::setselfusable(param_00);
self.trigger thread maps\mp\_utility::notusableforjoiningplayers(param_00);
for(;;)
{
self.trigger waittill("trigger",param_00);
param_00 playlocalsound("scavenger_pack_pickup");
param_00 maps\mp\_utility::giveperk("trophy_mp",0);
param_00.trophyremainingammo = self.ammo;
self.trigger delete();
self delete();
self notify("death");
}
}
//Function Number: 3
trophyplayerspawnwaiter(param_00)
{
self endon("disconnect");
self endon("death");
param_00 waittill("spawned");
thread trophybreak();
}
//Function Number: 4
trophydisconnectwaiter(param_00)
{
self endon("death");
param_00 waittill("disconnect");
thread trophybreak();
}
//Function Number: 5
trophyactive(param_00)
{
param_00 endon("disconnect");
self endon("death");
var_01 = self.origin;
for(;;)
{
if(!isdefined(level.grenades) || level.grenades.size < 1 && level.missiles.size < 1 || isdefined(self.disabled))
{
wait 0.05;
continue;
}
var_02 = maps\mp\_utility::combinearrays(level.grenades,level.missiles);
foreach(var_04 in var_02)
{
wait 0.05;
if(!isdefined(var_04))
{
continue;
}
if(var_04 == self)
{
continue;
}
if(isdefined(var_04.weaponname))
{
switch(var_04.weaponname)
{
case "claymore_mp":
break;
}
}
switch(var_04.model)
{
case "mp_trophy_system":
case "weapon_radar":
case "weapon_jammer":
case "weapon_parabolic_knife":
break;
}
if(!isdefined(var_04.owner))
{
var_04.owner = getmissileowner(var_04);
}
if(isdefined(var_04.owner) && level.teambased && var_04.owner.team == param_00.team)
{
continue;
}
if(isdefined(var_04.owner) && var_04.owner == param_00)
{
continue;
}
var_05 = distancesquared(var_04.origin,self.origin);
if(var_05 < 147456)
{
if(bullettracepassed(var_04.origin,self.origin,0,self))
{
playfx(level.sentry_fire,self.origin + (0,0,32),var_04.origin - self.origin,anglestoup(self.angles));
self playsound("trophy_detect_projectile");
param_00 thread projectileexplode(var_04,self);
param_00 maps\mp\gametypes\_missions::processchallenge("ch_noboomforyou");
self.ammo--;
if(self.ammo <= 0)
{
thread trophybreak();
}
}
}
}
}
}
//Function Number: 6
projectileexplode(param_00,param_01)
{
self endon("death");
var_02 = param_00.origin;
var_03 = param_00.model;
var_04 = param_00.angles;
if(var_03 == "weapon_light_marker")
{
playfx(level.empgrenadeexplode,var_02,anglestoforward(var_04),anglestoup(var_04));
param_01 thread trophybreak();
param_00 delete();
return;
}
param_00 delete();
param_01 playsound("trophy_fire");
playfx(level.mine_explode,var_02,anglestoforward(var_04),anglestoup(var_04));
radiusdamage(var_02,128,105,10,self,"MOD_EXPLOSIVE","trophy_mp");
}
//Function Number: 7
trophydamage(param_00)
{
self endon("death");
param_00 endon("death");
self setcandamage(1);
self.health = 999999;
self.maxhealth = 100;
self.damagetaken = 0;
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A);
if(!isplayer(var_02))
{
continue;
}
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02))
{
continue;
}
if(isdefined(var_0A))
{
switch(var_0A)
{
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "concussion_grenade_mp":
break;
}
}
if(!isdefined(self))
{
return;
}
if(var_05 == "MOD_MELEE")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
if(isdefined(var_09) && var_09 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
if(isdefined(var_0A) && var_0A == "emp_grenade_mp")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
self.damagetaken = self.damagetaken + var_01;
if(isplayer(var_02))
{
var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("trophy");
}
if(self.damagetaken >= self.maxhealth)
{
var_02 notify("destroyed_explosive");
thread trophybreak();
}
}
}
//Function Number: 8
trophybreak()
{
playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin");
playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_origin");
self playsound("sentry_explode");
self notify("death");
var_00 = self.origin;
self.trigger makeunusable();
wait 3;
if(isdefined(self.trigger))
{
self.trigger delete();
}
if(isdefined(self))
{
self delete();
}
}

View File

@ -0,0 +1,125 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_friendicons.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 104 ms
* Timestamp: 10/27/2023 2:12:21 AM
*******************************************************************/
//Function Number: 1
init()
{
level.drawfriend = 0;
game["headicon_allies"] = maps\mp\gametypes\_teams::init("allies");
game["headicon_axis"] = maps\mp\gametypes\_teams::init("axis");
precacheheadicon(game["headicon_allies"]);
precacheheadicon(game["headicon_axis"]);
precacheshader("waypoint_revive");
level thread onplayerconnect();
for(;;)
{
updatefriendiconsettings();
wait 5;
}
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
var_00 thread onplayerkilled();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
thread showfriendicon();
}
}
//Function Number: 4
onplayerkilled()
{
self endon("disconnect");
for(;;)
{
self waittill("killed_player");
self.headicon = "";
}
}
//Function Number: 5
showfriendicon()
{
if(level.drawfriend)
{
if(self.pers["team"] == "allies")
{
self.headicon = game["headicon_allies"];
self.var_6C1 = "allies";
return;
}
self.headicon = game["headicon_axis"];
self.var_6C1 = "axis";
}
}
//Function Number: 6
updatefriendiconsettings()
{
var_00 = maps\mp\_utility::getintproperty("scr_drawfriend",level.drawfriend);
if(level.drawfriend != var_00)
{
level.drawfriend = var_00;
updatefriendicons();
}
}
//Function Number: 7
updatefriendicons()
{
var_00 = level.players;
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_02 = var_00[var_01];
if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing")
{
if(level.drawfriend)
{
if(var_02.pers["team"] == "allies")
{
var_02.headicon = game["headicon_allies"];
var_02.var_6C1 = "allies";
}
else
{
var_02.headicon = game["headicon_axis"];
var_02.var_6C1 = "axis";
}
continue;
}
var_00 = level.players;
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_02 = var_00[var_01];
if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing")
{
var_02.headicon = "";
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,190 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_globallogic.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 9
* Decompile Time: 126 ms
* Timestamp: 10/27/2023 2:12:29 AM
*******************************************************************/
//Function Number: 1
init()
{
level.splitscreen = issplitscreen();
level.ps3 = getdvar("ps3Game") == "true";
level.xenon = getdvar("xenonGame") == "true";
level.console = level.ps3 || level.xenon;
level.onlinegame = getdvarint("onlinegame");
level.rankedmatch = !level.onlinegame || !getdvarint("xblive_privatematch");
level.script = tolower(getdvar("mapname"));
level.gametype = tolower(getdvar("g_gametype"));
level.otherteam["allies"] = "axis";
level.otherteam["axis"] = "allies";
level.teambased = 0;
level.objectivebased = 0;
level.endgameontimelimit = 1;
level.showingfinalkillcam = 0;
level.tispawndelay = getdvarint("scr_tispawndelay");
if(!isdefined(level.tweakablesinitialized))
{
maps\mp\gametypes\_tweakables::init();
}
precachestring(&"MP_HALFTIME");
precachestring(&"MP_OVERTIME");
precachestring(&"MP_ROUNDEND");
precachestring(&"MP_INTERMISSION");
precachestring(&"MP_SWITCHING_SIDES");
precachestring(&"MP_FRIENDLY_FIRE_WILL_NOT");
precachestring(&"PLATFORM_REVIVE");
precachestring(&"MP_OBITUARY_NEUTRAL");
precachestring(&"MP_OBITUARY_FRIENDLY");
precachestring(&"MP_OBITUARY_ENEMY");
if(level.splitscreen)
{
precachestring(&"MP_ENDED_GAME");
}
else
{
precachestring(&"MP_HOST_ENDED_GAME");
}
level.halftimetype = "halftime";
level.halftimesubcaption = &"MP_SWITCHING_SIDES";
level.laststatustime = 0;
level.waswinning = "none";
level.lastslowprocessframe = 0;
level.placement["allies"] = [];
level.placement["axis"] = [];
level.placement["all"] = [];
level.postroundtime = 5;
level.playerslookingforsafespawn = [];
registerdvars();
precachemodel("vehicle_mig29_desert");
precachemodel("projectile_cbu97_clusterbomb");
precachemodel("tag_origin");
level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner");
level.fx_airstrike_contrail = loadfx("smoke/jet_contrail");
if(maps\mp\_utility::matchmakinggame())
{
var_00 = " LB_MAP_" + getdvar("ui_mapname");
var_01 = " LB_GM_" + level.gametype;
if(getdvarint("g_hardcore"))
{
var_01 = var_01 + "_HC";
}
precacheleaderboards("LB_GB_TOTALXP_AT LB_GB_TOTALXP_LT LB_GB_WINS_AT LB_GB_WINS_LT LB_GB_KILLS_AT LB_GB_KILLS_LT LB_GB_ACCURACY_AT LB_ACCOLADES" + var_01 + var_00);
}
level.teamcount["allies"] = 0;
level.teamcount["axis"] = 0;
level.teamcount["spectator"] = 0;
level.alivecount["allies"] = 0;
level.alivecount["axis"] = 0;
level.alivecount["spectator"] = 0;
level.livescount["allies"] = 0;
level.livescount["axis"] = 0;
level.onelefttime = [];
level.hasspawned["allies"] = 0;
level.hasspawned["axis"] = 0;
}
//Function Number: 2
registerdvars()
{
makedvarserverinfo("ui_bomb_timer",0);
makedvarserverinfo("ui_nuke_end_milliseconds",0);
makedvarserverinfo("ui_danger_team","");
makedvarserverinfo("ui_inhostmigration",0);
makedvarserverinfo("ui_override_halftime",0);
makedvarserverinfo("camera_thirdPerson",getdvarint("scr_thirdPerson"));
}
//Function Number: 3
setupcallbacks()
{
level.onxpevent = ::onxpevent;
level.getspawnpoint = ::blank;
level.onspawnplayer = ::blank;
level.onrespawndelay = ::blank;
level.ontimelimit = ::maps\mp\gametypes\_gamelogic::default_ontimelimit;
level.onhalftime = ::maps\mp\gametypes\_gamelogic::default_onhalftime;
level.ondeadevent = ::maps\mp\gametypes\_gamelogic::default_ondeadevent;
level.ononeleftevent = ::maps\mp\gametypes\_gamelogic::default_ononeleftevent;
level.onprecachegametype = ::blank;
level.onstartgametype = ::blank;
level.onplayerkilled = ::blank;
level.autoassign = ::maps\mp\gametypes\_menus::menuautoassign;
level.spectator = ::maps\mp\gametypes\_menus::menuspectator;
level.class = ::maps\mp\gametypes\_menus::menuclass;
level.allies = ::maps\mp\gametypes\_menus::menuallies;
level.axis = ::maps\mp\gametypes\_menus::menuaxis;
}
//Function Number: 4
blank(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
}
//Function Number: 5
testmenu()
{
self endon("death");
self endon("disconnect");
for(;;)
{
wait 10;
var_00 = spawnstruct();
var_00.titletext = &"MP_CHALLENGE_COMPLETED";
var_00.notifytext = "wheee";
var_00.sound = "mp_challenge_complete";
thread maps\mp\gametypes\_hud_message::notifymessage(var_00);
}
}
//Function Number: 6
testshock()
{
self endon("death");
self endon("disconnect");
for(;;)
{
wait 3;
var_00 = randomint(6);
for(var_01 = 0;var_01 < var_00;var_01++)
{
iprintlnbold(var_00);
self shellshock("frag_grenade_mp",0.2);
wait 0.1;
}
}
}
//Function Number: 7
onxpevent(param_00)
{
thread maps\mp\gametypes\_rank::giverankxp(param_00);
}
//Function Number: 8
fakelag()
{
self endon("disconnect");
self.fakelag = randomintrange(50,150);
for(;;)
{
self setclientdvar("fakelag_target",self.fakelag);
wait randomfloatrange(5,15);
}
}
//Function Number: 9
debugline(param_00,param_01)
{
for(var_02 = 0;var_02 < 50;var_02++)
{
wait 0.05;
}
}

View File

@ -0,0 +1,267 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_healthoverlay.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 8
* Decompile Time: 134 ms
* Timestamp: 10/27/2023 2:12:30 AM
*******************************************************************/
//Function Number: 1
init()
{
level.healthoverlaycutoff = 0.55;
var_00 = 5;
var_00 = maps\mp\gametypes\_tweakables::gettweakablevalue("player","healthregentime");
level.playerhealth_regularregendelay = var_00 * 1000;
level.healthregendisabled = level.playerhealth_regularregendelay <= 0;
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
thread playerhealthregen();
}
}
//Function Number: 4
playerhealthregen()
{
self endon("death");
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
self endon("faux_spawn");
level endon("game_ended");
if(self.health <= 0)
{
return;
}
var_00 = 0;
var_01 = 0;
thread playerpainbreathingsound(self.maxhealth * 0.55);
for(;;)
{
self waittill("damage");
if(self.health <= 0)
{
return;
}
var_01 = gettime();
var_02 = self.health / self.maxhealth;
if(!isdefined(self.healthregenlevel))
{
self.regenspeed = 1;
}
else if(self.healthregenlevel == 0.33)
{
self.regenspeed = 0.75;
}
else if(self.healthregenlevel == 0.66)
{
self.regenspeed = 0.5;
}
else if(self.healthregenlevel == 0.99)
{
self.regenspeed = 0.3;
}
else
{
self.regenspeed = 1;
}
if(var_02 <= level.healthoverlaycutoff)
{
self.atbrinkofdeath = 1;
}
thread healthregeneration(var_01,var_02);
thread breathingmanager(var_01,var_02);
}
}
//Function Number: 5
breathingmanager(param_00,param_01)
{
self notify("breathingManager");
self endon("breathingManager");
self endon("death");
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
level endon("game_ended");
if(maps\mp\_utility::isusingremote())
{
return;
}
self.breathingstoptime = param_00 + 6000 * self.regenspeed;
wait 6 * self.regenspeed;
if(!level.gameended)
{
self playlocalsound("breathing_better");
}
}
//Function Number: 6
healthregeneration(param_00,param_01)
{
self notify("healthRegeneration");
self endon("healthRegeneration");
self endon("death");
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
level endon("game_ended");
if(level.healthregendisabled)
{
return;
}
wait level.playerhealth_regularregendelay / 1000 * self.regenspeed;
if(param_01 < 0.55)
{
var_02 = 1;
}
else
{
var_02 = 0;
}
for(;;)
{
if(self.regenspeed == 0.75)
{
wait 0.2;
if(self.health < self.maxhealth)
{
self.health = self.health + 5;
}
else
{
break;
}
}
else if(self.regenspeed == 0.5)
{
wait 0.05;
if(self.health < self.maxhealth)
{
self.health = self.health + 2;
}
else
{
break;
}
}
else if(self.regenspeed == 0.3)
{
wait 0.15;
if(self.health < self.maxhealth)
{
self.health = self.health + 9;
}
else
{
break;
}
}
else if(!isdefined(self.regenspeed) || self.regenspeed == 1)
{
wait 0.05;
if(self.health < self.maxhealth)
{
self.health = self.health + 1;
param_01 = self.health / self.maxhealth;
}
else
{
break;
}
}
if(self.health > self.maxhealth)
{
self.health = self.maxhealth;
}
}
maps\mp\gametypes\_damage::resetattackerlist();
if(var_02)
{
maps\mp\gametypes\_missions::healthregenerated();
}
}
//Function Number: 7
wait_for_not_using_remote()
{
self notify("waiting_to_stop_remote");
self endon("waiting_to_stop_remote");
self endon("death");
level endon("game_ended");
self waittill("stopped_using_remote");
if(isdefined(level.nukedetonated))
{
self visionsetnakedforplayer(level.nukevisionset,0);
return;
}
self visionsetnakedforplayer("",0);
}
//Function Number: 8
playerpainbreathingsound(param_00)
{
level endon("game_ended");
self endon("death");
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
wait 2;
for(;;)
{
wait 0.2;
if(self.health <= 0)
{
return;
}
if(self.health >= param_00)
{
continue;
}
if(level.healthregendisabled && gettime() > self.breathingstoptime)
{
continue;
}
if(maps\mp\_utility::isusingremote())
{
continue;
}
self playlocalsound("breathing_hurt");
wait 0.784;
wait 0.1 + randomfloat(0.8);
}
}

View File

@ -0,0 +1,166 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_hostmigration.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 9
* Decompile Time: 124 ms
* Timestamp: 10/27/2023 2:12:30 AM
*******************************************************************/
//Function Number: 1
callback_hostmigration()
{
level.hostmigrationreturnedplayercount = 0;
if(level.gameended)
{
return;
}
level.hostmigrationtimer = 1;
setdvar("ui_inhostmigration",1);
level notify("host_migration_begin");
maps\mp\gametypes\_gamelogic::updatetimerpausedness();
foreach(var_01 in level.players)
{
var_01 thread hostmigrationtimerthink();
}
level endon("host_migration_begin");
hostmigrationwait();
level.hostmigrationtimer = undefined;
setdvar("ui_inhostmigration",0);
level notify("host_migration_end");
maps\mp\gametypes\_gamelogic::updatetimerpausedness();
level thread maps\mp\gametypes\_gamelogic::updategameevents();
}
//Function Number: 2
hostmigrationwait()
{
level endon("game_ended");
level.ingraceperiod = 25;
thread maps\mp\gametypes\_gamelogic::matchstarttimer("waiting_for_players",20);
hostmigrationwaitforplayers();
level.ingraceperiod = 10;
thread maps\mp\gametypes\_gamelogic::matchstarttimer("match_resuming_in",5);
wait 5;
level.ingraceperiod = 0;
}
//Function Number: 3
hostmigrationwaitforplayers()
{
level endon("hostmigration_enoughplayers");
wait 15;
}
//Function Number: 4
hostmigrationtimerthink_internal()
{
level endon("host_migration_begin");
level endon("host_migration_end");
self.hostmigrationcontrolsfrozen = 0;
while(!maps\mp\_utility::isreallyalive(self))
{
self waittill("spawned");
}
self.hostmigrationcontrolsfrozen = 1;
maps\mp\_utility::freezecontrolswrapper(1);
level waittill("host_migration_end");
}
//Function Number: 5
hostmigrationtimerthink()
{
self endon("disconnect");
self setclientdvar("cg_scoreboardPingGraph","0");
hostmigrationtimerthink_internal();
if(self.hostmigrationcontrolsfrozen)
{
maps\mp\_utility::freezecontrolswrapper(0);
}
self setclientdvar("cg_scoreboardPingGraph","1");
}
//Function Number: 6
waittillhostmigrationdone()
{
if(!isdefined(level.hostmigrationtimer))
{
return 0;
}
var_00 = gettime();
level waittill("host_migration_end");
return gettime() - var_00;
}
//Function Number: 7
waittillhostmigrationstarts(param_00)
{
if(isdefined(level.hostmigrationtimer))
{
return;
}
level endon("host_migration_begin");
wait param_00;
}
//Function Number: 8
waitlongdurationwithhostmigrationpause(param_00)
{
if(param_00 == 0)
{
return;
}
var_01 = gettime();
var_02 = gettime() + param_00 * 1000;
while(gettime() < var_02)
{
waittillhostmigrationstarts(var_02 - gettime() / 1000);
if(isdefined(level.hostmigrationtimer))
{
var_03 = waittillhostmigrationdone();
var_02 = var_02 + var_03;
}
}
waittillhostmigrationdone();
return gettime() - var_01;
}
//Function Number: 9
waitlongdurationwithgameendtimeupdate(param_00)
{
if(param_00 == 0)
{
return;
}
var_01 = gettime();
var_02 = gettime() + param_00 * 1000;
while(gettime() < var_02)
{
waittillhostmigrationstarts(var_02 - gettime() / 1000);
while(isdefined(level.hostmigrationtimer))
{
var_02 = var_02 + 1000;
setgameendtime(int(var_02));
wait 1;
}
}
while(isdefined(level.hostmigrationtimer))
{
var_02 = var_02 + 1000;
setgameendtime(int(var_02));
wait 1;
}
return gettime() - var_01;
}

View File

@ -0,0 +1,78 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_hud.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 49 ms
* Timestamp: 10/27/2023 2:12:31 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheshader("progress_bar_bg");
precacheshader("progress_bar_fg");
precacheshader("progress_bar_fill");
level.uiparent = spawnstruct();
level.uiparent.horzalign = "left";
level.uiparent.vertalign = "top";
level.uiparent.alignx = "left";
level.uiparent.aligny = "top";
level.uiparent.x = 0;
level.uiparent.y = 0;
level.uiparent.width = 0;
level.uiparent.height = 0;
level.uiparent.children = [];
level.fontheight = 12;
level.hud["allies"] = spawnstruct();
level.hud["axis"] = spawnstruct();
level.primaryprogressbary = -61;
level.primaryprogressbarx = 0;
level.primaryprogressbarheight = 9;
level.primaryprogressbarwidth = 120;
level.primaryprogressbartexty = -75;
level.primaryprogressbartextx = 0;
level.primaryprogressbarfontsize = 0.6;
level.teamprogressbary = 32;
level.teamprogressbarheight = 14;
level.teamprogressbarwidth = 192;
level.teamprogressbartexty = 8;
level.teamprogressbarfontsize = 1.65;
level.lowertextyalign = "BOTTOM";
level.lowertexty = -90;
level.lowertextfontsize = 1.6;
}
//Function Number: 2
fontpulseinit(param_00)
{
self.basefontscale = self.fontscale;
if(isdefined(param_00))
{
self.maxfontscale = min(param_00,6.3);
}
else
{
self.maxfontscale = min(self.fontscale * 2,6.3);
}
self.inframes = 2;
self.outframes = 4;
}
//Function Number: 3
fontpulse(param_00)
{
self notify("fontPulse");
self endon("fontPulse");
self endon("death");
param_00 endon("disconnect");
param_00 endon("joined_team");
param_00 endon("joined_spectators");
self changefontscaleovertime(self.inframes * 0.05);
self.fontscale = self.maxfontscale;
wait self.inframes * 0.05;
self changefontscaleovertime(self.outframes * 0.05);
self.fontscale = self.basefontscale;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,621 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_killcam.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 22
* Decompile Time: 605 ms
* Timestamp: 10/27/2023 2:12:37 AM
*******************************************************************/
//Function Number: 1
init()
{
precachestring(&"PLATFORM_PRESS_TO_SKIP");
precachestring(&"PLATFORM_PRESS_TO_RESPAWN");
precachestring(&"PLATFORM_PRESS_TO_COPYCAT");
level.killcam = maps\mp\gametypes\_tweakables::gettweakablevalue("game","allowkillcam");
}
//Function Number: 2
killcam(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
self endon("disconnect");
self endon("spawned");
level endon("game_ended");
if(param_00 < 0)
{
return;
}
if(getdvar("scr_killcam_time") == "")
{
if(param_03 == "artillery_mp" || param_03 == "stealth_bomb_mp" || param_03 == "remote_mortar_missile_mp")
{
var_0A = gettime() - param_02 / 1000 - param_04 - 0.1;
}
else if(level.showingfinalkillcam)
{
var_0A = 4;
}
else if(param_04 == "apache_minigun_mp")
{
var_0A = 3;
}
else if(param_04 == "javelin_mp" || param_04 == "uav_strike_projectile_mp")
{
var_0A = 8;
}
else if(issubstr(param_04,"remotemissile_"))
{
var_0A = 5;
}
else if(!param_07 || param_07 > 5)
{
var_0A = 5;
}
else if(param_04 == "frag_grenade_mp" || param_04 == "frag_grenade_short_mp" || param_04 == "semtex_mp")
{
var_0A = 4.25;
}
else
{
var_0A = 2.5;
}
}
else
{
var_0A = getdvarfloat("scr_killcam_time");
}
if(isdefined(param_07))
{
if(var_0A > param_07)
{
var_0A = param_07;
}
if(var_0A < 0.05)
{
var_0A = 0.05;
}
}
if(getdvar("scr_killcam_posttime") == "")
{
var_0B = 2;
}
else
{
var_0B = getdvarfloat("scr_killcam_posttime");
if(var_0B < 0.05)
{
var_0B = 0.05;
}
}
var_0C = var_0A + var_0B;
if(isdefined(param_07) && var_0C > param_07)
{
if(param_07 < 2)
{
return;
}
if(param_07 - var_0A >= 1)
{
var_0B = param_07 - var_0A;
}
else
{
var_0B = 1;
var_0A = param_07 - 1;
}
var_0C = var_0A + var_0B;
}
var_0D = var_0A + param_04;
var_0E = gettime();
self notify("begin_killcam",var_0E);
if(isdefined(param_08))
{
param_08 visionsyncwithplayer(param_09);
}
self.sessionstate = "spectator";
self.forcespectatorclient = param_00;
self.killcamentity = -1;
if(param_01 >= 0)
{
thread setkillcamentity(param_01,var_0D,param_02);
}
self.archivetime = var_0D;
self.killcamlength = var_0C;
self.psoffsettime = param_05;
self allowspectateteam("allies",1);
self allowspectateteam("axis",1);
self allowspectateteam("freelook",1);
self allowspectateteam("none",1);
if(isdefined(param_08) && level.showingfinalkillcam)
{
self openmenu("killedby_card_display");
self setcarddisplayslot(param_08,7);
}
thread endedkillcamcleanup();
wait 0.05;
if(self.archivetime < var_0D)
{
}
var_0A = self.archivetime - 0.05 - param_04;
var_0C = var_0A + var_0B;
self.killcamlength = var_0C;
if(var_0A <= 0)
{
self.sessionstate = "dead";
self.forcespectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self notify("killcam_ended");
return;
}
if(level.showingfinalkillcam)
{
thread dofinalkillcamfx(var_0A);
}
self.killcam = 1;
initkcelements();
if(!level.splitscreen || self issplitscreenplayer())
{
self.kc_timer.alpha = 1;
self.kc_timer settenthstimer(var_0A);
}
if(param_06 && !level.gameended)
{
maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_SKIP",undefined,undefined,undefined,undefined,undefined,undefined,1);
}
else if(!level.gameended)
{
maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_RESPAWN",undefined,undefined,undefined,undefined,undefined,undefined,1);
}
if(!level.showingfinalkillcam)
{
self.kc_skiptext.alpha = 1;
}
else
{
self.kc_skiptext.alpha = 0;
}
self.kc_othertext.alpha = 0;
self.kc_icon.alpha = 0;
thread spawnedkillcamcleanup();
if(self == param_09 && param_09 maps\mp\_utility::_hasperk("specialty_copycat") && isdefined(param_09.pers["copyCatLoadout"]) && !param_08 maps\mp\_utility::isjuggernaut())
{
thread waitkccopycatbutton(param_08);
}
if(!level.showingfinalkillcam)
{
thread waitskipkillcambutton(param_06);
}
else
{
self notify("showing_final_killcam");
}
thread endkillcamifnothingtoshow();
waittillkillcamover();
if(level.showingfinalkillcam)
{
thread maps\mp\gametypes\_playerlogic::spawnendofgame();
return;
}
thread calculatekillcamtime(var_0E);
thread killcamcleanup(1);
}
//Function Number: 3
dofinalkillcamfx(param_00)
{
if(isdefined(level.doingfinalkillcamfx))
{
return;
}
level.doingfinalkillcamfx = 1;
var_01 = param_00;
if(var_01 > 1)
{
var_01 = 1;
wait param_00 - 1;
}
setslowmotion(1,0.25,var_01);
wait var_01 + 0.5;
setslowmotion(0.25,1,1);
level.doingfinalkillcamfx = undefined;
}
//Function Number: 4
calculatekillcamtime(param_00)
{
var_01 = int(gettime() - param_00);
maps\mp\_utility::incplayerstat("killcamtimewatched",var_01);
}
//Function Number: 5
waittillkillcamover()
{
self endon("abort_killcam");
wait self.killcamlength - 0.05;
}
//Function Number: 6
setkillcamentity(param_00,param_01,param_02)
{
self endon("disconnect");
self endon("killcam_ended");
var_03 = gettime() - param_01 * 1000;
if(param_02 > var_03)
{
wait 0.05;
param_01 = self.archivetime;
var_03 = gettime() - param_01 * 1000;
if(param_02 > var_03)
{
wait param_02 - var_03 / 1000;
}
}
self.killcamentity = param_00;
}
//Function Number: 7
waitskipkillcambutton(param_00)
{
self endon("disconnect");
self endon("killcam_ended");
while(self usebuttonpressed())
{
wait 0.05;
}
while(!self usebuttonpressed())
{
wait 0.05;
}
if(!maps\mp\_utility::matchmakinggame())
{
maps\mp\_utility::incplayerstat("killcamskipped",1);
}
if(param_00 <= 0)
{
maps\mp\_utility::clearlowermessage("kc_info");
}
self notify("abort_killcam");
}
//Function Number: 8
waitkccopycatbutton(param_00)
{
self endon("disconnect");
self endon("killcam_ended");
waitcopycatbutton(param_00);
self notify("abort_killcam");
}
//Function Number: 9
waitdeathcopycatbutton(param_00)
{
self endon("disconnect");
initkcelements();
var_01 = waitcopycatbutton(param_00);
if(!isdefined(var_01))
{
self.kc_icon.alpha = 0;
self.kc_othertext.alpha = 0;
}
}
//Function Number: 10
waitcopycatbutton(param_00)
{
self endon("spawned_player");
self endon("death_delay_finished");
self.kc_icon setshader("specialty_copycat",48,48);
self.kc_othertext settext(&"PLATFORM_PRESS_TO_COPYCAT");
self.kc_othertext.alpha = 1;
self.kc_icon.alpha = 1;
self notifyonplayercommand("use_copycat","weapnext");
self waittill("use_copycat");
self.pers["copyCatLoadout"]["inUse"] = 1;
self.pers["copyCatLoadout"]["owner"] = param_00;
self.kc_othertext fadeovertime(0.5);
self.kc_othertext.alpha = 0;
self.kc_icon fadeovertime(0.25);
self.kc_icon scaleovertime(0.25,512,512);
self.kc_icon.alpha = 0;
if(isdefined(param_00))
{
param_00 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("copied",self);
}
self playlocalsound("copycat_steal_class");
return 1;
}
//Function Number: 11
waitskipkillcamsafespawnbutton()
{
self endon("disconnect");
self endon("killcam_ended");
if(!maps\mp\gametypes\_playerlogic::mayspawn())
{
return;
}
while(self fragbuttonpressed())
{
wait 0.05;
}
while(!self fragbuttonpressed())
{
wait 0.05;
}
self.wantsafespawn = 1;
self notify("abort_killcam");
}
//Function Number: 12
endkillcamifnothingtoshow()
{
self endon("disconnect");
self endon("killcam_ended");
for(;;)
{
if(self.archivetime <= 0)
{
break;
}
wait 0.05;
}
self notify("abort_killcam");
}
//Function Number: 13
spawnedkillcamcleanup()
{
self endon("disconnect");
self endon("killcam_ended");
self waittill("spawned");
thread killcamcleanup(0);
}
//Function Number: 14
endedkillcamcleanup()
{
self endon("disconnect");
self endon("killcam_ended");
level waittill("game_ended");
thread killcamcleanup(1);
}
//Function Number: 15
killcamcleanup(param_00)
{
if(isdefined(self.kc_skiptext))
{
self.kc_skiptext.alpha = 0;
}
if(isdefined(self.kc_timer))
{
self.kc_timer.alpha = 0;
}
if(isdefined(self.kc_icon))
{
self.kc_icon.alpha = 0;
}
if(isdefined(self.kc_othertext))
{
self.kc_othertext.alpha = 0;
}
self.killcam = undefined;
if(!level.gameended)
{
maps\mp\_utility::clearlowermessage("kc_info");
}
thread maps\mp\gametypes\_spectating::setspectatepermissions();
self notify("killcam_ended");
if(!param_00)
{
return;
}
self.sessionstate = "dead";
maps\mp\_utility::clearkillcamstate();
}
//Function Number: 16
cancelkillcamonuse()
{
self.cancelkillcam = 0;
thread cancelkillcamonuse_specificbutton(::cancelkillcamusebutton,::cancelkillcamcallback);
}
//Function Number: 17
cancelkillcamusebutton()
{
return self usebuttonpressed();
}
//Function Number: 18
cancelkillcamsafespawnbutton()
{
return self fragbuttonpressed();
}
//Function Number: 19
cancelkillcamcallback()
{
self.cancelkillcam = 1;
}
//Function Number: 20
cancelkillcamsafespawncallback()
{
self.cancelkillcam = 1;
self.wantsafespawn = 1;
}
//Function Number: 21
cancelkillcamonuse_specificbutton(param_00,param_01)
{
self endon("death_delay_finished");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
if(!self [[ param_00 ]]())
{
wait 0.05;
continue;
}
var_02 = 0;
while(self [[ param_00 ]]())
{
var_02 = var_02 + 0.05;
wait 0.05;
}
if(var_02 >= 0.5)
{
continue;
}
var_02 = 0;
while(!self [[ param_00 ]]() && var_02 < 0.5)
{
var_02 = var_02 + 0.05;
wait 0.05;
}
if(var_02 >= 0.5)
{
continue;
}
self [[ param_01 ]]();
}
}
//Function Number: 22
initkcelements()
{
if(!isdefined(self.kc_skiptext))
{
self.kc_skiptext = newclienthudelem(self);
self.kc_skiptext.archived = 0;
self.kc_skiptext.x = 0;
self.kc_skiptext.alignx = "center";
self.kc_skiptext.aligny = "top";
self.kc_skiptext.horzalign = "center_adjustable";
self.kc_skiptext.vertalign = "top_adjustable";
self.kc_skiptext.sort = 1;
self.kc_skiptext.font = "default";
self.kc_skiptext.foreground = 1;
self.kc_skiptext.hidewheninmenu = 1;
if(level.splitscreen || self issplitscreenplayer())
{
self.kc_skiptext.y = 20;
self.kc_skiptext.fontscale = 1.2;
}
else
{
self.kc_skiptext.y = 32;
self.kc_skiptext.fontscale = 1.8;
}
}
if(!isdefined(self.kc_othertext))
{
self.kc_othertext = newclienthudelem(self);
self.kc_othertext.archived = 0;
self.kc_othertext.y = 18;
self.kc_othertext.alignx = "left";
self.kc_othertext.aligny = "top";
self.kc_othertext.horzalign = "center";
self.kc_othertext.vertalign = "middle";
self.kc_othertext.sort = 10;
self.kc_othertext.font = "small";
self.kc_othertext.foreground = 1;
self.kc_othertext.hidewheninmenu = 1;
if(level.splitscreen)
{
self.kc_othertext.x = 16;
self.kc_othertext.fontscale = 1.2;
}
else
{
self.kc_othertext.x = 62;
self.kc_othertext.fontscale = 1.6;
}
}
if(!isdefined(self.kc_icon))
{
self.kc_icon = newclienthudelem(self);
self.kc_icon.archived = 0;
self.kc_icon.x = 16;
self.kc_icon.y = 16;
self.kc_icon.alignx = "left";
self.kc_icon.aligny = "top";
self.kc_icon.horzalign = "center";
self.kc_icon.vertalign = "middle";
self.kc_icon.sort = 1;
self.kc_icon.foreground = 1;
self.kc_icon.hidewheninmenu = 1;
}
if(!level.splitscreen || self issplitscreenplayer())
{
if(!isdefined(self.kc_timer))
{
self.kc_timer = maps\mp\gametypes\_hud_util::createfontstring("hudbig",1);
self.kc_timer.archived = 0;
self.kc_timer.x = 0;
self.kc_timer.alignx = "center";
self.kc_timer.aligny = "middle";
self.kc_timer.horzalign = "center_safearea";
self.kc_timer.vertalign = "top_adjustable";
self.kc_timer.y = 42;
self.kc_timer.sort = 1;
self.kc_timer.font = "hudbig";
self.kc_timer.foreground = 1;
self.kc_timer.color = (0.85,0.85,0.85);
self.kc_timer.hidewheninmenu = 1;
}
}
}

View File

@ -0,0 +1,591 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_menus.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 15
* Decompile Time: 229 ms
* Timestamp: 10/27/2023 2:12:38 AM
*******************************************************************/
//Function Number: 1
init()
{
if(!isdefined(game["gamestarted"]))
{
game["menu_team"] = "team_marinesopfor";
game["menu_class_allies"] = "class_marines";
game["menu_changeclass_allies"] = "changeclass_marines";
game["menu_initteam_allies"] = "initteam_marines";
game["menu_class_axis"] = "class_opfor";
game["menu_changeclass_axis"] = "changeclass_opfor";
game["menu_initteam_axis"] = "initteam_opfor";
game["menu_class"] = "class";
game["menu_changeclass"] = "changeclass";
game["menu_controls"] = "ingame_controls";
if(!level.console)
{
game["menu_muteplayer"] = "muteplayer";
precachemenu(game["menu_muteplayer"]);
}
else
{
game["menu_leavegame"] = "popup_leavegame";
if(level.splitscreen)
{
game["menu_team"] = game["menu_team"] + "_splitscreen";
game["menu_class_allies"] = game["menu_class_allies"] + "_splitscreen";
game["menu_changeclass_allies"] = game["menu_changeclass_allies"] + "_splitscreen";
game["menu_class_axis"] = game["menu_class_axis"] + "_splitscreen";
game["menu_changeclass_axis"] = game["menu_changeclass_axis"] + "_splitscreen";
game["menu_class"] = game["menu_class"] + "_splitscreen";
game["menu_controls"] = game["menu_controls"] + "_splitscreen";
game["menu_leavegame"] = game["menu_leavegame"] + "_splitscreen";
game["menu_changeclass_defaults_splitscreen"] = "changeclass_splitscreen_defaults";
game["menu_changeclass_custom_splitscreen"] = "changeclass_splitscreen_custom";
precachemenu(game["menu_changeclass_defaults_splitscreen"]);
precachemenu(game["menu_changeclass_custom_splitscreen"]);
}
precachemenu(game["menu_controls"]);
precachemenu(game["menu_leavegame"]);
}
precachemenu("scoreboard");
precachemenu(game["menu_team"]);
precachemenu(game["menu_class_allies"]);
precachemenu(game["menu_changeclass_allies"]);
precachemenu(game["menu_initteam_allies"]);
precachemenu(game["menu_class_axis"]);
precachemenu(game["menu_changeclass_axis"]);
precachemenu(game["menu_class"]);
precachemenu(game["menu_changeclass"]);
precachemenu(game["menu_initteam_axis"]);
precachestring(&"MP_HOST_ENDED_GAME");
precachestring(&"MP_HOST_ENDGAME_RESPONSE");
}
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onmenuresponse();
}
}
//Function Number: 3
isoptionsmenu(param_00)
{
if(param_00 == game["menu_changeclass"])
{
return 1;
}
if(param_00 == game["menu_team"])
{
return 1;
}
if(param_00 == game["menu_controls"])
{
return 1;
}
if(issubstr(param_00,"pc_options"))
{
return 1;
}
return 0;
}
//Function Number: 4
onmenuresponse()
{
self endon("disconnect");
for(;;)
{
self waittill("menuresponse",var_00,var_01);
if(var_01 == "back")
{
self closepopupmenu();
self closeingamemenu();
if(isoptionsmenu(var_00))
{
if(self.pers["team"] == "allies")
{
self openpopupmenu(game["menu_class_allies"]);
}
if(self.pers["team"] == "axis")
{
self openpopupmenu(game["menu_class_axis"]);
}
}
continue;
}
if(var_01 == "changeteam")
{
self closepopupmenu();
self closeingamemenu();
self openpopupmenu(game["menu_team"]);
}
if(var_01 == "changeclass_marines")
{
self closepopupmenu();
self closeingamemenu();
self openpopupmenu(game["menu_changeclass_allies"]);
continue;
}
if(var_01 == "changeclass_opfor")
{
self closepopupmenu();
self closeingamemenu();
self openpopupmenu(game["menu_changeclass_axis"]);
continue;
}
if(var_01 == "changeclass_marines_splitscreen")
{
self openpopupmenu("changeclass_marines_splitscreen");
}
if(var_01 == "changeclass_opfor_splitscreen")
{
self openpopupmenu("changeclass_opfor_splitscreen");
}
if(var_01 == "endgame")
{
if(level.splitscreen)
{
endparty();
if(!level.gameended)
{
level thread maps\mp\gametypes\_gamelogic::forceend();
}
}
continue;
}
if(var_01 == "endround")
{
if(!level.gameended)
{
level thread maps\mp\gametypes\_gamelogic::forceend();
}
else
{
self closepopupmenu();
self closeingamemenu();
self iprintln(&"MP_HOST_ENDGAME_RESPONSE");
}
continue;
}
if(var_00 == game["menu_team"])
{
switch(var_01)
{
case "allies":
self [[ level.allies ]]();
break;
case "axis":
self [[ level.axis ]]();
break;
case "autoassign":
self [[ level.autoassign ]]();
break;
case "spectator":
self [[ level.spectator ]]();
break;
}
continue;
}
if(var_00 == game["menu_changeclass"] || isdefined(game["menu_changeclass_defaults_splitscreen"]) && var_00 == game["menu_changeclass_defaults_splitscreen"] || isdefined(game["menu_changeclass_custom_splitscreen"]) && var_00 == game["menu_changeclass_custom_splitscreen"])
{
self closepopupmenu();
self closeingamemenu();
self.selectedclass = 1;
self [[ level.class ]](var_01);
continue;
}
if(!level.console)
{
if(var_00 == game["menu_quickcommands"])
{
maps\mp\gametypes\_quickmessages::quickcommands(var_01);
continue;
}
if(var_00 == game["menu_quickstatements"])
{
maps\mp\gametypes\_quickmessages::quickstatements(var_01);
continue;
}
if(var_00 == game["menu_quickresponses"])
{
maps\mp\gametypes\_quickmessages::quickresponses(var_01);
}
}
}
}
//Function Number: 5
getteamassignment()
{
var_00[0] = "allies";
if(!level.teambased)
{
return var_7B[randomint(2)];
}
if(self.sessionteam != "none" && self.sessionteam != "spectator" && self.sessionstate != "playing" && self.sessionstate != "dead")
{
var_01 = self.sessionteam;
}
else
{
var_02 = maps\mp\gametypes\_teams::countplayers();
if(var_02["allies"] == var_02["axis"])
{
if(getteamscore("allies") == getteamscore("axis"))
{
var_01 = var_7B[randomint(2)];
}
else if(getteamscore("allies") < getteamscore("axis"))
{
var_01 = "allies";
}
else
{
var_01 = "axis";
}
}
else if(var_02["allies"] < var_02["axis"])
{
var_01 = "allies";
}
else
{
var_01 = "axis";
}
}
return var_01;
}
//Function Number: 6
menuautoassign()
{
maps\mp\_utility::closemenus();
var_00 = getteamassignment();
if(isdefined(self.pers["team"]) && self.sessionstate == "playing" || self.sessionstate == "dead")
{
if(var_00 == self.pers["team"])
{
beginclasschoice();
return;
}
else
{
self.switching_teams = 1;
self.joining_team = var_00;
self.leaving_team = self.pers["team"];
self suicide();
}
}
addtoteam(var_00);
self.pers["class"] = undefined;
self.class = undefined;
if(!isalive(self))
{
self.statusicon = "hud_status_dead";
}
self notify("end_respawn");
beginclasschoice();
}
//Function Number: 7
beginclasschoice(param_00)
{
var_01 = self.pers["team"];
if(maps\mp\_utility::allowclasschoice())
{
self openpopupmenu(game["menu_changeclass_" + var_01]);
}
else
{
thread bypassclasschoice();
}
if(!isalive(self))
{
thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime(0.1);
}
}
//Function Number: 8
bypassclasschoice()
{
self.selectedclass = 1;
self [[ level.class ]]("class0");
}
//Function Number: 9
beginteamchoice()
{
self openpopupmenu(game["menu_team"]);
}
//Function Number: 10
showmainmenuforteam()
{
var_00 = self.pers["team"];
self openpopupmenu(game["menu_class_" + var_00]);
}
//Function Number: 11
menuallies()
{
maps\mp\_utility::closemenus();
if(self.pers["team"] != "allies")
{
if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("allies"))
{
self openpopupmenu(game["menu_team"]);
return;
}
if(level.ingraceperiod && !self.hasdonecombat)
{
self.hasspawned = 0;
}
if(self.sessionstate == "playing")
{
self.switching_teams = 1;
self.joining_team = "allies";
self.leaving_team = self.pers["team"];
self suicide();
}
addtoteam("allies");
self.pers["class"] = undefined;
self.class = undefined;
self notify("end_respawn");
}
beginclasschoice();
}
//Function Number: 12
menuaxis()
{
maps\mp\_utility::closemenus();
if(self.pers["team"] != "axis")
{
if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("axis"))
{
self openpopupmenu(game["menu_team"]);
return;
}
if(level.ingraceperiod && !self.hasdonecombat)
{
self.hasspawned = 0;
}
if(self.sessionstate == "playing")
{
self.switching_teams = 1;
self.joining_team = "axis";
self.leaving_team = self.pers["team"];
self suicide();
}
addtoteam("axis");
self.pers["class"] = undefined;
self.class = undefined;
self notify("end_respawn");
}
beginclasschoice();
}
//Function Number: 13
menuspectator()
{
maps\mp\_utility::closemenus();
if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator")
{
return;
}
if(isalive(self))
{
self.switching_teams = 1;
self.joining_team = "spectator";
self.leaving_team = self.pers["team"];
self suicide();
}
addtoteam("spectator");
self.pers["class"] = undefined;
self.class = undefined;
thread maps\mp\gametypes\_playerlogic::spawnspectator();
}
//Function Number: 14
menuclass(param_00)
{
maps\mp\_utility::closemenus();
if(param_00 == "demolitions_mp,0" && self getplayerdata("featureNew","demolitions"))
{
self setplayerdata("featureNew","demolitions",0);
}
if(param_00 == "sniper_mp,0" && self getplayerdata("featureNew","sniper"))
{
self setplayerdata("featureNew","sniper",0);
}
if(!isdefined(self.pers["team"]) || self.pers["team"] != "allies" && self.pers["team"] != "axis")
{
return;
}
var_01 = maps\mp\gametypes\_class::getclasschoice(param_00);
var_02 = maps\mp\gametypes\_class::getweaponchoice(param_00);
if(var_01 == "restricted")
{
beginclasschoice();
return;
}
if(isdefined(self.pers["class"]) && self.pers["class"] == var_01 && isdefined(self.pers["primary"]) && self.pers["primary"] == var_02)
{
return;
}
if(self.sessionstate == "playing")
{
if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"]))
{
self.pers["lastClass"] = self.pers["class"];
self.lastclass = self.pers["lastClass"];
}
self.pers["class"] = var_01;
self.class = var_01;
self.pers["primary"] = var_02;
if(game["state"] == "postgame")
{
return;
}
if(level.ingraceperiod && !self.hasdonecombat)
{
maps\mp\gametypes\_class::setclass(self.pers["class"]);
self.tag_stowed_back = undefined;
self.tag_stowed_hip = undefined;
maps\mp\gametypes\_class::giveloadout(self.pers["team"],self.pers["class"]);
}
else
{
self iprintlnbold(game["strings"]["change_class"]);
}
}
else
{
if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"]))
{
self.pers["lastClass"] = self.pers["class"];
self.lastclass = self.pers["lastClass"];
}
self.pers["class"] = var_01;
self.class = var_01;
self.pers["primary"] = var_02;
if(game["state"] == "postgame")
{
return;
}
if(game["state"] == "playing" && !maps\mp\_utility::isinkillcam())
{
thread maps\mp\gametypes\_playerlogic::spawnclient();
}
}
thread maps\mp\gametypes\_spectating::setspectatepermissions();
}
//Function Number: 15
addtoteam(param_00,param_01)
{
if(isdefined(self.team))
{
maps\mp\gametypes\_playerlogic::removefromteamcount();
}
self.pers["team"] = param_00;
self.team = param_00;
if(!maps\mp\_utility::matchmakinggame() || isdefined(self.pers["isBot"]) || !maps\mp\_utility::allowteamchoice())
{
if(level.teambased)
{
self.sessionteam = param_00;
}
else if(param_00 == "spectator")
{
self.sessionteam = "spectator";
}
else
{
self.sessionteam = "none";
}
}
if(game["state"] != "postgame")
{
maps\mp\gametypes\_playerlogic::addtoteamcount();
}
maps\mp\_utility::updateobjectivetext();
if(isdefined(param_01) && param_01)
{
waittillframeend;
}
maps\mp\_utility::updatemainmenu();
if(param_00 == "spectator")
{
self notify("joined_spectators");
level notify("joined_team");
return;
}
self notify("joined_team");
level notify("joined_team");
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,536 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_music_and_dialog.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 11
* Decompile Time: 276 ms
* Timestamp: 10/27/2023 2:12:43 AM
*******************************************************************/
//Function Number: 1
init()
{
game["music"]["spawn_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "spawn_music";
game["music"]["defeat_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "defeat_music";
game["music"]["victory_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "victory_music";
game["music"]["winning_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "winning_music";
game["music"]["losing_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "losing_music";
game["voice"]["allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "1mc_";
game["music"]["spawn_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "spawn_music";
game["music"]["defeat_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "defeat_music";
game["music"]["victory_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "victory_music";
game["music"]["winning_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "winning_music";
game["music"]["losing_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "losing_music";
game["voice"]["axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "1mc_";
game["music"]["losing_time"] = "mp_time_running_out_losing";
game["music"]["suspense"] = [];
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_01";
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_02";
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_03";
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_04";
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_05";
game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_06";
game["dialog"]["mission_success"] = "mission_success";
game["dialog"]["mission_failure"] = "mission_fail";
game["dialog"]["mission_draw"] = "draw";
game["dialog"]["round_success"] = "encourage_win";
game["dialog"]["round_failure"] = "encourage_lost";
game["dialog"]["round_draw"] = "draw";
game["dialog"]["timesup"] = "timesup";
game["dialog"]["winning_time"] = "winning";
game["dialog"]["losing_time"] = "losing";
game["dialog"]["winning_score"] = "winning_fight";
game["dialog"]["losing_score"] = "losing_fight";
game["dialog"]["lead_lost"] = "lead_lost";
game["dialog"]["lead_tied"] = "tied";
game["dialog"]["lead_taken"] = "lead_taken";
game["dialog"]["last_alive"] = "lastalive";
game["dialog"]["boost"] = "boost";
if(!isdefined(game["dialog"]["offense_obj"]))
{
game["dialog"]["offense_obj"] = "boost";
}
if(!isdefined(game["dialog"]["defense_obj"]))
{
game["dialog"]["defense_obj"] = "boost";
}
game["dialog"]["hardcore"] = "hardcore";
game["dialog"]["highspeed"] = "highspeed";
game["dialog"]["tactical"] = "tactical";
game["dialog"]["challenge"] = "challengecomplete";
game["dialog"]["promotion"] = "promotion";
game["dialog"]["bomb_taken"] = "acheive_bomb";
game["dialog"]["bomb_lost"] = "bomb_taken";
game["dialog"]["bomb_defused"] = "bomb_defused";
game["dialog"]["bomb_planted"] = "bomb_planted";
game["dialog"]["obj_taken"] = "securedobj";
game["dialog"]["obj_lost"] = "lostobj";
game["dialog"]["obj_defend"] = "obj_defend";
game["dialog"]["obj_destroy"] = "obj_destroy";
game["dialog"]["obj_capture"] = "capture_obj";
game["dialog"]["objs_capture"] = "capture_objs";
game["dialog"]["hq_located"] = "hq_located";
game["dialog"]["hq_enemy_captured"] = "hq_captured";
game["dialog"]["hq_enemy_destroyed"] = "hq_destroyed";
game["dialog"]["hq_secured"] = "hq_secured";
game["dialog"]["hq_offline"] = "hq_offline";
game["dialog"]["hq_online"] = "hq_online";
game["dialog"]["move_to_new"] = "new_positions";
game["dialog"]["push_forward"] = "pushforward";
game["dialog"]["attack"] = "attack";
game["dialog"]["defend"] = "defend";
game["dialog"]["offense"] = "offense";
game["dialog"]["defense"] = "defense";
game["dialog"]["halftime"] = "halftime";
game["dialog"]["overtime"] = "overtime";
game["dialog"]["side_switch"] = "switching";
game["dialog"]["flag_taken"] = "ourflag";
game["dialog"]["flag_dropped"] = "ourflag_drop";
game["dialog"]["flag_returned"] = "ourflag_return";
game["dialog"]["flag_captured"] = "ourflag_capt";
game["dialog"]["flag_getback"] = "getback_ourflag";
game["dialog"]["enemy_flag_bringhome"] = "enemyflag_tobase";
game["dialog"]["enemy_flag_taken"] = "enemyflag";
game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop";
game["dialog"]["enemy_flag_returned"] = "enemyflag_return";
game["dialog"]["enemy_flag_captured"] = "enemyflag_capt";
game["dialog"]["got_flag"] = "achieve_flag";
game["dialog"]["dropped_flag"] = "lost_flag";
game["dialog"]["enemy_got_flag"] = "enemy_has_flag";
game["dialog"]["enemy_dropped_flag"] = "enemy_dropped_flag";
game["dialog"]["capturing_a"] = "capturing_a";
game["dialog"]["capturing_b"] = "capturing_b";
game["dialog"]["capturing_c"] = "capturing_c";
game["dialog"]["captured_a"] = "capture_a";
game["dialog"]["captured_b"] = "capture_c";
game["dialog"]["captured_c"] = "capture_b";
game["dialog"]["securing_a"] = "securing_a";
game["dialog"]["securing_b"] = "securing_b";
game["dialog"]["securing_c"] = "securing_c";
game["dialog"]["secured_a"] = "secure_a";
game["dialog"]["secured_b"] = "secure_b";
game["dialog"]["secured_c"] = "secure_c";
game["dialog"]["losing_a"] = "losing_a";
game["dialog"]["losing_b"] = "losing_b";
game["dialog"]["losing_c"] = "losing_c";
game["dialog"]["lost_a"] = "lost_a";
game["dialog"]["lost_b"] = "lost_b";
game["dialog"]["lost_c"] = "lost_c";
game["dialog"]["enemy_taking_a"] = "enemy_take_a";
game["dialog"]["enemy_taking_b"] = "enemy_take_b";
game["dialog"]["enemy_taking_c"] = "enemy_take_c";
game["dialog"]["enemy_has_a"] = "enemy_has_a";
game["dialog"]["enemy_has_b"] = "enemy_has_b";
game["dialog"]["enemy_has_c"] = "enemy_has_c";
game["dialog"]["lost_all"] = "take_positions";
game["dialog"]["secure_all"] = "positions_lock";
game["dialog"]["destroy_sentry"] = "dest_sentrygun";
game["music"]["nuke_music"] = "nuke_music";
game["dialog"]["sentry_gone"] = "sentry_gone";
game["dialog"]["sentry_destroyed"] = "sentry_destroyed";
game["dialog"]["ti_gone"] = "ti_cancelled";
game["dialog"]["ti_destroyed"] = "ti_blocked";
game["dialog"]["ims_destroyed"] = "ims_destroyed";
game["dialog"]["lbguard_destroyed"] = "lbguard_destroyed";
game["dialog"]["ballistic_vest_destroyed"] = "ballistic_vest_destroyed";
game["dialog"]["remote_sentry_destroyed"] = "remote_sentry_destroyed";
game["dialog"]["sam_destroyed"] = "sam_destroyed";
game["dialog"]["sam_gone"] = "sam_gone";
level thread onplayerconnect();
level thread onlastalive();
level thread musiccontroller();
level thread ongameended();
level thread onroundswitch();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
var_00 thread finalkillcammusic();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
self waittill("spawned_player");
if(!level.splitscreen || level.splitscreen && !isdefined(level.playedstartingmusic))
{
if(!self issplitscreenplayer() || self issplitscreenplayerprimary())
{
self playlocalsound(game["music"]["spawn_" + self.team]);
}
if(level.splitscreen)
{
level.playedstartingmusic = 1;
}
}
if(isdefined(game["dialog"]["gametype"]) && !level.splitscreen || self == level.players[0])
{
if(isdefined(game["dialog"]["allies_gametype"]) && self.team == "allies")
{
maps\mp\_utility::leaderdialogonplayer("allies_gametype");
}
else if(isdefined(game["dialog"]["axis_gametype"]) && self.team == "axis")
{
maps\mp\_utility::leaderdialogonplayer("axis_gametype");
}
else if(!self issplitscreenplayer() || self issplitscreenplayerprimary())
{
maps\mp\_utility::leaderdialogonplayer("gametype");
}
}
maps\mp\_utility::gameflagwait("prematch_done");
if(self.team == game["attackers"])
{
if(!self issplitscreenplayer() || self issplitscreenplayerprimary())
{
maps\mp\_utility::leaderdialogonplayer("offense_obj","introboost");
return;
}
return;
}
if(!self issplitscreenplayer() || self issplitscreenplayerprimary())
{
maps\mp\_utility::leaderdialogonplayer("defense_obj","introboost");
}
}
//Function Number: 4
onlastalive()
{
level endon("game_ended");
level waittill("last_alive",var_00);
if(!isalive(var_00))
{
return;
}
var_00 maps\mp\_utility::leaderdialogonplayer("last_alive");
}
//Function Number: 5
onroundswitch()
{
level waittill("round_switch",var_00);
switch(var_00)
{
case "halftime":
foreach(var_02 in level.players)
{
if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary())
{
continue;
}
var_02 maps\mp\_utility::leaderdialogonplayer("halftime");
}
break;
case "overtime":
foreach(var_02 in level.players)
{
if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary())
{
continue;
}
var_02 maps\mp\_utility::leaderdialogonplayer("overtime");
}
break;
default:
foreach(var_02 in level.players)
{
if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary())
{
continue;
}
var_02 maps\mp\_utility::leaderdialogonplayer("side_switch");
}
break;
}
}
//Function Number: 6
ongameended()
{
level thread roundwinnerdialog();
level thread gamewinnerdialog();
level waittill("game_win",var_00);
if(level.teambased)
{
if(level.splitscreen)
{
if(var_00 == "allies")
{
maps\mp\_utility::playsoundonplayers(game["music"]["victory_allies"],"allies");
return;
}
if(var_00 == "axis")
{
maps\mp\_utility::playsoundonplayers(game["music"]["victory_axis"],"axis");
return;
}
maps\mp\_utility::playsoundonplayers(game["music"]["nuke_music"]);
return;
}
if(var_00 == "allies")
{
maps\mp\_utility::playsoundonplayers(game["music"]["victory_allies"],"allies");
maps\mp\_utility::playsoundonplayers(game["music"]["defeat_axis"],"axis");
return;
}
if(var_00 == "axis")
{
maps\mp\_utility::playsoundonplayers(game["music"]["victory_axis"],"axis");
maps\mp\_utility::playsoundonplayers(game["music"]["defeat_allies"],"allies");
return;
}
maps\mp\_utility::playsoundonplayers(game["music"]["nuke_music"]);
return;
}
foreach(var_02 in level.players)
{
if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary())
{
continue;
}
if(var_02.pers["team"] != "allies" && var_02.pers["team"] != "axis")
{
var_02 playlocalsound(game["music"]["nuke_music"]);
continue;
}
if(isdefined(var_00) && isplayer(var_00) && var_02 == var_00)
{
var_02 playlocalsound(game["music"]["victory_" + var_02.pers["team"]]);
continue;
}
if(!level.splitscreen)
{
var_02 playlocalsound(game["music"]["defeat_" + var_02.pers["team"]]);
}
}
}
//Function Number: 7
roundwinnerdialog()
{
level waittill("round_win",var_00);
var_01 = level.roundenddelay / 4;
if(var_01 > 0)
{
wait var_01;
}
if(!isdefined(var_00) || isplayer(var_00))
{
return;
}
if(var_00 == "allies")
{
maps\mp\_utility::leaderdialog("round_success","allies");
maps\mp\_utility::leaderdialog("round_failure","axis");
return;
}
if(var_00 == "axis")
{
maps\mp\_utility::leaderdialog("round_success","axis");
maps\mp\_utility::leaderdialog("round_failure","allies");
}
}
//Function Number: 8
gamewinnerdialog()
{
level waittill("game_win",var_00);
var_01 = level.postroundtime / 2;
if(var_01 > 0)
{
wait var_01;
}
if(!isdefined(var_00) || isplayer(var_00))
{
return;
}
if(var_00 == "allies")
{
maps\mp\_utility::leaderdialog("mission_success","allies");
maps\mp\_utility::leaderdialog("mission_failure","axis");
return;
}
if(var_00 == "axis")
{
maps\mp\_utility::leaderdialog("mission_success","axis");
maps\mp\_utility::leaderdialog("mission_failure","allies");
return;
}
maps\mp\_utility::leaderdialog("mission_draw");
}
//Function Number: 9
musiccontroller()
{
level endon("game_ended");
if(!level.hardcoremode)
{
thread suspensemusic();
}
level waittill("match_ending_soon",var_00);
if(maps\mp\_utility::getwatcheddvar("roundlimit") == 1 || game["roundsPlayed"] == maps\mp\_utility::getwatcheddvar("roundlimit") - 1)
{
if(!level.splitscreen)
{
if(var_00 == "time")
{
if(level.teambased)
{
if(game["teamScores"]["allies"] > game["teamScores"]["axis"])
{
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["winning_allies"],"allies");
maps\mp\_utility::playsoundonplayers(game["music"]["losing_axis"],"axis");
}
maps\mp\_utility::leaderdialog("winning_time","allies");
maps\mp\_utility::leaderdialog("losing_time","axis");
}
else if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["winning_axis"],"axis");
maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"],"allies");
}
maps\mp\_utility::leaderdialog("winning_time","axis");
maps\mp\_utility::leaderdialog("losing_time","allies");
}
}
else
{
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["losing_time"]);
}
maps\mp\_utility::leaderdialog("timesup");
}
}
else if(var_00 == "score")
{
if(level.teambased)
{
if(game["teamScores"]["allies"] > game["teamScores"]["axis"])
{
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["winning_allies"],"allies");
maps\mp\_utility::playsoundonplayers(game["music"]["losing_axis"],"axis");
}
maps\mp\_utility::leaderdialog("winning_score","allies");
maps\mp\_utility::leaderdialog("losing_score","axis");
}
else if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["winning_axis"],"axis");
maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"],"allies");
}
maps\mp\_utility::leaderdialog("winning_score","axis");
maps\mp\_utility::leaderdialog("losing_score","allies");
}
}
else
{
var_01 = lib_036E::func_2B78();
var_02 = lib_036E::func_2B7A();
var_03[0] = var_01;
if(!level.hardcoremode)
{
var_01 playlocalsound(game["music"]["winning_" + var_01.pers["team"]]);
foreach(var_05 in level.players)
{
if(var_05 == var_01)
{
continue;
}
var_05 playlocalsound(game["music"]["losing_" + var_05.pers["team"]]);
}
}
var_01 maps\mp\_utility::leaderdialogonplayer("winning_score");
maps\mp\_utility::leaderdialogonplayers("losing_score",var_02);
}
}
level waittill("match_ending_very_soon");
maps\mp\_utility::leaderdialog("timesup");
return;
}
return;
}
if(!level.hardcoremode)
{
maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"]);
}
maps\mp\_utility::leaderdialog("timesup");
}
//Function Number: 10
suspensemusic()
{
level endon("game_ended");
level endon("match_ending_soon");
var_00 = game["music"]["suspense"].size;
wait 120;
for(;;)
{
wait randomfloatrange(60,120);
maps\mp\_utility::playsoundonplayers(game["music"]["suspense"][randomint(var_00)]);
}
}
//Function Number: 11
finalkillcammusic()
{
self waittill("showing_final_killcam");
}

View File

@ -0,0 +1,184 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_objpoints.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 9
* Decompile Time: 140 ms
* Timestamp: 10/27/2023 2:12:44 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheshader("objpoint_default");
level.objpointnames = [];
level.objpoints = [];
if(level.splitscreen)
{
level.objpointsize = 15;
}
else
{
level.objpointsize = 8;
}
level.objpoint_alpha_default = 0.5;
level.objpointscale = 1;
}
//Function Number: 2
createteamobjpoint(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = getobjpointbyname(param_00);
if(isdefined(var_06))
{
deleteobjpoint(var_06);
}
if(!isdefined(param_03))
{
param_03 = "objpoint_default";
}
if(!isdefined(param_05))
{
param_05 = 1;
}
if(param_02 != "all")
{
var_06 = newteamhudelem(param_02);
}
else
{
var_06 = newhudelem();
}
var_06.name = param_00;
var_06.x = param_01[0];
var_06.y = param_01[1];
var_06.z = param_01[2];
var_06.team = param_02;
var_06.isflashing = 0;
var_06.isshown = 1;
var_06 setshader(param_03,level.objpointsize,level.objpointsize);
var_06 setwaypoint(1,0);
if(isdefined(param_04))
{
var_06.alpha = param_04;
}
else
{
var_06.alpha = level.objpoint_alpha_default;
}
var_06.basealpha = var_06.alpha;
var_06.index = level.objpointnames.size;
level.objpoints[param_00] = var_06;
level.objpointnames[level.objpointnames.size] = param_00;
return var_06;
}
//Function Number: 3
deleteobjpoint(param_00)
{
if(level.objpoints.size == 1)
{
level.objpoints = [];
level.objpointnames = [];
param_00 destroy();
return;
}
var_01 = param_00.index;
var_02 = level.objpointnames.size - 1;
var_03 = getobjpointbyindex(var_02);
level.objpointnames[var_01] = var_03.name;
var_03.index = var_01;
level.objpointnames[var_02] = undefined;
level.objpoints[param_00.name] = undefined;
param_00 destroy();
}
//Function Number: 4
updateorigin(param_00)
{
if(self.x != param_00[0])
{
self.x = param_00[0];
}
if(self.y != param_00[1])
{
self.y = param_00[1];
}
if(self.z != param_00[2])
{
self.z = param_00[2];
}
}
//Function Number: 5
setoriginbyname(param_00,param_01)
{
var_02 = getobjpointbyname(param_00);
var_02 updateorigin(param_01);
}
//Function Number: 6
getobjpointbyname(param_00)
{
if(isdefined(level.objpoints[param_00]))
{
return level.objpoints[param_00];
}
return undefined;
}
//Function Number: 7
getobjpointbyindex(param_00)
{
if(isdefined(level.objpointnames[param_00]))
{
return level.objpoints[level.objpointnames[param_00]];
}
return undefined;
}
//Function Number: 8
startflashing()
{
self endon("stop_flashing_thread");
if(self.isflashing)
{
return;
}
self.isflashing = 1;
while(self.isflashing)
{
self fadeovertime(0.75);
self.alpha = 0.35 * self.basealpha;
wait 0.75;
self fadeovertime(0.75);
self.alpha = self.basealpha;
wait 0.75;
}
self.alpha = self.basealpha;
}
//Function Number: 9
stopflashing()
{
if(!self.isflashing)
{
return;
}
self.isflashing = 0;
}

View File

@ -0,0 +1,554 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_persistance.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 22
* Decompile Time: 318 ms
* Timestamp: 10/27/2023 2:12:45 AM
*******************************************************************/
//Function Number: 1
init()
{
level.persistentdatainfo = [];
maps\mp\gametypes\_class::init();
maps\mp\gametypes\_rank::init();
maps\mp\gametypes\_missions::init();
maps\mp\gametypes\_playercards::init();
level thread updatebufferedstats();
level thread uploadglobalstatcounters();
}
//Function Number: 2
initbufferedstats()
{
self.bufferedstats = [];
self.bufferedstats["totalShots"] = self getplayerdata("totalShots");
self.bufferedstats["accuracy"] = self getplayerdata("accuracy");
self.bufferedstats["misses"] = self getplayerdata("misses");
self.bufferedstats["hits"] = self getplayerdata("hits");
self.bufferedstats["timePlayedAllies"] = self getplayerdata("timePlayedAllies");
self.bufferedstats["timePlayedOpfor"] = self getplayerdata("timePlayedOpfor");
self.bufferedstats["timePlayedOther"] = self getplayerdata("timePlayedOther");
self.bufferedstats["timePlayedTotal"] = self getplayerdata("timePlayedTotal");
self.bufferedchildstats = [];
self.bufferedchildstats["round"] = [];
self.bufferedchildstats["round"]["timePlayed"] = self getplayerdata("round","timePlayed");
self.bufferedchildstats["xpMultiplierTimePlayed"] = [];
self.bufferedchildstats["xpMultiplierTimePlayed"][0] = self getplayerdata("xpMultiplierTimePlayed",0);
self.bufferedchildstats["xpMultiplierTimePlayed"][1] = self getplayerdata("xpMultiplierTimePlayed",1);
self.bufferedchildstats["xpMultiplierTimePlayed"][2] = self getplayerdata("xpMultiplierTimePlayed",2);
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] = self getplayerdata("xpMaxMultiplierTimePlayed",0);
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] = self getplayerdata("xpMaxMultiplierTimePlayed",1);
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] = self getplayerdata("xpMaxMultiplierTimePlayed",2);
self.bufferedchildstats["challengeXPMultiplierTimePlayed"] = [];
self.bufferedchildstats["challengeXPMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMultiplierTimePlayed",0);
self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMaxMultiplierTimePlayed",0);
self.bufferedchildstats["weaponXPMultiplierTimePlayed"] = [];
self.bufferedchildstats["weaponXPMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMultiplierTimePlayed",0);
self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMaxMultiplierTimePlayed",0);
self.bufferedstats["prestigeDoubleXp"] = self getplayerdata("prestigeDoubleXp");
self.bufferedstats["prestigeDoubleXpTimePlayed"] = self getplayerdata("prestigeDoubleXpTimePlayed");
self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleXpMaxTimePlayed");
self.bufferedstats["prestigeDoubleWeaponXp"] = self getplayerdata("prestigeDoubleWeaponXp");
self.bufferedstats["prestigeDoubleWeaponXpTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpTimePlayed");
self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpMaxTimePlayed");
}
//Function Number: 3
statget(param_00)
{
return self getplayerdata(param_00);
}
//Function Number: 4
statset(param_00,param_01)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
self setplayerdata(param_00,param_01);
}
//Function Number: 5
statadd(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
if(isdefined(param_02))
{
var_03 = self getplayerdata(param_00,param_02);
self setplayerdata(param_00,param_02,param_01 + var_03);
return;
}
var_03 = self getplayerdata(param_01);
self setplayerdata(param_00,param_01 + var_03);
}
//Function Number: 6
statgetchild(param_00,param_01)
{
return self getplayerdata(param_00,param_01);
}
//Function Number: 7
statsetchild(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
self setplayerdata(param_00,param_01,param_02);
}
//Function Number: 8
stataddchild(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
var_03 = self getplayerdata(param_00,param_01);
self setplayerdata(param_00,param_01,var_03 + param_02);
}
//Function Number: 9
statgetchildbuffered(param_00,param_01)
{
return self.bufferedchildstats[param_00][param_01];
}
//Function Number: 10
statsetchildbuffered(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
self.bufferedchildstats[param_00][param_01] = param_02;
}
//Function Number: 11
stataddchildbuffered(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
var_03 = statgetchildbuffered(param_00,param_01);
statsetchildbuffered(param_00,param_01,var_03 + param_02);
}
//Function Number: 12
stataddbufferedwithmax(param_00,param_01,param_02)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
var_03 = statgetbuffered(param_00) + param_01;
if(var_03 > param_02)
{
var_03 = param_02;
}
if(var_03 < statgetbuffered(param_00))
{
var_03 = param_02;
}
statsetbuffered(param_00,var_03);
}
//Function Number: 13
stataddchildbufferedwithmax(param_00,param_01,param_02,param_03)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
var_04 = statgetchildbuffered(param_00,param_01) + param_02;
if(var_04 > param_03)
{
var_04 = param_03;
}
if(var_04 < statgetchildbuffered(param_00,param_01))
{
var_04 = param_03;
}
statsetchildbuffered(param_00,param_01,var_04);
}
//Function Number: 14
statgetbuffered(param_00)
{
return self.bufferedstats[param_00];
}
//Function Number: 15
statsetbuffered(param_00,param_01)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
self.bufferedstats[param_00] = param_01;
}
//Function Number: 16
stataddbuffered(param_00,param_01)
{
if(!maps\mp\_utility::rankingenabled())
{
return;
}
var_02 = statgetbuffered(param_00);
statsetbuffered(param_00,var_02 + param_01);
}
//Function Number: 17
updatebufferedstats()
{
wait 0.15;
var_00 = 0;
while(!level.gameended)
{
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
var_00++;
if(var_00 >= level.players.size)
{
var_00 = 0;
}
if(isdefined(level.players[var_00]))
{
level.players[var_00] writebufferedstats();
level.players[var_00] updateweaponbufferedstats();
}
wait 2;
}
foreach(var_02 in level.players)
{
var_02 writebufferedstats();
var_02 updateweaponbufferedstats();
}
}
//Function Number: 18
writebufferedstats()
{
foreach(var_02, var_01 in self.bufferedstats)
{
self setplayerdata(var_02,var_01);
}
foreach(var_02, var_01 in self.bufferedchildstats)
{
foreach(var_06, var_05 in var_01)
{
self setplayerdata(var_02,var_06,var_05);
}
}
}
//Function Number: 19
incrementweaponstat(param_00,param_01,param_02)
{
if(maps\mp\_utility::iskillstreakweapon(param_00))
{
return;
}
if(maps\mp\_utility::rankingenabled())
{
var_03 = self getplayerdata("weaponStats",param_00,param_01);
self setplayerdata("weaponStats",param_00,param_01,var_03 + param_02);
}
}
//Function Number: 20
incrementattachmentstat(param_00,param_01,param_02)
{
if(maps\mp\_utility::rankingenabled())
{
var_03 = self getplayerdata("attachmentsStats",param_00,param_01);
self setplayerdata("attachmentsStats",param_00,param_01,var_03 + param_02);
}
}
//Function Number: 21
updateweaponbufferedstats()
{
if(!isdefined(self.trackingweaponname))
{
return;
}
if(self.trackingweaponname == "" || self.trackingweaponname == "none")
{
return;
}
var_00 = self.trackingweaponname;
if(maps\mp\_utility::iskillstreakweapon(var_00) || maps\mp\_utility::isenvironmentweapon(var_00))
{
return;
}
var_01 = strtok(var_00,"_");
if(var_01[0] == "iw5")
{
}
if(var_7B[0] == "alt")
{
foreach(var_03 in var_7B)
{
if(var_03 == "gl" || var_03 == "gp25" || var_03 == "m320")
{
var_7B[0] = "gl";
break;
}
if(var_03 == "shotgun")
{
var_7B[0] = "shotgun";
break;
}
}
if(var_7B[0] == "alt")
{
var_7B[0] = var_7B[1] + "_" + var_7B[2];
}
}
if(var_7B[0] == "gl" || var_7B[0] == "shotgun")
{
if(self.trackingweaponshots > 0)
{
incrementattachmentstat(var_7B[0],"shots",self.trackingweaponshots);
maps\mp\_matchdata::logattachmentstat(var_7B[0],"shots",self.trackingweaponshots);
}
if(self.trackingweaponkills > 0)
{
incrementattachmentstat(var_7B[0],"kills",self.trackingweaponkills);
maps\mp\_matchdata::logattachmentstat(var_7B[0],"kills",self.trackingweaponkills);
}
if(self.trackingweaponhits > 0)
{
incrementattachmentstat(var_7B[0],"hits",self.trackingweaponhits);
maps\mp\_matchdata::logattachmentstat(var_7B[0],"hits",self.trackingweaponhits);
}
if(self.trackingweaponheadshots > 0)
{
incrementattachmentstat(var_7B[0],"headShots",self.trackingweaponheadshots);
maps\mp\_matchdata::logattachmentstat(var_7B[0],"headShots",self.trackingweaponheadshots);
}
if(self.trackingweapondeaths > 0)
{
incrementattachmentstat(var_7B[0],"deaths",self.trackingweapondeaths);
maps\mp\_matchdata::logattachmentstat(var_7B[0],"deaths",self.trackingweapondeaths);
}
self.trackingweaponname = "none";
self.trackingweaponshots = 0;
self.trackingweaponkills = 0;
self.trackingweaponhits = 0;
self.trackingweaponheadshots = 0;
self.trackingweapondeaths = 0;
return;
}
if(!maps\mp\_utility::iscacprimaryweapon(var_7B[0]) && !maps\mp\_utility::iscacsecondaryweapon(var_7B[0]))
{
return;
}
if(self.trackingweaponshots > 0)
{
incrementweaponstat(var_7B[0],"shots",self.trackingweaponshots);
maps\mp\_matchdata::logweaponstat(var_7B[0],"shots",self.trackingweaponshots);
}
if(self.trackingweaponkills > 0)
{
incrementweaponstat(var_7B[0],"kills",self.trackingweaponkills);
maps\mp\_matchdata::logweaponstat(var_7B[0],"kills",self.trackingweaponkills);
}
if(self.trackingweaponhits > 0)
{
incrementweaponstat(var_7B[0],"hits",self.trackingweaponhits);
maps\mp\_matchdata::logweaponstat(var_7B[0],"hits",self.trackingweaponhits);
}
if(self.trackingweaponheadshots > 0)
{
incrementweaponstat(var_7B[0],"headShots",self.trackingweaponheadshots);
maps\mp\_matchdata::logweaponstat(var_7B[0],"headShots",self.trackingweaponheadshots);
}
if(self.trackingweapondeaths > 0)
{
incrementweaponstat(var_7B[0],"deaths",self.trackingweapondeaths);
maps\mp\_matchdata::logweaponstat(var_7B[0],"deaths",self.trackingweapondeaths);
}
var_7B = strtok(var_01,"_");
if(var_7B[0] != "none")
{
for(var_05 = 0;var_05 < var_7B.size;var_05++ = var_7B[0])
{
if(var_7B[var_05] == "mp" || var_7B[var_05] == "scope1" || var_7B[var_05] == "scope2" || var_7B[var_05] == "scope3" || var_7B[var_05] == "scope4" || var_7B[var_05] == "scope5" || var_7B[var_05] == "scope6" || var_7B[var_05] == "scope7" || var_7B[var_05] == "scope8" || var_7B[var_05] == "scope9" || var_7B[var_05] == "scope10")
{
continue;
}
if(issubstr(var_7B[var_05],"camo"))
{
continue;
}
if(issubstr(var_7B[var_05],"scope") && !issubstr(var_7B[var_05],"vz"))
{
continue;
}
if(var_7B[var_05] == "alt")
{
var_05 = var_05 + 2;
continue;
}
if(var_7B[var_05] == "iw5")
{
var_05 = var_05 + 1;
continue;
}
var_7B[var_05] = maps\mp\_utility::validateattachment(var_7B[var_05]);
if(var_7B[var_05] == "gl" || var_7B[var_05] == "shotgun")
{
continue;
}
if(issubstr(var_7B[var_05],"scope") && issubstr(var_7B[var_05],"vz"))
{
var_7B[var_05] = "vzscope";
}
if(var_05 == 0 && var_7B[var_05] != "iw5" && var_7B[var_05] != "alt")
{
continue;
}
if(self.trackingweaponshots > 0)
{
incrementattachmentstat(var_7B[var_05],"shots",self.trackingweaponshots);
maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"shots",self.trackingweaponshots);
}
if(self.trackingweaponkills > 0)
{
incrementattachmentstat(var_7B[var_05],"kills",self.trackingweaponkills);
maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"kills",self.trackingweaponkills);
}
if(self.trackingweaponhits > 0)
{
incrementattachmentstat(var_7B[var_05],"hits",self.trackingweaponhits);
maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"hits",self.trackingweaponhits);
}
if(self.trackingweaponheadshots > 0)
{
incrementattachmentstat(var_7B[var_05],"headShots",self.trackingweaponheadshots);
maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"headShots",self.trackingweaponheadshots);
}
if(self.trackingweapondeaths > 0)
{
incrementattachmentstat(var_7B[var_05],"deaths",self.trackingweapondeaths);
maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"deaths",self.trackingweapondeaths);
}
}
}
self.trackingweaponname = "none";
self.trackingweaponshots = 0;
self.trackingweaponkills = 0;
self.trackingweaponhits = 0;
self.trackingweaponheadshots = 0;
self.trackingweapondeaths = 0;
}
//Function Number: 22
uploadglobalstatcounters()
{
level waittill("game_ended");
if(!maps\mp\_utility::matchmakinggame())
{
return;
}
var_00 = 0;
var_01 = 0;
var_02 = 0;
var_03 = 0;
var_04 = 0;
var_05 = 0;
foreach(var_07 in level.players)
{
var_05 = var_05 + var_07.timeplayed["total"];
}
incrementcounter("global_minutes",int(var_05 / 60));
if(!maps\mp\_utility::waslastround())
{
return;
}
wait 0.05;
foreach(var_07 in level.players)
{
var_00 = var_00 + var_07.kills;
var_01 = var_01 + var_07.deaths;
var_02 = var_02 + var_07.assists;
var_03 = var_03 + var_07.headshots;
var_04 = var_04 + var_07.suicides;
}
incrementcounter("global_kills",var_00);
incrementcounter("global_deaths",var_01);
incrementcounter("global_assists",var_02);
incrementcounter("global_headshots",var_03);
incrementcounter("global_suicides",var_04);
incrementcounter("global_games",1);
}

View File

@ -0,0 +1,32 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_playercards.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 2
* Decompile Time: 50 ms
* Timestamp: 10/27/2023 2:12:46 AM
*******************************************************************/
//Function Number: 1
init()
{
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_01 = var_00 maps\mp\gametypes\_persistance::statget("cardIcon");
var_02 = tablelookupbyrow("mp/cardIconTable.csv",var_01,0);
var_00 setcardicon(var_02);
var_03 = var_00 maps\mp\gametypes\_persistance::statget("cardTitle");
var_04 = tablelookupbyrow("mp/cardTitleTable.csv",var_03,0);
var_00 setcardtitle(var_04);
var_05 = var_00 maps\mp\gametypes\_persistance::statget("cardNameplate");
var_00 setcardnameplate(var_05);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,253 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_portable_radar.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 10
* Decompile Time: 150 ms
* Timestamp: 10/27/2023 2:12:49 AM
*******************************************************************/
//Function Number: 1
setportableradar()
{
self setoffhandsecondaryclass("flash");
maps\mp\_utility::_giveweapon("portable_radar_mp",0);
self givestartammo("portable_radar_mp");
thread monitorportableradaruse();
}
//Function Number: 2
unsetportableradar()
{
self notify("end_monitorPortableRadarUse");
}
//Function Number: 3
deleteportableradar(param_00)
{
if(!isdefined(param_00))
{
return;
}
foreach(var_02 in level.players)
{
if(isdefined(var_02))
{
var_02.inplayerportableradar = undefined;
}
}
param_00 notify("death");
param_00 delete();
self.deployedportableradar = undefined;
}
//Function Number: 4
monitorportableradaruse()
{
self notify("end_monitorPortableRadarUse");
self endon("end_monitorPortableRadarUse");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
if(var_01 == "portabl_radar" || var_01 == "portable_radar_mp")
{
if(!isalive(self))
{
var_00 delete();
return;
}
if(isdefined(self.deployedportableradar))
{
deleteportableradar(self.deployedportableradar);
}
var_00 waittill("missile_stuck");
var_02 = var_00.origin;
if(isdefined(var_00))
{
var_00 delete();
}
var_03 = spawn("script_model",var_02);
var_03.health = 100;
var_03.team = self.team;
var_03.owner = self;
var_03 setcandamage(1);
var_03 makeportableradar(self);
var_03 portableradarsetup(self);
var_03 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_radar_bombsquad","tag_origin",level.otherteam[self.team],self);
var_03 thread portableradarproximitytracker();
thread portableradarwatchowner(var_03);
self.deployedportableradar = var_03;
}
}
}
//Function Number: 5
portableradarsetup(param_00)
{
self setmodel("weapon_radar");
if(level.teambased)
{
maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20));
}
else
{
maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20));
}
thread portableradardamagelistener(param_00);
thread portableradaruselistener(param_00);
thread portableradarbeepsounds();
thread maps\mp\_utility::notusableforjoiningplayers(param_00);
}
//Function Number: 6
portableradarwatchowner(param_00)
{
param_00 endon("death");
level endon("game_ended");
common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","spawned_player");
level thread deleteportableradar(param_00);
}
//Function Number: 7
portableradarbeepsounds()
{
self endon("death");
level endon("game_ended");
for(;;)
{
wait 2;
self playsound("sentry_gun_beep");
}
}
//Function Number: 8
portableradardamagelistener(param_00)
{
self endon("death");
self.health = 999999;
self.maxhealth = 100;
self.damagetaken = 0;
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A);
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02))
{
continue;
}
if(isdefined(var_0A))
{
switch(var_0A)
{
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "concussion_grenade_mp":
break;
}
}
if(!isdefined(self))
{
return;
}
if(var_05 == "MOD_MELEE")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
if(isdefined(var_09) && var_09 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
self.damagetaken = self.damagetaken + var_01;
if(isdefined(var_0A) && var_0A == "emp_grenade_mp")
{
self.damagetaken = self.maxhealth + 1;
}
if(isplayer(var_02))
{
var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("portable_radar");
}
if(self.damagetaken >= self.maxhealth)
{
if(isdefined(param_00) && var_02 != param_00)
{
var_02 notify("destroyed_explosive");
}
self playsound("sentry_explode");
self.deatheffect = playfx(common_scripts\utility::getfx("equipment_explode"),self.origin);
var_02 thread deleteportableradar(self);
}
}
}
//Function Number: 9
portableradaruselistener(param_00)
{
self endon("death");
level endon("game_ended");
param_00 endon("disconnect");
self setcursorhint("HINT_NOICON");
self sethintstring(&"MP_PATCH_PICKUP_PORTABLE_RADAR");
maps\mp\_utility::setselfusable(param_00);
for(;;)
{
self waittill("trigger",var_01);
var_01 playlocalsound("scavenger_pack_pickup");
if(var_01 getammocount("portable_radar_mp") == 0)
{
var_01 setportableradar();
}
var_01 thread deleteportableradar(self);
}
}
//Function Number: 10
portableradarproximitytracker()
{
self endon("death");
level endon("game_ended");
var_00 = 512;
for(;;)
{
foreach(var_02 in level.players)
{
if(!isdefined(var_02))
{
continue;
}
if(level.teambased && var_02.team == self.team)
{
continue;
}
var_03 = distancesquared(self.origin,var_02.origin);
if(distancesquared(var_02.origin,self.origin) < var_00 * var_00)
{
var_02.inplayerportableradar = self.owner;
continue;
}
var_02.inplayerportableradar = undefined;
}
wait 0.05;
}
}

View File

@ -0,0 +1,270 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_quickmessages.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 105 ms
* Timestamp: 10/27/2023 2:12:49 AM
*******************************************************************/
//Function Number: 1
init()
{
game["menu_quickcommands"] = "quickcommands";
game["menu_quickstatements"] = "quickstatements";
game["menu_quickresponses"] = "quickresponses";
precachemenu(game["menu_quickcommands"]);
precachemenu(game["menu_quickstatements"]);
precachemenu(game["menu_quickresponses"]);
precacheheadicon("talkingicon");
precachestring(&"QUICKMESSAGE_FOLLOW_ME");
precachestring(&"QUICKMESSAGE_MOVE_IN");
precachestring(&"QUICKMESSAGE_FALL_BACK");
precachestring(&"QUICKMESSAGE_SUPPRESSING_FIRE");
precachestring(&"QUICKMESSAGE_ATTACK_LEFT_FLANK");
precachestring(&"QUICKMESSAGE_ATTACK_RIGHT_FLANK");
precachestring(&"QUICKMESSAGE_HOLD_THIS_POSITION");
precachestring(&"QUICKMESSAGE_REGROUP");
precachestring(&"QUICKMESSAGE_ENEMY_SPOTTED");
precachestring(&"QUICKMESSAGE_ENEMIES_SPOTTED");
precachestring(&"QUICKMESSAGE_IM_IN_POSITION");
precachestring(&"QUICKMESSAGE_AREA_SECURE");
precachestring(&"QUICKMESSAGE_GRENADE");
precachestring(&"QUICKMESSAGE_SNIPER");
precachestring(&"QUICKMESSAGE_NEED_REINFORCEMENTS");
precachestring(&"QUICKMESSAGE_HOLD_YOUR_FIRE");
precachestring(&"QUICKMESSAGE_YES_SIR");
precachestring(&"QUICKMESSAGE_NO_SIR");
precachestring(&"QUICKMESSAGE_IM_ON_MY_WAY");
precachestring(&"QUICKMESSAGE_SORRY");
precachestring(&"QUICKMESSAGE_GREAT_SHOT");
precachestring(&"QUICKMESSAGE_TOOK_LONG_ENOUGH");
precachestring(&"QUICKMESSAGE_ARE_YOU_CRAZY");
precachestring(&"QUICKMESSAGE_WATCH_SIX");
precachestring(&"QUICKMESSAGE_COME_ON");
}
//Function Number: 2
quickcommands(param_00)
{
self endon("disconnect");
if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay))
{
return;
}
self.spamdelay = 1;
switch(param_00)
{
case "1":
var_01 = "mp_cmd_followme";
var_02 = &"QUICKMESSAGE_FOLLOW_ME";
break;
case "2":
var_01 = "mp_cmd_movein";
var_02 = &"QUICKMESSAGE_MOVE_IN";
break;
case "3":
var_01 = "mp_cmd_fallback";
var_02 = &"QUICKMESSAGE_FALL_BACK";
break;
case "4":
var_01 = "mp_cmd_suppressfire";
var_02 = &"QUICKMESSAGE_SUPPRESSING_FIRE";
break;
case "5":
var_01 = "mp_cmd_attackleftflank";
var_02 = &"QUICKMESSAGE_ATTACK_LEFT_FLANK";
break;
case "6":
var_01 = "mp_cmd_attackrightflank";
var_02 = &"QUICKMESSAGE_ATTACK_RIGHT_FLANK";
break;
case "7":
var_01 = "mp_cmd_holdposition";
var_02 = &"QUICKMESSAGE_HOLD_THIS_POSITION";
break;
default:
var_01 = "mp_cmd_regroup";
var_02 = &"QUICKMESSAGE_REGROUP";
break;
}
saveheadicon();
doquickmessage(var_01,var_02);
wait 2;
self.spamdelay = undefined;
restoreheadicon();
}
//Function Number: 3
quickstatements(param_00)
{
if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay))
{
return;
}
self.spamdelay = 1;
switch(param_00)
{
case "1":
var_01 = "mp_stm_enemyspotted";
var_02 = &"QUICKMESSAGE_ENEMY_SPOTTED";
break;
case "2":
var_01 = "mp_stm_enemiesspotted";
var_02 = &"QUICKMESSAGE_ENEMIES_SPOTTED";
break;
case "3":
var_01 = "mp_stm_iminposition";
var_02 = &"QUICKMESSAGE_IM_IN_POSITION";
break;
case "4":
var_01 = "mp_stm_areasecure";
var_02 = &"QUICKMESSAGE_AREA_SECURE";
break;
case "5":
var_01 = "mp_stm_watchsix";
var_02 = &"QUICKMESSAGE_WATCH_SIX";
break;
case "6":
var_01 = "mp_stm_sniper";
var_02 = &"QUICKMESSAGE_SNIPER";
break;
default:
var_01 = "mp_stm_needreinforcements";
var_02 = &"QUICKMESSAGE_NEED_REINFORCEMENTS";
break;
}
saveheadicon();
doquickmessage(var_01,var_02);
wait 2;
self.spamdelay = undefined;
restoreheadicon();
}
//Function Number: 4
quickresponses(param_00)
{
if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay))
{
return;
}
self.spamdelay = 1;
switch(param_00)
{
case "1":
var_01 = "mp_rsp_yessir";
var_02 = &"QUICKMESSAGE_YES_SIR";
break;
case "2":
var_01 = "mp_rsp_nosir";
var_02 = &"QUICKMESSAGE_NO_SIR";
break;
case "3":
var_01 = "mp_rsp_onmyway";
var_02 = &"QUICKMESSAGE_IM_ON_MY_WAY";
break;
case "4":
var_01 = "mp_rsp_sorry";
var_02 = &"QUICKMESSAGE_SORRY";
break;
case "5":
var_01 = "mp_rsp_greatshot";
var_02 = &"QUICKMESSAGE_GREAT_SHOT";
break;
default:
var_01 = "mp_rsp_comeon";
var_02 = &"QUICKMESSAGE_COME_ON";
break;
}
saveheadicon();
doquickmessage(var_01,var_02);
wait 2;
self.spamdelay = undefined;
restoreheadicon();
}
//Function Number: 5
doquickmessage(param_00,param_01)
{
if(self.sessionstate != "playing")
{
return;
}
var_02 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team);
if(isdefined(level.quickmessagetoall) && level.quickmessagetoall)
{
self.var_6C1 = "none";
self.headicon = "talkingicon";
self playsound(var_02 + param_00);
self sayall(param_01);
return;
}
if(self.sessionteam == "allies")
{
self.var_6C1 = "allies";
}
else if(self.sessionteam == "axis")
{
self.var_6C1 = "axis";
}
self.headicon = "talkingicon";
self playsound(var_02 + param_00);
self sayteam(param_01);
self pingplayer();
}
//Function Number: 6
saveheadicon()
{
if(isdefined(self.headicon))
{
self.oldheadicon = self.headicon;
}
if(isdefined(self.var_6C1))
{
self.oldheadiconteam = self.var_6C1;
}
}
//Function Number: 7
restoreheadicon()
{
if(isdefined(self.oldheadicon))
{
self.headicon = self.oldheadicon;
}
if(isdefined(self.oldheadiconteam))
{
self.var_6C1 = self.oldheadiconteam;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,304 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_scrambler.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 10
* Decompile Time: 137 ms
* Timestamp: 10/27/2023 2:12:53 AM
*******************************************************************/
//Function Number: 1
setscrambler()
{
self setoffhandsecondaryclass("flash");
maps\mp\_utility::_giveweapon("scrambler_mp",0);
self givestartammo("scrambler_mp");
thread monitorscrambleruse();
}
//Function Number: 2
unsetscrambler()
{
self notify("end_monitorScramblerUse");
}
//Function Number: 3
deletescrambler(param_00)
{
if(!isdefined(param_00))
{
return;
}
foreach(var_02 in level.players)
{
if(isdefined(var_02))
{
var_02.inplayerscrambler = undefined;
}
}
param_00 notify("death");
param_00 delete();
self.deployedscrambler = undefined;
var_04 = [];
var_04 = maps\mp\_utility::cleanarray(level.scramblers);
level.scramblers = var_04;
}
//Function Number: 4
monitorscrambleruse()
{
self notify("end_monitorScramblerUse");
self endon("end_monitorScramblerUse");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
if(var_01 == "scrambler" || var_01 == "scrambler_mp")
{
if(!isalive(self))
{
var_00 delete();
return;
}
var_00 hide();
var_00 waittill("missile_stuck");
var_02 = 40;
if(var_02 * var_02 < distancesquared(var_00.origin,self.origin))
{
var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self);
if(var_03["fraction"] == 1)
{
var_00 delete();
self setweaponammostock("scrambler_mp",self getweaponammostock("trophy_mp") + 1);
continue;
}
var_00.origin = var_03["position"];
}
var_00 show();
if(isdefined(self.deployedscrambler))
{
deletescrambler(self.deployedscrambler);
}
var_04 = var_00.origin;
var_05 = spawn("script_model",var_04);
var_05.health = 100;
var_05.team = self.team;
var_05.owner = self;
var_05 setcandamage(1);
var_05 makescrambler(self);
var_05 scramblersetup(self);
var_05 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_jammer_bombsquad","tag_origin",level.otherteam[self.team],self);
level.scramblers[level.scramblers.size] = var_05;
self.deployedscrambler = var_05;
self.changingweapon = undefined;
wait 0.05;
if(isdefined(var_00))
{
var_00 delete();
}
}
}
}
//Function Number: 5
scramblersetup(param_00)
{
self setmodel("weapon_jammer");
if(level.teambased)
{
maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20));
}
else
{
maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20));
}
thread scramblerdamagelistener(param_00);
thread scrambleruselistener(param_00);
param_00 thread scramblerwatchowner(self);
thread scramblerbeepsounds();
thread maps\mp\_utility::notusableforjoiningplayers(param_00);
}
//Function Number: 6
scramblerwatchowner(param_00)
{
param_00 endon("death");
level endon("game_ended");
common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","death");
level thread deletescrambler(param_00);
}
//Function Number: 7
scramblerbeepsounds()
{
self endon("death");
level endon("game_ended");
for(;;)
{
wait 3;
self playsound("scrambler_beep");
}
}
//Function Number: 8
scramblerdamagelistener(param_00)
{
self endon("death");
self.health = 999999;
self.maxhealth = 100;
self.damagetaken = 0;
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A);
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02))
{
continue;
}
if(isdefined(var_0A))
{
switch(var_0A)
{
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "concussion_grenade_mp":
break;
}
}
if(!isdefined(self))
{
return;
}
if(var_05 == "MOD_MELEE")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
if(isdefined(var_09) && var_09 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
self.damagetaken = self.damagetaken + var_01;
if(isplayer(var_02))
{
var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("scrambler");
}
if(self.damagetaken >= self.maxhealth)
{
if(isdefined(param_00) && var_02 != param_00)
{
var_02 notify("destroyed_explosive");
}
self playsound("sentry_explode");
self.deatheffect = playfx(common_scripts\utility::getfx("equipment_explode"),self.origin);
var_02 thread deletescrambler(self);
}
}
}
//Function Number: 9
scrambleruselistener(param_00)
{
self endon("death");
level endon("game_ended");
param_00 endon("disconnect");
self setcursorhint("HINT_NOICON");
self sethintstring(&"MP_PATCH_PICKUP_SCRAMBLER");
maps\mp\_utility::setselfusable(param_00);
for(;;)
{
self waittill("trigger",var_01);
var_01 playlocalsound("scavenger_pack_pickup");
if(var_01 getammocount("scrambler_mp") == 0)
{
var_01 setscrambler();
}
var_01 thread deletescrambler(self);
}
}
//Function Number: 10
scramblerproximitytracker()
{
self endon("disconnect");
self endon("death");
self endon("faux_spawn");
level endon("game_ended");
self.scramproxyactive = 0;
var_00 = 512;
for(;;)
{
wait 0.05;
self.scramproxyactive = 0;
foreach(var_02 in level.scramblers)
{
if(!isdefined(var_02))
{
continue;
}
if(!maps\mp\_utility::isreallyalive(self))
{
continue;
}
var_03 = distancesquared(var_02.origin,self.origin);
if((level.teambased && var_02.team != self.team) || !level.teambased && isdefined(var_02.owner) && var_02.owner != self)
{
if(var_03 < var_00 * var_00)
{
self.inplayerscrambler = var_02.owner;
}
else
{
self.inplayerscrambler = undefined;
}
continue;
}
if(var_03 < var_00 * var_00)
{
self.scramproxyactive = 1;
break;
}
}
if(self.scramproxyactive)
{
if(!maps\mp\_utility::_hasperk("specialty_blindeye"))
{
maps\mp\_utility::giveperk("specialty_blindeye",0);
self.scramproxyperk = 1;
}
continue;
}
if(isdefined(self.scramproxyperk) && self.scramproxyperk)
{
if(!maps\mp\killstreaks\_perkstreaks::isperkstreakon("specialty_blindeye_ks"))
{
maps\mp\_utility::_unsetperk("specialty_blindeye");
}
self.scramproxyperk = 0;
}
}
}

View File

@ -0,0 +1,123 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_serversettings.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 3
* Decompile Time: 60 ms
* Timestamp: 10/27/2023 2:12:53 AM
*******************************************************************/
//Function Number: 1
init()
{
level.hostname = getdvar("sv_hostname");
if(level.hostname == "")
{
level.hostname = "CoDHost";
}
setdvar("sv_hostname",level.hostname);
level.allowvote = getdvarint("g_allowvote",1);
setdvar("g_allowvote",level.allowvote);
makedvarserverinfo("ui_allowvote",level.allowvote);
level.friendlyfire = maps\mp\gametypes\_tweakables::gettweakablevalue("team","fftype");
makedvarserverinfo("ui_friendlyfire",level.friendlyfire);
constraingametype(getdvar("g_gametype"));
for(;;)
{
updateserversettings();
wait 5;
}
}
//Function Number: 2
updateserversettings()
{
var_00 = getdvar("sv_hostname");
if(level.hostname != var_00)
{
level.hostname = var_00;
}
var_01 = getdvarint("g_allowvote",1);
if(level.allowvote != var_01)
{
level.allowvote = var_01;
setdvar("ui_allowvote",level.allowvote);
}
var_02 = maps\mp\gametypes\_tweakables::gettweakablevalue("team","fftype");
if(level.friendlyfire != var_02)
{
level.friendlyfire = var_02;
setdvar("ui_friendlyfire",level.friendlyfire);
}
}
//Function Number: 3
constraingametype(param_00)
{
var_01 = getentarray();
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = var_01[var_02];
if(param_00 == "dm")
{
if(isdefined(var_03.script_gametype_dm) && var_03.script_gametype_dm != "1")
{
var_03 delete();
}
continue;
}
if(param_00 == "tdm")
{
if(isdefined(var_03.script_gametype_tdm) && var_03.script_gametype_tdm != "1")
{
var_03 delete();
}
continue;
}
if(param_00 == "ctf")
{
if(isdefined(var_03.script_gametype_ctf) && var_03.script_gametype_ctf != "1")
{
var_03 delete();
}
continue;
}
if(param_00 == "hq")
{
if(isdefined(var_03.script_gametype_hq) && var_03.script_gametype_hq != "1")
{
var_03 delete();
}
continue;
}
if(param_00 == "sd")
{
if(isdefined(var_03.script_gametype_sd) && var_03.script_gametype_sd != "1")
{
var_03 delete();
}
continue;
}
if(param_00 == "koth")
{
if(isdefined(var_03.script_gametype_koth) && var_03.script_gametype_koth != "1")
{
var_03 delete();
}
}
}
}

View File

@ -0,0 +1,187 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_shellshock.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 9
* Decompile Time: 134 ms
* Timestamp: 10/27/2023 2:12:54 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheshellshock("frag_grenade_mp");
precacheshellshock("damage_mp");
precacherumble("artillery_rumble");
precacherumble("grenade_rumble");
precachemenu("dirt_effect_center");
precachemenu("dirt_effect_left");
precachemenu("dirt_effect_right");
precachemenu("blood_effect_center");
precachemenu("blood_effect_left");
precachemenu("blood_effect_right");
}
//Function Number: 2
shellshockondamage(param_00,param_01)
{
if(maps\mp\_flashgrenades::isflashbanged())
{
return;
}
if(param_00 == "MOD_EXPLOSIVE" || param_00 == "MOD_GRENADE" || param_00 == "MOD_GRENADE_SPLASH" || param_00 == "MOD_PROJECTILE" || param_00 == "MOD_PROJECTILE_SPLASH")
{
if(param_01 > 10)
{
if(isdefined(self.shellshockreduction) && self.shellshockreduction)
{
self shellshock("frag_grenade_mp",self.shellshockreduction);
return;
}
self shellshock("frag_grenade_mp",0.5);
return;
}
}
}
//Function Number: 3
endondeath()
{
self waittill("death");
waittillframeend;
self notify("end_explode");
}
//Function Number: 4
grenade_earthquake()
{
thread endondeath();
self endon("end_explode");
self waittill("explode",var_00);
playrumbleonposition("grenade_rumble",var_00);
earthquake(0.5,0.75,var_00,800);
foreach(var_02 in level.players)
{
if(var_02 maps\mp\_utility::isusingremote())
{
continue;
}
if(distance(var_00,var_02.origin) > 600)
{
continue;
}
if(var_02 damageconetrace(var_00))
{
var_02 thread dirteffect(var_00);
}
}
}
//Function Number: 5
dirteffect(param_00)
{
self endon("disconnect");
var_01 = vectornormalize(anglestoforward(self.angles));
var_02 = vectornormalize(anglestoright(self.angles));
var_03 = vectornormalize(param_00 - self.origin);
var_04 = vectordot(var_03,var_01);
var_05 = vectordot(var_03,var_02);
var_06 = [];
if(var_04 > 0 && var_04 > 0.5 && self getcurrentweapon() != "riotshield_mp")
{
}
if(abs(var_05) < 0.866)
{
if(var_06 > 0)
{
}
else
{
}
}
foreach(var_08 in var_7B)
{
self openmenu(var_08);
}
if(isalive(self))
{
common_scripts\utility::waittill_notify_or_timeout("death",2);
}
foreach(var_08 in var_7B)
{
self closemenu(var_08);
}
}
//Function Number: 6
bloodeffect(param_00)
{
self endon("disconnect");
var_01 = vectornormalize(anglestoforward(self.angles));
var_02 = vectornormalize(anglestoright(self.angles));
var_03 = vectornormalize(param_00 - self.origin);
var_04 = vectordot(var_03,var_01);
var_05 = vectordot(var_03,var_02);
var_06 = [];
if(var_04 > 0 && var_04 > 0.5)
{
}
if(abs(var_05) < 0.866)
{
if(var_06 > 0)
{
}
else
{
}
}
foreach(var_08 in var_7B)
{
self openmenu(var_08);
}
if(isalive(self))
{
common_scripts\utility::waittill_notify_or_timeout("death",7);
}
foreach(var_08 in var_7B)
{
self closemenu(var_08);
}
}
//Function Number: 7
c4_earthquake()
{
thread endondeath();
self endon("end_explode");
self waittill("explode",var_00);
playrumbleonposition("grenade_rumble",var_00);
earthquake(0.4,0.75,var_00,512);
}
//Function Number: 8
barrel_earthquake()
{
playrumbleonposition("grenade_rumble",self.origin);
earthquake(0.4,0.5,self.origin,512);
}
//Function Number: 9
artillery_earthquake()
{
playrumbleonposition("artillery_rumble",self.origin);
earthquake(0.7,0.5,self.origin,800);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,161 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_spectating.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 8
* Decompile Time: 130 ms
* Timestamp: 10/27/2023 2:12:57 AM
*******************************************************************/
//Function Number: 1
init()
{
level.spectateoverride["allies"] = spawnstruct();
level.spectateoverride["axis"] = spawnstruct();
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onjoinedteam();
var_00 thread onjoinedspectators();
var_00 thread onspectatingclient();
}
}
//Function Number: 3
onjoinedteam()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
setspectatepermissions();
}
}
//Function Number: 4
onjoinedspectators()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_spectators");
setspectatepermissions();
}
}
//Function Number: 5
onspectatingclient()
{
self endon("disconnect");
for(;;)
{
self waittill("spectating_cycle");
var_00 = self getspectatingplayer();
if(isdefined(var_00))
{
self setcarddisplayslot(var_00,6);
}
}
}
//Function Number: 6
updatespectatesettings()
{
level endon("game_ended");
for(var_00 = 0;var_00 < level.players.size;var_00++)
{
level.players[var_00] setspectatepermissions();
}
}
//Function Number: 7
getotherteam(param_00)
{
if(param_00 == "axis")
{
return "allies";
}
if(param_00 == "allies")
{
return "axis";
}
return "none";
}
//Function Number: 8
setspectatepermissions()
{
var_00 = self.sessionteam;
if(level.gameended && gettime() - level.gameendtime >= 2000)
{
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
self allowspectateteam("freelook",0);
self allowspectateteam("none",1);
return;
}
var_01 = maps\mp\gametypes\_tweakables::gettweakablevalue("game","spectatetype");
switch(var_01)
{
case 0:
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
break;
case 1:
if(!level.teambased)
{
self allowspectateteam("allies",1);
self allowspectateteam("axis",1);
self allowspectateteam("none",1);
self allowspectateteam("freelook",0);
}
else if(isdefined(var_00) && var_00 == "allies" || var_00 == "axis")
{
self allowspectateteam(var_00,1);
self allowspectateteam(getotherteam(var_00),0);
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
}
else
{
self allowspectateteam("allies",0);
self allowspectateteam("axis",0);
self allowspectateteam("freelook",0);
self allowspectateteam("none",0);
}
break;
case 2:
self allowspectateteam("allies",1);
self allowspectateteam("axis",1);
self allowspectateteam("freelook",1);
self allowspectateteam("none",1);
break;
}
if(isdefined(var_00) && var_00 == "axis" || var_00 == "allies")
{
if(isdefined(level.spectateoverride[var_00].allowfreespectate))
{
self allowspectateteam("freelook",1);
}
if(isdefined(level.spectateoverride[var_00].allowenemyspectate))
{
self allowspectateteam(getotherteam(var_00),1);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,430 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\_tweakables.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 8
* Decompile Time: 130 ms
* Timestamp: 10/27/2023 2:12:59 AM
*******************************************************************/
//Function Number: 1
gettweakabledvarvalue(param_00,param_01)
{
switch(param_00)
{
case "rule":
var_02 = level.rules[param_01].dvar;
break;
case "game":
var_02 = level.gametweaks[var_02].dvar;
break;
case "team":
var_02 = level.teamtweaks[var_02].dvar;
break;
case "player":
var_02 = level.playertweaks[var_02].dvar;
break;
case "class":
var_02 = level.classtweaks[var_02].dvar;
break;
case "weapon":
var_02 = level.weapontweaks[var_02].dvar;
break;
case "hardpoint":
var_02 = level.hardpointtweaks[var_02].dvar;
break;
case "hud":
var_02 = level.hudtweaks[var_02].dvar;
break;
default:
var_02 = undefined;
break;
}
var_03 = getdvarint(var_02);
return var_03;
}
//Function Number: 2
gettweakabledvar(param_00,param_01)
{
switch(param_00)
{
case "rule":
var_02 = level.rules[param_01].dvar;
break;
case "game":
var_02 = level.gametweaks[var_02].dvar;
break;
case "team":
var_02 = level.teamtweaks[var_02].dvar;
break;
case "player":
var_02 = level.playertweaks[var_02].dvar;
break;
case "class":
var_02 = level.classtweaks[var_02].dvar;
break;
case "weapon":
var_02 = level.weapontweaks[var_02].dvar;
break;
case "hardpoint":
var_02 = level.hardpointtweaks[var_02].dvar;
break;
case "hud":
var_02 = level.hudtweaks[var_02].dvar;
break;
default:
var_02 = undefined;
break;
}
return var_02;
}
//Function Number: 3
gettweakablevalue(param_00,param_01)
{
switch(param_00)
{
case "rule":
var_02 = level.rules[param_01].value;
break;
case "game":
var_02 = level.gametweaks[var_02].value;
break;
case "team":
var_02 = level.teamtweaks[var_02].value;
break;
case "player":
var_02 = level.playertweaks[var_02].value;
break;
case "class":
var_02 = level.classtweaks[var_02].value;
break;
case "weapon":
var_02 = level.weapontweaks[var_02].value;
break;
case "hardpoint":
var_02 = level.hardpointtweaks[var_02].value;
break;
case "hud":
var_02 = level.hudtweaks[var_02].value;
break;
default:
var_02 = undefined;
break;
}
return var_02;
}
//Function Number: 4
gettweakablelastvalue(param_00,param_01)
{
switch(param_00)
{
case "rule":
var_02 = level.rules[param_01].lastvalue;
break;
case "game":
var_02 = level.gametweaks[var_02].lastvalue;
break;
case "team":
var_02 = level.teamtweaks[var_02].lastvalue;
break;
case "player":
var_02 = level.playertweaks[var_02].lastvalue;
break;
case "class":
var_02 = level.classtweaks[var_02].lastvalue;
break;
case "weapon":
var_02 = level.weapontweaks[var_02].lastvalue;
break;
case "hardpoint":
var_02 = level.hardpointtweaks[var_02].lastvalue;
break;
case "hud":
var_02 = level.hudtweaks[var_02].lastvalue;
break;
default:
var_02 = undefined;
break;
}
return var_02;
}
//Function Number: 5
settweakablevalue(param_00,param_01,param_02)
{
switch(param_00)
{
case "rule":
var_03 = level.rules[param_01].dvar;
break;
case "game":
var_03 = level.gametweaks[param_02].dvar;
break;
case "team":
var_03 = level.teamtweaks[param_02].dvar;
break;
case "player":
var_03 = level.playertweaks[param_02].dvar;
break;
case "class":
var_03 = level.classtweaks[param_02].dvar;
break;
case "weapon":
var_03 = level.weapontweaks[param_02].dvar;
break;
case "hardpoint":
var_03 = level.hardpointtweaks[param_02].dvar;
break;
case "hud":
var_03 = level.hudtweaks[param_02].dvar;
break;
default:
var_03 = undefined;
break;
}
setdvar(var_03,param_02);
}
//Function Number: 6
settweakablelastvalue(param_00,param_01,param_02)
{
switch(param_00)
{
case "rule":
level.rules[param_01].lastvalue = param_02;
break;
case "game":
level.gametweaks[param_01].lastvalue = param_02;
break;
case "team":
level.teamtweaks[param_01].lastvalue = param_02;
break;
case "player":
level.playertweaks[param_01].lastvalue = param_02;
break;
case "class":
level.classtweaks[param_01].lastvalue = param_02;
break;
case "weapon":
level.weapontweaks[param_01].lastvalue = param_02;
break;
case "hardpoint":
level.hardpointtweaks[param_01].lastvalue = param_02;
break;
case "hud":
level.hudtweaks[param_01].lastvalue = param_02;
break;
default:
break;
}
}
//Function Number: 7
registertweakable(param_00,param_01,param_02,param_03)
{
if(isstring(param_03))
{
param_03 = getdvar(param_02,param_03);
}
else
{
param_03 = getdvarint(param_02,param_03);
}
switch(param_00)
{
case "rule":
if(!isdefined(level.rules[param_01]))
{
level.rules[param_01] = spawnstruct();
}
level.rules[param_01].value = param_03;
level.rules[param_01].lastvalue = param_03;
level.rules[param_01].dvar = param_02;
break;
case "game":
if(!isdefined(level.gametweaks[param_01]))
{
level.gametweaks[param_01] = spawnstruct();
}
level.gametweaks[param_01].value = param_03;
level.gametweaks[param_01].lastvalue = param_03;
level.gametweaks[param_01].dvar = param_02;
break;
case "team":
if(!isdefined(level.teamtweaks[param_01]))
{
level.teamtweaks[param_01] = spawnstruct();
}
level.teamtweaks[param_01].value = param_03;
level.teamtweaks[param_01].lastvalue = param_03;
level.teamtweaks[param_01].dvar = param_02;
break;
case "player":
if(!isdefined(level.playertweaks[param_01]))
{
level.playertweaks[param_01] = spawnstruct();
}
level.playertweaks[param_01].value = param_03;
level.playertweaks[param_01].lastvalue = param_03;
level.playertweaks[param_01].dvar = param_02;
break;
case "class":
if(!isdefined(level.classtweaks[param_01]))
{
level.classtweaks[param_01] = spawnstruct();
}
level.classtweaks[param_01].value = param_03;
level.classtweaks[param_01].lastvalue = param_03;
level.classtweaks[param_01].dvar = param_02;
break;
case "weapon":
if(!isdefined(level.weapontweaks[param_01]))
{
level.weapontweaks[param_01] = spawnstruct();
}
level.weapontweaks[param_01].value = param_03;
level.weapontweaks[param_01].lastvalue = param_03;
level.weapontweaks[param_01].dvar = param_02;
break;
case "hardpoint":
if(!isdefined(level.hardpointtweaks[param_01]))
{
level.hardpointtweaks[param_01] = spawnstruct();
}
level.hardpointtweaks[param_01].value = param_03;
level.hardpointtweaks[param_01].lastvalue = param_03;
level.hardpointtweaks[param_01].dvar = param_02;
break;
case "hud":
if(!isdefined(level.hudtweaks[param_01]))
{
level.hudtweaks[param_01] = spawnstruct();
}
level.hudtweaks[param_01].value = param_03;
level.hudtweaks[param_01].lastvalue = param_03;
level.hudtweaks[param_01].dvar = param_02;
break;
}
}
//Function Number: 8
init()
{
level.clienttweakables = [];
level.tweakablesinitialized = 1;
level.rules = [];
level.gametweaks = [];
level.teamtweaks = [];
level.playertweaks = [];
level.classtweaks = [];
level.weapontweaks = [];
level.hardpointtweaks = [];
level.hudtweaks = [];
if(level.console)
{
registertweakable("game","graceperiod","scr_game_graceperiod",15);
}
else
{
registertweakable("game","playerwaittime","scr_game_playerwaittime",15);
registertweakable("game","matchstarttime","scr_game_matchstarttime",5);
}
registertweakable("game","onlyheadshots","scr_game_onlyheadshots",0);
registertweakable("game","allowkillcam","scr_game_allowkillcam",1);
registertweakable("game","spectatetype","scr_game_spectatetype",2);
registertweakable("game","deathpointloss","scr_game_deathpointloss",0);
registertweakable("game","suicidepointloss","scr_game_suicidepointloss",0);
registertweakable("team","teamkillpointloss","scr_team_teamkillpointloss",0);
registertweakable("team","fftype","scr_team_fftype",0);
registertweakable("team","teamkillspawndelay","scr_team_teamkillspawndelay",0);
registertweakable("player","maxhealth","scr_player_maxhealth",100);
registertweakable("player","healthregentime","scr_player_healthregentime",5);
registertweakable("player","forcerespawn","scr_player_forcerespawn",1);
registertweakable("weapon","allowfrag","scr_weapon_allowfrags",1);
registertweakable("weapon","allowsmoke","scr_weapon_allowsmoke",1);
registertweakable("weapon","allowflash","scr_weapon_allowflash",1);
registertweakable("weapon","allowc4","scr_weapon_allowc4",1);
registertweakable("weapon","allowclaymores","scr_weapon_allowclaymores",1);
registertweakable("weapon","allowrpgs","scr_weapon_allowrpgs",1);
registertweakable("weapon","allowmines","scr_weapon_allowmines",1);
registertweakable("hardpoint","allowartillery","scr_hardpoint_allowartillery",1);
registertweakable("hardpoint","allowuav","scr_hardpoint_allowuav",1);
registertweakable("hardpoint","allowsupply","scr_hardpoint_allowsupply",1);
registertweakable("hardpoint","allowhelicopter","scr_hardpoint_allowhelicopter",1);
registertweakable("hud","showobjicons","ui_hud_showobjicons",1);
makedvarserverinfo("ui_hud_showobjicons",1);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,511 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\arena.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 25
* Decompile Time: 328 ms
* Timestamp: 10/27/2023 2:13:06 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10,0,1440);
maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,10);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10);
maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30);
maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10);
maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1);
level.teambased = 1;
level.objectivebased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onnormaldeath = ::onnormaldeath;
level.onplayerkilled = ::onplayerkilled;
level.ondeadevent = ::ondeadevent;
game["dialog"]["gametype"] = "arena";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
}
//Function Number: 2
onprecachegametype()
{
precacheshader("compass_waypoint_captureneutral");
precacheshader("compass_waypoint_capture");
precacheshader("compass_waypoint_defend");
precacheshader("waypoint_captureneutral");
precacheshader("waypoint_capture");
precacheshader("waypoint_defend");
}
//Function Number: 3
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_ARENA");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_ARENA");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_ARENA");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_ARENA");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_ARENA_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_ARENA_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_ARENA_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_ARENA_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_02[0] = "dom";
maps\mp\gametypes\_rank::registerscoreinfo("capture",200);
maps\mp\gametypes\_gameobjects::main(var_7B);
func_3A57();
thread func_3A59();
thread func_3A58();
}
//Function Number: 4
func_3A57()
{
game["flagmodels"] = [];
game["flagmodels"]["neutral"] = "prop_flag_neutral";
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies");
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis");
precachemodel(game["flagmodels"]["neutral"]);
precachemodel(game["flagmodels"]["allies"]);
precachemodel(game["flagmodels"]["axis"]);
precachestring(&"MP_CAPTURING_FLAG");
precachestring(&"MP_LOSING_FLAG");
precachestring(&"MP_DOM_YOUR_FLAG_WAS_CAPTURED");
precachestring(&"MP_DOM_ENEMY_FLAG_CAPTURED");
precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY");
precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY");
precachestring(&"MP_FRIENDLY_FLAG_CAPTURED_BY");
}
//Function Number: 5
func_3A58()
{
level endon("down_to_one");
level endon("game_end");
for(;;)
{
var_00 = maps\mp\gametypes\_gamelogic::gettimeremaining();
if(var_00 < -4536)
{
break;
}
wait 1;
}
level notify("arena_flag_time");
thread arenaflag();
}
//Function Number: 6
func_3A59()
{
level endon("game_end");
level endon("arena_flag_time");
for(;;)
{
if(level.ingraceperiod == 0)
{
break;
}
wait 0.05;
}
for(;;)
{
if(getteamplayersalive("axis") == 1)
{
thread arenaflag();
level notify("down_to_one");
break;
}
if(getteamplayersalive("allies") == 1)
{
thread arenaflag();
level notify("down_to_one");
break;
}
wait 1;
}
}
//Function Number: 7
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 8
onspawnplayer()
{
self.usingobj = undefined;
level notify("spawned_player");
}
//Function Number: 9
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
param_01 lib_036E::func_2B88(param_01.pers["team"],var_03);
var_04 = param_00.team;
if(game["state"] == "postgame")
{
param_01.finalkill = 1;
}
}
//Function Number: 10
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
thread func_3959();
}
//Function Number: 11
ontimelimit()
{
if(game["status"] == "overtime")
{
var_00 = "forfeit";
}
else if(game["teamScores"]["allies"] == game["teamScores"]["axis"])
{
var_00 = "overtime";
}
else if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
var_00 = "axis";
}
else
{
var_00 = "allies";
}
thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]);
}
//Function Number: 12
func_3959()
{
wait 0.05;
var_00 = 0;
if(!level.alivecount[game["attackers"]])
{
level.spectateoverride[game["attackers"]].allowenemyspectate = 1;
var_00 = 1;
}
if(!level.alivecount[game["defenders"]])
{
level.spectateoverride[game["defenders"]].allowenemyspectate = 1;
var_00 = 1;
}
if(var_00)
{
maps\mp\gametypes\_spectating::updatespectatesettings();
}
}
//Function Number: 13
arenaflag()
{
level.laststatus["allies"] = 0;
level.laststatus["axis"] = 0;
var_00 = getentarray("flag_arena","targetname");
var_01 = getentarray("flag_primary","targetname");
var_02 = getentarray("flag_secondary","targetname");
if(!isdefined(var_00[0]))
{
if(var_01.size + var_02.size < 1)
{
maps\mp\gametypes\_callbacksetup::abortlevel();
return;
}
func_3A5B(var_01,var_02);
}
else
{
level.arenaflag = var_00[0];
}
var_03 = level.arenaflag;
if(isdefined(var_03.target))
{
var_04[0] = getent(var_03.target,"targetname");
}
else
{
var_00[0] = spawn("script_model",var_04.origin);
var_04[0].angles = var_03.angles;
}
var_04[0] setmodel(game["flagmodels"]["neutral"]);
var_00 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_03,var_04,(0,0,100));
var_00 maps\mp\gametypes\_gameobjects::allowuse("enemy");
var_00 maps\mp\gametypes\_gameobjects::setusetime(20);
var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CAPTURING_FLAG");
var_05 = var_00 maps\mp\gametypes\_gameobjects::getlabel();
var_00.label = var_05;
var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend");
var_00 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend");
var_00 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral");
var_00 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral");
var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_00.onuse = ::onuse;
var_00.onbeginuse = ::onbeginuse;
var_00.onuseupdate = ::onuseupdate;
var_00.onenduse = ::onenduse;
var_00.isarena = 1;
iprintlnbold("Arena flag spawned");
level.arenaflag playsound("flag_spawned");
var_06 = var_04[0].origin + (0,0,32);
var_07 = var_04[0].origin + (0,0,-32);
var_08 = bullettrace(var_06,var_07,0,undefined);
var_09 = vectortoangles(var_08["normal"]);
var_00.baseeffectforward = anglestoforward(var_09);
var_00.baseeffectright = anglestoright(var_09);
var_00.baseeffectpos = var_08["position"];
var_00.levelflag = level.arenaflag;
level.arenaflag = var_00;
}
//Function Number: 14
func_3A5B(param_00,param_01)
{
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
var_03 = param_00[var_02].script_label;
if(var_03 != "_b")
{
param_00[var_02] delete();
continue;
}
level.arenaflag = param_00[var_02];
return;
}
}
//Function Number: 15
ondeadevent(param_00)
{
if(param_00 == game["attackers"])
{
level thread func_3A5C(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]);
return;
}
if(param_00 == game["defenders"])
{
level thread func_3A5C(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]);
}
}
//Function Number: 16
func_3A5C(param_00,param_01)
{
thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
}
//Function Number: 17
func_3944(param_00)
{
level endon("game_ended");
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
var_01 = getarraykeys(param_00);
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = param_00[var_01[var_02]].player;
var_03 thread [[ level.onxpevent ]]("capture");
lib_036E::func_2B7B("capture",var_03);
var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin);
}
}
//Function Number: 18
onuse(param_00)
{
var_01 = param_00.pers["team"];
var_02 = maps\mp\gametypes\_gameobjects::getownerteam();
var_03 = maps\mp\gametypes\_gameobjects::getlabel();
self.capturetime = gettime();
maps\mp\gametypes\_gameobjects::setownerteam(var_01);
maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture");
self.visuals[0] setmodel(game["flagmodels"][var_01]);
if(var_02 == "neutral")
{
var_04 = maps\mp\_utility::getotherteam(var_01);
thread maps\mp\_utility::printandsoundoneveryone(var_01,var_04,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_war_objective_taken",undefined,param_00);
func_3940("captured_a",var_01);
func_3940("enemy_has_a",var_04);
}
else
{
thread maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FRIENDLY_FLAG_CAPTURED_BY","mp_war_objective_taken","mp_war_objective_lost",param_00);
}
thread func_3944(self.touchlist[var_01]);
param_00 notify("objective","captured");
thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
}
//Function Number: 19
onbeginuse(param_00)
{
var_01 = maps\mp\gametypes\_gameobjects::getownerteam();
self.didstatusnotify = 0;
if(var_01 == "neutral")
{
var_02 = maps\mp\_utility::getotherteam(param_00.pers["team"]);
func_3940("securing",param_00.pers["team"]);
self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing();
func_3940("enemy_taking",var_02);
return;
}
if(var_02 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing();
self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing();
}
//Function Number: 20
onuseupdate(param_00,param_01,param_02)
{
if(param_01 > 0.05 && param_02 && !self.didstatusnotify)
{
var_03 = maps\mp\_utility::getotherteam(param_00);
func_3940("losing_a",var_03);
func_3940("securing_a",param_00);
self.didstatusnotify = 1;
}
}
//Function Number: 21
onenduse(param_00,param_01,param_02)
{
self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing();
self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing();
}
//Function Number: 22
func_3940(param_00,param_01)
{
var_02 = gettime();
if(gettime() < level.laststatus[param_01] + 6000)
{
return;
}
thread func_3945(param_00,param_01);
level.laststatus[param_01] = gettime();
}
//Function Number: 23
func_3945(param_00,param_01)
{
level endon("game_ended");
wait 0.1;
maps\mp\_utility::waittillslowprocessallowed();
maps\mp\_utility::leaderdialog(param_00,param_01);
}
//Function Number: 24
func_3946(param_00,param_01,param_02,param_03)
{
level endon("game_ended");
wait 0.1;
maps\mp\_utility::waittillslowprocessallowed();
maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03);
}
//Function Number: 25
flagcaptured(param_00,param_01)
{
maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
}

View File

@ -0,0 +1,396 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\conf.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 16
* Decompile Time: 228 ms
* Timestamp: 10/27/2023 2:13:07 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,65);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.initgametypeawards = ::initgametypeawards;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
level.onprecachegametype = ::onprecachegametype;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "kill_confirmed";
level.conf_fx["vanish"] = loadfx("impacts/small_snowhit");
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar("scr_conf_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("conf",0,0,9);
setdynamicdvar("scr_conf_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("conf",1);
setdynamicdvar("scr_conf_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("conf",1);
setdynamicdvar("scr_conf_halftime",0);
maps\mp\_utility::registerhalftimedvar("conf",0);
setdynamicdvar("scr_conf_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachemodel("prop_dogtags_friend");
precachemodel("prop_dogtags_foe");
precacheshader("waypoint_dogtags");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_CONF");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_CONF");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_CONF");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_CONF");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_CONF_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_CONF_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_CONF_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_CONF_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("kill_confirmed",50);
maps\mp\gametypes\_rank::registerscoreinfo("kill_denied",50);
maps\mp\gametypes\_rank::registerscoreinfo("tags_retrieved",250);
level.dogtags = [];
var_02[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main(var_02);
}
//Function Number: 5
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 6
onnormaldeath(param_00,param_01,param_02)
{
level thread func_3A1C(param_00,param_01);
if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]])
{
param_01.finalkill = 1;
}
}
//Function Number: 7
func_3A1C(param_00,param_01)
{
if(isdefined(level.dogtags[param_00.guid]))
{
playfx(level.conf_fx["vanish"],level.dogtags[param_00.guid].curorigin);
level.dogtags[param_00.guid] notify("reset");
}
else
{
var_02[0] = spawn("script_model",(0,0,0));
var_02[0] setmodel("prop_dogtags_foe");
var_7B[1] setmodel("prop_dogtags_friend");
var_03 = spawn("trigger_radius",(0,0,0),0,32,32);
level.dogtags[param_01.guid] = maps\mp\gametypes\_gameobjects::createuseobject("any",var_03,var_7B,(0,0,16));
maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidallies);
maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidaxis);
maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["allies"]);
maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["axis"]);
level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::setusetime(0);
level.dogtags[param_01.guid].onuse = ::onuse;
level.dogtags[param_01.guid].victim = param_01;
level.dogtags[param_01.guid].victimteam = param_01.pers["team"];
level.dogtags[param_01.guid].objid = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(level.dogtags[param_01.guid].objid,"invisible",(0,0,0));
objective_icon(level.dogtags[param_01.guid].objid,"waypoint_dogtags");
level thread func_3A20(param_01);
param_01 thread tagteamupdater(level.dogtags[param_01.guid]);
}
var_04 = param_01.origin + (0,0,14);
level.dogtags[param_01.guid].curorigin = var_04;
level.dogtags[param_01.guid].trigger.origin = var_04;
level.dogtags[param_01.guid].visuals[0].origin = var_04;
level.dogtags[param_01.guid].visuals[1].origin = var_04;
level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::allowuse("any");
level.dogtags[param_01.guid].visuals[0] thread func_3A1E(level.dogtags[param_01.guid],maps\mp\_utility::getotherteam(param_01.pers["team"]));
level.dogtags[param_01.guid].visuals[1] thread func_3A1E(level.dogtags[param_01.guid],param_01.pers["team"]);
level.dogtags[param_01.guid].attacker = var_02;
objective_position(level.dogtags[param_01.guid].objid,var_04);
objective_state(level.dogtags[param_01.guid].objid,"active");
objective_player(level.dogtags[param_01.guid].objid,var_02 getentitynumber());
playsoundatpos(var_04,"mp_killconfirm_tags_drop");
level.dogtags[param_01.guid] thread func_3A1F();
}
//Function Number: 8
func_3A1E(param_00,param_01)
{
param_00 endon("death");
param_00 endon("reset");
self hide();
foreach(var_03 in level.players)
{
if(var_03.team == param_01)
{
self showtoplayer(var_03);
}
}
for(;;)
{
level waittill("joined_team");
self hide();
foreach(var_03 in level.players)
{
if(var_03.team == param_01)
{
self showtoplayer(var_03);
}
if(param_00.victimteam == var_03.team && var_03 == param_00.attacker)
{
objective_state(param_00.objid,"invisible");
}
}
}
}
//Function Number: 9
onuse(param_00)
{
if(param_00.pers["team"] == self.victimteam)
{
self.trigger playsound("mp_killconfirm_tags_deny");
param_00 maps\mp\_utility::incplayerstat("killsdenied",1);
param_00 maps\mp\_utility::incpersstat("denied",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","denied",param_00.pers["denied"]);
if(self.victim == param_00)
{
var_01 = "tags_retrieved";
var_02 = &"SPLASHES_TAGS_RETRIEVED";
}
else
{
var_01 = "kill_denied";
var_02 = &"SPLASHES_KILL_DENIED";
}
if(isdefined(self.attacker))
{
self.attacker thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DENIED_KILL",(1,0.5,0.5));
}
}
else
{
self.trigger playsound("mp_killconfirm_tags_pickup");
var_01 = "kill_confirmed";
var_02 = &"SPLASHES_KILL_CONFIRMED";
param_00 maps\mp\_utility::incplayerstat("killsconfirmed",1);
param_00 maps\mp\_utility::incpersstat("confirmed",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","confirmed",param_00.pers["confirmed"]);
if(self.attacker != param_00)
{
self.attacker onpickup(var_01,var_02);
}
self.trigger playsoundtoplayer(game["voice"][param_00.team] + "kill_confirmed",param_00);
param_00 lib_036E::func_2B88(param_00.pers["team"],1);
}
param_00 onpickup(var_01,var_02);
resettags();
}
//Function Number: 10
onpickup(param_00,param_01,param_02)
{
thread maps\mp\gametypes\_rank::func_2F45(param_01);
lib_036E::func_2B7B(param_00,self,undefined,1);
thread maps\mp\gametypes\_rank::giverankxp(param_00);
}
//Function Number: 11
resettags()
{
self.attacker = undefined;
self notify("reset");
self.visuals[0] hide();
self.visuals[1] hide();
self.curorigin = (0,0,1000);
self.trigger.origin = (0,0,1000);
self.visuals[0].origin = (0,0,1000);
self.visuals[1].origin = (0,0,1000);
maps\mp\gametypes\_gameobjects::allowuse("none");
objective_state(self.objid,"invisible");
}
//Function Number: 12
func_3A1F()
{
level endon("game_ended");
self endon("reset");
var_00 = self.curorigin;
var_01 = self.curorigin + (0,0,12);
for(;;)
{
self.visuals[0] moveto(var_01,0.5,0.15,0.15);
self.visuals[0] rotateyaw(180,0.5);
self.visuals[1] moveto(var_01,0.5,0.15,0.15);
self.visuals[1] rotateyaw(180,0.5);
wait 0.5;
self.visuals[0] moveto(var_00,0.5,0.15,0.15);
self.visuals[0] rotateyaw(180,0.5);
self.visuals[1] moveto(var_00,0.5,0.15,0.15);
self.visuals[1] rotateyaw(180,0.5);
wait 0.5;
}
}
//Function Number: 13
timeout(param_00)
{
level endon("game_ended");
param_00 endon("disconnect");
self notify("timeout");
self endon("timeout");
level maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(30);
self.visuals[0] hide();
self.visuals[1] hide();
self.curorigin = (0,0,1000);
self.trigger.origin = (0,0,1000);
self.visuals[0].origin = (0,0,1000);
self.visuals[1].origin = (0,0,1000);
maps\mp\gametypes\_gameobjects::allowuse("none");
}
//Function Number: 14
tagteamupdater(param_00)
{
level endon("game_ended");
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
param_00.victimteam = self.pers["team"];
param_00 resettags();
}
}
//Function Number: 15
func_3A20(param_00)
{
level endon("game_ended");
var_01 = param_00.guid;
param_00 waittill("disconnect");
if(isdefined(level.dogtags[var_01]))
{
level.dogtags[var_01] maps\mp\gametypes\_gameobjects::allowuse("none");
if(isdefined(level.dogtags[var_01].attacker))
{
level.dogtags[var_01].attacker thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DENIED_KILL",(1,0.5,0.5));
}
playfx(level.conf_fx["vanish"],level.dogtags[var_01].curorigin);
level.dogtags[var_01] notify("reset");
wait 0.05;
if(isdefined(level.dogtags[var_01]))
{
objective_delete(level.dogtags[var_01].objid);
level.dogtags[var_01].trigger delete();
for(var_02 = 0;var_02 < level.dogtags[var_01].visuals.size;var_02++)
{
level.dogtags[var_01].visuals[var_02] delete();
}
level.dogtags[var_01] notify("deleted");
level.dogtags[var_01] = undefined;
}
}
}
//Function Number: 16
initgametypeawards()
{
}

View File

@ -0,0 +1,930 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\ctf.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 31
* Decompile Time: 576 ms
* Timestamp: 10/27/2023 2:13:09 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,5);
maps\mp\_utility::registerscorelimitdvar(level.gametype,3);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
maps\mp\_utility::setovertimelimitdvar(4);
func_3989();
level.teambased = 1;
level.objectivebased = 1;
level.overtimescorewinoverride = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.initgametypeawards = ::initgametypeawards;
level.ontimelimit = ::ontimelimit;
level.onspawnplayer = ::onspawnplayer;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30);
game["dialog"]["gametype"] = "captureflag";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "capture_obj";
game["dialog"]["defense_obj"] = "capture_obj";
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar("scr_ctf_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("ctf",1);
setdynamicdvar("scr_ctf_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("ctf",1);
setdynamicdvar("scr_ctf_halftime",0);
maps\mp\_utility::registerhalftimedvar("ctf",0);
setdynamicdvar("scr_ctf_returntime",30);
setdynamicdvar("scr_ctf_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachestring(&"MP_FLAG_TAKEN_BY");
precachestring(&"MP_ENEMY_FLAG_TAKEN_BY");
precachestring(&"MP_FLAG_CAPTURED_BY");
precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY");
precachestring(&"MP_FLAG_RETURNED");
precachestring(&"MP_ENEMY_FLAG_RETURNED");
precachestring(&"MP_YOUR_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_DROPPED_BY");
precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
precachestring(&"MP_GRABBING_FLAG");
precachestring(&"MP_RETURNING_FLAG");
}
//Function Number: 4
onspawnplayer()
{
}
//Function Number: 5
func_3979()
{
self endon("disconnect");
wait 0.25;
self.otspawned = 1;
var_00 = maps\mp\_utility::getobjectivehinttext(self.team);
thread maps\mp\gametypes\_hud_message::hintmessage(var_00);
}
//Function Number: 6
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(maps\mp\_utility::inovertime())
{
setdvar("ui_override_halftime",0);
}
else if(game["switchedsides"])
{
setdvar("ui_override_halftime",2);
}
else
{
setdvar("ui_override_halftime",1);
}
if(!isdefined(game["original_defenders"]))
{
game["original_defenders"] = game["defenders"];
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
game["teamScores"][game["attackers"]] = 0;
setteamscore(game["attackers"],0);
game["teamScores"][game["defenders"]] = 0;
setteamscore(game["defenders"],0);
setclientnamemode("auto_change");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE");
}
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF");
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assist",20);
maps\mp\gametypes\_rank::registerscoreinfo("pickup",50);
maps\mp\gametypes\_rank::registerscoreinfo("return",50);
maps\mp\gametypes\_rank::registerscoreinfo("capture",250);
maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50);
maps\mp\gametypes\_rank::registerscoreinfo("defend",100);
maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100);
maps\mp\gametypes\_rank::registerscoreinfo("assault",200);
maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40);
var_02[0] = "ctf";
maps\mp\gametypes\_gameobjects::main(var_02);
thread func_39C8();
}
//Function Number: 7
getspawnpoint()
{
if(self.team == "axis")
{
var_00 = game["attackers"];
}
else
{
var_00 = game["defenders"];
}
if(level.ingraceperiod)
{
var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 8
func_39C8()
{
level.flagmodel["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies");
level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies");
level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies");
precachemodel(level.flagmodel["allies"]);
precachemodel(level.carryflag["allies"]);
level.flagmodel["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis");
level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis");
level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis");
precachemodel(level.flagmodel["axis"]);
precachemodel(level.carryflag["axis"]);
level.iconescort3d = "waypoint_escort";
level.iconescort2d = "waypoint_escort";
precacheshader(level.iconescort3d);
precacheshader(level.iconescort2d);
level.iconkill3d = "waypoint_kill";
level.iconkill2d = "waypoint_kill";
precacheshader(level.iconkill3d);
precacheshader(level.iconkill2d);
level.iconcaptureflag3d = "waypoint_capture_flag";
level.iconcaptureflag2d = "waypoint_capture_flag";
precacheshader(level.iconcaptureflag3d);
precacheshader(level.iconcaptureflag2d);
level.icondefendflag3d = "waypoint_defend_flag";
level.icondefendflag2d = "waypoint_defend_flag";
precacheshader(level.icondefendflag3d);
precacheshader(level.icondefendflag2d);
level.iconreturnflag3d = "waypoint_return_flag";
level.iconreturnflag2d = "waypoint_return_flag";
precacheshader(level.iconreturnflag3d);
precacheshader(level.iconreturnflag2d);
level.iconwaitforflag3d = "waypoint_waitfor_flag";
level.iconwaitforflag2d = "waypoint_waitfor_flag";
precacheshader(level.iconwaitforflag3d);
precacheshader(level.iconwaitforflag2d);
precacheshader(level.icon2d["axis"]);
precacheshader(level.icon2d["allies"]);
precacheshader("waypoint_flag_friendly");
precacheshader("waypoint_flag_enemy");
precachestring(&"OBJECTIVES_FLAG_HOME");
precachestring(&"OBJECTIVES_FLAG_NAME");
precachestring(&"OBJECTIVES_FLAG_AWAY");
level.teamflags[game["defenders"]] = func_39C2(game["defenders"],"allies");
level.teamflags[game["attackers"]] = func_39C2(game["attackers"],level.otherteam["allies"]);
level.capzones[game["defenders"]] = func_39C3(game["defenders"],"allies");
level.capzones[game["attackers"]] = func_39C3(game["attackers"],level.otherteam["allies"]);
if(level.splitscreen)
{
var_00 = 0;
}
else
{
var_00 = 0.85;
}
level.friendlyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_friendly",32,32,"allies");
level.friendlyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0);
level.friendlyflagstatusicon["allies"].alpha = var_00;
level.friendlyflagstatusicon["allies"].hidewheninmenu = 1;
level thread func_3A0B(level.friendlyflagstatusicon["allies"]);
level.friendlyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies");
level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["allies"]);
level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4);
level.friendlyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME");
level.friendlyflagstatustext["allies"].alpha = var_00;
level.friendlyflagstatustext["allies"].color = (1,1,1);
level.friendlyflagstatustext["allies"].glowalpha = 1;
level.friendlyflagstatustext["allies"].hidewheninmenu = 1;
level thread func_3A0B(level.friendlyflagstatustext["allies"]);
level.enemyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_enemy",24,24,"allies");
level.enemyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26);
level.enemyflagstatusicon["allies"].alpha = var_00;
level.enemyflagstatusicon["allies"].hidewheninmenu = 1;
level thread func_3A0B(level.enemyflagstatusicon["allies"]);
level.enemyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies");
level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["allies"]);
level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4);
level.enemyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME");
level.enemyflagstatustext["allies"].alpha = var_00;
level.enemyflagstatustext["allies"].color = (1,1,1);
level.enemyflagstatustext["allies"].glowalpha = 1;
level.enemyflagstatustext["allies"].hidewheninmenu = 1;
level thread func_3A0B(level.enemyflagstatustext["allies"]);
level.friendlyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_friendly",32,32,"axis");
level.friendlyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0);
level.friendlyflagstatusicon["axis"].alpha = var_00;
level.friendlyflagstatusicon["axis"].hidewheninmenu = 1;
level thread func_3A0B(level.friendlyflagstatusicon["axis"]);
level.friendlyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis");
level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["axis"]);
level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4);
level.friendlyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME");
level.friendlyflagstatustext["axis"].alpha = var_00;
level.friendlyflagstatustext["axis"].color = (1,1,1);
level.friendlyflagstatustext["axis"].glowalpha = 1;
level.friendlyflagstatustext["axis"].hidewheninmenu = 1;
level thread func_3A0B(level.friendlyflagstatustext["axis"]);
level.enemyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_enemy",24,24,"axis");
level.enemyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26);
level.enemyflagstatusicon["axis"].alpha = var_00;
level.enemyflagstatusicon["axis"].hidewheninmenu = 1;
level thread func_3A0B(level.enemyflagstatusicon["axis"]);
level.enemyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis");
level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["axis"]);
level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4);
level.enemyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME");
level.enemyflagstatustext["axis"].alpha = var_00;
level.enemyflagstatustext["axis"].color = (1,1,1);
level.enemyflagstatustext["axis"].glowalpha = 1;
level.enemyflagstatustext["axis"].hidewheninmenu = 1;
level thread func_3A0B(level.enemyflagstatustext["axis"]);
}
//Function Number: 9
func_3A0B(param_00)
{
level waittill("game_ended");
if(isdefined(param_00))
{
param_00.alpha = 0;
}
}
//Function Number: 10
spawnfxdelay(param_00,param_01,param_02,param_03,param_04)
{
wait param_04;
var_05 = spawnfx(param_00,param_01,param_02,param_03);
triggerfx(var_05);
}
//Function Number: 11
func_39C2(param_00,param_01)
{
var_02 = getent("ctf_zone_" + param_01,"targetname");
if(!isdefined(var_02))
{
common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map.");
return;
}
var_03[0] = getent("ctf_flag_" + param_01,"targetname");
if(!isdefined(var_03[0]))
{
common_scripts\utility::error("No ctf_flag_" + param_01 + " script_model found in map.");
return;
}
var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height);
var_02 = var_04;
var_03[0] setmodel(level.flagmodel[param_00]);
var_05 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_03,(0,0,85));
var_05 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5);
var_05 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5);
var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG");
var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG");
var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy");
var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d);
var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d);
var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]);
var_05.objidpingfriendly = 1;
var_05.allowweapons = 1;
var_05.onpickup = ::onpickup;
var_05.onpickupfailed = ::onpickup;
var_05.ondrop = ::ondrop;
var_05.onreset = ::onreset;
var_05.oldradius = var_02.radius;
var_06 = var_02.origin + (0,0,32);
var_07 = var_02.origin + (0,0,-32);
var_08 = bullettrace(var_06,var_07,0,undefined);
var_09 = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_0A = loadfx(var_09);
var_0B = vectortoangles(var_08["normal"]);
var_0C = anglestoforward(var_0B);
var_0D = anglestoright(var_0B);
thread spawnfxdelay(var_0A,var_08["position"],var_0C,var_0D,0.5);
return var_05;
}
//Function Number: 12
func_39C3(param_00,param_01)
{
var_02 = getent("ctf_zone_" + param_01,"targetname");
if(!isdefined(var_02))
{
common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map.");
return;
}
var_03 = [];
var_04 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_02,var_03,(0,0,85));
var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly");
var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d);
var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d);
var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d);
var_04 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d);
var_04 maps\mp\gametypes\_gameobjects::setusetime(0);
var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)]);
var_04.onuse = ::onuse;
var_04.oncantuse = ::oncantuse;
var_05 = var_02.origin + (0,0,32);
var_06 = var_02.origin + (0,0,-32);
var_07 = bullettrace(var_05,var_06,0,undefined);
var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_09 = loadfx(var_08);
var_0A = vectortoangles(var_07["normal"]);
var_0B = anglestoforward(var_0A);
var_0C = anglestoright(var_0A);
thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5);
return var_04;
}
//Function Number: 13
onbeginuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
self.trigger.radius = 1024;
return;
}
self.trigger.radius = self.oldradius;
}
//Function Number: 14
onenduse(param_00,param_01,param_02)
{
self.trigger.radius = self.oldradius;
}
//Function Number: 15
onpickup(param_00)
{
self notify("picked_up");
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return"));
param_00 thread [[ level.onxpevent ]]("return");
thread func_39C4();
param_00 maps\mp\_utility::incplayerstat("flagsreturned",1);
param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin);
maps\mp\_utility::printandsoundoneveryone(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned","");
maps\mp\_utility::leaderdialog("enemy_flag_returned",var_02,"status");
maps\mp\_utility::leaderdialog("flag_returned",var_01,"status");
param_00 maps\mp\_utility::incpersstat("returns",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","returns",param_00.pers["returns"]);
level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME");
level.friendlyflagstatustext[var_01].glowcolor = (1,1,1);
level.friendlyflagstatustext[var_01].glowalpha = 0;
level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_HOME");
level.enemyflagstatustext[var_02].glowcolor = (1,1,1);
level.enemyflagstatustext[var_02].glowalpha = 0;
return;
}
if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01]))
{
param_00 thread func_39DA();
}
else
{
param_00 func_39C5();
}
level.friendlyflagstatustext[var_02] setplayernamestring(param_00);
level.friendlyflagstatustext[var_02].glowcolor = (0.75,0.25,0.25);
level.friendlyflagstatustext[var_02].glowalpha = 1;
level.enemyflagstatustext[var_01] setplayernamestring(param_00);
level.enemyflagstatustext[var_01].glowcolor = (0.25,0.75,0.25);
level.enemyflagstatustext[var_01].glowalpha = 1;
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d);
level.capzones[var_02] maps\mp\gametypes\_gameobjects::allowuse("none");
level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
if(!level.teamflags[var_01] maps\mp\gametypes\_gameobjects::ishome())
{
level.capzones[var_01].trigger maps\mp\_entityheadicons::setheadicon(param_00,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0);
if(isdefined(level.teamflags[var_01].carrier))
{
level.capzones[var_02].trigger maps\mp\_entityheadicons::setheadicon(level.teamflags[var_01].carrier,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0);
}
}
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00);
maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status");
maps\mp\_utility::leaderdialog("flag_taken",var_02,"status");
thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup"));
lib_036E::func_2B7B("pickup",param_00);
param_00 thread [[ level.onxpevent ]]("pickup");
param_00 maps\mp\_utility::incplayerstat("flagscarried",1);
param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin);
}
//Function Number: 16
func_39C4()
{
maps\mp\gametypes\_gameobjects::returnhome();
}
//Function Number: 17
ondrop(param_00)
{
var_01 = maps\mp\gametypes\_gameobjects::getownerteam();
var_02 = level.otherteam[var_01];
maps\mp\gametypes\_gameobjects::allowcarry("any");
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconreturnflag3d);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d);
level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_AWAY");
level.friendlyflagstatustext[var_01].glowcolor = (1,1,1);
level.friendlyflagstatustext[var_01].glowalpha = 0;
level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_AWAY");
level.enemyflagstatustext[var_02].glowcolor = (1,1,1);
level.enemyflagstatustext[var_02].glowalpha = 0;
level.capzones[var_02].trigger maps\mp\_entityheadicons::setheadicon("none","",(0,0,0));
if(isdefined(param_00))
{
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00);
}
else
{
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02);
}
maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status");
maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status");
thread func_39D9();
}
//Function Number: 18
func_39D9()
{
self endon("picked_up");
wait level.flagreturntime;
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
var_01 = level.otherteam[var_00];
maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_00);
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_01);
maps\mp\gametypes\_gameobjects::returnhome();
}
//Function Number: 19
onreset()
{
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
var_01 = level.otherteam[var_00];
maps\mp\gametypes\_gameobjects::allowcarry("enemy");
maps\mp\gametypes\_gameobjects::setvisibleteam("none");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d);
level.friendlyflagstatustext[var_00] settext(&"OBJECTIVES_FLAG_HOME");
level.friendlyflagstatustext[var_00].glowcolor = (1,1,1);
level.friendlyflagstatustext[var_00].glowalpha = 0;
level.enemyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME");
level.enemyflagstatustext[var_01].glowcolor = (1,1,1);
level.enemyflagstatustext[var_01].glowalpha = 0;
level.capzones[var_00] maps\mp\gametypes\_gameobjects::allowuse("friendly");
level.capzones[var_00] maps\mp\gametypes\_gameobjects::setvisibleteam("any");
level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d);
level.capzones[var_00] maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d);
level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d);
level.capzones[var_00] maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d);
level.capzones[var_00].trigger maps\mp\_entityheadicons::setheadicon("none","",(0,0,0));
}
//Function Number: 20
onuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status");
maps\mp\_utility::leaderdialog("flag_captured",var_02,"status");
thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00);
lib_036E::func_2B88(var_01,1);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture"));
lib_036E::func_2B7B("capture",param_00);
param_00 thread [[ level.onxpevent ]]("capture");
param_00 maps\mp\_utility::incplayerstat("flagscaptured",1);
param_00 notify("objective","captured");
param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin);
param_00 maps\mp\_utility::incpersstat("captures",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","captures",param_00.pers["captures"]);
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00);
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01]))
{
param_00 thread func_39DB();
}
level.teamflags[var_02] func_39C4();
level thread func_441A(var_01);
}
//Function Number: 21
func_441A(param_00)
{
if(maps\mp\_utility::inovertime())
{
game["roundsWon"][param_00]++;
level.finalkillcam_winner = param_00;
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]);
return;
}
if(game["switchedsides"])
{
if(game["teamScores"][param_00] == maps\mp\_utility::getwatcheddvar("scorelimit"))
{
game["roundsWon"][param_00]++;
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
if(game["roundsWon"][param_00] > game["roundsWon"][level.otherteam[param_00]])
{
level.finalkillcam_winner = param_00;
thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]);
return;
}
level.finalkillcam_winner = "none";
thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["score_limit_reached"]);
return;
}
return;
}
if(game["teamScores"][param_00] == maps\mp\_utility::getwatcheddvar("scorelimit"))
{
game["roundsWon"][param_00]++;
level.finalkillcam_winner = param_00;
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]);
return;
}
}
//Function Number: 22
ontimelimit()
{
if(maps\mp\_utility::inovertime())
{
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
level.finalkillcam_winner = "none";
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
return;
}
if(game["switchedsides"])
{
if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
game["roundsWon"]["axis"]++;
}
else if(game["teamScores"]["allies"] > game["teamScores"]["axis"])
{
game["roundsWon"]["allies"]++;
}
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
if(game["roundsWon"]["axis"] > game["roundsWon"]["allies"])
{
level.finalkillcam_winner = "axis";
thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]);
return;
}
if(game["roundsWon"]["allies"] > game["roundsWon"]["axis"])
{
level.finalkillcam_winner = "allies";
thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]);
return;
}
level.finalkillcam_winner = "none";
thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]);
return;
}
if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
game["roundsWon"]["axis"]++;
level.finalkillcam_winner = "axis";
}
else if(game["teamScores"]["allies"] > game["teamScores"]["axis"])
{
game["roundsWon"]["allies"]++;
level.finalkillcam_winner = "allies";
}
else
{
level.finalkillcam_winner = "none";
}
game["teamScores"]["axis"] = game["roundsWon"]["axis"];
game["teamScores"]["allies"] = game["roundsWon"]["allies"];
setteamscore("axis",game["teamScores"]["axis"]);
setteamscore("allies",game["teamScores"]["allies"]);
thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]);
}
//Function Number: 23
func_39DA()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = level.ctf_loadouts[self.team];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self.gamemode_chosenclass = self.class;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "gamemode";
self.class = "gamemode";
self.lastclass = "gamemode";
self notify("faux_spawn");
self.gameobject_fauxspawn = 1;
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
thread waitattachflag();
}
//Function Number: 24
waitattachflag()
{
level endon("game_ende");
self endon("disconnect");
self endon("death");
self waittill("spawned_player");
func_39C5();
}
//Function Number: 25
func_39DB()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = undefined;
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 26
oncantuse(param_00)
{
}
//Function Number: 27
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"])
{
if(isdefined(param_01.carryflag))
{
param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1);
}
if(isdefined(self.carryflag))
{
param_01 thread [[ level.onxpevent ]]("kill_carrier");
lib_036E::func_2B7B("kill_carrier",param_01);
param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1);
param_01 maps\mp\_utility::incpersstat("defends",1);
param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]);
thread maps\mp\_matchdata::logkillevent(param_09,"carrying");
func_39C6();
return;
}
return;
}
if(isdefined(self.carryflag))
{
func_39C6();
}
}
//Function Number: 28
func_39C5()
{
var_00 = level.otherteam[self.pers["team"]];
self attach(level.carryflag[var_00],"J_spine4",1);
self.carryflag = level.carryflag[var_00];
}
//Function Number: 29
func_39C6()
{
self detach(self.carryflag,"J_spine4");
self.carryflag = undefined;
}
//Function Number: 30
initgametypeawards()
{
maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins);
}
//Function Number: 31
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.ctf_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse"))
{
level.ctf_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5);
}
}

View File

@ -0,0 +1,715 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\ctfpro.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 26
* Decompile Time: 333 ms
* Timestamp: 10/27/2023 2:13:10 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
maps\mp\_utility::registerscorelimitdvar(level.gametype,1000);
maps\mp\_utility::registertimelimitdvar(level.gametype,6,0,0);
maps\mp\_utility::registerroundlimitdvar(level.gametype,2,0,0);
maps\mp\_utility::setoverridewatchdvar("winlimit",2);
maps\mp\_utility::registerroundswitchdvar(level.gametype,1,0,0);
maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,1,0,0);
level.teambased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.initgametypeawards = ::initgametypeawards;
level.onhalftime = ::ontimelimit;
level.ontimelimit = ::ontimelimit;
level.onspawnplayer = ::onspawnplayer;
level.scorelimitoverride = 1;
level.overtimescorewinoverride = 1;
level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30);
game["dialog"]["gametype"] = "captureflag";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "capture_obj";
game["dialog"]["defense_obj"] = "capture_obj";
}
//Function Number: 2
onprecachegametype()
{
precachestring(&"MP_FLAG_TAKEN_BY");
precachestring(&"MP_ENEMY_FLAG_TAKEN_BY");
precachestring(&"MP_FLAG_CAPTURED_BY");
precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY");
precachestring(&"MP_FLAG_RETURNED");
precachestring(&"MP_ENEMY_FLAG_RETURNED");
precachestring(&"MP_YOUR_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_DROPPED_BY");
precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
precachestring(&"MP_GRABBING_FLAG");
precachestring(&"MP_RETURNING_FLAG");
}
//Function Number: 3
onspawnplayer()
{
if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned))
{
thread func_3979();
}
}
//Function Number: 4
func_3979()
{
self endon("disconnect");
wait 0.25;
self.otspawned = 1;
var_00 = maps\mp\_utility::getobjectivehinttext(self.team);
thread maps\mp\gametypes\_hud_message::hintmessage(var_00);
}
//Function Number: 5
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(!isdefined(game["original_defenders"]))
{
game["original_defenders"] = game["defenders"];
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
if(game["roundsWon"][game["defenders"]] > 0)
{
game["teamScores"][game["defenders"]] = 500;
setteamscore(game["defenders"],500);
}
else
{
game["teamScores"][game["defenders"]] = 0;
setteamscore(game["defenders"],0);
}
}
setclientnamemode("auto_change");
if(level.splitscreen)
{
if(maps\mp\_utility::inovertime())
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GRAB_FLAG");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GRAB_FLAG");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER");
}
}
else if(maps\mp\_utility::inovertime())
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GRAB_FLAG_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GRAB_FLAG_SCORE");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE");
}
if(maps\mp\_utility::inovertime())
{
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_OVERTIME_CTF");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_OVERTIME_CTF");
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GRAB_FLAG_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GRAB_FLAG_HINT");
}
else
{
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF");
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT");
}
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_attackers_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_defenders_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints(game["attackers"],"mp_ctf_pro_spawn_attackers");
maps\mp\gametypes\_spawnlogic::addspawnpoints(game["defenders"],"mp_ctf_pro_spawn_defenders");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assist",20);
maps\mp\gametypes\_rank::registerscoreinfo("pickup",50);
maps\mp\gametypes\_rank::registerscoreinfo("return",50);
maps\mp\gametypes\_rank::registerscoreinfo("capture",250);
maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50);
maps\mp\gametypes\_rank::registerscoreinfo("defend",100);
maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100);
maps\mp\gametypes\_rank::registerscoreinfo("assault",100);
maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",100);
maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1);
var_02[0] = "ctf_pro";
maps\mp\gametypes\_gameobjects::main(var_02);
thread func_39DC();
}
//Function Number: 6
getspawnpoint()
{
if(level.ingraceperiod)
{
if(self.team == game["attackers"])
{
var_00 = "attackers";
}
else
{
var_00 = "defenders";
}
var_01 = getentarray("mp_ctf_pro_spawn_" + var_00 + "_start","classname");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.team);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 7
func_39DC()
{
level.flagmodel[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagmodel(game["defenders"]);
level.icon2d[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagicon(game["defenders"]);
level.carryflag[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagcarrymodel(game["defenders"]);
precachemodel(level.flagmodel[game["defenders"]]);
precachemodel(level.carryflag[game["defenders"]]);
level.iconescort2d["a"] = "waypoint_escort_a";
level.iconescort2d["b"] = "waypoint_escort_b";
level.iconescort3d["a"] = level.iconescort2d["a"];
level.iconescort3d["b"] = level.iconescort2d["b"];
precacheshader(level.iconescort2d["a"]);
precacheshader(level.iconescort2d["b"]);
level.iconkill2d["a"] = "waypoint_kill_a";
level.iconkill2d["b"] = "waypoint_kill_b";
level.iconkill3d["a"] = level.iconkill2d["a"];
level.iconkill3d["b"] = level.iconkill2d["b"];
precacheshader(level.iconkill2d["a"]);
precacheshader(level.iconkill2d["b"]);
level.iconcaptureflag2d["a"] = "waypoint_capture_flag_a";
level.iconcaptureflag2d["b"] = "waypoint_capture_flag_b";
level.iconcaptureflag3d["a"] = level.iconcaptureflag2d["a"];
level.iconcaptureflag3d["b"] = level.iconcaptureflag2d["b"];
precacheshader(level.iconcaptureflag2d["a"]);
precacheshader(level.iconcaptureflag2d["b"]);
level.icondefendflag2d["a"] = "waypoint_defend_flag_a";
level.icondefendflag2d["b"] = "waypoint_defend_flag_b";
level.icondefendflag3d["a"] = level.icondefendflag2d["a"];
level.icondefendflag3d["b"] = level.icondefendflag2d["b"];
precacheshader(level.icondefendflag2d["a"]);
precacheshader(level.icondefendflag2d["b"]);
level.iconreturnflag2d["a"] = "waypoint_return_flag_a";
level.iconreturnflag2d["b"] = "waypoint_return_flag_b";
level.iconreturnflag3d["a"] = level.iconreturnflag2d["a"];
level.iconreturnflag3d["b"] = level.iconreturnflag2d["b"];
precacheshader(level.iconreturnflag2d["a"]);
precacheshader(level.iconreturnflag2d["b"]);
level.iconflagbase2d = "waypoint_flag_base";
level.iconflagbase3d = level.iconflagbase2d;
precacheshader(level.iconflagbase2d);
precacheshader(level.icon2d[game["defenders"]]);
precacheshader("waypoint_flag_friendly");
precacheshader("waypoint_flag_enemy");
precachestring(&"OBJECTIVES_FLAG_HOME");
precachestring(&"OBJECTIVES_FLAG_NAME");
precachestring(&"OBJECTIVES_FLAG_AWAY");
level.teamflags[game["defenders"]] = func_39DF(game["defenders"]);
level.capzones[game["attackers"]] = func_39E1(game["attackers"]);
}
//Function Number: 8
ontimelimit()
{
if(game["switchedsides"] == 1)
{
if(game["roundsWon"][game["defenders"]] > 0)
{
game["teamScores"][game["defenders"]] = 1;
setteamscore(game["defenders"],1);
game["teamScores"][game["attackers"]] = 0;
setteamscore(game["attackers"],0);
maps\mp\_utility::setoverridewatchdvar("winlimit",1);
level.onlyroundoverride = 1;
thread maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]);
return;
}
game["teamScores"][game["defenders"]] = 0;
setteamscore(game["defenders"],0);
game["teamScores"][game["attackers"]] = 0;
setteamscore(game["attackers"],0);
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
return;
}
game["roundsPlayed"]++;
game["teamScores"][game["attackers"]] = 0;
setteamscore(game["attackers"],0);
thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]);
}
//Function Number: 9
spawnfxdelay(param_00,param_01,param_02,param_03,param_04)
{
wait param_04;
var_05 = spawnfx(param_00,param_01,param_02,param_03);
triggerfx(var_05);
}
//Function Number: 10
func_39DF(param_00)
{
var_01 = [];
var_7B[0].points = 200;
var_7B[1].points = 200;
return var_7B;
}
//Function Number: 11
func_39C2(param_00,param_01)
{
var_02 = getent("ctf_pro_trig_" + param_01,"targetname");
if(!isdefined(var_02))
{
common_scripts\utility::error("No ctf_pro_trig_" + param_01 + " trigger found in map.");
return;
}
var_03 = getent("ctf_pro_flag_" + param_01,"targetname");
if(!isdefined(var_03))
{
common_scripts\utility::error("No ctf_pro_flag_" + param_01 + " script_model found in map.");
return;
}
var_04 = getent("ctf_pro_flag_spawn_" + param_01,"targetname");
if(!isdefined(var_04))
{
common_scripts\utility::error("No ctf_pro_flag_spawn_" + param_01 + " script_origin found in map.");
return;
}
var_03 setmodel(level.flagmodel[param_00]);
var_05[0] = var_03;
var_06 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_05,(0,0,85));
var_06 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5);
var_06 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5);
var_06 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG");
var_06 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG");
var_06 maps\mp\gametypes\_gameobjects::allowcarry("enemy");
var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[param_01]);
var_06 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[param_01]);
var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[param_01]);
var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[param_01]);
var_06 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]);
var_06.objidpingfriendly = 1;
var_06.allowweapons = 1;
var_06.onpickup = ::onpickup;
var_06.onpickupfailed = ::onpickup;
var_06.ondrop = ::ondrop;
var_06.onreset = ::onreset;
var_06.oldradius = var_02.radius;
var_06.athome = 1;
var_06.label = param_01;
var_05 = [];
var_07 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_04,var_05,(0,0,85));
var_07 maps\mp\gametypes\_gameobjects::allowuse("none");
var_07 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_07 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d[param_01]);
var_07 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d[param_01]);
var_07 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[param_01]);
var_07 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d[param_01]);
var_06.marker = var_07;
var_08 = var_02.origin + (0,0,32);
var_09 = var_02.origin + (0,0,-32);
var_0A = bullettrace(var_08,var_09,0,undefined);
var_0B = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_0C = loadfx(var_0B);
var_0D = vectortoangles(var_0A["normal"]);
var_0E = anglestoforward(var_0D);
var_0F = anglestoright(var_0D);
thread spawnfxdelay(var_0C,var_0A["position"],var_0E,var_0F,0.5);
return var_06;
}
//Function Number: 12
func_39E1(param_00)
{
var_01 = [];
var_01 = getentarray("ctf_pro_zone","targetname");
if(!isdefined(var_01[0]))
{
common_scripts\utility::error("No ctf_pro_zone triggers found in map.");
return;
}
var_02 = [];
for(var_03 = 0;var_03 < var_01.size;var_03++)
{
if(isdefined(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03]))
{
var_04 = [];
var_02[var_03] = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_01[var_03],var_04,(0,0,0));
var_02[var_03] maps\mp\gametypes\_gameobjects::allowuse("friendly");
var_02[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_02[var_03] maps\mp\gametypes\_gameobjects::setusetime(0);
var_02[var_03] maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03]);
var_02[var_03].onuse = ::onuse;
var_02[var_03].oncantuse = ::oncantuse;
}
}
var_02[0].origin = var_01[0].origin;
var_05 = var_01[0].origin + (0,0,32);
var_06 = var_01[0].origin + (0,0,-32);
var_07 = bullettrace(var_05,var_06,0,undefined);
var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_09 = loadfx(var_08);
var_0A = vectortoangles(var_07["normal"]);
var_0B = anglestoforward(var_0A);
var_0C = anglestoright(var_0A);
thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5);
return var_02;
}
//Function Number: 13
onbeginuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
self.trigger.radius = 1024;
return;
}
self.trigger.radius = self.oldradius;
}
//Function Number: 14
onenduse(param_00,param_01,param_02)
{
self.trigger.radius = self.oldradius;
}
//Function Number: 15
onpickup(param_00)
{
self notify("picked_up");
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
thread maps\mp\_utility::teamplayercardsplash("callout_flagreturn",param_00);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return"));
lib_036E::func_2B7B("return",param_00);
param_00 thread [[ level.onxpevent ]]("return");
thread func_39C4();
param_00 maps\mp\_utility::incplayerstat("flagsreturned",1);
param_00 maps\mp\_utility::incpersstat("returns",1);
param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin);
maps\mp\_utility::printandsoundoneveryone(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned","");
maps\mp\_utility::leaderdialog("enemy_flag_returned",var_02,"status");
maps\mp\_utility::leaderdialog("flag_returned",var_01,"status");
return;
}
param_00 func_39C5(self);
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[self.label]);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[self.label]);
self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("none");
param_00.zoneheadicon = level.capzones[game["attackers"]][0] maps\mp\_entityheadicons::setheadicon(param_00,level.iconflagbase2d,(0,0,0),24,24,undefined,undefined,undefined,undefined,undefined,0);
param_00.zonemapicon = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(param_00.zonemapicon,"invisible",(0,0,0));
objective_position(param_00.zonemapicon,level.capzones[game["attackers"]][0].origin);
objective_state(param_00.zonemapicon,"active");
objective_player(param_00.zonemapicon,param_00 getentitynumber());
objective_icon(param_00.zonemapicon,level.iconflagbase2d);
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00);
maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status");
maps\mp\_utility::leaderdialog("flag_taken",var_02,"status");
thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup"));
lib_036E::func_2B7B("pickup",param_00);
param_00 thread [[ level.onxpevent ]]("pickup");
param_00 maps\mp\_utility::incplayerstat("flagscarried",1);
param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin);
}
//Function Number: 16
func_39C4()
{
maps\mp\gametypes\_gameobjects::returnhome();
}
//Function Number: 17
ondrop(param_00)
{
var_01 = maps\mp\gametypes\_gameobjects::getownerteam();
var_02 = level.otherteam[var_01];
maps\mp\gametypes\_gameobjects::allowcarry("any");
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconreturnflag3d[self.label]);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d[self.label]);
if(isdefined(param_00))
{
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00);
if(isdefined(param_00.zoneheadicon))
{
param_00.zoneheadicon destroy();
}
if(isdefined(param_00.zonemapicon))
{
maps\mp\_utility::_objective_delete(param_00.zonemapicon);
param_00.zonemapicon = undefined;
}
}
else
{
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02);
}
maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status");
maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status");
thread func_39D9();
}
//Function Number: 18
func_39D9()
{
self endon("picked_up");
wait level.flagreturntime;
maps\mp\gametypes\_gameobjects::returnhome();
}
//Function Number: 19
onreset()
{
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
var_01 = level.otherteam[var_00];
maps\mp\gametypes\_gameobjects::allowcarry("enemy");
maps\mp\gametypes\_gameobjects::setvisibleteam("none");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[self.label]);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[self.label]);
self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("any");
}
//Function Number: 20
onuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status");
maps\mp\_utility::leaderdialog("flag_captured",var_02,"status");
thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00);
func_39E5(var_01,param_00.cappedflag.points);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture"));
lib_036E::func_2B7B("capture",param_00);
param_00 thread [[ level.onxpevent ]]("capture");
param_00 maps\mp\_utility::incplayerstat("flagscaptured",1);
param_00 maps\mp\_utility::incpersstat("captures",1);
param_00 notify("objective","captured");
param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin);
if(isdefined(level.adrenalineinfo["capture"]))
{
param_00 maps\mp\killstreaks\_killstreaks::giveadrenaline("capture");
}
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00);
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
if(isdefined(param_00.zoneheadicon))
{
param_00.zoneheadicon destroy();
}
if(isdefined(param_00.zonemapicon))
{
maps\mp\_utility::_objective_delete(param_00.zonemapicon);
param_00.zonemapicon = undefined;
}
param_00.cappedflag func_39C4();
}
//Function Number: 21
func_39E5(param_00,param_01)
{
lib_036E::func_2B88(param_00,param_01);
if(game["state"] != "playing")
{
return;
}
if(game["switchedsides"])
{
if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::getwatcheddvar("scorelimit"))
{
maps\mp\_utility::setoverridewatchdvar("winlimit",1);
level.onlyroundoverride = 1;
if(game["roundsWon"][game["defenders"]] == 0)
{
game["teamScores"][game["attackers"]] = 1;
setteamscore(game["attackers"],1);
game["teamScores"][game["defenders"]] = 0;
setteamscore(game["defenders"],0);
thread maps\mp\gametypes\_gamelogic::endgame(game["attackers"],game["strings"]["score_limit_reached"]);
return;
}
game["teamScores"][game["attackers"]] = 1;
setteamscore(game["attackers"],1);
game["teamScores"][game["defenders"]] = 1;
setteamscore(game["defenders"],1);
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["score_limit_reached"]);
return;
}
return;
}
if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::getwatcheddvar("scorelimit"))
{
game["roundsPlayed"]++;
game["teamScores"][game["attackers"]] = 1;
setteamscore(game["attackers"],1);
game["teamScores"][game["defenders"]] = 0;
setteamscore(game["defenders"],0);
game["roundsWon"][game["attackers"]]++;
lib_036E::func_2B93(game["attackers"]);
thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]);
}
}
//Function Number: 22
oncantuse(param_00)
{
}
//Function Number: 23
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"])
{
if(isdefined(param_01.carryflag))
{
param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1);
}
if(isdefined(self.carryflag))
{
thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01);
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("killflagcarrier",maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier"));
lib_036E::func_2B7B("kill_carrier",param_01);
param_01 thread [[ level.onxpevent ]]("kill_carrier");
param_01 maps\mp\_utility::incpersstat("defends",1);
thread maps\mp\_matchdata::logkillevent(param_09,"carrying");
func_39C6();
}
}
}
//Function Number: 24
func_39C5(param_00)
{
var_01 = level.otherteam[self.pers["team"]];
self attach(level.carryflag[var_01],"J_spine4",1);
self.carryflag = level.carryflag[var_01];
self.cappedflag = param_00;
}
//Function Number: 25
func_39C6()
{
self detach(self.carryflag,"J_spine4");
self.carryflag = undefined;
}
//Function Number: 26
initgametypeawards()
{
maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,141 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\dm.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 5
* Decompile Time: 71 ms
* Timestamp: 10/27/2023 2:13:12 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,1000);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "freeforall";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
return;
}
if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
return;
}
if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
return;
}
if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
return;
}
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata(1);
setdynamicdvar("scr_dm_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("dm",1);
setdynamicdvar("scr_dm_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("dm",1);
setdynamicdvar("scr_dm_halftime",0);
maps\mp\_utility::registerhalftimedvar("dm",0);
}
//Function Number: 3
onstartgametype()
{
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DM");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DM");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_00[0] = "dm";
maps\mp\gametypes\_gameobjects::main(var_00);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assist",10);
maps\mp\gametypes\_rank::registerscoreinfo("suicide",0);
maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0);
level.quickmessagetoall = 1;
}
//Function Number: 4
getspawnpoint()
{
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_dm(var_00);
return var_01;
}
//Function Number: 5
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
var_04 = 0;
foreach(var_06 in level.players)
{
if(isdefined(var_06.score) && var_06.score > var_04)
{
var_04 = var_06.score;
}
}
if(game["state"] == "postgame" && param_01.score >= var_04)
{
param_01.finalkill = 1;
}
}

View File

@ -0,0 +1,953 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\dom.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 31
* Decompile Time: 484 ms
* Timestamp: 10/27/2023 2:13:14 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,30);
maps\mp\_utility::registerscorelimitdvar(level.gametype,300);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.onprecachegametype = ::onprecachegametype;
level.initgametypeawards = ::initgametypeawards;
level.onspawnplayer = ::onspawnplayer;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "domination";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "capture_objs";
game["dialog"]["defense_obj"] = "capture_objs";
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar("scr_dom_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("dom",1);
setdynamicdvar("scr_dom_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("dom",1);
setdynamicdvar("scr_dom_halftime",0);
maps\mp\_utility::registerhalftimedvar("dom",0);
setdynamicdvar("scr_dom_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precacheshader("waypoint_captureneutral");
precacheshader("waypoint_capture");
precacheshader("waypoint_defend");
precacheshader("waypoint_captureneutral_a");
precacheshader("waypoint_capture_a");
precacheshader("waypoint_defend_a");
precacheshader("waypoint_captureneutral_b");
precacheshader("waypoint_capture_b");
precacheshader("waypoint_defend_b");
precacheshader("waypoint_captureneutral_c");
precacheshader("waypoint_capture_c");
precacheshader("waypoint_defend_c");
precacheshader("waypoint_captureneutral");
precacheshader("waypoint_capture");
precacheshader("waypoint_defend");
precacheshader("waypoint_captureneutral_a");
precacheshader("waypoint_capture_a");
precacheshader("waypoint_defend_a");
precacheshader("waypoint_captureneutral_b");
precacheshader("waypoint_capture_b");
precacheshader("waypoint_defend_b");
precacheshader("waypoint_captureneutral_c");
precacheshader("waypoint_capture_c");
precacheshader("waypoint_defend_c");
}
//Function Number: 4
onstartgametype()
{
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DOM");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DOM");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DOM");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DOM");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DOM_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DOM_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DOM_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DOM_HINT");
setclientnamemode("auto_change");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dom_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dom_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
level.spawn_all = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn");
level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_axis_start");
level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_allies_start");
level.startpos["allies"] = level.spawn_allies_start[0].origin;
level.startpos["axis"] = level.spawn_axis_start[0].origin;
level.flagbasefxid["allies"] = loadfx(maps\mp\gametypes\_teams::getteamflagfx("allies"));
level.flagbasefxid["axis"] = loadfx(maps\mp\gametypes\_teams::getteamflagfx("axis"));
var_00[0] = "dom";
maps\mp\gametypes\_gameobjects::main(var_00);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assist",10);
maps\mp\gametypes\_rank::registerscoreinfo("capture",150);
maps\mp\gametypes\_rank::registerscoreinfo("defend",50);
maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",10);
maps\mp\gametypes\_rank::registerscoreinfo("assault",50);
maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",10);
thread domflags();
thread func_3947();
}
//Function Number: 5
getspawnpoint()
{
var_00 = undefined;
if(!level.usestartspawns)
{
var_01 = 0;
var_02 = 0;
var_03 = self.pers["team"];
var_04 = maps\mp\_utility::getotherteam(var_03);
for(var_05 = 0;var_05 < level.flags.size;var_05++)
{
var_06 = level.flags[var_05] func_394A();
if(var_06 == var_03)
{
var_01++;
continue;
}
if(var_06 == var_04)
{
var_02++;
}
}
if(var_01 == level.flags.size)
{
var_07 = level.bestspawnflag[maps\mp\_utility::getotherteam(self.pers["team"])];
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,func_394D(var_07));
}
else if(var_01 > 0)
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,func_394C(var_03));
}
else
{
var_08 = undefined;
if(var_02 > 0 && var_02 < level.flags.size)
{
var_08 = func_393E(var_03);
}
if(!isdefined(var_08))
{
var_08 = level.bestspawnflag[self.pers["team"]];
}
level.bestspawnflag[self.pers["team"]] = var_08;
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,var_08.nearbyspawns);
}
}
if(!isdefined(var_00))
{
if(self.pers["team"] == "axis")
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start);
}
else
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start);
}
}
return var_00;
}
//Function Number: 6
domflags()
{
level.laststatus["allies"] = 0;
level.laststatus["axis"] = 0;
game["flagmodels"] = [];
game["flagmodels"]["neutral"] = "prop_flag_neutral";
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies");
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis");
precachemodel(game["flagmodels"]["neutral"]);
precachemodel(game["flagmodels"]["allies"]);
precachemodel(game["flagmodels"]["axis"]);
precachestring(&"MP_SECURING_POSITION");
var_00 = getentarray("flag_primary","targetname");
var_01 = getentarray("flag_secondary","targetname");
if(var_00.size + var_01.size < 2)
{
maps\mp\gametypes\_callbacksetup::abortlevel();
return;
}
level.flags = [];
for(var_02 = 0;var_02 < var_00.size;var_02++)
{
level.flags[level.flags.size] = var_00[var_02];
}
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
level.flags[level.flags.size] = var_01[var_02];
}
level.domflags = [];
for(var_02 = 0;var_02 < level.flags.size;var_02++)
{
var_03 = level.flags[var_02];
if(isdefined(var_03.target))
{
var_04[0] = getent(var_03.target,"targetname");
}
else
{
var_04[0] = spawn("script_model",var_03.origin);
var_04[0].angles = var_03.angles;
}
var_04[0] setmodel(game["flagmodels"]["neutral"]);
var_05 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_03,var_04,(0,0,100));
var_05 maps\mp\gametypes\_gameobjects::allowuse("enemy");
var_05 maps\mp\gametypes\_gameobjects::setusetime(10);
var_05 maps\mp\gametypes\_gameobjects::setusetext(&"MP_SECURING_POSITION");
var_06 = var_05 maps\mp\gametypes\_gameobjects::getlabel();
var_05.label = var_06;
var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_06);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend" + var_06);
var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_captureneutral" + var_06);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral" + var_06);
var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_05.onuse = ::onuse;
var_05.onbeginuse = ::onbeginuse;
var_05.onuseupdate = ::onuseupdate;
var_05.onenduse = ::onenduse;
var_07 = var_04[0].origin + (0,0,32);
var_08 = var_04[0].origin + (0,0,-32);
var_09 = bullettrace(var_07,var_08,0,undefined);
var_0A = vectortoangles(var_09["normal"]);
var_05.baseeffectforward = anglestoforward(var_0A);
var_05.baseeffectright = anglestoright(var_0A);
var_05.baseeffectpos = var_09["position"];
level.flags[var_02].useobj = var_05;
level.flags[var_02].adjflags = [];
level.flags[var_02].nearbyspawns = [];
var_05.levelflag = level.flags[var_02];
level.domflags[level.domflags.size] = var_05;
}
level.bestspawnflag = [];
level.bestspawnflag["allies"] = func_393E("allies",undefined);
level.bestspawnflag["axis"] = func_393E("axis",level.bestspawnflag["allies"]);
func_3950();
}
//Function Number: 7
func_393E(param_00,param_01)
{
var_02 = undefined;
var_03 = undefined;
for(var_04 = 0;var_04 < level.flags.size;var_04++)
{
var_05 = level.flags[var_04];
if(var_05 func_394A() != "neutral")
{
continue;
}
var_06 = distancesquared(var_05.origin,level.startpos[param_00]);
if((!isdefined(param_01) || var_05 != param_01) && !isdefined(var_02) || var_06 < var_03)
{
var_03 = var_06;
var_02 = var_05;
}
}
return var_02;
}
//Function Number: 8
onbeginuse(param_00)
{
var_01 = maps\mp\gametypes\_gameobjects::getownerteam();
self.didstatusnotify = 0;
if(var_01 == "neutral")
{
func_3940("securing" + self.label,param_00.pers["team"]);
self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing();
return;
}
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing();
self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing();
}
//Function Number: 9
onuseupdate(param_00,param_01,param_02)
{
if(param_01 > 0.05 && param_02 && !self.didstatusnotify)
{
var_03 = maps\mp\gametypes\_gameobjects::getownerteam();
if(var_03 == "neutral")
{
func_3940("securing" + self.label,param_00);
}
else
{
func_3940("losing" + self.label,var_03);
func_3940("securing" + self.label,param_00);
}
self.didstatusnotify = 1;
}
}
//Function Number: 10
func_3940(param_00,param_01,param_02)
{
var_03 = gettime();
if(gettime() < level.laststatus[param_01] + 5000 && !isdefined(param_02) || !param_02)
{
return;
}
thread func_3945(param_00,param_01);
level.laststatus[param_01] = gettime();
}
//Function Number: 11
onenduse(param_00,param_01,param_02)
{
self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing();
self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing();
}
//Function Number: 12
func_3941()
{
if(isdefined(self.baseeffect))
{
self.baseeffect delete();
}
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
if(var_00 != "axis" && var_00 != "allies")
{
return;
}
var_01 = level.flagbasefxid[var_00];
self.baseeffect = spawnfx(var_01,self.baseeffectpos,self.baseeffectforward,self.baseeffectright);
triggerfx(self.baseeffect);
}
//Function Number: 13
onuse(param_00)
{
var_01 = param_00.pers["team"];
var_02 = maps\mp\gametypes\_gameobjects::getownerteam();
var_03 = maps\mp\gametypes\_gameobjects::getlabel();
self.capturetime = gettime();
maps\mp\gametypes\_gameobjects::setownerteam(var_01);
maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_capture" + var_03);
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture" + var_03);
self.visuals[0] setmodel(game["flagmodels"][var_01]);
func_3941();
level.usestartspawns = 0;
if(var_02 == "neutral")
{
var_04 = maps\mp\_utility::getotherteam(var_01);
thread maps\mp\_utility::printandsoundoneveryone(var_01,var_04,undefined,undefined,"mp_war_objective_taken",undefined,param_00);
func_3940("secured" + self.label,var_01,1);
func_3940("enemy_has" + self.label,var_04,1);
}
else
{
thread maps\mp\_utility::printandsoundoneveryone(var_01,var_02,undefined,undefined,"mp_war_objective_taken","mp_war_objective_lost",param_00);
if(func_3949(var_01) == level.flags.size)
{
func_3940("secure_all",var_01);
func_3940("lost_all",var_02);
}
else
{
func_3940("secured" + self.label,var_01,1);
func_3940("lost" + self.label,var_02,1);
}
level.bestspawnflag[var_02] = self.levelflag;
}
param_00 notify("objective","captured");
thread func_3944(self.touchlist[var_01]);
}
//Function Number: 14
func_3944(param_00)
{
level endon("game_ended");
var_01 = getarraykeys(param_00);
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = param_00[var_01[var_02]].player;
var_03 thread maps\mp\gametypes\_hud_message::splashnotify("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture"));
var_03 thread func_3952();
var_03 thread maps\mp\gametypes\_rank::giverankxp("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture") * var_03 func_3955());
lib_036E::func_2B7B("capture",var_03);
var_03 maps\mp\_utility::incplayerstat("pointscaptured",1);
var_03 maps\mp\_utility::incpersstat("captures",1);
var_03 maps\mp\gametypes\_persistance::statsetchild("round","captures",var_03.pers["captures"]);
if(var_03 != self)
{
var_03 notify("objective","assistedCapture");
}
}
var_03 = maps\mp\gametypes\_gameobjects::getearliestclaimplayer();
level thread maps\mp\_utility::teamplayercardsplash("callout_securedposition" + self.label,var_03);
var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin);
}
//Function Number: 15
func_3945(param_00,param_01)
{
level endon("game_ended");
wait 0.1;
maps\mp\_utility::waittillslowprocessallowed();
maps\mp\_utility::leaderdialog(param_00,param_01);
}
//Function Number: 16
func_3946(param_00,param_01,param_02,param_03)
{
level endon("game_ended");
wait 0.1;
maps\mp\_utility::waittillslowprocessallowed();
maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03);
}
//Function Number: 17
func_3947()
{
level endon("game_ended");
while(!level.gameended)
{
var_00 = func_3948();
if(var_00.size)
{
for(var_01 = 1;var_01 < var_00.size;var_01++)
{
var_02 = var_00[var_01];
var_03 = gettime() - var_02.capturetime;
for(var_04 = var_01 - 1;var_04 >= 0 && var_03 > gettime() - var_00[var_04].capturetime;var_04--)
{
var_00[var_04 + 1] = var_00[var_04];
}
var_00[var_04 + 1] = var_02;
}
foreach(var_02 in var_00)
{
var_06 = var_02 maps\mp\gametypes\_gameobjects::getownerteam();
lib_036E::func_2B88(var_06,1);
}
}
if(((maps\mp\_utility::gettimepassed() / 1000 > 120 && var_00.size < 2) || maps\mp\_utility::gettimepassed() / 1000 > 300 && var_00.size < 3) && maps\mp\_utility::matchmakinggame())
{
level.finalkillcam_winner = "none";
thread maps\mp\gametypes\_gamelogic::endgame("none",game["strings"]["time_limit_reached"]);
return;
}
wait 5;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
}
}
//Function Number: 18
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(!isplayer(param_01) || param_01.pers["team"] == self.pers["team"])
{
return;
}
var_0A = 0;
var_0B = 0;
var_0C = self;
foreach(var_0E in var_0C.touchtriggers)
{
if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2])
{
continue;
}
var_0F = var_0E.useobj.ownerteam;
var_10 = var_0C.pers["team"];
if(var_0F == "neutral")
{
continue;
}
if(var_10 == var_0F)
{
var_0A = 1;
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault"));
param_01 thread maps\mp\gametypes\_rank::giverankxp("assault");
lib_036E::func_2B7B("assault",param_01);
thread maps\mp\_matchdata::logkillevent(param_09,"defending");
continue;
}
var_0B = 1;
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend"));
param_01 thread maps\mp\gametypes\_rank::giverankxp("defend");
lib_036E::func_2B7B("defend",param_01);
param_01 maps\mp\_utility::incpersstat("defends",1);
param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]);
thread maps\mp\_matchdata::logkillevent(param_09,"assaulting");
}
foreach(var_0E in param_01.touchtriggers)
{
if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2])
{
continue;
}
var_0F = var_0E.useobj.ownerteam;
var_13 = param_01.pers["team"];
if(var_0F == "neutral")
{
continue;
}
if(var_13 != var_0F)
{
if(!var_0A)
{
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault"));
}
param_01 thread maps\mp\gametypes\_rank::giverankxp("assault");
lib_036E::func_2B7B("assault",param_01);
thread maps\mp\_matchdata::logkillevent(param_09,"defending");
}
}
foreach(var_0E in level.flags)
{
var_0F = var_0E.useobj.ownerteam;
var_13 = param_01.pers["team"];
var_16 = distancesquared(var_0E.origin,var_0C.origin);
var_17 = 90000;
if(var_13 == var_0F && var_16 < var_17)
{
if(!var_0B)
{
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend"));
}
param_01 thread maps\mp\gametypes\_rank::giverankxp("defend");
lib_036E::func_2B7B("defend",param_01);
thread maps\mp\_matchdata::logkillevent(param_09,"assaulting");
}
}
}
//Function Number: 19
func_3948()
{
var_00 = [];
foreach(var_02 in level.domflags)
{
if(var_02 maps\mp\gametypes\_gameobjects::getownerteam() != "neutral" && isdefined(var_02.capturetime))
{
var_00[var_00.size] = var_02;
}
}
return var_00;
}
//Function Number: 20
func_3949(param_00)
{
var_01 = 0;
for(var_02 = 0;var_02 < level.flags.size;var_02++)
{
if(level.domflags[var_02] maps\mp\gametypes\_gameobjects::getownerteam() == param_00)
{
var_01++;
}
}
return var_01;
}
//Function Number: 21
func_394A()
{
return self.useobj maps\mp\gametypes\_gameobjects::getownerteam();
}
//Function Number: 22
func_394B()
{
var_00 = [];
for(var_01 = 0;var_01 < level.flags.size;var_01++)
{
for(var_02 = 0;var_02 < level.flags[var_01].adjflags.size;var_02++)
{
if(level.flags[var_01].useobj maps\mp\gametypes\_gameobjects::getownerteam() != level.flags[var_01].adjflags[var_02].useobj maps\mp\gametypes\_gameobjects::getownerteam())
{
var_00[var_00.size] = level.flags[var_01];
break;
}
}
}
return var_00;
}
//Function Number: 23
func_394C(param_00)
{
var_01 = [];
var_02 = func_394B();
for(var_03 = 0;var_03 < var_02.size;var_03++)
{
if(isdefined(param_00) && var_02[var_03] func_394A() != param_00)
{
continue;
}
for(var_04 = 0;var_04 < var_02[var_03].nearbyspawns.size;var_04++)
{
var_01[var_01.size] = var_02[var_03].nearbyspawns[var_04];
}
}
return var_01;
}
//Function Number: 24
func_394D(param_00)
{
var_01 = [];
for(var_02 = 0;var_02 < level.flags.size;var_02++)
{
var_03 = level.flags[var_02];
if(var_03 == param_00)
{
continue;
}
var_04 = 0;
for(var_05 = 0;var_05 < var_03.adjflags.size;var_05++)
{
if(var_03.adjflags[var_05] == param_00)
{
var_04 = 1;
break;
}
}
if(!var_04)
{
continue;
}
for(var_05 = 0;var_05 < var_03.nearbyspawns.size;var_05++)
{
var_01[var_01.size] = var_03.nearbyspawns[var_05];
}
}
return var_01;
}
//Function Number: 25
func_394E(param_00)
{
var_01 = [];
for(var_02 = 0;var_02 < level.flags.size;var_02++)
{
if(level.flags[var_02] func_394A() == param_00)
{
for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++)
{
var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03];
}
continue;
}
for(var_04 = 0;var_04 < level.flags[var_02].adjflags.size;var_04++)
{
if(level.flags[var_02].adjflags[var_04] func_394A() == param_00)
{
for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++)
{
var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03];
}
break;
}
}
}
return var_01;
}
//Function Number: 26
func_394F(param_00)
{
var_01 = [];
for(var_02 = 0;var_02 < level.flags.size;var_02++)
{
if(level.flags[var_02] func_394A() == param_00)
{
for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++)
{
var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03];
}
}
}
return var_01;
}
//Function Number: 27
func_3950()
{
var_00 = [];
var_01 = [];
var_02 = getentarray("flag_descriptor","targetname");
var_03 = level.flags;
for(var_04 = 0;var_04 < level.domflags.size;var_04++)
{
var_05 = undefined;
var_06 = undefined;
for(var_07 = 0;var_07 < var_02.size;var_07++)
{
var_08 = distance(var_03[var_04].origin,var_02[var_07].origin);
if(!isdefined(var_05) || var_08 < var_05)
{
var_05 = var_08;
var_06 = var_02[var_07];
}
}
if(!isdefined(var_06))
{
var_00[var_00.size] = "there is no flag_descriptor in the map! see explanation in dom.gsc";
break;
}
if(isdefined(var_06.flag))
{
var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_06.script_linkname + "\" is nearby more than one flag; is there a unique descriptor near each flag?";
continue;
}
var_03[var_04].descriptor = var_06;
var_06.flag = var_03[var_04];
var_01[var_06.script_linkname] = var_06;
}
if(var_00.size == 0)
{
for(var_04 = 0;var_04 < var_03.size;var_04++)
{
if(isdefined(var_03[var_04].descriptor.script_linkto))
{
var_09 = strtok(var_03[var_04].descriptor.script_linkto," ");
}
else
{
var_09 = [];
}
for(var_07 = 0;var_07 < var_09.size;var_07++)
{
var_0A = var_01[var_09[var_07]];
if(!isdefined(var_0A) || var_0A.targetname != "flag_descriptor")
{
var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to \" + var_09[var_07] + "\" which does not exist as a script_linkname of any other entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)";
continue;
}
var_0B = var_0A.flag;
if(var_0B == var_03[var_04])
{
var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to itself";
continue;
}
var_03[var_04].adjflags[var_03[var_04].adjflags.size] = var_0B;
}
}
}
var_0C = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn");
for(var_04 = 0;var_04 < var_0C.size;var_04++)
{
if(isdefined(var_0C[var_04].script_linkto))
{
var_0D = var_01[var_0C[var_04].script_linkto];
if(!isdefined(var_0D) || var_0D.targetname != "flag_descriptor")
{
var_00[var_00.size] = "Spawnpoint at " + var_0C[var_04].origin + "\" linked to \" + var_0C[var_04].script_linkto + "\" which does not exist as a script_linkname of any entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)";
continue;
}
var_0E = var_0D.flag;
}
else
{
var_0E = undefined;
var_0F = undefined;
for(var_07 = 0;var_07 < var_03.size;var_07++)
{
var_08 = distancesquared(var_03[var_07].origin,var_0C[var_04].origin);
if(!isdefined(var_0E) || var_08 < var_0F)
{
var_0E = var_03[var_07];
var_0F = var_08;
}
}
}
var_0E.nearbyspawns[var_0E.nearbyspawns.size] = var_0C[var_04];
}
if(var_00.size > 0)
{
for(var_04 = 0;var_04 < var_00.size;var_04++)
{
}
common_scripts\utility::error("Map errors. See above");
maps\mp\gametypes\_callbacksetup::abortlevel();
}
}
//Function Number: 28
initgametypeawards()
{
maps\mp\_awards::initstataward("pointscaptured",0,::maps\mp\_awards::highestwins);
}
//Function Number: 29
onspawnplayer()
{
}
//Function Number: 30
func_3952()
{
if(!isdefined(self.cpm))
{
self.numcaps = 0;
self.cpm = 0;
}
self.numcaps++;
if(maps\mp\_utility::getminutespassed() < 1)
{
return;
}
self.cpm = self.numcaps / maps\mp\_utility::getminutespassed();
}
//Function Number: 31
func_3955()
{
if(self.cpm < 4)
{
return 1;
}
return 0.25;
}

View File

@ -0,0 +1,921 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\grnd.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 18
* Decompile Time: 289 ms
* Timestamp: 10/27/2023 2:13:15 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,20000);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_droptime = 30;
level.matchrules_zoneswitchtime = 120;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
level.grnd_fx["smoke"] = loadfx("smoke/airdrop_flare_mp_effect_now");
level.grnd_fx["flare"] = loadfx("smoke/signal_smoke_airdrop");
func_3A0C();
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_droptime = getmatchrulesdata("grndData","dropTime");
level.matchrules_zoneswitchtime = 60 * getmatchrulesdata("grndData","zoneSwitchTime");
setdynamicdvar("scr_grnd_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("grnd",0,0,9);
setdynamicdvar("scr_grnd_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("grnd",1);
setdynamicdvar("scr_grnd_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("grnd",1);
setdynamicdvar("scr_grnd_halftime",0);
maps\mp\_utility::registerhalftimedvar("grnd",0);
setdynamicdvar("scr_grnd_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precacheshader("waypoint_captureneutral");
precacheshader("waypoint_capture");
precacheshader("waypoint_defend");
precachemodel("prop_flag_neutral");
precachestring(&"OBJECTIVES_GRND");
precachestring(&"OBJECTIVES_GRND_SCORE");
precachestring(&"OBJECTIVES_GRND_HINT");
precachestring(&"OBJECTIVES_GRND_CONFIRM");
precachestring(&"MP_CALLING_AIRDROP");
precachestring(&"MP_NEXT_DROP_ZONE_IN");
precachemodel("weapon_us_smoke_grenade_burnt2");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_GRND");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_GRND");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_GRND");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_GRND");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_GRND_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_GRND_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_GRND_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_GRND_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_00 = getent("sab_bomb","targetname");
level.grnd_centerloc = var_00.origin;
maps\mp\gametypes\_rank::registerscoreinfo("zone_kill",100);
maps\mp\gametypes\_rank::registerscoreinfo("zone_tick",20);
var_01[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main(var_7B);
level.grnd_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4);
if(level.splitscreen)
{
level.grnd_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",80,0);
}
else
{
level.grnd_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5);
}
level.grnd_timerdisplay.label = &"MP_NEXT_DROP_ZONE_IN";
level.grnd_timerdisplay.alpha = 0;
level.grnd_timerdisplay.archived = 0;
level.grnd_timerdisplay.hidewheninmenu = 1;
thread func_3A0B(level.grnd_timerdisplay);
func_39F6();
}
//Function Number: 5
func_39F6()
{
level.zonescycling = 0;
level.var_14 = 0;
var_00 = 999999;
var_01 = 0;
for(var_02 = 0;var_02 < level.grnd_dropzones[level.script].size;var_02++)
{
var_03 = level.grnd_dropzones[level.script][var_02];
var_04 = distance2d(level.grnd_centerloc,var_03);
if(var_04 < var_00)
{
var_00 = var_04;
var_01 = var_02;
}
}
level.grnd_initialindex = var_01;
var_05 = level.grnd_dropzones[level.script][var_01];
level.grnd_zone = spawn("script_model",var_05);
level.grnd_zone.origin = var_05;
level.grnd_zone.angles = (90,0,0);
level.grnd_zone setmodel("weapon_us_smoke_grenade_burnt2");
level.favorclosespawnent = level.grnd_zone;
level.favorclosespawnscalar = 5;
level thread func_39FB();
}
//Function Number: 6
func_39FB()
{
level.grnd_zones = [];
for(var_00 = 0;var_00 < level.grnd_dropzones[level.script].size;var_00++)
{
var_01 = level.grnd_dropzones[level.script][var_00];
level.grnd_zones[var_00] = spawn("script_origin",var_01);
level.grnd_zones[var_00].origin = var_01;
wait 0.05;
}
level.grnd_zones[level.grnd_initialindex] delete();
level.grnd_zones[level.grnd_initialindex] = undefined;
level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones);
}
//Function Number: 7
getspawnpoint()
{
if(level.ingraceperiod)
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_" + self.pers["team"] + "_start");
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00);
}
else
{
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01);
}
return var_01;
}
//Function Number: 8
onspawnplayer()
{
if(!isdefined(self.ingrindzone))
{
level thread func_39FE(self);
if(!level.zonescycling)
{
level.zonescycling = 1;
level thread func_3A05();
level thread func_3A07();
}
}
level notify("spawned_player");
}
//Function Number: 9
func_39FE(param_00)
{
level endon("game_ended");
maps\mp\_utility::gameflagwait("prematch_done");
param_00.ingrindzonepoints = 0;
param_00.grndhudtext = param_00 maps\mp\gametypes\_hud_util::createfontstring("small",1.6);
if(level.splitscreen)
{
param_00.grndhudtext maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,18);
}
else
{
param_00.grndhudtext maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,22);
}
param_00.grndhudtext.alpha = 1;
param_00.grndhudtext.archived = 0;
param_00.grndhudtext.hidewheninmenu = 1;
level thread func_3A0B(param_00.grndhudtext);
param_00.grndheadicon = level.grnd_zone maps\mp\_entityheadicons::setheadicon(param_00,"waypoint_captureneutral",(0,0,0),14,14,undefined,undefined,undefined,undefined,undefined,0);
param_00.grndobjid = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(param_00.grndobjid,"invisible",(0,0,0));
objective_player(param_00.grndobjid,param_00 getentitynumber());
objective_onentity(param_00.grndobjid,level.grnd_zone);
objective_icon(param_00.grndobjid,"waypoint_captureneutral");
objective_state(param_00.grndobjid,"active");
if(distance2d(level.grnd_zone.origin,param_00.origin) < 300)
{
param_00.ingrindzone = 1;
param_00.grndhudtext settext(&"OBJECTIVES_GRND_CONFIRM");
param_00.grndhudtext.color = (0.6,1,0.6);
param_00.grndheadicon.alpha = 0;
}
else
{
param_00.ingrindzone = 0;
param_00.grndhudtext settext(&"OBJECTIVES_GRND_HINT");
param_00.grndhudtext.color = (1,0.6,0.6);
param_00.grndheadicon.alpha = 0.85;
}
param_00.grnd_wasspectator = 0;
if(param_00.team == "spectator")
{
param_00.ingrindzone = 0;
param_00.ingrindzonepoints = 0;
param_00.grndheadicon.alpha = 0;
param_00.grndhudtext.alpha = 0;
param_00.grnd_wasspectator = 1;
}
param_00 thread func_3A06();
}
//Function Number: 10
func_3A03()
{
var_00 = undefined;
var_01 = undefined;
if(level.grnd_zones.size > 2)
{
var_02 = 999999;
var_03 = 0;
for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++)
{
level.grnd_zones[var_04].index = var_04;
level.grnd_zones[var_04].disttozone = distance(level.grnd_zones[var_04].origin,level.grnd_zone.origin);
if(level.grnd_zones[var_04].disttozone > var_03)
{
var_03 = level.grnd_zones[var_04].disttozone;
continue;
}
if(level.grnd_zones[var_04].disttozone < var_02)
{
var_02 = level.grnd_zones[var_04].disttozone;
}
}
var_05 = [];
var_06 = [];
var_07 = int(var_02 + var_03 / 2);
for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++)
{
if(level.grnd_zones[var_04].disttozone >= var_07)
{
var_05[var_05.size] = level.grnd_zones[var_04];
continue;
}
var_06[var_06.size] = level.grnd_zones[var_04];
}
var_08 = undefined;
if(var_05.size > 1)
{
var_08 = var_05[randomintrange(0,var_05.size)];
}
else if(var_05.size)
{
var_08 = var_05[0];
}
else
{
var_08 = var_06[randomintrange(0,var_06.size)];
}
var_01 = var_08.index;
}
else if(level.grnd_zones.size == 2)
{
var_09 = distance(level.grnd_zones[0].origin,level.grnd_zone.origin);
var_0A = distance(level.grnd_zones[1].origin,level.grnd_zone.origin);
if(var_09 > var_0A)
{
var_01 = 0;
}
else
{
var_01 = 1;
}
}
else if(level.grnd_zones.size == 1)
{
var_01 = 0;
}
if(isdefined(var_01))
{
var_00 = level.grnd_zones[var_01].origin;
level.grnd_zones[var_01] delete();
level.grnd_zones[var_01] = undefined;
level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones);
}
else
{
var_00 = level.grnd_dropzones[level.script][level.grnd_initialindex];
level thread func_39FB();
}
return var_00;
}
//Function Number: 11
func_3A05()
{
level endon("game_ended");
maps\mp\_utility::gameflagwait("prematch_done");
for(;;)
{
var_00["axis"] = game["teamScores"]["axis"];
var_00["allies"] = game["teamScores"]["allies"];
var_01 = undefined;
if(!level.var_14)
{
level.var_14 = 1;
var_01 = level.grnd_zone.origin;
}
else
{
var_01 = func_3A03();
stopfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx");
wait 0.05;
}
var_02 = var_01 + (0,0,30);
var_03 = var_01 + (0,0,-1000);
var_04 = bullettrace(var_02,var_03,0,undefined);
level.grnd_zone.origin = var_04["position"] + (0,0,1);
wait 0.05;
playfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx");
if(level.matchrules_droptime)
{
level thread func_3A08();
}
level.grnd_timerdisplay.label = &"MP_NEXT_DROP_ZONE_IN";
level.grnd_timerdisplay settimer(level.matchrules_zoneswitchtime);
level.grnd_timerdisplay.alpha = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.matchrules_zoneswitchtime);
level.grnd_timerdisplay.alpha = 0;
if(game["teamScores"]["axis"] - var_00["axis"] > game["teamScores"]["allies"] - var_00["allies"])
{
maps\mp\_utility::playsoundonplayers("mp_obj_captured","axis");
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","allies");
continue;
}
if(game["teamScores"]["allies"] - var_00["allies"] > game["teamScores"]["axis"] - var_00["axis"])
{
maps\mp\_utility::playsoundonplayers("mp_obj_captured","allies");
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","axis");
}
}
}
//Function Number: 12
func_3A06()
{
self endon("disconnect");
level endon("game_ended");
for(;;)
{
if(!self.grnd_wasspectator && self.team == "spectator")
{
self.ingrindzone = 0;
self.ingrindzonepoints = 0;
self.grndheadicon.alpha = 0;
self.grndhudtext.alpha = 0;
self.grnd_wasspectator = 1;
}
else if(self.team != "spectator")
{
if((self.grnd_wasspectator || !self.ingrindzone) && distance2d(level.grnd_zone.origin,self.origin) < 300)
{
self.ingrindzone = 1;
self.ingrindzonepoints = 0;
self.grndhudtext settext(&"OBJECTIVES_GRND_CONFIRM");
self.grndhudtext.color = (0.6,1,0.6);
self.grndhudtext.alpha = 1;
self.grndheadicon.alpha = 0;
}
else if((self.grnd_wasspectator || self.ingrindzone) && distance2d(level.grnd_zone.origin,self.origin) >= 300)
{
self.ingrindzone = 0;
self.ingrindzonepoints = 0;
self.grndhudtext settext(&"OBJECTIVES_GRND_HINT");
self.grndhudtext.color = (1,0.6,0.6);
self.grndhudtext.alpha = 1;
self.grndheadicon.alpha = 0.85;
}
self.grnd_wasspectator = 0;
}
wait 0.05;
}
}
//Function Number: 13
func_3A07()
{
level endon("game_ended");
maps\mp\_utility::gameflagwait("prematch_done");
var_00 = maps\mp\gametypes\_rank::getscoreinfovalue("zone_tick");
for(;;)
{
var_01["axis"] = 0;
var_01["allies"] = 0;
foreach(var_03 in level.players)
{
if(isdefined(var_03.ingrindzone) && maps\mp\_utility::isreallyalive(var_03) && distance2d(level.grnd_zone.origin,var_03.origin) < 300)
{
var_01[var_03.pers["team"]]++;
var_03.ingrindzonepoints = var_03.ingrindzonepoints + var_00;
}
}
if(var_01["axis"])
{
lib_036E::func_2B88("axis",var_00 * var_01["axis"]);
}
if(var_01["allies"])
{
lib_036E::func_2B88("allies",var_00 * var_01["allies"]);
}
if(var_01["axis"] == var_01["allies"])
{
foreach(var_03 in level.players)
{
if(isdefined(var_03.ingrindzone))
{
var_03.grndheadicon setshader("waypoint_captureneutral",14,14);
var_03.grndheadicon setwaypoint(0,0,0,0);
objective_icon(var_03.grndobjid,"waypoint_captureneutral");
}
}
}
else
{
foreach(var_03 in level.players)
{
if(isdefined(var_03.ingrindzone))
{
if(var_01[var_03.pers["team"]] > var_01[level.otherteam[var_03.pers["team"]]])
{
var_03.grndheadicon setshader("waypoint_defend",14,14);
var_03.grndheadicon setwaypoint(0,0,0,0);
objective_icon(var_03.grndobjid,"waypoint_defend");
continue;
}
var_03.grndheadicon setshader("waypoint_capture",14,14);
var_03.grndheadicon setwaypoint(0,0,0,0);
objective_icon(var_03.grndobjid,"waypoint_capture");
}
}
}
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(1);
}
}
//Function Number: 14
func_3A08()
{
level endon("game_ended");
level notify("reset_grnd_drops");
level endon("reset_grnd_drops");
level.grnd_previouscratetypes = [];
for(;;)
{
var_00 = func_3A09();
var_01 = 1;
if(isdefined(var_00) && maps\mp\_utility::currentactivevehiclecount() < maps\mp\_utility::maxvehiclesallowed() && level.fauxvehiclecount + var_01 < maps\mp\_utility::maxvehiclesallowed() && level.numdropcrates < 8)
{
var_00 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_EARNED_CAREPACKAGE");
thread maps\mp\_utility::teamplayercardsplash("callout_earned_carepackage",var_00);
var_00 thread maps\mp\_utility::leaderdialog(level.otherteam[var_00.team] + "_enemy_airdrop_assault_inbound",level.otherteam[var_00.team]);
var_00 thread maps\mp\_utility::leaderdialog(var_00.team + "_friendly_airdrop_assault_inbound",var_00.team);
maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_00.team);
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",level.otherteam[var_00.team]);
var_02 = level.grnd_zone.origin + (randomintrange(-72,72),randomintrange(-72,72),0);
var_03 = func_3A0A();
if(issubstr(tolower(var_03),"juggernaut"))
{
level thread maps\mp\killstreaks\_airdrop::doc130flyby(var_00,var_02,randomfloat(360),var_03);
}
else if(var_03 == "mega")
{
level thread maps\mp\killstreaks\_airdrop::domegac130flyby(var_00,var_02,randomfloat(360),"airdrop_grnd",-360);
}
else
{
level thread maps\mp\killstreaks\_airdrop::doflyby(var_00,var_02,randomfloat(360),"airdrop_grnd",0,var_03);
}
var_04 = level.matchrules_droptime;
}
else
{
var_04 = 0.5;
}
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_04);
}
}
//Function Number: 15
func_3A09()
{
var_00 = undefined;
var_01 = 0;
foreach(var_03 in level.players)
{
if(maps\mp\_utility::isreallyalive(var_03))
{
if(distance2d(level.grnd_zone.origin,var_03.origin) < 300 && var_03.ingrindzonepoints > var_01)
{
var_00 = var_03;
var_01 = var_03.ingrindzonepoints;
}
}
}
return var_00;
}
//Function Number: 16
func_3A0A()
{
var_00 = undefined;
if(!isdefined(level.grnd_previouscratetypes["mega"]) && level.numdropcrates == 0 && randomintrange(0,100) < 5)
{
var_00 = "mega";
}
else
{
if(level.grnd_previouscratetypes.size)
{
for(var_01 = 200;var_01;var_01--)
{
var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd");
if(isdefined(level.grnd_previouscratetypes[var_00]))
{
var_00 = undefined;
continue;
}
break;
}
}
if(!isdefined(var_00))
{
var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd");
}
}
level.grnd_previouscratetypes[var_00] = 1;
if(level.grnd_previouscratetypes.size == 15)
{
level.grnd_previouscratetypes = [];
}
return var_00;
}
//Function Number: 17
func_3A0B(param_00)
{
level waittill("game_ended");
if(isdefined(param_00))
{
param_00.alpha = 0;
}
}
//Function Number: 18
func_3A0C()
{
level.grnd_dropzones = [];
var_00 = getentarray("grnd_dropZone","targetname");
if(isdefined(var_00) && var_00.size)
{
var_01 = 0;
foreach(var_03 in var_00)
{
level.grnd_dropzones[level.script][var_01] = var_03.origin;
var_01++;
}
return;
}
level.grnd_dropzones["mp_seatown"][0] = (-1226,-1399,204);
level.grnd_dropzones["mp_seatown"][1] = (1048,886,228);
level.grnd_dropzones["mp_seatown"][2] = (-2086,1263,260);
level.grnd_dropzones["mp_seatown"][3] = (-2297,-855,210);
level.grnd_dropzones["mp_seatown"][4] = (-2261,-334,248);
level.grnd_dropzones["mp_seatown"][5] = (-2048,512,248);
level.grnd_dropzones["mp_seatown"][6] = (-1439,1065,72);
level.grnd_dropzones["mp_seatown"][7] = (-410,982,127);
level.grnd_dropzones["mp_seatown"][8] = (-666,-217,226);
level.grnd_dropzones["mp_seatown"][9] = (-523,-875,280);
level.grnd_dropzones["mp_seatown"][10] = (-345,-1449,254);
level.grnd_dropzones["mp_seatown"][11] = (1167,-533,294);
level.grnd_dropzones["mp_seatown"][12] = (367,991,179);
level.grnd_dropzones["mp_seatown"][13] = (1106,219,292);
level.grnd_dropzones["mp_dome"][0] = (97,898,-240);
level.grnd_dropzones["mp_dome"][1] = (-226,1464,-231);
level.grnd_dropzones["mp_dome"][2] = (-603,194,-358);
level.grnd_dropzones["mp_dome"][3] = (814,-406,-335);
level.grnd_dropzones["mp_dome"][4] = (5,1975,-231);
level.grnd_dropzones["mp_dome"][5] = (-673,1100,-284);
level.grnd_dropzones["mp_dome"][6] = (669,1028,-255);
level.grnd_dropzones["mp_dome"][7] = (1231,807,-267);
level.grnd_dropzones["mp_dome"][8] = (709,210,-342);
level.grnd_dropzones["mp_dome"][9] = (1223,10,-336);
level.grnd_dropzones["mp_dome"][10] = (-222,418,-333);
level.grnd_dropzones["mp_dome"][11] = (501,-183,-330);
level.grnd_dropzones["mp_plaza2"][0] = (221,440,754);
level.grnd_dropzones["mp_plaza2"][1] = (155,1763,668);
level.grnd_dropzones["mp_plaza2"][2] = (-430,1871,691);
level.grnd_dropzones["mp_plaza2"][3] = (-1190,1759,668);
level.grnd_dropzones["mp_plaza2"][4] = (-1273,1279,829);
level.grnd_dropzones["mp_plaza2"][5] = (-593,1274,676);
level.grnd_dropzones["mp_plaza2"][6] = (-251,1006,722);
level.grnd_dropzones["mp_plaza2"][7] = (80,1343,676);
level.grnd_dropzones["mp_plaza2"][8] = (397,-99,708);
level.grnd_dropzones["mp_plaza2"][9] = (-1109,92,741);
level.grnd_dropzones["mp_plaza2"][10] = (-280,-195,700);
level.grnd_dropzones["mp_plaza2"][11] = (28,-1600,668);
level.grnd_dropzones["mp_plaza2"][12] = (764,-1752,669);
level.grnd_dropzones["mp_mogadishu"][0] = (1448,1945,39);
level.grnd_dropzones["mp_mogadishu"][1] = (1499,-1193,15);
level.grnd_dropzones["mp_mogadishu"][2] = (791,-880,16);
level.grnd_dropzones["mp_mogadishu"][3] = (38,-1007,16);
level.grnd_dropzones["mp_mogadishu"][4] = (-691,-260,22);
level.grnd_dropzones["mp_mogadishu"][5] = (2,52,2);
level.grnd_dropzones["mp_mogadishu"][6] = (664,69,12);
level.grnd_dropzones["mp_mogadishu"][7] = (1676,251,-1);
level.grnd_dropzones["mp_mogadishu"][8] = (2314,1860,63);
level.grnd_dropzones["mp_mogadishu"][9] = (73,858,3);
level.grnd_dropzones["mp_mogadishu"][10] = (710,837,16);
level.grnd_dropzones["mp_mogadishu"][11] = (-549,829,2);
level.grnd_dropzones["mp_mogadishu"][12] = (34,1850,84);
level.grnd_dropzones["mp_mogadishu"][13] = (-778,2614,157);
level.grnd_dropzones["mp_mogadishu"][14] = (-204,3206,152);
level.grnd_dropzones["mp_mogadishu"][15] = (752,3189,148);
level.grnd_dropzones["mp_mogadishu"][16] = (692,2354,95);
level.grnd_dropzones["mp_paris"][0] = (-931,-921,110);
level.grnd_dropzones["mp_paris"][1] = (1597,1768,47);
level.grnd_dropzones["mp_paris"][2] = (716,1809,33);
level.grnd_dropzones["mp_paris"][3] = (258,2074,36);
level.grnd_dropzones["mp_paris"][4] = (459,1067,37);
level.grnd_dropzones["mp_paris"][5] = (852,1350,118);
level.grnd_dropzones["mp_paris"][6] = (1601,897,45);
level.grnd_dropzones["mp_paris"][7] = (1286,420,41);
level.grnd_dropzones["mp_paris"][8] = (1613,181,172);
level.grnd_dropzones["mp_paris"][9] = (466,-752,67);
level.grnd_dropzones["mp_paris"][10] = (994,-625,50);
level.grnd_dropzones["mp_paris"][11] = (-211,-60,63);
level.grnd_dropzones["mp_paris"][12] = (-742,177,133);
level.grnd_dropzones["mp_paris"][13] = (-1532,100,250);
level.grnd_dropzones["mp_paris"][14] = (-343,1922,121);
level.grnd_dropzones["mp_paris"][15] = (-1127,1555,284);
level.grnd_dropzones["mp_paris"][16] = (-2025,1327,316);
level.grnd_dropzones["mp_paris"][17] = (-1039,841,187);
level.grnd_dropzones["mp_exchange"][0] = (-614,1286,113);
level.grnd_dropzones["mp_exchange"][1] = (182,1155,148);
level.grnd_dropzones["mp_exchange"][2] = (1018,1254,120);
level.grnd_dropzones["mp_exchange"][3] = (2182,1322,145);
level.grnd_dropzones["mp_exchange"][4] = (655,815,13);
level.grnd_dropzones["mp_exchange"][5] = (761,-312,-18);
level.grnd_dropzones["mp_exchange"][6] = (761,-771,112);
level.grnd_dropzones["mp_exchange"][7] = (635,-1450,110);
level.grnd_dropzones["mp_exchange"][8] = (152,-1538,96);
level.grnd_dropzones["mp_exchange"][9] = (303,-824,88);
level.grnd_dropzones["mp_exchange"][10] = (-953,-768,45);
level.grnd_dropzones["mp_exchange"][11] = (2392,1305,144);
level.grnd_dropzones["mp_exchange"][12] = (1634,1329,151);
level.grnd_dropzones["mp_exchange"][13] = (1315,743,159);
level.grnd_dropzones["mp_bootleg"][0] = (-1432,1404,8);
level.grnd_dropzones["mp_bootleg"][1] = (-1017,1787,-39);
level.grnd_dropzones["mp_bootleg"][2] = (-590,1514,-43);
level.grnd_dropzones["mp_bootleg"][3] = (-588,614,-12);
level.grnd_dropzones["mp_bootleg"][4] = (-1732,84,11);
level.grnd_dropzones["mp_bootleg"][5] = (-1809,-302,140);
level.grnd_dropzones["mp_bootleg"][6] = (-1649,-1147,92);
level.grnd_dropzones["mp_bootleg"][7] = (-884,-1035,-4);
level.grnd_dropzones["mp_bootleg"][8] = (-719,-1673,60);
level.grnd_dropzones["mp_bootleg"][9] = (-335,-2111,60);
level.grnd_dropzones["mp_bootleg"][10] = (208,-1955,68);
level.grnd_dropzones["mp_bootleg"][11] = (-198,-1726,60);
level.grnd_dropzones["mp_bootleg"][12] = (100,-1101,-9);
level.grnd_dropzones["mp_bootleg"][13] = (-427,-100,-8);
level.grnd_dropzones["mp_bootleg"][14] = (949,-1132,-10);
level.grnd_dropzones["mp_bootleg"][15] = (884,1182,-28);
level.grnd_dropzones["mp_bootleg"][16] = (242,1194,-45);
level.grnd_dropzones["mp_carbon"][0] = (-3330,-3392,3630);
level.grnd_dropzones["mp_carbon"][1] = (-3635,-3735,3630);
level.grnd_dropzones["mp_carbon"][2] = (-3625,-4189,3633);
level.grnd_dropzones["mp_carbon"][3] = (-2992,-4339,3627);
level.grnd_dropzones["mp_carbon"][4] = (-2925,-4999,3673);
level.grnd_dropzones["mp_carbon"][5] = (-2573,-4771,3784);
level.grnd_dropzones["mp_carbon"][6] = (-1705,-4643,3813);
level.grnd_dropzones["mp_carbon"][7] = (-1799,-3957,3813);
level.grnd_dropzones["mp_carbon"][8] = (-2141,-3647,3815);
level.grnd_dropzones["mp_carbon"][9] = (-3212,-2879,3807);
level.grnd_dropzones["mp_carbon"][10] = (-1623,-3339,3808);
level.grnd_dropzones["mp_carbon"][11] = (-1223,-4234,3834);
level.grnd_dropzones["mp_carbon"][12] = (-896,-4888,3944);
level.grnd_dropzones["mp_carbon"][13] = (-228,-4535,3975);
level.grnd_dropzones["mp_carbon"][14] = (-257,-3865,3956);
level.grnd_dropzones["mp_carbon"][15] = (-215,-3260,3967);
level.grnd_dropzones["mp_carbon"][16] = (-535,-3798,3966);
level.grnd_dropzones["mp_hardhat"][0] = (2125,-364,266);
level.grnd_dropzones["mp_hardhat"][1] = (1959,-772,352);
level.grnd_dropzones["mp_hardhat"][2] = (1883,-1384,351);
level.grnd_dropzones["mp_hardhat"][3] = (848,-1520,334);
level.grnd_dropzones["mp_hardhat"][4] = (1326,-1380,342);
level.grnd_dropzones["mp_hardhat"][5] = (-338,-1273,348);
level.grnd_dropzones["mp_hardhat"][6] = (-821,-884,348);
level.grnd_dropzones["mp_hardhat"][7] = (-920,-290,230);
level.grnd_dropzones["mp_hardhat"][8] = (-463,-250,333);
level.grnd_dropzones["mp_hardhat"][9] = (-741,208,245);
level.grnd_dropzones["mp_hardhat"][10] = (-201,806,437);
level.grnd_dropzones["mp_hardhat"][11] = (224,980,436);
level.grnd_dropzones["mp_hardhat"][12] = (1125,656,255);
level.grnd_dropzones["mp_hardhat"][13] = (1531,1241,364);
level.grnd_dropzones["mp_hardhat"][14] = (1522,542,244);
level.grnd_dropzones["mp_alpha"][0] = (-1979,1653,148);
level.grnd_dropzones["mp_alpha"][1] = (-1392,1623,60);
level.grnd_dropzones["mp_alpha"][2] = (-1697,1205,52);
level.grnd_dropzones["mp_alpha"][3] = (-1671,692,54);
level.grnd_dropzones["mp_alpha"][4] = (-572,-272,55);
level.grnd_dropzones["mp_alpha"][5] = (634,-345,52);
level.grnd_dropzones["mp_alpha"][6] = (391,121,60);
level.grnd_dropzones["mp_alpha"][7] = (291,1271,60);
level.grnd_dropzones["mp_alpha"][8] = (-459,868,52);
level.grnd_dropzones["mp_alpha"][9] = (-353,1334,52);
level.grnd_dropzones["mp_alpha"][10] = (-37,1637,52);
level.grnd_dropzones["mp_alpha"][11] = (-5,2226,52);
level.grnd_dropzones["mp_alpha"][12] = (-407,2198,196);
level.grnd_dropzones["mp_village"][0] = (647,1891,332);
level.grnd_dropzones["mp_village"][1] = (-26,1749,334);
level.grnd_dropzones["mp_village"][2] = (104,1292,323);
level.grnd_dropzones["mp_village"][3] = (-1064,1552,322);
level.grnd_dropzones["mp_village"][4] = (-599,886,378);
level.grnd_dropzones["mp_village"][5] = (-1038,569,317);
level.grnd_dropzones["mp_village"][6] = (-1899,1217,336);
level.grnd_dropzones["mp_village"][7] = (-1540,289,304);
level.grnd_dropzones["mp_village"][8] = (-454,-277,270);
level.grnd_dropzones["mp_village"][9] = (-1734,-790,365);
level.grnd_dropzones["mp_village"][10] = (-1418,-1371,431);
level.grnd_dropzones["mp_village"][11] = (-928,-749,417);
level.grnd_dropzones["mp_village"][12] = (-861,-2105,408);
level.grnd_dropzones["mp_village"][13] = (-191,-1550,400);
level.grnd_dropzones["mp_village"][14] = (357,-678,245);
level.grnd_dropzones["mp_village"][15] = (-216,295,223);
level.grnd_dropzones["mp_village"][16] = (162,-199,229);
level.grnd_dropzones["mp_village"][17] = (179,-3052,447);
level.grnd_dropzones["mp_village"][18] = (510,-1790,375);
level.grnd_dropzones["mp_village"][19] = (1089,-615,398);
level.grnd_dropzones["mp_village"][20] = (1631,394,297);
level.grnd_dropzones["mp_village"][21] = (1007,1385,337);
level.grnd_dropzones["mp_village"][22] = (992,248,330);
level.grnd_dropzones["mp_village"][23] = (551,732,386);
level.grnd_dropzones["mp_lambeth"][0] = (-293,-1286,-180);
level.grnd_dropzones["mp_lambeth"][1] = (-938,-785,-130);
level.grnd_dropzones["mp_lambeth"][2] = (-375,-250,-187);
level.grnd_dropzones["mp_lambeth"][3] = (-355,409,-196);
level.grnd_dropzones["mp_lambeth"][4] = (161,-5,-181);
level.grnd_dropzones["mp_lambeth"][5] = (682,-407,-197);
level.grnd_dropzones["mp_lambeth"][6] = (694,263,-196);
level.grnd_dropzones["mp_lambeth"][7] = (690,1158,-243);
level.grnd_dropzones["mp_lambeth"][8] = (1181,801,-67);
level.grnd_dropzones["mp_lambeth"][9] = (1281,1248,-257);
level.grnd_dropzones["mp_lambeth"][10] = (2057,757,-249);
level.grnd_dropzones["mp_lambeth"][11] = (1470,-1040,-109);
level.grnd_dropzones["mp_lambeth"][12] = (1761,-258,-210);
level.grnd_dropzones["mp_lambeth"][13] = (2800,-652,-186);
level.grnd_dropzones["mp_lambeth"][14] = (2785,445,-244);
level.grnd_dropzones["mp_lambeth"][15] = (2751,1090,-263);
level.grnd_dropzones["mp_lambeth"][16] = (1535,1980,-214);
level.grnd_dropzones["mp_lambeth"][17] = (1262,2602,-213);
level.grnd_dropzones["mp_lambeth"][18] = (419,2218,-183);
level.grnd_dropzones["mp_lambeth"][19] = (170,1631,-182);
level.grnd_dropzones["mp_lambeth"][20] = (-606,1549,-201);
level.grnd_dropzones["mp_lambeth"][21] = (-1199,1030,-196);
level.grnd_dropzones["mp_radar"][0] = (-3482,-498,1222);
level.grnd_dropzones["mp_radar"][1] = (-4263,-124,1229);
level.grnd_dropzones["mp_radar"][2] = (-4006,827,1238);
level.grnd_dropzones["mp_radar"][3] = (-3375,342,1222);
level.grnd_dropzones["mp_radar"][4] = (-4623,531,1298);
level.grnd_dropzones["mp_radar"][5] = (-5157,877,1200);
level.grnd_dropzones["mp_radar"][6] = (-5950,1071,1305);
level.grnd_dropzones["mp_radar"][7] = (-6509,1660,1299);
level.grnd_dropzones["mp_radar"][8] = (-7013,2955,1359);
level.grnd_dropzones["mp_radar"][9] = (-6333,3473,1421);
level.grnd_dropzones["mp_radar"][10] = (-5675,2923,1388);
level.grnd_dropzones["mp_radar"][11] = (-7119,4357,1380);
level.grnd_dropzones["mp_radar"][12] = (-5487,4077,1356);
level.grnd_dropzones["mp_radar"][13] = (-5736,2960,1407);
level.grnd_dropzones["mp_radar"][14] = (-4908,3281,1225);
level.grnd_dropzones["mp_radar"][15] = (-4421,4071,1268);
level.grnd_dropzones["mp_radar"][16] = (-4979,1816,1205);
level.grnd_dropzones["mp_radar"][17] = (-4874,2306,1223);
level.grnd_dropzones["mp_interchange"][0] = (2465,-402,149);
level.grnd_dropzones["mp_interchange"][1] = (2128,199,68);
level.grnd_dropzones["mp_interchange"][2] = (1280,1263,126);
level.grnd_dropzones["mp_interchange"][3] = (762,1747,114);
level.grnd_dropzones["mp_interchange"][4] = (-9,1836,38);
level.grnd_dropzones["mp_interchange"][5] = (-284,1171,159);
level.grnd_dropzones["mp_interchange"][6] = (-1028,944,31);
level.grnd_dropzones["mp_interchange"][7] = (-256,264,126);
level.grnd_dropzones["mp_interchange"][8] = (462,-463,158);
level.grnd_dropzones["mp_interchange"][9] = (1029,-1045,179);
level.grnd_dropzones["mp_interchange"][10] = (1760,-1434,142);
level.grnd_dropzones["mp_interchange"][11] = (1538,-361,142);
level.grnd_dropzones["mp_interchange"][12] = (1150,-2977,171);
level.grnd_dropzones["mp_interchange"][13] = (371,-2883,209);
level.grnd_dropzones["mp_interchange"][14] = (399,-2149,220);
level.grnd_dropzones["mp_underground"][0] = (-602,3072,-68);
level.grnd_dropzones["mp_underground"][1] = (-285,2551,-215);
level.grnd_dropzones["mp_underground"][2] = (574,2656,-40);
level.grnd_dropzones["mp_underground"][3] = (-627,1579,-196);
level.grnd_dropzones["mp_underground"][4] = (28,1556,-196);
level.grnd_dropzones["mp_underground"][5] = (727,1615,-196);
level.grnd_dropzones["mp_underground"][6] = (-1491,1268,-196);
level.grnd_dropzones["mp_underground"][7] = (-1370,1757,-196);
level.grnd_dropzones["mp_underground"][8] = (-1259,599,-156);
level.grnd_dropzones["mp_underground"][9] = (-959,-26,60);
level.grnd_dropzones["mp_underground"][10] = (-303,-562,60);
level.grnd_dropzones["mp_underground"][11] = (193,-922,60);
level.grnd_dropzones["mp_underground"][12] = (305,817,-68);
level.grnd_dropzones["mp_underground"][13] = (-276,370,-68);
level.grnd_dropzones["mp_bravo"][0] = (-1359,608,975);
level.grnd_dropzones["mp_bravo"][1] = (-1686,313,991);
level.grnd_dropzones["mp_bravo"][2] = (-1228,41,976);
level.grnd_dropzones["mp_bravo"][3] = (-732,-715,1032);
level.grnd_dropzones["mp_bravo"][4] = (31,-771,1038);
level.grnd_dropzones["mp_bravo"][5] = (986,-833,1116);
level.grnd_dropzones["mp_bravo"][6] = (1800,-577,1229);
level.grnd_dropzones["mp_bravo"][7] = (1588,-55,1181);
level.grnd_dropzones["mp_bravo"][8] = (619,916,1175);
level.grnd_dropzones["mp_bravo"][9] = (-129,1310,1228);
level.grnd_dropzones["mp_bravo"][10] = (-726,1272,1268);
level.grnd_dropzones["mp_bravo"][11] = (-741,752,1053);
level.grnd_dropzones["mp_bravo"][12] = (6,-136,1282);
}

View File

@ -0,0 +1,488 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\gtnw.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 21
* Decompile Time: 286 ms
* Timestamp: 10/27/2023 2:13:16 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
maps\mp\_utility::registertimelimitdvar(level.gametype,3,0,1440);
maps\mp\_utility::registerscorelimitdvar(level.gametype,101,0,10000);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,30);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10);
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,30);
maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10);
maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1);
level.teambased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.ondeadevent = ::ondeadevent;
level.initgametypeawards = ::initgametypeawards;
level.ontimelimit = ::ontimelimit;
level.onnormaldeath = ::onnormaldeath;
level.gtnw = 1;
game["dialog"]["gametype"] = "gtw";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "obj_destroy";
game["dialog"]["defense_obj"] = "obj_defend";
level thread onplayerconnect();
}
//Function Number: 2
func_3A82(param_00,param_01)
{
thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
}
//Function Number: 3
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_01 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbar();
var_02 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbartext();
var_02 settext(&"MP_CAPTURING_NUKE");
var_01.usetime = 100;
var_00.usebar = var_01;
var_00.usebar maps\mp\gametypes\_hud_util::hideelem();
var_00.usebartext = var_02;
var_00.usebartext maps\mp\gametypes\_hud_util::hideelem();
}
}
//Function Number: 4
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(!isdefined(game["original_defenders"]))
{
game["original_defenders"] = game["defenders"];
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
setclientnamemode("auto_change");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GTNW");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GTNW");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GTNW_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GTNW_SCORE");
}
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_GTNW");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_GTNW");
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GTNW_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GTNW_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",100);
maps\mp\gametypes\_rank::registerscoreinfo("assist",20);
maps\mp\gametypes\_rank::registerscoreinfo("capture",500);
var_02[0] = "airdrop_pallet";
maps\mp\gametypes\_gameobjects::main(var_7B);
thread func_3A85();
}
//Function Number: 5
onprecachegametype()
{
precacheshader("waypoint_defend");
precacheshader("waypoint_target");
precacheshader("waypoint_capture");
precacheshader("compass_waypoint_target");
precacheshader("compass_waypoint_defend");
precacheshader("compass_waypoint_capture");
precachestring(&"MP_CAPTURING_NUKE");
}
//Function Number: 6
func_3A85()
{
level.laststatus["allies"] = 0;
level.laststatus["axis"] = 0;
var_00 = getent("gtnw_zone","targetname");
var_01 = [];
var_02 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_00,var_01,(0,0,100));
var_02 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend");
var_02 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend");
var_02 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral");
var_02 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral");
var_02 maps\mp\gametypes\_gameobjects::allowuse("enemy");
var_02.nousebar = 1;
var_02 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_02.onbeginuse = ::onbeginuse;
var_02.onenduse = ::onenduse;
level.nukesite = var_02;
var_02 thread func_3A88();
}
//Function Number: 7
getspawnpoint()
{
if(self.team == "axis")
{
var_00 = game["attackers"];
}
else
{
var_00 = game["defenders"];
}
if(level.ingraceperiod)
{
var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 8
spawnfxdelay(param_00,param_01,param_02,param_03,param_04)
{
wait param_04;
var_05 = spawnfx(param_00,param_01,param_02,param_03);
triggerfx(var_05);
}
//Function Number: 9
ondeadevent(param_00)
{
if((isdefined(level.nukeincoming) && level.nukeincoming) || isdefined(level.nukedetonated) && level.nukedetonated)
{
return;
}
if(param_00 == game["attackers"])
{
lib_036E::func_2B88(param_00,1);
level thread func_3A82(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]);
return;
}
if(param_00 == game["defenders"])
{
lib_036E::func_2B88(param_00,1);
level thread func_3A82(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]);
}
}
//Function Number: 10
initgametypeawards()
{
}
//Function Number: 11
ontimelimit()
{
if(game["teamScores"]["allies"] == game["teamScores"]["axis"])
{
level thread func_3984();
return;
}
if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]);
return;
}
if(game["teamScores"]["axis"] < game["teamScores"]["allies"])
{
thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]);
return;
}
}
//Function Number: 12
func_3984(param_00)
{
level endon("game_ended");
level.inovertime = 1;
level thread disablespawning(5);
level.endgametime = 120;
param_00 = level.endgametime;
foreach(var_02 in level.players)
{
var_02 thread maps\mp\gametypes\_hud_message::splashnotify("gtnw_overtime");
}
maps\mp\gametypes\_gamelogic::pausetimer();
level.timelimitoverride = 1;
setgameendtime(int(gettime() + level.endgametime * 1000));
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(param_00);
if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]);
return;
}
if(game["teamScores"]["axis"] < game["teamScores"]["allies"])
{
thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]);
return;
}
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
}
//Function Number: 13
disablespawning(param_00)
{
level endon("game_ended");
wait 5;
level.disablespawning = 1;
}
//Function Number: 14
onbeginuse(param_00)
{
param_00.usebar maps\mp\gametypes\_hud_util::showelem();
param_00.usebartext maps\mp\gametypes\_hud_util::showelem();
}
//Function Number: 15
onenduse(param_00,param_01,param_02)
{
param_01.usebar maps\mp\gametypes\_hud_util::hideelem();
param_01.usebartext maps\mp\gametypes\_hud_util::hideelem();
}
//Function Number: 16
func_3A88()
{
level endon("game_ended");
self endon("stop_counting");
for(;;)
{
if(!self.touchlist["axis"].size && !self.touchlist["allies"].size)
{
setdvar("ui_danger_team","none");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral");
maps\mp\gametypes\_gameobjects::setownerteam("none");
func_3A8B();
wait 1;
continue;
}
maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture");
if(self.touchlist["axis"].size > self.touchlist["allies"].size)
{
if(lib_036E::func_2B96("axis") < 100)
{
lib_036E::func_2B88("axis",1);
}
thread func_3A8A("axis");
setdvar("ui_danger_team","allies");
maps\mp\gametypes\_gameobjects::setownerteam("axis");
if(lib_036E::func_2B96("axis") >= 100)
{
maps\mp\gametypes\_gameobjects::allowuse("none");
func_3A89("axis");
self notify("stop_counting");
}
}
else if(self.touchlist["axis"].size < self.touchlist["allies"].size)
{
if(lib_036E::func_2B96("allies") < 100)
{
lib_036E::func_2B88("allies",1);
}
thread func_3A8A("allies");
setdvar("ui_danger_team","axis");
maps\mp\gametypes\_gameobjects::setownerteam("allies");
if(lib_036E::func_2B96("allies") >= 100)
{
maps\mp\gametypes\_gameobjects::allowuse("none");
func_3A89("allies");
self notify("stop_counting");
}
}
else
{
maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral");
maps\mp\gametypes\_gameobjects::setownerteam("none");
setdvar("ui_danger_team","contested");
}
func_3A8B();
wait 1;
}
}
//Function Number: 17
func_3A89(param_00)
{
func_3944(self.touchlist[param_00]);
maps\mp\gametypes\_gameobjects::setvisibleteam("none");
maps\mp\gametypes\_gameobjects::allowuse("none");
var_01 = 99999999;
var_02 = undefined;
foreach(var_04 in level.players)
{
if(!isdefined(var_04))
{
continue;
}
var_04.usebar maps\mp\gametypes\_hud_util::hideelem();
var_04.usebartext maps\mp\gametypes\_hud_util::hideelem();
if(var_04.team != param_00)
{
continue;
}
if(!isdefined(self.touchlist[param_00][var_04.guid]))
{
continue;
}
var_05 = self.touchlist[param_00][var_04.guid].starttime;
if(var_05 < var_01)
{
var_02 = var_04;
var_01 = var_05;
}
}
var_02 maps\mp\killstreaks\_nuke::tryusenuke(1);
}
//Function Number: 18
func_3944(param_00)
{
level endon("game_ended");
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
var_01 = getarraykeys(param_00);
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = param_00[var_01[var_02]].player;
var_03 thread maps\mp\gametypes\_hud_message::splashnotify("captured_nuke",maps\mp\gametypes\_rank::getscoreinfovalue("capture"));
var_03 thread [[ level.onxpevent ]]("capture");
lib_036E::func_2B7B("capture",var_03);
}
}
//Function Number: 19
func_3A8A(param_00)
{
var_01 = getteamscore(param_00);
foreach(var_03 in level.players)
{
if(!isdefined(var_03))
{
continue;
}
if(var_03.team != param_00)
{
continue;
}
if(!isdefined(self.touchlist[param_00][var_03.guid]))
{
continue;
}
var_03.usebar maps\mp\gametypes\_hud_util::updatebar(var_01 / 100,0);
}
}
//Function Number: 20
func_3A8B()
{
foreach(var_01 in level.players)
{
if(!isdefined(var_01))
{
continue;
}
if(!isdefined(self.touchlist["axis"][var_01.guid]) && !isdefined(self.touchlist["allies"][var_01.guid]))
{
var_01.usebar maps\mp\gametypes\_hud_util::hideelem();
var_01.usebartext maps\mp\gametypes\_hud_util::hideelem();
}
if(isdefined(self.touchlist["axis"][var_01.guid]) || isdefined(self.touchlist["allies"][var_01.guid]))
{
var_01.usebar maps\mp\gametypes\_hud_util::showelem();
var_01.usebartext maps\mp\gametypes\_hud_util::showelem();
}
}
}
//Function Number: 21
onnormaldeath(param_00,param_01,param_02)
{
if(!isdefined(level.inovertime) || !level.inovertime)
{
return;
}
var_03 = param_00.team;
if(game["state"] == "postgame")
{
param_01.finalkill = 1;
}
}

View File

@ -0,0 +1,641 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\gun.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 23
* Decompile Time: 311 ms
* Timestamp: 10/27/2023 2:13:17 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
func_3A48();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size);
maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size);
level thread func_01C0();
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,0);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_randomize = 0;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
func_3972();
level.teambased = 0;
level.doprematch = 1;
level.killstreakrewards = 0;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.onspawnplayer = ::onspawnplayer;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.ontimelimit = ::ontimelimit;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata(1);
level.matchrules_randomize = getmatchrulesdata("gunData","randomize");
setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size);
maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size);
setdynamicdvar("scr_gun_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("gun",1);
setdynamicdvar("scr_gun_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("gun",1);
setdynamicdvar("scr_gun_halftime",0);
maps\mp\_utility::registerhalftimedvar("gun",0);
setdynamicdvar("scr_gun_promode",0);
}
//Function Number: 3
func_01C0()
{
setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size);
maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size);
}
//Function Number: 4
onprecachegametype()
{
precachestring(&"MP_GUN");
}
//Function Number: 5
onstartgametype()
{
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DM");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DM");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("kill",0);
maps\mp\gametypes\_rank::registerscoreinfo("assist",0);
maps\mp\gametypes\_rank::registerscoreinfo("suicide",0);
maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",0);
maps\mp\gametypes\_rank::registerscoreinfo("execution",0);
maps\mp\gametypes\_rank::registerscoreinfo("avenger",0);
maps\mp\gametypes\_rank::registerscoreinfo("defender",0);
maps\mp\gametypes\_rank::registerscoreinfo("posthumous",0);
maps\mp\gametypes\_rank::registerscoreinfo("revenge",0);
maps\mp\gametypes\_rank::registerscoreinfo("double",0);
maps\mp\gametypes\_rank::registerscoreinfo("triple",0);
maps\mp\gametypes\_rank::registerscoreinfo("multi",0);
maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",0);
maps\mp\gametypes\_rank::registerscoreinfo("firstblood",0);
maps\mp\gametypes\_rank::registerscoreinfo("comeback",0);
maps\mp\gametypes\_rank::registerscoreinfo("longshot",0);
maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",0);
maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",0);
maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_score",1);
maps\mp\gametypes\_rank::registerscoreinfo("dropped_gun_score",-1);
maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_rank",100);
maps\mp\gametypes\_rank::registerscoreinfo("dropped_enemy_gun_rank",100);
var_00 = [];
maps\mp\gametypes\_gameobjects::main(var_00);
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level thread onplayerconnect();
level.killstreakrewards = 0;
}
//Function Number: 6
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.gun_firstspawn = 1;
var_00.gungamegunindex = 0;
var_00.gungameprevgunindex = 0;
var_00 func_3A43();
if(level.matchrules_randomize)
{
var_00.gun_nextguns = level.gun_guns;
var_00.gun_prevguns = [];
}
var_00 thread refillammo();
var_00 thread func_3A42();
}
}
//Function Number: 7
getspawnpoint()
{
if(self.gun_firstspawn)
{
self.gun_firstspawn = 0;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
if(common_scripts\utility::cointoss())
{
maps\mp\gametypes\_menus::addtoteam("axis",1);
}
else
{
maps\mp\gametypes\_menus::addtoteam("allies",1);
}
}
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_dm(var_00);
return var_01;
}
//Function Number: 8
onspawnplayer()
{
self.pers["gamemodeLoadout"] = level.gun_loadouts[self.pers["team"]];
thread func_39EB();
level notify("spawned_player");
}
//Function Number: 9
func_39EB()
{
level endon("game_ended");
self endon("disconnect");
level waittill("player_spawned");
maps\mp\_utility::giveperk("specialty_bling",0);
func_3A3F(1);
}
//Function Number: 10
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(param_03 == "MOD_FALLING" || isdefined(param_01) && isplayer(param_01))
{
if(param_03 == "MOD_FALLING" || param_01 == self || param_03 == "MOD_MELEE" && param_04 != "riotshield_mp")
{
self playlocalsound("mp_war_objective_lost");
self.gungameprevgunindex = self.gungamegunindex;
self.gungamegunindex = int(max(0,self.gungamegunindex - 1));
if(self.gungameprevgunindex > self.gungamegunindex)
{
lib_036E::func_2B7B("dropped_gun_score",self,undefined,1,1);
}
if(param_03 == "MOD_MELEE")
{
if(self.gungameprevgunindex)
{
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DROPPED_ENEMY_GUN_RANK");
param_01 thread maps\mp\gametypes\_rank::giverankxp("dropped_enemy_gun_rank");
return;
}
return;
}
return;
}
if(param_03 == "MOD_PISTOL_BULLET" || param_03 == "MOD_RIFLE_BULLET" || param_03 == "MOD_HEAD_SHOT" || param_03 == "MOD_PROJECTILE" || param_03 == "MOD_PROJECTILE_SPLASH" || param_03 == "MOD_IMPACT" || param_03 == "MOD_GRENADE" || param_03 == "MOD_GRENADE_SPLASH" || param_03 == "MOD_MELEE" && param_04 == "riotshield_mp")
{
if(param_04 != param_01.primaryweapon)
{
return;
}
param_01.gungameprevgunindex = param_01.gungamegunindex;
param_01.gungamegunindex++;
param_01 thread maps\mp\gametypes\_rank::giverankxp("gained_gun_rank");
lib_036E::func_2B7B("gained_gun_score",param_01,self,1,1);
if(param_01.gungamegunindex == level.gun_guns.size - 1)
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
level thread maps\mp\_utility::teamplayercardsplash("callout_top_gun_rank",param_01);
}
if(param_01.gungamegunindex < level.gun_guns.size)
{
param_01 playlocalsound("mp_war_objective_taken");
param_01 func_3A3F();
return;
}
return;
}
}
}
//Function Number: 11
func_3A3F(param_00)
{
var_01 = func_0173();
self.gun_curgun = var_01;
var_01 = func_0174(var_01);
self takeallweapons();
maps\mp\_utility::_giveweapon(var_01);
if(isdefined(param_00))
{
self setspawnweapon(var_01);
}
var_02 = strtok(var_01,"_");
if(var_02[0] == "iw5")
{
var_03 = var_02[0] + "_" + var_02[1];
}
else if(var_03[0] == "alt")
{
var_03 = var_03[1] + "_" + var_03[2];
}
else
{
var_03 = var_03[0];
}
self.pers["primaryWeapon"] = var_03;
self.primaryweapon = var_01;
self givestartammo(var_01);
self switchtoweapon(var_01);
if(self.gungameprevgunindex > self.gungamegunindex)
{
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DROPPED_GUN_RANK");
}
else if(self.gungameprevgunindex < self.gungamegunindex)
{
thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_GAINED_GUN_RANK");
}
self.gungameprevgunindex = self.gungamegunindex;
func_3A45();
}
//Function Number: 12
func_0173()
{
if(level.matchrules_randomize)
{
if(self.gungameprevgunindex < self.gungamegunindex)
{
var_00 = randomint(self.gun_nextguns.size);
var_01 = self.gun_nextguns[var_00];
self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00];
self.gun_nextguns[var_00] = undefined;
self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns);
}
else if(self.gungameprevgunindex > self.gungamegunindex)
{
if(self.gun_prevguns.size > 1)
{
for(var_02 = 0;var_02 < self.gun_prevguns.size;var_02++)
{
if(self.gun_prevguns[var_02] == self.gun_curgun)
{
break;
}
}
self.gun_nextguns[self.gun_nextguns.size] = self.gun_prevguns[var_02];
self.gun_prevguns[var_02] = undefined;
self.gun_prevguns = common_scripts\utility::array_removeundefined(self.gun_prevguns);
}
var_00 = randomint(self.gun_prevguns.size);
var_01 = self.gun_prevguns[var_00];
}
else if(self.gun_prevguns.size)
{
var_00 = randomint(self.gun_prevguns.size);
var_01 = self.gun_prevguns[var_00];
}
else
{
var_00 = randomint(self.gun_nextguns.size);
var_01 = self.gun_nextguns[var_00];
self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00];
self.gun_nextguns[var_00] = undefined;
self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns);
}
}
else
{
var_01 = level.gun_guns[self.gungamegunindex];
}
return var_01;
}
//Function Number: 13
func_0174(param_00)
{
if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach1"]))
{
var_01 = level.gun_attachments[param_00]["attach1"];
}
else
{
var_01 = "none";
}
if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach2"]))
{
var_02 = level.gun_attachments[param_00]["attach2"];
}
else
{
var_02 = "none";
}
var_03 = maps\mp\gametypes\_class::buildweaponname(param_00,var_01,var_02,0,0);
return var_03;
}
//Function Number: 14
ontimelimit()
{
level.finalkillcam_winner = "none";
var_00 = func_03B6();
if(!isdefined(var_00) || !var_00.size)
{
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
return;
}
if(var_00.size == 1)
{
thread maps\mp\gametypes\_gamelogic::endgame(var_00[0],game["strings"]["time_limit_reached"]);
return;
}
if(var_00[var_00.size - 1].gungamegunindex > var_00[var_00.size - 2].gungamegunindex)
{
thread maps\mp\gametypes\_gamelogic::endgame(var_00[var_00.size - 1],game["strings"]["time_limit_reached"]);
return;
}
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
}
//Function Number: 15
func_03B6()
{
var_00 = -1;
var_01 = [];
foreach(var_03 in level.players)
{
if(isdefined(var_03.gungamegunindex) && var_03.gungamegunindex >= var_00)
{
var_00 = var_03.gungamegunindex;
var_01[var_01.size] = var_03;
}
}
return var_01;
}
//Function Number: 16
refillammo()
{
level endon("game_ended");
self endon("disconnect");
for(;;)
{
self waittill("reload");
self givestartammo(self.primaryweapon);
}
}
//Function Number: 17
func_3A42()
{
level endon("game_ended");
self endon("disconnect");
for(;;)
{
if(maps\mp\_utility::isreallyalive(self) && self.team != "spectator" && isdefined(self.primaryweapon) && self getammocount(self.primaryweapon) == 0)
{
wait 2;
self notify("reload");
wait 1;
continue;
}
wait 0.05;
}
}
//Function Number: 18
func_3A43()
{
if(level.splitscreen)
{
self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2);
self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,0);
self.gun_progressdisplay[0] settext(&"MP_WEAPON");
self.gun_progressdisplay[0].alpha = 1;
self.gun_progressdisplay[0].archived = 0;
self.gun_progressdisplay[0].hidewheninmenu = 1;
self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2);
self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,12);
self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size);
self.gun_progressdisplay[1].alpha = 1;
self.gun_progressdisplay[1].archived = 0;
self.gun_progressdisplay[1].hidewheninmenu = 1;
}
else
{
self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2);
self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,5);
self.gun_progressdisplay[0] settext(&"MP_WEAPON");
self.gun_progressdisplay[0].alpha = 1;
self.gun_progressdisplay[0].archived = 0;
self.gun_progressdisplay[0].hidewheninmenu = 1;
self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2);
self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,17);
self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size);
self.gun_progressdisplay[1].alpha = 1;
self.gun_progressdisplay[1].archived = 0;
self.gun_progressdisplay[1].hidewheninmenu = 1;
}
thread func_3A47();
thread hideinkillcam();
}
//Function Number: 19
func_3A45()
{
self.gun_progressdisplay[1] settext(self.gungamegunindex + 1 + " / " + level.gun_guns.size);
}
//Function Number: 20
hideinkillcam()
{
self endon("disconnect");
var_00 = 1;
for(;;)
{
if(var_00 && !isalive(self) || maps\mp\_utility::isinkillcam())
{
self.gun_progressdisplay[0].alpha = 0;
self.gun_progressdisplay[1].alpha = 0;
var_00 = 0;
}
else if(!var_00 && isalive(self) && !maps\mp\_utility::isinkillcam())
{
self.gun_progressdisplay[0].alpha = 1;
self.gun_progressdisplay[1].alpha = 1;
var_00 = 1;
}
wait 0.05;
}
}
//Function Number: 21
func_3A47()
{
self endon("disconnect");
level waittill("game_ended");
self.gun_progressdisplay[0].alpha = 0;
self.gun_progressdisplay[1].alpha = 0;
}
//Function Number: 22
func_3A48()
{
level.gun_guns = [];
var_00 = 0;
if(isusingmatchrulesdata())
{
var_00 = getmatchrulesdata("gunData","numGuns");
}
if(var_00)
{
for(var_01 = 0;var_01 < var_00;var_01++)
{
level.gun_guns[var_01] = getmatchrulesdata("gunData","guns",var_01);
}
}
else
{
level.gun_guns[0] = "iw5_deserteagle";
level.gun_guns[1] = "iw5_g18";
level.gun_guns[2] = "iw5_mp9";
level.gun_guns[3] = "iw5_mp5";
level.gun_guns[4] = "iw5_p90";
level.gun_guns[5] = "iw5_mp7";
level.gun_guns[6] = "iw5_ak47";
level.gun_guns[7] = "iw5_scar";
level.gun_guns[8] = "iw5_pecheneg";
level.gun_guns[9] = "iw5_mg36";
level.gun_guns[10] = "iw5_spas12";
level.gun_guns[11] = "iw5_1887";
level.gun_guns[12] = "iw5_type95";
level.gun_guns[13] = "iw5_mk14";
level.gun_guns[14] = "iw5_barrett";
level.gun_guns[15] = "iw5_msr";
level.gun_guns[16] = "xm25";
level.gun_guns[17] = "javelin";
}
level.gun_attachments = [];
level.gun_attachments["iw5_44magnum"]["attach1"] = "tactical";
level.gun_attachments["iw5_deserteagle"]["attach1"] = "tactical";
level.gun_attachments["iw5_mp412"]["attach1"] = "tactical";
level.gun_attachments["iw5_fmg9"]["attach1"] = "reflex";
level.gun_attachments["iw5_skorpion"]["attach1"] = "reflex";
level.gun_attachments["iw5_mp9"]["attach1"] = "reflex";
level.gun_attachments["iw5_g18"]["attach1"] = "reflex";
level.gun_attachments["iw5_mp5"]["attach1"] = "reflex";
level.gun_attachments["iw5_m9"]["attach1"] = "reflex";
level.gun_attachments["iw5_p90"]["attach1"] = "reflex";
level.gun_attachments["iw5_pp90m1"]["attach1"] = "reflex";
level.gun_attachments["iw5_ump45"]["attach1"] = "reflex";
level.gun_attachments["iw5_mp7"]["attach1"] = "reflex";
level.gun_attachments["iw5_ak47"]["attach1"] = "reflex";
level.gun_attachments["iw5_m16"]["attach1"] = "reflex";
level.gun_attachments["iw5_m4"]["attach1"] = "reflex";
level.gun_attachments["iw5_fad"]["attach1"] = "reflex";
level.gun_attachments["iw5_acr"]["attach1"] = "reflex";
level.gun_attachments["iw5_type95"]["attach1"] = "reflex";
level.gun_attachments["iw5_mk14"]["attach1"] = "reflex";
level.gun_attachments["iw5_scar"]["attach1"] = "reflex";
level.gun_attachments["iw5_g36c"]["attach1"] = "reflex";
level.gun_attachments["iw5_cm901"]["attach1"] = "reflex";
level.gun_attachments["iw5_ksg"]["attach1"] = "grip";
level.gun_attachments["iw5_striker"]["attach1"] = "grip";
level.gun_attachments["iw5_aa12"]["attach1"] = "grip";
level.gun_attachments["iw5_usas12"]["attach1"] = "grip";
level.gun_attachments["iw5_spas12"]["attach1"] = "grip";
level.gun_attachments["iw5_m60"]["attach1"] = "grip";
level.gun_attachments["iw5_m60"]["attach2"] = "reflex";
level.gun_attachments["iw5_mk46"]["attach1"] = "grip";
level.gun_attachments["iw5_mk46"]["attach2"] = "reflex";
level.gun_attachments["iw5_pecheneg"]["attach1"] = "grip";
level.gun_attachments["iw5_pecheneg"]["attach2"] = "reflex";
level.gun_attachments["iw5_sa80"]["attach1"] = "grip";
level.gun_attachments["iw5_sa80"]["attach2"] = "reflex";
level.gun_attachments["iw5_mg36"]["attach1"] = "grip";
level.gun_attachments["iw5_mg36"]["attach2"] = "reflex";
}
//Function Number: 23
func_3972()
{
level.gun_loadouts["axis"]["loadoutPrimary"] = "iw5_acr";
level.gun_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.gun_loadouts["axis"]["loadoutSecondary"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.gun_loadouts["axis"]["loadoutEquipment"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutOffhand"] = "none";
level.gun_loadouts["axis"]["loadoutPerk1"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPerk2"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPerk3"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutJuggernaut"] = 0;
level.gun_loadouts["allies"] = level.gun_loadouts["axis"];
}

View File

@ -0,0 +1,530 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\infect.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 16
* Decompile Time: 222 ms
* Timestamp: 10/27/2023 2:13:18 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::setoverridewatchdvar("scorelimit",0);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_numinitialinfected = 1;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
func_3989();
level.teambased = 1;
level.doprematch = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.onspawnplayer = ::onspawnplayer;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.ondeadevent = ::ondeadevent;
level.ontimelimit = ::ontimelimit;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_numinitialinfected = getmatchrulesdata("infectData","numInitialInfected");
var_00 = maps\mp\_utility::getwatcheddvar("numlives");
if(var_00)
{
setdynamicdvar("scr_" + level.gametype + "_numLives",var_00 + 1);
maps\mp\_utility::registernumlivesdvar(level.gametype,var_00 + 1);
}
maps\mp\_utility::setoverridewatchdvar("scorelimit",0);
setdynamicdvar("scr_infect_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("infect",0,0,9);
setdynamicdvar("scr_infect_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("infect",1);
setdynamicdvar("scr_infect_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("infect",1);
setdynamicdvar("scr_infect_halftime",0);
maps\mp\_utility::registerhalftimedvar("infect",0);
setdynamicdvar("scr_infect_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachestring(&"MP_CONSCRIPTION_STARTS_IN");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_INFECT");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_INFECT");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_INFECT");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_INFECT");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_INFECT_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_INFECT_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_INFECT_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_INFECT_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_00 = [];
maps\mp\gametypes\_gameobjects::main(var_00);
maps\mp\gametypes\_rank::registerscoreinfo("final_rogue",200);
maps\mp\gametypes\_rank::registerscoreinfo("draft_rogue",100);
maps\mp\gametypes\_rank::registerscoreinfo("survivor",100);
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level.infect_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4);
level.infect_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5);
level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN";
level.infect_timerdisplay.alpha = 0;
level.infect_timerdisplay.archived = 0;
level.infect_timerdisplay.hidewheninmenu = 1;
level.infect_chosefirstinfected = 0;
level.infect_choosingfirstinfected = 0;
level.infect_teamscores["axis"] = 0;
level.infect_teamscores["allies"] = 0;
level thread onplayerconnect();
level thread onplayereliminated();
}
//Function Number: 5
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.infect_firstspawn = 1;
var_00 thread ondisconnect();
}
}
//Function Number: 6
onspawnplayer()
{
func_3A2B();
if(!level.infect_choosingfirstinfected)
{
level.infect_choosingfirstinfected = 1;
level thread func_3A28();
}
if(isdefined(self.isinitialinfected))
{
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
}
else
{
self.pers["gamemodeLoadout"] = level.infect_loadouts[self.pers["team"]];
}
if(self.infect_firstactualspawn)
{
self.infect_firstactualspawn = 0;
level.infect_teamscores["allies"]++;
func_3A2B();
}
level notify("spawned_player");
}
//Function Number: 7
getspawnpoint()
{
if(self.infect_firstspawn)
{
self.infect_firstspawn = 0;
self.infect_firstactualspawn = 1;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
maps\mp\gametypes\_menus::addtoteam("allies",1);
}
if(level.ingraceperiod)
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn");
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00);
}
else
{
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01);
}
return var_01;
}
//Function Number: 8
func_3A28()
{
level endon("game_ended");
maps\mp\_utility::gameflagwait("prematch_done");
level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN";
level.infect_timerdisplay settimer(8);
level.infect_timerdisplay.alpha = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(8);
level.infect_timerdisplay.alpha = 0;
var_00 = level.players[randomint(level.players.size)];
var_00.infect_isbeingchosen = 1;
var_00 endon("disconnect");
while(!maps\mp\_utility::isreallyalive(var_00) || var_00 maps\mp\_utility::isusingremote())
{
wait 0.05;
}
if(isdefined(var_00.iscarrying) && var_00.iscarrying == 1)
{
var_00 notify("force_cancel_placement");
wait 0.05;
}
if(var_00 maps\mp\_utility::isjuggernaut())
{
var_00 notify("lost_juggernaut");
wait 0.05;
}
var_00 maps\mp\gametypes\_playerlogic::removefromalivecount();
var_00 maps\mp\gametypes\_menus::addtoteam("axis");
level.infect_chosefirstinfected = 1;
var_00.infect_isbeingchosen = undefined;
var_00.isinitialinfected = 1;
level.infect_teamscores["allies"]--;
level.infect_teamscores["axis"]++;
func_3A2B();
var_01 = maps\mp\_utility::getwatcheddvar("numlives");
if(var_01 && var_00.pers["lives"])
{
var_00.pers["lives"]--;
}
var_00 maps\mp\gametypes\_playerlogic::addtoalivecount();
var_00.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
var_02 = spawn("script_model",var_00.origin);
var_02.angles = var_00.angles;
var_02.playerspawnpos = var_00.origin;
var_02.notti = 1;
var_00.setspawnpoint = var_02;
var_00 notify("faux_spawn");
var_00.faux_spawn_stance = var_00 getstance();
var_00 thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
thread maps\mp\_utility::teamplayercardsplash("callout_first_mercenary",var_00);
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
}
//Function Number: 9
func_3A2A()
{
level endon("game_ended");
self.isinitialinfected = undefined;
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
while(!maps\mp\_utility::isreallyalive(self))
{
wait 0.05;
}
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis"];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 10
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_01) && isplayer(param_01) && param_01 != self && self.team == "allies" && self.team != param_01.team)
{
self.addtoteam = "axis";
level.infect_teamscores["allies"]--;
level.infect_teamscores["axis"]++;
func_3A2B();
if(isdefined(param_01.isinitialinfected))
{
param_01 thread func_3A2A();
}
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DRAFTED");
lib_036E::func_2B7B("draft_rogue",param_01,self,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("draft_rogue");
if(level.infect_teamscores["allies"] > 1)
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","allies");
maps\mp\_utility::playsoundonplayers("mp_war_objective_taken","axis");
thread maps\mp\_utility::teamplayercardsplash("callout_got_drafted",self,"allies");
thread maps\mp\_utility::teamplayercardsplash("callout_drafted_rogue",param_01,"axis");
foreach(var_0B in level.players)
{
if(var_0B.team == "allies" && var_0B != self)
{
var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_SURVIVOR");
lib_036E::func_2B7B("survivor",var_0B,undefined,1);
var_0B thread maps\mp\gametypes\_rank::giverankxp("survivor");
}
}
}
if(level.infect_teamscores["allies"] == 1)
{
maps\mp\_utility::playsoundonplayers("mp_obj_captured");
foreach(var_0B in level.players)
{
if(var_0B.team == "allies" && var_0B != self)
{
var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_FINAL_ROGUE");
lib_036E::func_2B7B("final_rogue",var_0B,undefined,1);
var_0B thread maps\mp\gametypes\_rank::giverankxp("final_rogue");
thread maps\mp\_utility::teamplayercardsplash("callout_final_rogue",var_0B);
break;
}
}
return;
}
if(level.infect_teamscores["allies"] == 0)
{
level.finalkillcam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]);
return;
}
}
}
//Function Number: 11
ondisconnect()
{
level endon("game_ended");
self endon("eliminated");
self waittill("disconnect");
if(self.team == "spectator")
{
return;
}
level.infect_teamscores[self.team]--;
func_3A2B();
if(isdefined(self.infect_isbeingchosen) || level.infect_chosefirstinfected)
{
if(level.infect_teamscores["allies"] == 0)
{
level.finalkillcam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]);
return;
}
if(level.infect_teamscores["axis"] == 0)
{
if(level.infect_teamscores["allies"] > 1)
{
level.infect_chosefirstinfected = 0;
level thread func_3A28();
return;
}
level.finalkillcam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["allies_eliminated"]);
return;
}
}
}
//Function Number: 12
onplayereliminated()
{
level endon("game_ended");
for(;;)
{
level waittill("player_eliminated",var_00);
var_00 notify("eliminated");
level.infect_teamscores[var_00.team]--;
func_3A2B();
if(level.infect_teamscores["allies"] == 0)
{
level.finalkillcam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]);
continue;
}
if(level.infect_teamscores["axis"] == 0)
{
level.finalkillcam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["axis_eliminated"]);
}
}
}
//Function Number: 13
ondeadevent(param_00)
{
}
//Function Number: 14
ontimelimit()
{
level.finalkillcam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]);
}
//Function Number: 15
func_3A2B()
{
game["teamScores"]["axis"] = level.infect_teamscores["axis"];
setteamscore("axis",level.infect_teamscores["axis"]);
game["teamScores"]["allies"] = level.infect_teamscores["allies"];
setteamscore("allies",level.infect_teamscores["allies"]);
}
//Function Number: 16
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse"))
{
level.infect_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",0);
level.infect_loadouts["axis"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none";
}
else
{
level.infect_loadouts["axis"]["loadoutPrimary"] = "iw5_fmg9";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment"] = "reflex";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.infect_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["axis"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp";
level.infect_loadouts["axis"]["loadoutOffhand"] = "none";
level.infect_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint";
level.infect_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw";
level.infect_loadouts["axis"]["loadoutPerk3"] = "specialty_quieter";
level.infect_loadouts["axis"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath";
level.infect_loadouts["axis"]["loadoutJuggernaut"] = 0;
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.infect_loadouts["axis_initial"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none";
}
else
{
level.infect_loadouts["axis_initial"]["loadoutPrimary"] = "iw5_scar";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment"] = "reflex";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment2"] = "xmags";
level.infect_loadouts["axis_initial"]["loadoutPrimaryBuff"] = "specialty_bling";
level.infect_loadouts["axis_initial"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["axis_initial"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["axis_initial"]["loadoutEquipment"] = "specialty_null";
level.infect_loadouts["axis_initial"]["loadoutOffhand"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPerk1"] = "specialty_longersprint";
level.infect_loadouts["axis_initial"]["loadoutPerk2"] = "specialty_quickdraw";
level.infect_loadouts["axis_initial"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis_initial"]["loadoutDeathstreak"] = "specialty_grenadepulldeath";
level.infect_loadouts["axis_initial"]["loadoutJuggernaut"] = 0;
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",0,"class","inUse"))
{
level.infect_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",0);
return;
}
level.infect_loadouts["allies"]["loadoutPrimary"] = "iw5_spas12";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment"] = "silencer03";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_longerrange";
level.infect_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["allies"]["loadoutSecondary"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["allies"]["loadoutEquipment"] = "claymore_mp";
level.infect_loadouts["allies"]["loadoutOffhand"] = "flash_grenade_mp";
level.infect_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger";
level.infect_loadouts["allies"]["loadoutPerk2"] = "specialty_quickdraw";
level.infect_loadouts["allies"]["loadoutPerk3"] = "specialty_quieter";
level.infect_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null";
level.infect_loadouts["allies"]["loadoutJuggernaut"] = 0;
}

View File

@ -0,0 +1,424 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\jugg.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 17
* Decompile Time: 232 ms
* Timestamp: 10/27/2023 2:13:19 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerscorelimitdvar(level.gametype,10);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_respawnnewjugg = 0;
level.matchrules_showjuggradaricon = 1;
level.matchrules_showjuggworldicon = 0;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
func_3989();
level.teambased = 1;
level.doprematch = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onplayerkilled = ::onplayerkilled;
level.ontimelimit = ::ontimelimit;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_respawnnewjugg = getmatchrulesdata("juggData","respawnNewJugg");
level.matchrules_showjuggradaricon = getmatchrulesdata("juggData","showJuggRadarIcon");
level.matchrules_showjuggworldicon = getmatchrulesdata("juggData","showJuggWorldIcon");
setdynamicdvar("scr_jugg_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("jugg",0,0,9);
setdynamicdvar("scr_jugg_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("jugg",1);
setdynamicdvar("scr_jugg_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("jugg",1);
setdynamicdvar("scr_jugg_halftime",0);
maps\mp\_utility::registerhalftimedvar("jugg",0);
setdynamicdvar("scr_jugg_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachestring(&"MP_JUGG_NEXT_JUGG_IN");
precacheshader("waypoint_kill");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_JUGG");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_JUGG");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_JUGG");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_JUGG");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_JUGG_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_JUGG_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_JUGG_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_JUGG_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250);
maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",50);
var_00 = [];
maps\mp\gametypes\_gameobjects::main(var_00);
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level.jugg_juggernaut = undefined;
level.jugg_choosingjugg = 0;
level thread onplayerconnect();
level.jugg_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4);
level.jugg_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5);
level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN";
level.jugg_timerdisplay.alpha = 0;
level.jugg_timerdisplay.archived = 0;
level.jugg_timerdisplay.hidewheninmenu = 1;
thread func_39A2(level.jugg_timerdisplay);
level.killstreakrewards = 0;
}
//Function Number: 5
func_3A33()
{
level endon("game_ended");
level notify("chooseInitialJugg");
level endon("chooseInitialJugg");
maps\mp\_utility::gameflagwait("prematch_done");
level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN";
level.jugg_timerdisplay settimer(8);
level.jugg_timerdisplay.alpha = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(8);
level.jugg_timerdisplay.alpha = 0;
func_3A38(level.players[randomint(level.players.size)],undefined,1);
}
//Function Number: 6
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.jugg_juggscore = 0;
var_00.jugg_firstspawn = 1;
var_00 thread ondisconnect();
}
}
//Function Number: 7
ondisconnect()
{
level endon("game_ended");
self waittill("disconnect");
func_3A3A();
}
//Function Number: 8
onspawnplayer()
{
if(!level.jugg_choosingjugg)
{
level.jugg_choosingjugg = 1;
level thread func_3A33();
}
self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]];
level notify("spawned_player");
}
//Function Number: 9
getspawnpoint()
{
if(self.jugg_firstspawn)
{
self.jugg_firstspawn = 0;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
maps\mp\gametypes\_menus::addtoteam("axis",1);
}
if(level.ingraceperiod)
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn");
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00);
}
else
{
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01);
}
return var_01;
}
//Function Number: 10
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_01) && isplayer(param_01) && param_01 != self)
{
if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self)
{
if(level.matchrules_showjuggworldicon)
{
self.jugg_headicon destroy();
}
func_3A38(param_01,self);
return;
}
if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == param_01)
{
param_01.jugg_juggscore++;
param_01 lib_036E::func_2B88(param_01.pers["team"],1);
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL");
lib_036E::func_2B7B("kill_as_juggernaut",param_01,self,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_as_juggernaut");
return;
}
return;
}
if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self)
{
self.addtoteam = "axis";
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
level.jugg_juggernaut = undefined;
level thread func_3A33();
}
}
//Function Number: 11
func_3A38(param_00,param_01,param_02)
{
if(isdefined(param_01))
{
param_01.addtoteam = "axis";
}
if(isdefined(level.jugg_juggernaut))
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
level.jugg_juggernaut = undefined;
}
else
{
maps\mp\_utility::playsoundonplayers("mp_obj_captured");
}
param_00 endon("disconnect");
param_00 thread func_0038();
if(param_00 maps\mp\_utility::isjuggernaut())
{
param_00 notify("lost_juggernaut");
wait 0.05;
}
while(!isalive(param_00))
{
wait 0.05;
}
param_00 maps\mp\gametypes\_menus::addtoteam("allies");
level.jugg_juggernaut = param_00;
if(isdefined(param_02))
{
func_3A3A();
}
else
{
param_00.jugg_juggscore++;
func_3A3A();
param_00 lib_036E::func_2B88("allies",1);
}
if(isdefined(param_02))
{
param_00 thread func_3A39(1);
return;
}
param_00 thread func_3A39();
}
//Function Number: 12
func_3A39(param_00)
{
self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]];
if(level.matchrules_respawnnewjugg)
{
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
else
{
var_01 = spawn("script_model",self.origin);
var_01.angles = self.angles;
var_01.playerspawnpos = self.origin;
var_01.notti = 1;
self.setspawnpoint = var_01;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
if(level.matchrules_showjuggworldicon)
{
self.jugg_headicon = maps\mp\_entityheadicons::setheadicon(level.otherteam[self.team],"waypoint_kill",(0,0,85),24,24,undefined,undefined,undefined,undefined,undefined,0);
}
if(!isdefined(param_00))
{
var_02 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut");
thread maps\mp\gametypes\_hud_message::splashnotify("got_juggernaut",var_02);
lib_036E::func_2B7B("got_juggernaut",self,undefined,1);
thread maps\mp\gametypes\_rank::giverankxp("got_juggernaut");
}
level thread maps\mp\_utility::teamplayercardsplash("callout_new_juggernaut",self,level.otherteam[self.team]);
}
//Function Number: 13
func_3A3A()
{
if(isdefined(level.jugg_juggernaut))
{
game["teamScores"]["allies"] = level.jugg_juggernaut.jugg_juggscore;
setteamscore("allies",level.jugg_juggernaut.jugg_juggscore);
}
else
{
game["teamScores"]["allies"] = 0;
setteamscore("allies",0);
}
game["teamScores"]["axis"] = 0;
setteamscore("axis",0);
}
//Function Number: 14
func_0038()
{
level endon("game_ended");
self endon("death");
self waittill("disconnect");
level thread func_3A33();
}
//Function Number: 15
ontimelimit()
{
level.finalkillcam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]);
}
//Function Number: 16
func_39A2(param_00)
{
level waittill("game_ended");
param_00.alpha = 0;
}
//Function Number: 17
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse"))
{
level.jugg_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",0);
level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0;
}
else
{
level.jugg_loadouts["axis"]["loadoutPrimary"] = "iw5_usas12";
level.jugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.jugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.jugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_longerrange";
level.jugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.jugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.jugg_loadouts["axis"]["loadoutSecondary"] = "iw5_44magnum";
level.jugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.jugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.jugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.jugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.jugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.jugg_loadouts["axis"]["loadoutEquipment"] = "claymore_mp";
level.jugg_loadouts["axis"]["loadoutOffhand"] = "flash_grenade_mp";
level.jugg_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint";
level.jugg_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw";
level.jugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.jugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath";
level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0;
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse"))
{
level.jugg_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5);
level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1;
return;
}
level.jugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar";
level.jugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none";
level.jugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none";
level.jugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration";
level.jugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
level.jugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none";
level.jugg_loadouts["allies"]["loadoutSecondary"] = "rpg";
level.jugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none";
level.jugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none";
level.jugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null";
level.jugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
level.jugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none";
level.jugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp";
level.jugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp";
level.jugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger";
level.jugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield";
level.jugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.jugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null";
level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,510 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\oneflag.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 23
* Decompile Time: 321 ms
* Timestamp: 10/27/2023 2:13:21 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
maps\mp\_utility::registertimelimitdvar(level.gametype,3,0,1440);
maps\mp\_utility::registerscorelimitdvar(level.gametype,1,0,10000);
maps\mp\_utility::registerroundlimitdvar(level.gametype,0,0,30);
maps\mp\_utility::registerwinlimitdvar(level.gametype,4,0,10);
maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30);
maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10);
maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1);
level.objectivebased = 1;
level.teambased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onplayerkilled = ::onplayerkilled;
level.ontimelimit = ::ontimelimit;
level.initgametypeawards = ::initgametypeawards;
game["dialog"]["gametype"] = "oneflag";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
if(getdvar("scr_oneflag_returntime") == "")
{
setdvar("scr_oneflag_returntime","15");
}
level.flagreturntime = getdvarint("scr_oneflag_returntime");
}
//Function Number: 2
onprecachegametype()
{
precachestring(&"MP_FLAG_TAKEN_BY");
precachestring(&"MP_ENEMY_FLAG_TAKEN_BY");
precachestring(&"MP_FLAG_CAPTURED_BY");
precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY");
precachestring(&"MP_FLAG_RETURNED");
precachestring(&"MP_ENEMY_FLAG_RETURNED");
precachestring(&"MP_YOUR_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_RETURNING_IN");
precachestring(&"MP_ENEMY_FLAG_DROPPED_BY");
precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
}
//Function Number: 3
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(!isdefined(game["original_defenders"]))
{
game["original_defenders"] = game["defenders"];
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE");
}
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_02[0] = "ctf";
maps\mp\gametypes\_gameobjects::main(var_02);
maps\mp\gametypes\_rank::registerscoreinfo("kill",100);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",100);
maps\mp\gametypes\_rank::registerscoreinfo("assist",20);
maps\mp\gametypes\_rank::registerscoreinfo("pickup",100);
maps\mp\gametypes\_rank::registerscoreinfo("return",50);
maps\mp\gametypes\_rank::registerscoreinfo("capture",500);
maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",100);
maps\mp\gametypes\_rank::registerscoreinfo("defend",100);
maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100);
maps\mp\gametypes\_rank::registerscoreinfo("assault",200);
maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40);
thread func_39B6();
}
//Function Number: 4
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 5
onspawnplayer()
{
self.usingobj = undefined;
}
//Function Number: 6
func_39B6()
{
level.flagmodel["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies");
level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies");
level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies");
precachemodel(level.flagmodel["allies"]);
precachemodel(level.carryflag["allies"]);
level.flagmodel["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis");
level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis");
level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis");
precachemodel(level.flagmodel["axis"]);
precachemodel(level.carryflag["axis"]);
level.iconcapture3d = "waypoint_capture";
level.iconcapture2d = "compass_waypoint_capture";
level.icondefend3d = "waypoint_defend";
level.icondefend2d = "compass_waypoint_defend";
level.icontarget3d = "waypoint_target";
level.icontarget2d = "compass_waypoint_target";
precacheshader(level.icon2d["axis"]);
precacheshader(level.icon2d["allies"]);
precacheshader(level.iconcapture3d);
precacheshader(level.icondefend3d);
precacheshader(level.iconcapture2d);
precacheshader(level.icondefend2d);
precacheshader(level.icontarget3d);
precacheshader(level.icontarget2d);
precacheshader("waypoint_kill");
level.teamflags[game["defenders"]] = func_39C2(game["defenders"]);
level.capzones[game["attackers"]] = func_39C3(game["attackers"]);
level.flagcaptured = 0;
}
//Function Number: 7
spawnfxdelay(param_00,param_01,param_02,param_03,param_04)
{
wait param_04;
var_05 = spawnfx(param_00,param_01,param_02,param_03);
triggerfx(var_05);
}
//Function Number: 8
func_39C2(param_00)
{
var_01 = game["original_defenders"];
var_02 = getent("ctf_trig_" + var_01,"targetname");
if(!isdefined(var_02))
{
common_scripts\utility::error("No ctf_trig_" + var_01 + " trigger found in map.");
return;
}
var_03[0] = getent("ctf_flag_" + var_01,"targetname");
if(!isdefined(var_03[0]))
{
common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map.");
return;
}
var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height);
var_02 delete();
var_02 = var_04;
var_03[0] setmodel(level.flagmodel[param_00]);
var_05 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_03,(0,0,85));
var_05 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",15);
var_05 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0);
var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_CAPTURING_FLAG");
var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG");
var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy");
var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d);
var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcapture2d);
var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d);
var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]);
var_05.allowweapons = 1;
var_05.onpickup = ::onpickup;
var_05.onpickupfailed = ::onpickup;
var_05.ondrop = ::ondrop;
var_05.onreset = ::onreset;
var_05.oldradius = var_02.radius;
var_06 = var_02.origin + (0,0,32);
var_07 = var_02.origin + (0,0,-32);
var_08 = bullettrace(var_06,var_07,0,undefined);
var_09 = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_0A = loadfx(var_09);
var_0B = vectortoangles(var_08["normal"]);
var_0C = anglestoforward(var_0B);
var_0D = anglestoright(var_0B);
thread spawnfxdelay(var_0A,var_08["position"],var_0C,var_0D,0.5);
return var_05;
}
//Function Number: 9
func_39C3(param_00)
{
var_01 = level.otherteam[game["original_defenders"]];
var_02 = getent("ctf_zone_" + var_01,"targetname");
if(!isdefined(var_02))
{
common_scripts\utility::error("No ctf_zone_" + var_01 + " trigger found in map.");
return;
}
var_03[0] = getent("ctf_flag_" + var_01,"targetname");
if(!isdefined(var_03[0]))
{
common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map.");
return;
}
var_03[0] hide();
var_03 = [];
var_04 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_02,var_03,(0,0,85));
var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly");
var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d);
var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icontarget3d);
var_04 maps\mp\gametypes\_gameobjects::setusetime(0);
var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)]);
var_04.onuse = ::onuse;
var_04.oncantuse = ::oncantuse;
var_05 = var_02.origin + (0,0,32);
var_06 = var_02.origin + (0,0,-32);
var_07 = bullettrace(var_05,var_06,0,undefined);
var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00);
var_09 = loadfx(var_08);
var_0A = vectortoangles(var_07["normal"]);
var_0B = anglestoforward(var_0A);
var_0C = anglestoright(var_0A);
thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5);
return var_04;
}
//Function Number: 10
onbeginuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
self.trigger.radius = 1024;
return;
}
self.trigger.radius = self.oldradius;
}
//Function Number: 11
onenduse(param_00,param_01,param_02)
{
self.trigger.radius = self.oldradius;
}
//Function Number: 12
onpickup(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("pickup"));
param_00 thread [[ level.onxpevent ]]("pickup");
thread func_39C4();
param_00 maps\mp\_utility::incplayerstat("flagsreturned",1);
param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin);
return;
}
param_00 func_39C5();
level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_kill");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d);
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00);
maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status");
maps\mp\_utility::leaderdialog("flag_taken",var_02,"status");
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup"));
lib_036E::func_2B7B("pickup",param_00);
param_00 thread [[ level.onxpevent ]]("pickup");
param_00 maps\mp\_utility::incplayerstat("flagscarried",1);
param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin);
}
//Function Number: 13
func_39C4()
{
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
var_01 = level.otherteam[var_00];
maps\mp\gametypes\_gameobjects::returnhome();
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::allowcarry("enemy");
level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
maps\mp\_utility::printandsoundoneveryone(var_00,maps\mp\_utility::getotherteam(var_00),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned","");
maps\mp\_utility::leaderdialog("enemy_flag_returned",var_01,"status");
maps\mp\_utility::leaderdialog("flag_returned",var_00,"status");
}
//Function Number: 14
ondrop(param_00)
{
var_01 = maps\mp\gametypes\_gameobjects::getownerteam();
var_02 = level.otherteam[var_01];
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d);
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d);
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::allowcarry("any");
level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
if(isdefined(param_00))
{
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00);
}
else
{
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02);
}
maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status");
maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status");
}
//Function Number: 15
onreset()
{
self notify("flag_reset");
var_00 = maps\mp\gametypes\_gameobjects::getownerteam();
var_01 = level.otherteam[var_00];
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d);
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d);
level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
}
//Function Number: 16
onuse(param_00)
{
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status");
maps\mp\_utility::leaderdialog("flag_captured",var_02,"status");
lib_036E::func_2B7B("capture",param_00);
param_00 thread [[ level.onxpevent ]]("capture");
param_00 maps\mp\_utility::incplayerstat("flagscaptured",1);
param_00 notify("objective","captured");
param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin);
maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00);
thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
level.teamflags[var_02] maps\mp\gametypes\_gameobjects::allowcarry("none");
level.teamflags[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.teamflags[var_02] maps\mp\gametypes\_gameobjects::disableobject();
level.capzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none");
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
}
//Function Number: 17
flagcaptured(param_00,param_01)
{
maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
level.flagcaptured = 1;
}
//Function Number: 18
ontimelimit()
{
if(level.flagcaptured)
{
return;
}
maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]);
}
//Function Number: 19
oncantuse(param_00)
{
}
//Function Number: 20
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"])
{
if(isdefined(param_01.carryflag))
{
param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1);
}
if(isdefined(self.carryflag))
{
param_01 thread [[ level.onxpevent ]]("kill_carrier");
lib_036E::func_2B7B("kill_carrier",param_01);
param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1);
thread maps\mp\_matchdata::logkillevent(param_09,"carrying");
func_39C6();
}
}
}
//Function Number: 21
func_39C5()
{
var_00 = level.otherteam[self.pers["team"]];
self attach(level.carryflag[var_00],"J_spine4",1);
self.carryflag = level.carryflag[var_00];
}
//Function Number: 22
func_39C6()
{
self detach(self.carryflag,"J_spine4");
self.carryflag = undefined;
}
//Function Number: 23
initgametypeawards()
{
maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins);
}

View File

@ -0,0 +1,992 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\sab.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 37
* Decompile Time: 3341 ms
* Timestamp: 10/27/2023 2:13:32 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
level.teambased = 1;
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,0);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
maps\mp\_utility::setovertimelimitdvar(2);
func_3989();
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.ononeleftevent = ::ononeleftevent;
level.ontimelimit = ::ontimelimit;
level.onnormaldeath = ::onnormaldeath;
level.initgametypeawards = ::initgametypeawards;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "sabotage";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "capture_obj";
game["dialog"]["defense_obj"] = "capture_obj";
var_00 = getent("sab_bomb_defuse_allies","targetname");
if(isdefined(var_00))
{
var_00 delete();
}
var_00 = getent("sab_bomb_defuse_axis","targetname");
if(isdefined(var_00))
{
var_00 delete();
}
makedvarserverinfo("ui_bomb_timer_endtime",-1);
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar("scr_sab_bombtimer",getmatchrulesdata("sabData","bombTimer"));
setdynamicdvar("scr_sab_planttime",getmatchrulesdata("sabData","plantTime"));
setdynamicdvar("scr_sab_defusetime",getmatchrulesdata("sabData","defuseTime"));
setdynamicdvar("scr_sab_hotpotato",getmatchrulesdata("sabData","sharedBombTimer"));
setdynamicdvar("scr_sab_roundswitch",1);
maps\mp\_utility::registerroundswitchdvar("sab",1,0,9);
setdynamicdvar("scr_sab_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("sab",1);
setdynamicdvar("scr_sab_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("sab",1);
setdynamicdvar("scr_sab_halftime",0);
maps\mp\_utility::registerhalftimedvar("sab",0);
setdynamicdvar("scr_sab_promode",0);
}
//Function Number: 3
onprecachegametype()
{
game["bomb_dropped_sound"] = "mp_war_objective_lost";
game["bomb_recovered_sound"] = "mp_war_objective_taken";
precacheshader("waypoint_bomb");
precacheshader("waypoint_kill");
precacheshader("waypoint_bomb_enemy");
precacheshader("waypoint_defend");
precacheshader("waypoint_defuse");
precacheshader("waypoint_target");
precacheshader("waypoint_escort");
precacheshader("waypoint_bomb");
precacheshader("waypoint_defend");
precacheshader("waypoint_defuse");
precacheshader("waypoint_target");
precacheshader("hud_suitcase_bomb");
precachestring(&"MP_EXPLOSIVES_RECOVERED_BY");
precachestring(&"MP_EXPLOSIVES_DROPPED_BY");
precachestring(&"MP_EXPLOSIVES_PLANTED_BY");
precachestring(&"MP_EXPLOSIVES_DEFUSED_BY");
precachestring(&"MP_YOU_HAVE_RECOVERED_THE_BOMB");
precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES");
precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES");
precachestring(&"MP_PLANTING_EXPLOSIVE");
precachestring(&"MP_DEFUSING_EXPLOSIVE");
precachestring(&"MP_TARGET_DESTROYED");
precachestring(&"MP_NO_RESPAWN");
precachestring(&"MP_TIE_BREAKER");
precachestring(&"MP_NO_RESPAWN");
precachestring(&"MP_SUDDEN_DEATH");
}
//Function Number: 4
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
setclientnamemode("auto_change");
game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED";
game["strings"]["target_defended"] = &"MP_TARGET_DEDEFEND";
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_SAB");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_SAB");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_SAB");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_SAB");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_SAB_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_SAB_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_SAB_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_SAB_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_sab_spawn_allies");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_sab_spawn_axis");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_sab_spawn_allies_planted",1);
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_sab_spawn_axis_planted",1);
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
level.spawn_axis = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis");
level.spawn_axis_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_planted");
level.spawn_axis_planted = common_scripts\utility::array_combine(level.spawn_axis_planted,level.spawn_axis);
level.spawn_allies = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies");
level.spawn_allies_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_planted");
level.spawn_allies_planted = common_scripts\utility::array_combine(level.spawn_allies_planted,level.spawn_allies);
level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_start");
level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_start");
maps\mp\gametypes\_rank::registerscoreinfo("plant",200);
maps\mp\gametypes\_rank::registerscoreinfo("destroy",1000);
maps\mp\gametypes\_rank::registerscoreinfo("defuse",150);
var_00[0] = "sab";
maps\mp\gametypes\_gameobjects::main(var_00);
thread updategametypedvars();
thread func_397C();
}
//Function Number: 5
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.usestartspawns)
{
if(var_00 == "axis")
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start);
}
}
else if(isdefined(level.bombplanted) && level.bombplanted && isdefined(level.bombowner) && var_01 == level.bombowner.team)
{
if(var_01 == "axis")
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_axis_planted);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_allies_planted);
}
}
else if(var_01 == "axis")
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_axis);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_allies);
}
return var_01;
}
//Function Number: 6
onspawnplayer()
{
self.isplanting = 0;
self.isdefusing = 0;
self.isbombcarrier = 0;
if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned))
{
thread func_3979();
}
}
//Function Number: 7
func_3979()
{
self endon("disconnect");
wait 0.25;
thread maps\mp\gametypes\_hud_message::splashnotify("sudden_death");
self.otspawned = 1;
}
//Function Number: 8
updategametypedvars()
{
level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20);
level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20);
level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300);
level.hotpotato = maps\mp\_utility::dvarintvalue("hotpotato",1,0,1);
level.scoremode = maps\mp\_utility::getwatcheddvar("scorelimit");
}
//Function Number: 9
func_397C()
{
level.bombplanted = 0;
level.bombexploded = 0;
level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion");
var_00 = getent("sab_bomb_pickup_trig","targetname");
if(!isdefined(var_00))
{
common_scripts\utility::error("No sab_bomb_pickup_trig trigger found in map.");
return;
}
var_01[0] = getent("sab_bomb","targetname");
if(!isdefined(var_01[0]))
{
common_scripts\utility::error("No sab_bomb script_model found in map.");
return;
}
precachemodel("prop_suitcase_bomb");
var_01[0] setmodel("prop_suitcase_bomb");
level.sabbomb = maps\mp\gametypes\_gameobjects::createcarryobject("neutral",var_00,var_01,(0,0,32));
level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any");
level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb");
level.sabbomb maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_bomb");
level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb");
level.sabbomb maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb");
level.sabbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb");
level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("any");
level.sabbomb.objidpingenemy = 1;
level.sabbomb.onpickup = ::onpickup;
level.sabbomb.ondrop = ::ondrop;
level.sabbomb.allowweapons = 1;
level.sabbomb.objpoints["allies"].archived = 1;
level.sabbomb.objpoints["axis"].archived = 1;
level.sabbomb.autoresettime = 60;
if(!isdefined(getent("sab_bomb_axis","targetname")))
{
common_scripts\utility::error("No sab_bomb_axis trigger found in map.");
return;
}
if(!isdefined(getent("sab_bomb_allies","targetname")))
{
common_scripts\utility::error("No sab_bomb_allies trigger found in map.");
return;
}
if(game["switchedsides"])
{
level.bombzones["allies"] = func_3982("allies",getent("sab_bomb_axis","targetname"));
level.bombzones["axis"] = func_3982("axis",getent("sab_bomb_allies","targetname"));
}
else
{
level.bombzones["allies"] = func_3982("allies",getent("sab_bomb_allies","targetname"));
level.bombzones["axis"] = func_3982("axis",getent("sab_bomb_axis","targetname"));
}
if(level.scoremode)
{
level thread func_3980();
}
if(maps\mp\_utility::inovertime())
{
level thread func_3984();
}
}
//Function Number: 10
func_397E()
{
if(distance2d(self.origin,level.bombzones["allies"].trigger.origin) < distance2d(self.origin,level.bombzones["axis"].trigger.origin))
{
return "allies";
}
return "axis";
}
//Function Number: 11
func_397F(param_00)
{
return distance2d(self.origin,level.bombzones[param_00].trigger.origin);
}
//Function Number: 12
func_3980()
{
level.bombdistance = distance2d(getent("sab_bomb_axis","targetname") getorigin(),getent("sab_bomb_allies","targetname") getorigin());
var_00 = level.bombdistance / 2 - 384;
var_01 = level.sabbomb.trigger;
if(var_00 > var_01 func_397F("allies") || var_00 > var_01 func_397F("axis"))
{
var_00 = var_01 func_397F(var_01 func_397E()) - 128;
}
var_02 = "";
for(;;)
{
if(isdefined(level.sabbomb.carrier))
{
var_01 = level.sabbomb.carrier;
}
else
{
var_01 = level.sabbomb.trigger;
}
var_03 = var_02;
var_02 = "none";
if(var_01 func_397F("allies") < var_00)
{
var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::getownerteam();
}
else if(var_01 func_397F("axis") < var_00)
{
var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::getownerteam();
}
else if(var_01 func_397F("allies") > level.bombdistance && var_01 func_397E() != "allies")
{
var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::getownerteam();
}
else if(var_01 func_397F("axis") > level.bombdistance && var_01 func_397E() != "axis")
{
var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::getownerteam();
}
if(var_02 != "none")
{
if(!level.bombplanted || !maps\mp\_utility::getwatcheddvar("scorelimit") || level.bombplanted && lib_036E::func_2B96(level.otherteam[var_02]) < maps\mp\_utility::getwatcheddvar("scorelimit") - 1)
{
lib_036E::func_2B8F(level.otherteam[var_02],lib_036E::func_2B96(level.otherteam[var_02]) + 1);
lib_036E::func_2B93(level.otherteam[var_02]);
}
}
if(var_02 != var_03 && !level.bombexploded)
{
setdvar("ui_danger_team",var_02);
}
wait 2.5;
}
}
//Function Number: 13
func_3982(param_00,param_01)
{
var_02 = getentarray(param_01.target,"targetname");
var_03 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,param_01,var_02,(0,0,64));
var_03 func_3987();
var_03.onuse = ::onuse;
var_03.onbeginuse = ::onbeginuse;
var_03.onenduse = ::onenduse;
var_03.oncantuse = ::oncantuse;
var_03.useweapon = "briefcase_bomb_mp";
for(var_04 = 0;var_04 < var_02.size;var_04++)
{
if(isdefined(var_02[var_04].script_exploder))
{
var_03.exploderindex = var_02[var_04].script_exploder;
var_02[var_04] thread func_3967();
break;
}
}
return var_03;
}
//Function Number: 14
func_3967()
{
var_00 = spawn("script_origin",self.origin);
var_00.angles = self.angles;
var_00 rotateyaw(-45,0.05);
wait 0.05;
var_01 = self.origin + (0,0,5);
var_02 = self.origin + anglestoforward(var_00.angles) * 100 + (0,0,128);
var_03 = bullettrace(var_01,var_02,0,self);
self.killcament = spawn("script_model",var_03["position"]);
self.killcament setscriptmoverkillcam("explosive");
var_00 delete();
}
//Function Number: 15
onbeginuse(param_00)
{
if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"]))
{
param_00.isplanting = 1;
return;
}
param_00.isdefusing = 1;
}
//Function Number: 16
onenduse(param_00,param_01,param_02)
{
if(!isalive(param_01))
{
return;
}
param_01.isplanting = 0;
param_01.isdefusing = 0;
}
//Function Number: 17
onpickup(param_00)
{
level notify("bomb_picked_up");
self.autoresettime = 60;
level.usestartspawns = 0;
var_01 = param_00.pers["team"];
if(var_01 == "allies")
{
var_02 = "axis";
}
else
{
var_02 = "allies";
}
param_00 playlocalsound("mp_suitcase_pickup");
param_00 maps\mp\_utility::leaderdialogonplayer("obj_destroy","bomb");
var_03[0] = param_00;
maps\mp\_utility::leaderdialog("bomb_taken",var_01,"bomb",var_03);
if(!level.splitscreen)
{
maps\mp\_utility::leaderdialog("bomb_lost",var_02,"bomb");
maps\mp\_utility::leaderdialog("obj_defend",var_02,"bomb");
}
param_00.isbombcarrier = 1;
if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01]))
{
param_00 thread func_396C();
}
if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam())
{
maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"],var_01);
}
else
{
maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"]);
}
maps\mp\gametypes\_gameobjects::setownerteam(var_01);
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_kill");
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_escort");
level.bombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.bombzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("any");
param_00 maps\mp\_utility::incplayerstat("bombscarried",1);
param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin);
}
//Function Number: 18
ondrop(param_00)
{
if(level.bombplanted)
{
return;
}
if(isdefined(param_00))
{
maps\mp\_utility::printonteamarg(&"MP_EXPLOSIVES_DROPPED_BY",maps\mp\gametypes\_gameobjects::getownerteam(),param_00);
}
maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],maps\mp\gametypes\_gameobjects::getownerteam());
thread func_3983(0);
}
//Function Number: 19
func_3983(param_00)
{
level endon("bomb_picked_up");
wait param_00;
if(isdefined(self.carrier))
{
return;
}
if(maps\mp\gametypes\_gameobjects::getownerteam() == "allies")
{
var_01 = "axis";
}
else
{
var_01 = "allies";
}
maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],var_01);
maps\mp\gametypes\_gameobjects::setownerteam("neutral");
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_bomb");
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb");
level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
}
//Function Number: 20
onuse(param_00)
{
var_01 = param_00.pers["team"];
var_02 = level.otherteam[var_01];
if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"]))
{
param_00 notify("bomb_planted");
param_00 notify("objective","plant");
param_00 playsound("mp_bomb_plant");
level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00);
maps\mp\_utility::leaderdialog("bomb_planted");
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant"));
param_00 thread maps\mp\gametypes\_rank::giverankxp("plant");
lib_036E::func_2B7B("plant",param_00);
param_00 maps\mp\_utility::incplayerstat("bombsplanted",1);
param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin);
param_00.bombplantedtime = gettime();
param_00 maps\mp\_utility::incpersstat("plants",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","plants",param_00.pers["plants"]);
level thread bombplanted(self,param_00.pers["team"]);
level.bombowner = param_00;
if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01]))
{
param_00 thread func_396D();
}
level.sabbomb.autoresettime = undefined;
level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("none");
level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.sabbomb maps\mp\gametypes\_gameobjects::setdropped();
self.useweapon = "briefcase_bomb_defuse_mp";
func_3988();
return;
}
param_00 notify("bomb_defused");
param_00 notify("objective","defuse");
maps\mp\_utility::leaderdialog("bomb_defused");
level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00);
if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner))
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse"));
}
else
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse"));
}
param_00 thread maps\mp\gametypes\_rank::giverankxp("defuse");
lib_036E::func_2B7B("defuse",param_00);
param_00 maps\mp\_utility::incpersstat("defuses",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","defuses",param_00.pers["defuses"]);
param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin);
if(maps\mp\_utility::inovertime())
{
level.finalkillcam_winner = var_01;
thread maps\mp\gametypes\_gamelogic::endgame(var_01,game["strings"]["target_destroyed"]);
return;
}
level thread bombdefused(self);
func_3987();
level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any");
level.sabbomb maps\mp\gametypes\_gameobjects::setpickedup(param_00);
}
//Function Number: 21
func_396C()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = level.sab_loadouts[self.team];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self.gamemode_chosenclass = self.class;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "gamemode";
self.class = "gamemode";
self.lastclass = "gamemode";
self notify("faux_spawn");
self.gameobject_fauxspawn = 1;
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 22
func_396D()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = undefined;
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 23
oncantuse(param_00)
{
param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB");
}
//Function Number: 24
bombplanted(param_00,param_01)
{
level endon("overtime");
maps\mp\gametypes\_gamelogic::pausetimer();
level.bombplanted = 1;
level.timelimitoverride = 1;
level.scorelimitoverride = 1;
setdvar("ui_bomb_timer",1);
setgameendtime(int(gettime() + level.bombtimer * 1000));
param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::playtickingsound();
var_02 = gettime();
func_3970();
setdvar("ui_bomb_timer",0);
param_00.visuals[0] maps\mp\gametypes\_gamelogic::stoptickingsound();
if(!level.bombplanted)
{
if(level.hotpotato)
{
var_03 = gettime() - var_02 / 1000;
level.bombtimer = level.bombtimer - var_03;
}
return;
}
var_04 = level.sabbomb.visuals[0].origin;
level.bombexploded = 1;
setdvar("ui_danger_team","BombExploded");
if(isdefined(level.bombowner))
{
param_00.visuals[0] radiusdamage(var_04,512,200,20,level.bombowner,"MOD_EXPLOSIVE","bomb_site_mp");
level.bombowner maps\mp\_utility::incpersstat("destructions",1);
level.bombowner maps\mp\gametypes\_persistance::statsetchild("round","destructions",level.bombowner.pers["destructions"]);
}
else
{
param_00.visuals[0] radiusdamage(var_04,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp");
}
var_05 = randomfloat(360);
var_06 = spawnfx(level._effect["bombexplosion"],var_04 + (0,0,50),(0,0,1),(cos(var_05),sin(var_05),0));
triggerfx(var_06);
playrumbleonposition("grenade_rumble",var_04);
earthquake(0.75,2,var_04,2000);
thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_04);
if(isdefined(param_00.exploderindex))
{
common_scripts\utility::exploder(param_00.exploderindex);
}
level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none");
setgameendtime(0);
level.scorelimitoverride = 1;
if(level.scoremode)
{
lib_036E::func_2B8F(param_01,int(max(maps\mp\_utility::getwatcheddvar("scorelimit"),lib_036E::func_2B96(level.otherteam[param_01]) + 1)));
}
else
{
lib_036E::func_2B8F(param_01,1);
}
lib_036E::func_2B93(param_01);
if(isdefined(level.bombowner))
{
level.bombowner thread maps\mp\gametypes\_rank::giverankxp("destroy");
lib_036E::func_2B7B("destroy",level.bombowner);
level thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_objective",level.bombowner);
}
wait 3;
level.finalkillcam_winner = param_01;
thread maps\mp\gametypes\_gamelogic::endgame(param_01,game["strings"]["target_destroyed"]);
}
//Function Number: 25
func_3970()
{
level endon("bomb_defused");
level endon("overtime_ended");
var_00 = level.bombtimer * 1000 + gettime();
setdvar("ui_bomb_timer_endtime",var_00);
level thread func_3971(var_00);
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer);
}
//Function Number: 26
func_3971(param_00)
{
level endon("bomb_defused");
level endon("overtime_ended");
level endon("game_ended");
level endon("disconnect");
level waittill("host_migration_begin");
var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(var_01 > 0)
{
setdvar("ui_bomb_timer_endtime",param_00 + var_01);
}
}
//Function Number: 27
givelastonteamwarning()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
maps\mp\_utility::waittillrecoveredhealth(3);
var_00 = maps\mp\_utility::getotherteam(self.pers["team"]);
level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]);
level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00);
level notify("last_alive",self);
}
//Function Number: 28
ontimelimit()
{
if(level.bombexploded)
{
return;
}
if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
level.finalkillcam_winner = "axis";
thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]);
return;
}
if(game["teamScores"]["axis"] < game["teamScores"]["allies"])
{
level.finalkillcam_winner = "allies";
thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]);
return;
}
if(game["teamScores"]["axis"] == game["teamScores"]["allies"])
{
level.finalkillcam_winner = "none";
if(maps\mp\_utility::inovertime())
{
thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]);
return;
}
thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]);
return;
}
}
//Function Number: 29
func_3984(param_00)
{
level endon("game_ended");
level.inovertime = 1;
wait 5;
level.disablespawning = 1;
}
//Function Number: 30
func_3985()
{
level endon("game_ended");
if(common_scripts\utility::cointoss())
{
level.dangerteam = "allies";
}
else
{
level.dangerteam = "axis";
}
for(;;)
{
if(isdefined(level.sabbomb.carrier))
{
var_00 = level.sabbomb.carrier;
}
else
{
var_00 = level.sabbomb.visuals[0];
}
if(distance(var_00.origin,level.bombzones[maps\mp\_utility::getotherteam(level.dangerteam)].visuals[0].origin) < distance(var_00.origin,level.bombzones[level.dangerteam].visuals[0].origin))
{
level.dangerteam = maps\mp\_utility::getotherteam(level.dangerteam);
}
wait 0.05;
}
}
//Function Number: 31
func_3987()
{
maps\mp\gametypes\_gameobjects::allowuse("enemy");
maps\mp\gametypes\_gameobjects::setusetime(level.planttime);
maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE");
maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES");
maps\mp\gametypes\_gameobjects::setkeyobject(level.sabbomb);
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target");
maps\mp\gametypes\_gameobjects::setvisibleteam("none");
self.useweapon = "briefcase_bomb_mp";
}
//Function Number: 32
func_3988()
{
maps\mp\gametypes\_gameobjects::allowuse("friendly");
maps\mp\gametypes\_gameobjects::setusetime(level.defusetime);
maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE");
maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES");
maps\mp\gametypes\_gameobjects::setkeyobject(undefined);
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defuse");
maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend");
maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend");
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
}
//Function Number: 33
bombdefused(param_00)
{
setdvar("ui_bomb_timer",0);
maps\mp\gametypes\_gamelogic::resumetimer();
level.bombplanted = 0;
level.timelimitoverride = 0;
level.scorelimitoverride = 0;
level notify("bomb_defused");
}
//Function Number: 34
ononeleftevent(param_00)
{
if(level.bombexploded)
{
return;
}
var_01 = maps\mp\_utility::getlastlivingplayer(param_00);
var_01 thread givelastonteamwarning();
}
//Function Number: 35
//Function Number: 36
initgametypeawards()
{
maps\mp\_awards::initstataward("targetsdestroyed",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombsplanted",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombsdefused",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombscarried",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasbombcarrier",0,::maps\mp\_awards::highestwins);
}
//Function Number: 37
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.sab_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse"))
{
level.sab_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5);
}
}

View File

@ -0,0 +1,955 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\sd.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 35
* Decompile Time: 540 ms
* Timestamp: 10/27/2023 2:13:34 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,2.5);
maps\mp\_utility::registerscorelimitdvar(level.gametype,1);
maps\mp\_utility::registerroundlimitdvar(level.gametype,0);
maps\mp\_utility::registerwinlimitdvar(level.gametype,4);
maps\mp\_utility::registernumlivesdvar(level.gametype,1);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.objectivebased = 1;
level.teambased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onplayerkilled = ::onplayerkilled;
level.ondeadevent = ::ondeadevent;
level.ononeleftevent = ::ononeleftevent;
level.ontimelimit = ::ontimelimit;
level.onnormaldeath = ::onnormaldeath;
level.initgametypeawards = ::initgametypeawards;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "searchdestroy";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["dialog"]["offense_obj"] = "obj_destroy";
game["dialog"]["defense_obj"] = "obj_defend";
makedvarserverinfo("ui_bomb_timer_endtime",-1);
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
var_00 = getmatchrulesdata("sdData","roundLength");
setdynamicdvar("scr_sd_timelimit",var_00);
maps\mp\_utility::registertimelimitdvar("sd",var_00);
var_01 = getmatchrulesdata("sdData","roundSwitch");
setdynamicdvar("scr_sd_roundswitch",var_01);
maps\mp\_utility::registerroundswitchdvar("sd",var_01,0,9);
var_02 = getmatchrulesdata("commonOption","scoreLimit");
setdynamicdvar("scr_sd_winlimit",var_02);
maps\mp\_utility::registerwinlimitdvar("sd",var_02);
setdynamicdvar("scr_sd_bombtimer",getmatchrulesdata("sdData","bombTimer"));
setdynamicdvar("scr_sd_planttime",getmatchrulesdata("sdData","plantTime"));
setdynamicdvar("scr_sd_defusetime",getmatchrulesdata("sdData","defuseTime"));
setdynamicdvar("scr_sd_multibomb",getmatchrulesdata("sdData","multiBomb"));
setdynamicdvar("scr_sd_roundlimit",0);
maps\mp\_utility::registerroundlimitdvar("sd",0);
setdynamicdvar("scr_sd_scorelimit",1);
maps\mp\_utility::registerscorelimitdvar("sd",1);
setdynamicdvar("scr_sd_halftime",0);
maps\mp\_utility::registerhalftimedvar("sd",0);
setdynamicdvar("scr_sd_promode",0);
}
//Function Number: 3
onprecachegametype()
{
game["bomb_dropped_sound"] = "mp_war_objective_lost";
game["bomb_recovered_sound"] = "mp_war_objective_taken";
precacheshader("waypoint_bomb");
precacheshader("hud_suitcase_bomb");
precacheshader("waypoint_target");
precacheshader("waypoint_target_a");
precacheshader("waypoint_target_b");
precacheshader("waypoint_defend");
precacheshader("waypoint_defend_a");
precacheshader("waypoint_defend_b");
precacheshader("waypoint_defuse");
precacheshader("waypoint_defuse_a");
precacheshader("waypoint_defuse_b");
precacheshader("waypoint_escort");
precachestring(&"MP_EXPLOSIVES_RECOVERED_BY");
precachestring(&"MP_EXPLOSIVES_DROPPED_BY");
precachestring(&"MP_EXPLOSIVES_PLANTED_BY");
precachestring(&"MP_EXPLOSIVES_DEFUSED_BY");
precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES");
precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES");
precachestring(&"MP_CANT_PLANT_WITHOUT_BOMB");
precachestring(&"MP_PLANTING_EXPLOSIVE");
precachestring(&"MP_DEFUSING_EXPLOSIVE");
}
//Function Number: 4
onstartgametype()
{
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
setclientnamemode("manual_change");
game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED";
game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED";
precachestring(game["strings"]["target_destroyed"]);
precachestring(game["strings"]["bomb_defused"]);
level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion");
maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_SD_ATTACKER");
maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_SD_DEFENDER");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_SD_ATTACKER");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_SD_DEFENDER");
}
else
{
maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_SD_ATTACKER_SCORE");
maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_SD_DEFENDER_SCORE");
}
maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_SD_ATTACKER_HINT");
maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_SD_DEFENDER_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_attacker");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_defender");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_02[0] = "sd";
maps\mp\gametypes\_gameobjects::main(var_7B);
maps\mp\gametypes\_rank::registerscoreinfo("win",2);
maps\mp\gametypes\_rank::registerscoreinfo("loss",1);
maps\mp\gametypes\_rank::registerscoreinfo("tie",1.5);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("headshot",50);
maps\mp\gametypes\_rank::registerscoreinfo("assist",20);
maps\mp\gametypes\_rank::registerscoreinfo("plant",100);
maps\mp\gametypes\_rank::registerscoreinfo("defuse",100);
thread updategametypedvars();
func_3972();
thread func_3962();
}
//Function Number: 5
getspawnpoint()
{
if(self.pers["team"] == game["attackers"])
{
var_00 = "mp_sd_spawn_attacker";
}
else
{
var_00 = "mp_sd_spawn_defender";
}
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray(var_00);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
return var_02;
}
//Function Number: 6
onspawnplayer()
{
self.isplanting = 0;
self.isdefusing = 0;
self.isbombcarrier = 0;
if(level.multibomb && !isdefined(self.carryicon) && self.pers["team"] == game["attackers"] && !level.bombplanted)
{
if(level.splitscreen)
{
self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",33,33);
self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78);
self.carryicon.alpha = 0.75;
}
else
{
self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",50,50);
self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65);
self.carryicon.alpha = 0.75;
}
self.carryicon.hidewheninmenu = 1;
thread hidecarryiconongameend();
}
level notify("spawned_player");
}
//Function Number: 7
hidecarryiconongameend()
{
self endon("disconnect");
level waittill("game_ended");
if(isdefined(self.carryicon))
{
self.carryicon.alpha = 0;
}
}
//Function Number: 8
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
thread func_3959();
}
//Function Number: 9
func_3959()
{
wait 0.05;
var_00 = 0;
if(!level.alivecount[game["attackers"]])
{
level.spectateoverride[game["attackers"]].allowenemyspectate = 1;
var_00 = 1;
}
if(!level.alivecount[game["defenders"]])
{
level.spectateoverride[game["defenders"]].allowenemyspectate = 1;
var_00 = 1;
}
if(var_00)
{
maps\mp\gametypes\_spectating::updatespectatesettings();
}
}
//Function Number: 10
func_395A(param_00,param_01)
{
level.finalkillcam_winner = param_00;
if(param_01 == game["strings"]["target_destroyed"] || param_01 == game["strings"]["bomb_defused"])
{
var_02 = 1;
foreach(var_04 in level.bombzones)
{
if(isdefined(level.finalkillcam_killcamentityindex[param_00]) && level.finalkillcam_killcamentityindex[param_00] == var_04.killcamentnum)
{
var_02 = 0;
break;
}
}
if(var_02)
{
maps\mp\gametypes\_damage::erasefinalkillcam();
}
}
thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
}
//Function Number: 11
ondeadevent(param_00)
{
if(level.bombexploded || level.bombdefused)
{
return;
}
if(param_00 == "all")
{
if(level.bombplanted)
{
func_395A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]);
return;
}
func_395A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]);
return;
}
if(param_00 == game["attackers"])
{
if(level.bombplanted)
{
return;
}
level thread func_395A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]);
return;
}
if(param_00 == game["defenders"])
{
level thread func_395A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]);
return;
}
}
//Function Number: 12
ononeleftevent(param_00)
{
if(level.bombexploded || level.bombdefused)
{
return;
}
var_01 = maps\mp\_utility::getlastlivingplayer(param_00);
var_01 thread givelastonteamwarning();
}
//Function Number: 13
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
var_04 = param_00.team;
if(game["state"] == "postgame" && param_00.team == game["defenders"] || !level.bombplanted)
{
param_01.finalkill = 1;
}
if(param_00.isplanting)
{
thread maps\mp\_matchdata::logkillevent(param_02,"planting");
param_01 maps\mp\_utility::incpersstat("defends",1);
param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]);
}
else if(param_00.isbombcarrier)
{
param_01 maps\mp\_utility::incplayerstat("bombcarrierkills",1);
thread maps\mp\_matchdata::logkillevent(param_02,"carrying");
}
else if(param_00.isdefusing)
{
thread maps\mp\_matchdata::logkillevent(param_02,"defusing");
param_01 maps\mp\_utility::incpersstat("defends",1);
param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]);
}
if(param_01.isbombcarrier)
{
param_01 maps\mp\_utility::incplayerstat("killsasbombcarrier",1);
}
}
//Function Number: 14
givelastonteamwarning()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
maps\mp\_utility::waittillrecoveredhealth(3);
var_00 = maps\mp\_utility::getotherteam(self.pers["team"]);
level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]);
level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00);
level notify("last_alive",self);
maps\mp\gametypes\_missions::lastmansd();
}
//Function Number: 15
ontimelimit()
{
func_395A(game["defenders"],game["strings"]["time_limit_reached"]);
}
//Function Number: 16
updategametypedvars()
{
level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20);
level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20);
level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300);
level.multibomb = maps\mp\_utility::dvarintvalue("multibomb",0,0,1);
}
//Function Number: 17
func_3960(param_00)
{
var_01 = [];
var_02 = getentarray("script_brushmodel","classname");
foreach(var_04 in var_02)
{
if(isdefined(var_04.script_gameobjectname) && var_04.script_gameobjectname == "bombzone")
{
foreach(var_06 in param_00)
{
if(distance(var_04.origin,var_06.origin) < 100 && issubstr(tolower(var_06.script_label),"c"))
{
var_06.relatedbrushmodel = var_04;
var_01[var_01.size] = var_06;
break;
}
}
}
}
foreach(var_0A in var_01)
{
var_0A.relatedbrushmodel delete();
var_0B = getentarray(var_0A.target,"targetname");
foreach(var_0D in var_0B)
{
var_0D delete();
}
var_0A delete();
}
return common_scripts\utility::array_removeundefined(param_00);
}
//Function Number: 18
func_3962()
{
level.bombplanted = 0;
level.bombdefused = 0;
level.bombexploded = 0;
var_00 = getent("sd_bomb_pickup_trig","targetname");
if(!isdefined(var_00))
{
common_scripts\utility::error("No sd_bomb_pickup_trig trigger found in map.");
return;
}
var_01[0] = getent("sd_bomb","targetname");
if(!isdefined(var_01[0]))
{
common_scripts\utility::error("No sd_bomb script_model found in map.");
return;
}
precachemodel("prop_suitcase_bomb");
var_01[0] setmodel("prop_suitcase_bomb");
if(!level.multibomb)
{
level.sdbomb = maps\mp\gametypes\_gameobjects::createcarryobject(game["attackers"],var_00,var_01,(0,0,32));
level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("friendly");
level.sdbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb");
level.sdbomb maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb");
level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("friendly");
level.sdbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb");
level.sdbomb.allowweapons = 1;
level.sdbomb.onpickup = ::onpickup;
level.sdbomb.ondrop = ::ondrop;
}
else
{
var_00 delete();
var_01[0] delete();
}
level.bombzones = [];
var_02 = getentarray("bombzone","targetname");
var_02 = func_3960(var_02);
for(var_03 = 0;var_03 < var_02.size;var_03++)
{
var_00 = var_02[var_03];
var_01 = getentarray(var_02[var_03].target,"targetname");
var_04 = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_00,var_01,(0,0,64));
var_04 maps\mp\gametypes\_gameobjects::allowuse("enemy");
var_04 maps\mp\gametypes\_gameobjects::setusetime(level.planttime);
var_04 maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE");
var_04 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES");
if(!level.multibomb)
{
var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.sdbomb);
}
var_05 = var_04 maps\mp\gametypes\_gameobjects::getlabel();
var_04.label = var_05;
var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_05);
var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend" + var_05);
var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target" + var_05);
var_04 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target" + var_05);
var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_04.onbeginuse = ::onbeginuse;
var_04.onenduse = ::onenduse;
var_04.onuse = ::func_3969;
var_04.oncantuse = ::oncantuse;
var_04.useweapon = "briefcase_bomb_mp";
for(var_06 = 0;var_06 < var_01.size;var_06++)
{
if(isdefined(var_01[var_06].script_exploder))
{
var_04.exploderindex = var_01[var_06].script_exploder;
var_01[var_06] thread func_3967(var_04);
break;
}
}
level.bombzones[level.bombzones.size] = var_04;
var_04.bombdefusetrig = getent(var_01[0].target,"targetname");
var_04.bombdefusetrig.origin = var_04.bombdefusetrig.origin + (0,0,-10000);
var_04.bombdefusetrig.label = var_05;
}
for(var_03 = 0;var_03 < level.bombzones.size;var_03++)
{
var_07 = [];
for(var_08 = 0;var_08 < level.bombzones.size;var_08++)
{
if(var_08 != var_03)
{
var_07[var_07.size] = level.bombzones[var_08];
}
}
level.bombzones[var_03].otherbombzones = var_07;
}
}
//Function Number: 19
func_3967(param_00)
{
var_01 = spawn("script_origin",self.origin);
var_01.angles = self.angles;
var_01 rotateyaw(-45,0.05);
wait 0.05;
var_02 = self.origin + (0,0,5);
var_03 = self.origin + anglestoforward(var_01.angles) * 100 + (0,0,128);
var_04 = bullettrace(var_02,var_03,0,self);
self.killcament = spawn("script_model",var_04["position"]);
self.killcament setscriptmoverkillcam("explosive");
param_00.killcamentnum = self.killcament getentitynumber();
var_01 delete();
}
//Function Number: 20
onbeginuse(param_00)
{
if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"]))
{
param_00 playsound("mp_bomb_defuse");
param_00.isdefusing = 1;
if(isdefined(level.sdbombmodel))
{
level.sdbombmodel hide();
return;
}
return;
}
param_00.isplanting = 1;
if(level.multibomb)
{
for(var_01 = 0;var_01 < self.otherbombzones.size;var_01++)
{
self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none");
self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("friendly");
}
}
}
//Function Number: 21
onenduse(param_00,param_01,param_02)
{
if(!isdefined(param_01))
{
return;
}
if(isalive(param_01))
{
param_01.isdefusing = 0;
param_01.isplanting = 0;
}
if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_01.pers["team"]))
{
if(isdefined(level.sdbombmodel) && !param_02)
{
level.sdbombmodel show();
return;
}
return;
}
if(level.multibomb && !param_02)
{
for(var_03 = 0;var_03 < self.otherbombzones.size;var_03++)
{
self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::allowuse("enemy");
self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("any");
}
}
}
//Function Number: 22
oncantuse(param_00)
{
param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB");
}
//Function Number: 23
func_3969(param_00)
{
if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"]))
{
level thread bombplanted(self,param_00);
for(var_01 = 0;var_01 < level.bombzones.size;var_01++)
{
if(level.bombzones[var_01] == self)
{
continue;
}
level.bombzones[var_01] maps\mp\gametypes\_gameobjects::disableobject();
}
param_00 playsound("mp_bomb_plant");
param_00 notify("bomb_planted");
param_00 notify("objective","plant");
param_00 maps\mp\_utility::incpersstat("plants",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","plants",param_00.pers["plants"]);
if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team]))
{
param_00 thread func_396D();
}
maps\mp\_utility::leaderdialog("bomb_planted");
level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00);
level.bombowner = param_00;
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant"));
param_00 thread maps\mp\gametypes\_rank::giverankxp("plant");
param_00.bombplantedtime = gettime();
lib_036E::func_2B7B("plant",param_00);
param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin);
}
}
//Function Number: 24
func_396C()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = level.sd_loadout[self.team];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self.gamemode_chosenclass = self.class;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "gamemode";
self.class = "gamemode";
self.lastclass = "gamemode";
self notify("faux_spawn");
self.gameobject_fauxspawn = 1;
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 25
func_396D()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = undefined;
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 26
func_396E(param_00)
{
param_00 notify("bomb_defused");
param_00 notify("objective","defuse");
level thread bombdefused();
maps\mp\gametypes\_gameobjects::disableobject();
maps\mp\_utility::leaderdialog("bomb_defused");
level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00);
if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner))
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse"));
}
else
{
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse"));
}
param_00 thread maps\mp\gametypes\_rank::giverankxp("defuse");
lib_036E::func_2B7B("defuse",param_00);
param_00 maps\mp\_utility::incpersstat("defuses",1);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","defuses",param_00.pers["defuses"]);
param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin);
}
//Function Number: 27
ondrop(param_00)
{
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb");
maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],game["attackers"]);
}
//Function Number: 28
onpickup(param_00)
{
param_00.isbombcarrier = 1;
param_00 maps\mp\_utility::incplayerstat("bombscarried",1);
param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin);
maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort");
maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_escort");
if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team]))
{
param_00 thread func_396C();
}
if(!level.bombdefused)
{
maps\mp\_utility::teamplayercardsplash("callout_bombtaken",param_00,param_00.team);
maps\mp\_utility::leaderdialog("bomb_taken",param_00.pers["team"]);
}
maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"],game["attackers"]);
}
//Function Number: 29
onreset()
{
}
//Function Number: 30
bombplanted(param_00,param_01)
{
maps\mp\gametypes\_gamelogic::pausetimer();
level.bombplanted = 1;
param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::playtickingsound();
level.tickingobject = param_00.visuals[0];
level.timelimitoverride = 1;
setgameendtime(int(gettime() + level.bombtimer * 1000));
setdvar("ui_bomb_timer",1);
if(!level.multibomb)
{
level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("none");
level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none");
level.sdbomb maps\mp\gametypes\_gameobjects::setdropped();
level.sdbombmodel = level.sdbomb.visuals[0];
}
else
{
for(var_02 = 0;var_02 < level.players.size;var_02++)
{
if(isdefined(level.players[var_02].carryicon))
{
level.players[var_02].carryicon maps\mp\gametypes\_hud_util::destroyelem();
}
}
var_03 = bullettrace(param_01.origin + (0,0,20),param_01.origin - (0,0,2000),0,param_01);
var_04 = randomfloat(360);
var_05 = (cos(var_04),sin(var_04),0);
var_05 = vectornormalize(var_05 - var_03["normal"] * vectordot(var_05,var_03["normal"]));
var_06 = vectortoangles(var_05);
level.sdbombmodel = spawn("script_model",var_03["position"]);
level.sdbombmodel.angles = var_06;
level.sdbombmodel setmodel("prop_suitcase_bomb");
}
param_00 maps\mp\gametypes\_gameobjects::allowuse("none");
param_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_07 = param_00 maps\mp\gametypes\_gameobjects::getlabel();
var_08 = param_00.bombdefusetrig;
var_08.origin = level.sdbombmodel.origin;
var_09 = [];
var_0A = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_08,var_09,(0,0,32));
var_0A maps\mp\gametypes\_gameobjects::allowuse("friendly");
var_0A maps\mp\gametypes\_gameobjects::setusetime(level.defusetime);
var_0A maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE");
var_0A maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES");
var_0A maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_0A maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse" + var_07);
var_0A maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend" + var_07);
var_0A maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defuse" + var_07);
var_0A maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend" + var_07);
var_0A.label = var_07;
var_0A.onbeginuse = ::onbeginuse;
var_0A.onenduse = ::onenduse;
var_0A.onuse = ::func_396E;
var_0A.useweapon = "briefcase_bomb_defuse_mp";
func_3970();
setdvar("ui_bomb_timer",0);
param_00.visuals[0] maps\mp\gametypes\_gamelogic::stoptickingsound();
if(level.gameended || level.bombdefused)
{
return;
}
level.bombexploded = 1;
var_0B = level.sdbombmodel.origin;
level.sdbombmodel hide();
if(isdefined(param_01))
{
param_00.visuals[0] radiusdamage(var_0B,512,200,20,param_01,"MOD_EXPLOSIVE","bomb_site_mp");
param_01 maps\mp\_utility::incpersstat("destructions",1);
param_01 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_01.pers["destructions"]);
}
else
{
param_00.visuals[0] radiusdamage(var_0B,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp");
}
var_0C = randomfloat(360);
var_0D = spawnfx(level._effect["bombexplosion"],var_0B + (0,0,50),(0,0,1),(cos(var_0C),sin(var_0C),0));
triggerfx(var_0D);
playrumbleonposition("grenade_rumble",var_0B);
earthquake(0.75,2,var_0B,2000);
thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_0B);
if(isdefined(param_00.exploderindex))
{
common_scripts\utility::exploder(param_00.exploderindex);
}
for(var_02 = 0;var_02 < level.bombzones.size;var_02++)
{
level.bombzones[var_02] maps\mp\gametypes\_gameobjects::disableobject();
}
var_0A maps\mp\gametypes\_gameobjects::disableobject();
setgameendtime(0);
wait 3;
func_395A(game["attackers"],game["strings"]["target_destroyed"]);
}
//Function Number: 31
func_3970()
{
level endon("game_ended");
level endon("bomb_defused");
var_00 = level.bombtimer * 1000 + gettime();
setdvar("ui_bomb_timer_endtime",var_00);
level thread func_3971(var_00);
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer);
}
//Function Number: 32
func_3971(param_00)
{
level endon("game_ended");
level endon("bomb_defused");
level endon("game_ended");
level endon("disconnect");
level waittill("host_migration_begin");
var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(var_01 > 0)
{
setdvar("ui_bomb_timer_endtime",param_00 + var_01);
}
}
//Function Number: 33
bombdefused()
{
level.tickingobject maps\mp\gametypes\_gamelogic::stoptickingsound();
level.bombdefused = 1;
setdvar("ui_bomb_timer",0);
level notify("bomb_defused");
wait 1.5;
setgameendtime(0);
func_395A(game["defenders"],game["strings"]["bomb_defused"]);
}
//Function Number: 34
initgametypeawards()
{
maps\mp\_awards::initstataward("targetsdestroyed",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombsplanted",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombsdefused",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("bombscarried",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasbombcarrier",0,::maps\mp\_awards::highestwins);
}
//Function Number: 35
func_3972()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.sd_loadout[game["attackers"]] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
}
}

View File

@ -0,0 +1,599 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\tdef.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 23
* Decompile Time: 388 ms
* Timestamp: 10/27/2023 2:13:35 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,7500);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_enemyflagradar = 1;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
func_3989();
level.teambased = 1;
level.initgametypeawards = ::initgametypeawards;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
precacheshader("waypoint_targetneutral");
game["dialog"]["gametype"] = "team_def";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_enemyflagradar = getmatchrulesdata("tdefData","enemyFlagRadar");
setdynamicdvar("scr_tdef_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("tdef",0,0,9);
setdynamicdvar("scr_tdef_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("tdef",1);
setdynamicdvar("scr_tdef_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("tdef",1);
setdynamicdvar("scr_tdef_halftime",0);
maps\mp\_utility::registerhalftimedvar("tdef",0);
setdynamicdvar("scr_tdef_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY");
precachestring(&"MP_NEUTRAL_FLAG_DROPPED_BY");
precachestring(&"MP_GRABBING_FLAG");
precachestring(&"OBJECTIVES_TDEF_ATTACKER_HINT");
precachestring(&"OBJECTIVES_TDEF_DEFENDER_HINT");
precachestring(&"OBJECTIVES_TDEF");
precachestring(&"OBJECTIVES_TDEF_SCORE");
precachestring(&"OBJECTIVES_TDEF_HINT");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_TDEF");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_TDEF");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TDEF");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TDEF");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TDEF_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TDEF_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TDEF_ATTACKER_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TDEF_ATTACKER_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("firstblood",200);
maps\mp\gametypes\_rank::registerscoreinfo("kill",50);
maps\mp\gametypes\_rank::registerscoreinfo("kill_bonus",50);
maps\mp\gametypes\_rank::registerscoreinfo("capture",100);
maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50);
maps\mp\gametypes\_rank::registerscoreinfo("team_assist",20);
var_02[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main(var_7B);
func_3A0E();
}
//Function Number: 5
func_3A0E()
{
level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies");
level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis");
precacheshader(level.icon2d["axis"]);
precacheshader(level.icon2d["allies"]);
level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies");
level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis");
level.carryflag["neutral"] = "prop_flag_neutral";
precachemodel(level.carryflag["allies"]);
precachemodel(level.carryflag["axis"]);
precachemodel(level.carryflag["neutral"]);
level.iconescort3d = "waypoint_defend";
level.iconescort2d = "waypoint_defend";
precacheshader(level.iconescort3d);
precacheshader(level.iconescort2d);
level.iconkill3d = "waypoint_kill";
level.iconkill2d = "waypoint_kill";
precacheshader(level.iconkill3d);
precacheshader(level.iconkill2d);
level.iconcaptureflag3d = "waypoint_capture_flag";
level.iconcaptureflag2d = "waypoint_capture_flag";
precacheshader(level.iconcaptureflag3d);
precacheshader(level.iconcaptureflag2d);
precacheshader("waypoint_flag_friendly");
precacheshader("waypoint_flag_enemy");
level.gameflag = undefined;
}
//Function Number: 6
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
if(isdefined(level.gameflag) && level.gameflag maps\mp\gametypes\_gameobjects::getownerteam() == param_01.pers["team"])
{
if(isdefined(param_01.carryflag))
{
param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1);
}
else
{
level.gameflag.carrier thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_TEAM_ASSIST");
lib_036E::func_2B7B("team_assist",level.gameflag.carrier,param_00,1);
level.gameflag.carrier thread maps\mp\gametypes\_rank::giverankxp("team_assist");
}
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_X2_BONUS");
lib_036E::func_2B7B("kill_bonus",param_01,param_00,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_bonus");
var_03 = var_03 * 2;
}
else if(!isdefined(level.gameflag) && cancreateflagatvictimorigin(param_00))
{
level.gameflag = func_3A15(param_00);
var_03 = var_03 + maps\mp\gametypes\_rank::getscoreinfovalue("firstblood");
lib_036E::func_2B7B("firstblood",param_01,param_00,1);
}
else if(isdefined(param_00.carryflag))
{
var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier");
thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01);
param_01 thread maps\mp\gametypes\_hud_message::splashnotify("flag_carrier_killed",var_04);
lib_036E::func_2B7B("kill_carrier",param_01,param_00,1);
param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1);
param_01 thread [[ level.onxpevent ]]("kill_carrier");
param_01 notify("objective","kill_carrier");
param_01 thread maps\mp\_matchdata::loggameevent("kill_carrier",param_01.origin);
var_03 = var_03 + var_04;
}
param_01 lib_036E::func_2B88(param_01.pers["team"],var_03);
if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]])
{
param_01.finalkill = 1;
}
}
//Function Number: 7
ondrop(param_00)
{
if(isdefined(param_00.tdef_flagtime))
{
var_01 = int(gettime() - param_00.tdef_flagtime);
param_00 maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_01);
if(var_01 / 100 / 60 < 1)
{
var_02 = 0;
}
else
{
var_02 = int(var_02 / 100 / 60);
}
param_00 maps\mp\_utility::incpersstat("destructions",var_02);
param_00 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_00.pers["destructions"]);
param_00.tdef_flagtime = undefined;
param_00 notify("dropped_flag");
}
var_03 = maps\mp\gametypes\_gameobjects::getownerteam();
var_04 = level.otherteam[var_03];
if(isdefined(self.portable_radar))
{
level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar);
self.portable_radar = undefined;
}
self.currentcarrier = undefined;
maps\mp\gametypes\_gameobjects::setownerteam("neutral");
maps\mp\gametypes\_gameobjects::allowcarry("any");
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconcaptureflag3d);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d);
if(isdefined(param_00))
{
if(isdefined(param_00.carryflag))
{
param_00 func_39C6();
}
maps\mp\_utility::printandsoundoneveryone(var_03,var_04,&"MP_NEUTRAL_FLAG_DROPPED_BY",&"MP_NEUTRAL_FLAG_DROPPED_BY","mp_war_objective_lost","mp_war_objective_lost",param_00);
}
else
{
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_03);
maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_04);
}
maps\mp\_utility::leaderdialog("dropped_flag",var_03,"status");
maps\mp\_utility::leaderdialog("enemy_dropped_flag",var_04,"status");
}
//Function Number: 8
onpickup(param_00)
{
self notify("picked_up");
param_00.tdef_flagtime = gettime();
param_00 thread func_3A14();
var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("capture");
var_02 = param_00.pers["team"];
var_03 = level.otherteam[var_02];
if(isdefined(level.tdef_loadouts) && isdefined(level.tdef_loadouts[var_02]))
{
param_00 thread func_39DA();
}
else
{
param_00 func_39C5();
}
self.currentcarrier = param_00;
param_00.carryicon setshader(level.icon2d[var_02],param_00.carryicon.width,param_00.carryicon.height);
maps\mp\gametypes\_gameobjects::setownerteam(var_02);
maps\mp\gametypes\_gameobjects::setvisibleteam("any");
maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconescort2d);
maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconescort2d);
maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconkill3d);
maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconkill3d);
maps\mp\_utility::leaderdialog("got_flag",var_02,"status");
maps\mp\_utility::leaderdialog("enemy_got_flag",var_03,"status");
thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00);
param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",var_01);
lib_036E::func_2B7B("capture",param_00,undefined,1);
param_00 thread [[ level.onxpevent ]]("capture");
param_00 maps\mp\_utility::incplayerstat("flagscaptured",1);
param_00 notify("objective","captured");
param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin);
maps\mp\_utility::printandsoundoneveryone(var_02,var_03,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00);
if(self.currentteam == var_03)
{
param_00 lib_036E::func_2B88(var_02,var_01);
}
self.currentteam = var_02;
if(level.matchrules_enemyflagradar)
{
thread func_3A16(var_03);
}
}
//Function Number: 9
func_39DA()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.pers["gamemodeLoadout"] = level.tdef_loadouts[self.team];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self.gamemode_chosenclass = self.class;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "gamemode";
self.class = "gamemode";
self.lastclass = "gamemode";
thread waitattachflag();
self notify("faux_spawn");
self.gameobject_fauxspawn = 1;
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 10
waitattachflag()
{
level endon("game_ende");
self endon("disconnect");
self endon("death");
self waittill("spawned_player");
func_39C5();
}
//Function Number: 11
func_3A14()
{
self endon("dropped_flag");
self endon("disconnect");
level waittill("game_ended");
if(isdefined(self))
{
if(isdefined(self.tdef_flagtime))
{
var_00 = int(gettime() - self.tdef_flagtime);
maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_00);
if(var_00 / 100 / 60 < 1)
{
var_01 = 0;
}
else
{
var_01 = int(var_01 / 100 / 60);
}
maps\mp\_utility::incpersstat("destructions",var_01);
maps\mp\gametypes\_persistance::statsetchild("round","destructions",self.pers["destructions"]);
}
}
}
//Function Number: 12
cancreateflagatvictimorigin(param_00)
{
var_01 = getentarray("minefield","targetname");
var_02 = getentarray("trigger_hurt","classname");
var_03 = getentarray("radiation","targetname");
for(var_04 = 0;var_04 < var_03.size;var_04++)
{
if(param_00 istouching(var_03[var_04]))
{
return 0;
}
}
for(var_04 = 0;var_04 < var_01.size;var_04++)
{
if(param_00 istouching(var_01[var_04]))
{
return 0;
}
}
for(var_04 = 0;var_04 < var_02.size;var_04++)
{
if(param_00 istouching(var_02[var_04]))
{
return 0;
}
}
return 1;
}
//Function Number: 13
func_3A15(param_00)
{
var_01[0] = spawn("script_model",param_00.origin);
var_01[0] setmodel(level.carryflag["neutral"]);
var_02 = spawn("trigger_radius",param_00.origin,0,96,72);
var_03 = maps\mp\gametypes\_gameobjects::createcarryobject("neutral",var_02,var_01,(0,0,85));
var_03 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5);
var_03 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5);
var_03 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG");
var_03 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_GRABBING_FLAG");
var_03 maps\mp\gametypes\_gameobjects::allowcarry("any");
var_03 maps\mp\gametypes\_gameobjects::setvisibleteam("any");
var_03 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d);
var_03 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d);
var_03 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d);
var_03 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconcaptureflag3d);
var_03 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d["axis"]);
var_03.allowweapons = 1;
var_03.onpickup = ::onpickup;
var_03.onpickupfailed = ::onpickup;
var_03.ondrop = ::ondrop;
var_03.oldradius = 96;
var_03.currentteam = "none";
var_03.requireslos = 1;
level.favorclosespawnent = var_03.trigger;
level.favorclosespawnscalar = 3;
var_03 thread updatebaseposition();
return var_03;
}
//Function Number: 14
updatebaseposition()
{
level endon("game_ended");
for(;;)
{
if(isdefined(self.safeorigin))
{
self.baseorigin = self.safeorigin;
self.trigger.baseorigin = self.safeorigin;
self.visuals[0].baseorigin = self.safeorigin;
}
wait 0.05;
}
}
//Function Number: 15
func_39C5()
{
self attach(level.carryflag[self.pers["team"]],"J_spine4",1);
self.carryflag = level.carryflag[self.pers["team"]];
level.favorclosespawnent = self;
}
//Function Number: 16
func_39C6()
{
self detach(self.carryflag,"J_spine4");
self.carryflag = undefined;
level.favorclosespawnent = level.gameflag.trigger;
}
//Function Number: 17
func_3A16(param_00)
{
level endon("game_ended");
self endon("dropped");
var_01 = func_3A17(param_00);
var_02 = spawn("script_model",self.currentcarrier.origin);
var_02.team = param_00;
var_02.owner = var_01;
var_02 makeportableradar(var_01);
self.portable_radar = var_02;
thread func_3A18();
thread func_3A19();
}
//Function Number: 18
func_3A17(param_00)
{
level endon("game_ended");
self endon("dropped");
for(;;)
{
foreach(var_02 in level.players)
{
if(isalive(var_02) && var_02.pers["team"] == param_00)
{
return var_02;
}
}
wait 0.05;
}
}
//Function Number: 19
func_3A18()
{
level endon("game_ended");
self endon("dropped");
self.portable_radar endon("death");
for(;;)
{
self.portable_radar moveto(self.currentcarrier.origin,0.05);
wait 0.05;
}
}
//Function Number: 20
func_3A19()
{
level endon("game_ended");
self endon("dropped");
var_00 = self.portable_radar.team;
self.portable_radar.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators");
level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar);
self.portable_radar = undefined;
func_3A16(var_00);
}
//Function Number: 21
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 22
initgametypeawards()
{
maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins);
maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins);
}
//Function Number: 23
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.tdef_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse"))
{
level.tdef_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5);
}
}

View File

@ -0,0 +1,643 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\tjugg.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 18
* Decompile Time: 255 ms
* Timestamp: 10/27/2023 2:13:36 AM
*******************************************************************/
//Function Number: 1
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerscorelimitdvar(level.gametype,7500);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_juggswitchtime = 90;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
func_3989();
level.teambased = 1;
level.doprematch = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_juggswitchtime = getmatchrulesdata("tjuggData","juggSwitchTime");
setdynamicdvar("scr_tjugg_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("tjugg",0,0,9);
setdynamicdvar("scr_tjugg_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("tjugg",1);
setdynamicdvar("scr_tjugg_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("tjugg",1);
setdynamicdvar("scr_tjugg_halftime",0);
maps\mp\_utility::registerhalftimedvar("tjugg",0);
setdynamicdvar("scr_team_fftype",0);
setdynamicdvar("scr_tjugg_promode",0);
}
//Function Number: 3
onprecachegametype()
{
precachestring(&"MP_JUGG_NEXT_JUGG_IN");
}
//Function Number: 4
onstartgametype()
{
setclientnamemode("auto_change");
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_TJUGG");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_TJUGG");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TJUGG");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TJUGG");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TJUGG_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TJUGG_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TJUGG_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TJUGG_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250);
maps\mp\gametypes\_rank::registerscoreinfo("kill_juggernaut",250);
maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",100);
maps\mp\gametypes\_rank::registerscoreinfo("jugg_on_jugg",400);
var_00[0] = "tjugg";
maps\mp\gametypes\_gameobjects::main(var_00);
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level.respawnoldjugg_fx = loadfx("explosions/bouncing_betty_explosion");
level.jugg_available = [];
level.jugg_available["axis"] = 1;
level.jugg_available["allies"] = 1;
level.jugg_attackers = [];
level.jugg_attackers["axis"] = [];
level.jugg_attackers["allies"] = [];
level.jugg_currjugg = [];
level.jugg_currjugg["axis"] = undefined;
level.jugg_currjugg["allies"] = undefined;
level.tjugg_timerdisplay = [];
level.tjugg_timerdisplay["allies"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"allies");
level.tjugg_timerdisplay["allies"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5);
level.tjugg_timerdisplay["allies"].label = &"MP_JUGG_NEXT_JUGG_IN";
level.tjugg_timerdisplay["allies"].alpha = 0;
level.tjugg_timerdisplay["allies"].archived = 0;
level.tjugg_timerdisplay["allies"].hidewheninmenu = 1;
level.tjugg_timerdisplay["axis"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"axis");
level.tjugg_timerdisplay["axis"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5);
level.tjugg_timerdisplay["axis"].label = &"MP_JUGG_NEXT_JUGG_IN";
level.tjugg_timerdisplay["axis"].alpha = 0;
level.tjugg_timerdisplay["axis"].archived = 0;
level.tjugg_timerdisplay["axis"].hidewheninmenu = 1;
thread func_39A2(level.tjugg_timerdisplay["allies"]);
thread func_39A2(level.tjugg_timerdisplay["axis"]);
level.favorclosespawnscalar = 5;
level thread onplayerconnect();
}
//Function Number: 5
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00.jugg_alligience = 0;
}
}
//Function Number: 6
getspawnpoint()
{
if(level.ingraceperiod)
{
var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + self.pers["team"] + "_start");
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00);
}
else
{
level.favorclosespawnent = level.jugg_currjugg[self.pers["team"]];
var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]);
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01);
}
return var_01;
}
//Function Number: 7
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(param_03 == "MOD_SUICIDE" && param_04 == "none")
{
return;
}
var_0A = self;
if(isdefined(param_01) && isplayer(param_01))
{
var_0B = 0;
var_0C = 0;
var_0D = 0;
var_0E = 0;
var_0F = 0;
var_10 = 0;
var_11 = 0;
if(param_01 == var_0A)
{
if(isdefined(var_0A.isjuggmodejuggernaut))
{
var_0C = 1;
}
}
else if(param_01.team != var_0A.team)
{
var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill");
if(isdefined(var_0A.isjuggmodejuggernaut))
{
var_0C = 1;
if(isdefined(param_01.isjuggmodejuggernaut))
{
var_0D = 1;
}
else
{
var_0E = 1;
}
}
else if(isdefined(param_01.isjuggmodejuggernaut))
{
var_0F = 1;
}
if(level.jugg_available[param_01.team])
{
var_0B = 1;
}
}
else if(isdefined(var_0A.isjuggmodejuggernaut) && param_01.team == var_0A.team)
{
var_0A thread func_3A39();
return;
}
if(var_0B)
{
func_3A38(param_01);
}
if(var_0C)
{
var_12 = func_3A56(var_0A.team,0);
if(!isdefined(var_12))
{
var_12 = func_3A56(var_0A.team,1);
}
if(!isdefined(var_12))
{
var_12 = var_0A;
}
func_3A38(var_12,var_0A);
}
if(var_0B || var_0C)
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
}
if(param_01 != var_0A && param_01.team != var_0A.team && !isdefined(param_01.isjuggmodejuggernaut))
{
param_01.jugg_alligience = param_01.jugg_alligience + 50;
if(var_0E)
{
param_01.jugg_alligience = param_01.jugg_alligience + 100;
}
if(isdefined(level.jugg_attackers[param_01.team][var_0A.guid]))
{
var_10 = 1;
param_01.jugg_alligience = param_01.jugg_alligience + 100;
level.jugg_attackers[param_01.team][var_0A.guid] = undefined;
}
}
if(var_0E)
{
var_13 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_juggernaut");
var_11 = var_11 + var_13;
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_KILLED_JUGGERNAUT");
lib_036E::func_2B7B("kill_juggernaut",param_01,var_0A,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_juggernaut");
}
else if(var_0D)
{
var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("jugg_on_jugg");
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL_JUGGERNAUT");
lib_036E::func_2B7B("jugg_on_jugg",param_01,var_0A,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("jugg_on_jugg");
}
else if(var_0F)
{
var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill_as_juggernaut");
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL");
lib_036E::func_2B7B("kill_as_juggernaut",param_01,var_0A,1);
param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_as_juggernaut");
}
if(var_11)
{
param_01 lib_036E::func_2B88(param_01.pers["team"],var_11);
}
if(param_01.team != var_0A.team && game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]])
{
param_01.finalkill = 1;
return;
}
return;
}
if(isdefined(var_0A.isjuggmodejuggernaut))
{
var_12 = func_3A56(var_0A.team,0);
if(!isdefined(var_12))
{
var_12 = func_3A56(var_0A.team,1);
}
if(!isdefined(var_12))
{
var_12 = var_0A;
}
func_3A38(var_12,var_0A);
}
}
//Function Number: 8
func_3A38(param_00,param_01)
{
if(isdefined(param_01))
{
param_01.isjuggmodejuggernaut = undefined;
}
else
{
level.jugg_available[param_00.team] = 0;
}
level.jugg_currjugg[param_00.team] = undefined;
level.tjugg_timerdisplay[param_00.team].alpha = 0;
level.jugg_attackers[param_00.team] = [];
foreach(var_03 in level.players)
{
if(var_03.team == param_00.team)
{
var_03.jugg_alligience = 0;
}
}
param_00 thread func_3A39();
}
//Function Number: 9
func_3A39()
{
if(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote())
{
self endon("disconnect");
thread func_3A55(0);
while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote())
{
wait 0.05;
}
self notify("end_resetJuggLoadoutOnDisconnect");
}
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
if(maps\mp\_utility::isjuggernaut())
{
self notify("lost_juggernaut");
wait 0.05;
}
self.isjuggmodejuggernaut = 1;
level.jugg_currjugg[self.team] = self;
self.pers["gamemodeLoadout"] = level.tjugg_loadouts[self.pers["team"]];
var_00 = spawn("script_model",self.origin);
var_00.angles = self.angles;
var_00.playerspawnpos = self.origin;
var_00.notti = 1;
self.setspawnpoint = var_00;
self.gamemode_chosenclass = self.class;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "gamemode";
self.class = "gamemode";
self.lastclass = "gamemode";
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut");
thread maps\mp\gametypes\_hud_message::splashnotify("got_juggernaut",var_01);
lib_036E::func_2B7B("got_juggernaut",self,undefined,1);
thread func_3A55(1);
thread resetjuggloadoutonchangeteam();
thread func_3A53();
thread func_3A54();
thread func_3A51();
}
//Function Number: 10
func_3A51()
{
level endon("game_ended");
self endon("disconnect");
self endon("death");
level.tjugg_timerdisplay[self.team].label = &"MP_JUGG_NEXT_JUGG_IN";
level.tjugg_timerdisplay[self.team] settimer(level.matchrules_juggswitchtime);
level.tjugg_timerdisplay[self.team].alpha = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.matchrules_juggswitchtime);
level.tjugg_timerdisplay[self.team].alpha = 0;
var_00 = func_3A56(self.team,0);
if(!isdefined(var_00))
{
var_00 = func_3A56(self.team,1);
}
if(!isdefined(var_00))
{
var_00 = self;
}
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
func_3A38(var_00,self);
if(var_00 != self)
{
thread func_3A52();
}
}
//Function Number: 11
func_3A52()
{
level endon("game_ended");
self endon("disconnect");
while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote())
{
wait 0.05;
}
if(isdefined(self.iscarrying) && self.iscarrying == 1)
{
self notify("force_cancel_placement");
wait 0.05;
}
playfx(level.respawnoldjugg_fx,self.origin);
self notify("lost_juggernaut");
wait 0.05;
self notify("faux_spawn");
self.faux_spawn_stance = self getstance();
thread maps\mp\gametypes\_playerlogic::spawnplayer(1);
}
//Function Number: 12
func_3A53()
{
level endon("game_ended");
self endon("death");
self endon("disconnect");
for(;;)
{
wait 1;
foreach(var_01 in level.players)
{
if(maps\mp\_utility::isreallyalive(var_01) && !var_01 maps\mp\_utility::isusingremote() && var_01 != self && var_01.team == self.team && distancesquared(var_01.origin,self.origin) < -17136)
{
var_01.jugg_alligience = var_01.jugg_alligience + 25;
}
}
}
}
//Function Number: 13
func_3A54()
{
level endon("game_ended");
self endon("death");
self endon("disconnect");
for(;;)
{
self waittill("damage",var_00,var_01);
if(isplayer(var_01) && var_01.team != self.team)
{
if(!isdefined(level.jugg_attackers[self.team][var_01.guid]))
{
level.jugg_attackers[self.team][var_01.guid] = 1;
}
}
}
}
//Function Number: 14
func_3A55(param_00)
{
level endon("game_ended");
if(param_00)
{
self endon("death");
}
else
{
self endon("end_resetJuggLoadoutOnDisconnect");
}
var_01 = self.team;
self waittill("disconnect");
var_02 = func_3A56(var_01,0);
if(!isdefined(var_02))
{
var_02 = func_3A56(var_01,1);
}
if(isdefined(var_02))
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
func_3A38(var_02);
return;
}
level.jugg_available[var_01] = 1;
level.jugg_currjugg[var_01] = undefined;
level.tjugg_timerdisplay[var_01].alpha = 0;
level.jugg_attackers[var_01] = [];
foreach(var_04 in level.players)
{
if(var_04.team == var_01)
{
var_04.jugg_alligience = 0;
}
}
}
//Function Number: 15
resetjuggloadoutonchangeteam()
{
level endon("game_ended");
self endon("disconnect");
var_00 = self.team;
common_scripts\utility::waittill_any("joined_team","joined_spectators");
self.isjuggmodejuggernaut = undefined;
var_01 = func_3A56(var_00,0);
if(!isdefined(var_01))
{
var_01 = func_3A56(var_00,1);
}
if(isdefined(var_01))
{
maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured");
func_3A38(var_01);
return;
}
level.jugg_available[var_00] = 1;
level.jugg_currjugg[var_00] = undefined;
level.tjugg_timerdisplay[var_00].alpha = 0;
level.jugg_attackers[var_00] = [];
foreach(var_03 in level.players)
{
if(var_03.team == var_00)
{
var_03.jugg_alligience = 0;
}
}
}
//Function Number: 16
func_3A56(param_00,param_01)
{
var_02 = undefined;
var_03 = -1;
foreach(var_05 in level.players)
{
if((param_01 || !var_05 maps\mp\_utility::isusingremote()) && var_05 != self && var_05.team == param_00 && var_05.jugg_alligience > var_03)
{
var_02 = var_05;
var_03 = var_05.jugg_alligience;
}
}
return var_02;
}
//Function Number: 17
func_39A2(param_00)
{
level waittill("game_ended");
param_00.alpha = 0;
}
//Function Number: 18
func_3989()
{
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse"))
{
level.tjugg_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5);
level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1;
}
else
{
level.tjugg_loadouts["axis"]["loadoutPrimary"] = "iw5_scar";
level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.tjugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration";
level.tjugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.tjugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.tjugg_loadouts["axis"]["loadoutSecondary"] = "rpg";
level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.tjugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.tjugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.tjugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.tjugg_loadouts["axis"]["loadoutEquipment"] = "frag_grenade_mp";
level.tjugg_loadouts["axis"]["loadoutOffhand"] = "smoke_grenade_mp";
level.tjugg_loadouts["axis"]["loadoutPerk1"] = "specialty_scavenger";
level.tjugg_loadouts["axis"]["loadoutPerk2"] = "_specialty_blastshield";
level.tjugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.tjugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null";
level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1;
}
if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse"))
{
level.tjugg_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5);
level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1;
return;
}
level.tjugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar";
level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none";
level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none";
level.tjugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration";
level.tjugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
level.tjugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none";
level.tjugg_loadouts["allies"]["loadoutSecondary"] = "rpg";
level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none";
level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none";
level.tjugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null";
level.tjugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
level.tjugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none";
level.tjugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp";
level.tjugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp";
level.tjugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger";
level.tjugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield";
level.tjugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.tjugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null";
level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1;
}

View File

@ -0,0 +1,433 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\vip.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 23
* Decompile Time: 322 ms
* Timestamp: 10/27/2023 2:13:37 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10,0,1440);
maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,10);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10);
maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30);
maps\mp\_utility::registernumlivesdvar(level.gametype,1,0,10);
maps\mp\_utility::registerwatchdvarint("halftime",0);
level.teambased = 1;
level.objectivebased = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onnormaldeath = ::onnormaldeath;
level.onplayerkilled = ::onplayerkilled;
level.ondeadevent = ::ondeadevent;
game["dialog"]["gametype"] = "VIP";
}
//Function Number: 2
onprecachegametype()
{
precacheshader("compass_waypoint_captureneutral");
precacheshader("compass_waypoint_capture");
precacheshader("compass_waypoint_defend");
precacheshader("waypoint_captureneutral");
precacheshader("waypoint_capture");
precacheshader("waypoint_defend");
precachestring(&"MP_ELIMINATED_VIP");
precachestring(&"MP_DEFENDED_VIP");
precachestring(&"SPLASHES_VIP");
game["flagmodels"] = [];
game["flagmodels"]["neutral"] = "prop_flag_neutral";
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies");
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis");
precachemodel(game["flagmodels"]["neutral"]);
precachemodel(game["flagmodels"]["allies"]);
precachemodel(game["flagmodels"]["axis"]);
}
//Function Number: 3
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_VIP");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_VIP");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_VIP");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_VIP");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_VIP_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_VIP_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_VIP_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_VIP_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_02[0] = "vip";
maps\mp\gametypes\_gameobjects::main(var_7B);
thread func_3A69();
}
//Function Number: 4
func_3A69()
{
level endon("game_end");
level endon("waitSkipped");
thread extractionzone();
thread func_3A78();
maps\mp\_utility::gameflagwait("prematch_done");
maps\mp\_utility::gameflagwait("graceperiod_done");
self notify("graceComplete");
thread func_3A7B();
}
//Function Number: 5
func_3A78()
{
self endon("graceComplete");
for(;;)
{
if(level.players.size > 2)
{
break;
}
wait 0.5;
}
self notify("waitSkipped");
thread func_3A7B();
}
//Function Number: 6
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 7
onspawnplayer()
{
self.isvip = 0;
self.usingobj = undefined;
level notify("spawned_player");
}
//Function Number: 8
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
param_01 lib_036E::func_2B88(param_01.pers["team"],var_03);
var_04 = param_00.team;
if(isdefined(param_00.isvip) && param_00.isvip)
{
level thread func_3A7A(game["attackers"],&"MP_ELIMINATED_VIP");
param_01.finalkill = 1;
}
}
//Function Number: 9
onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
thread func_3959();
}
//Function Number: 10
ontimelimit()
{
if(game["status"] == "overtime")
{
var_00 = "forfeit";
}
else if(game["teamScores"]["allies"] == game["teamScores"]["axis"])
{
var_00 = "overtime";
}
else if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
var_00 = "axis";
}
else
{
var_00 = "allies";
}
thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]);
}
//Function Number: 11
func_3959()
{
wait 0.05;
var_00 = 0;
if(!level.alivecount[game["attackers"]])
{
level.spectateoverride[game["attackers"]].allowenemyspectate = 1;
var_00 = 1;
}
if(!level.alivecount[game["defenders"]])
{
level.spectateoverride[game["defenders"]].allowenemyspectate = 1;
var_00 = 1;
}
if(var_00)
{
maps\mp\gametypes\_spectating::updatespectatesettings();
}
}
//Function Number: 12
ondeadevent(param_00)
{
if(param_00 == game["attackers"])
{
level thread func_3A7A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]);
return;
}
if(param_00 == game["defenders"])
{
level thread func_3A7A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]);
}
}
//Function Number: 13
func_3A7A(param_00,param_01)
{
thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01);
}
//Function Number: 14
func_3A7B()
{
var_00 = [];
var_01 = 0;
for(;;)
{
if(level.players.size >= 2)
{
break;
}
if(var_01 >= 100)
{
iprintlnbold("Game mode only playable with 2 or more players");
wait 2;
maps\mp\gametypes\_callbacksetup::abortlevel();
}
var_01++;
wait 0.1;
}
foreach(var_03 in level.players)
{
if(var_03.team == game["defenders"])
{
var_00[var_00.size] = var_03;
}
}
var_05 = randomintrange(0,var_00.size);
var_06 = var_00[var_05];
if(!isalive(var_06) && !issubstr(var_06.guid,"bot"))
{
var_06 func_3A81();
}
func_3A7C(var_06);
}
//Function Number: 15
func_3A7C(param_00)
{
param_00 takeallweapons();
param_00 maps\mp\_utility::_clearperks();
param_00.isvip = 1;
param_00 giveweapon("deserteagle_fmj_mp");
param_00 givestartammo("deserteagle_fmj_mp");
param_00 giveweapon("riotshield_mp");
param_00 switchtoweapon("riotshield_mp");
param_00 maps\mp\_utility::giveperk("specialty_armorvest",0);
param_00 maps\mp\_utility::giveperk("specialty_finalstand",0);
param_00 iprintlnbold("You Are the VIP");
}
//Function Number: 16
extractionzone()
{
var_00 = getentarray("extraction_vip","targetname");
if(!isdefined(var_00))
{
maps\mp\gametypes\_callbacksetup::abortlevel();
return;
}
else
{
level.extractionzone = var_00;
}
var_01 = level.extractionzone[0];
if(isdefined(var_01.target))
{
var_02[0] = getent(var_01.target,"targetname");
}
else
{
var_00[0] = spawn("script_model",var_02.origin);
var_02[0].angles = var_01.angles;
}
var_00 = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_01,var_02,(0,0,100));
var_00 maps\mp\gametypes\_gameobjects::allowuse("friendly");
var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none");
var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CALLING_EXTRACTION");
var_00 maps\mp\gametypes\_gameobjects::setusetime(0);
var_00.onuse = ::onuse;
var_00.oncantuse = ::oncantuse;
var_03 = var_01.origin + (0,0,32);
var_04 = var_01.origin + (0,0,-32);
var_05 = bullettrace(var_03,var_04,0,undefined);
var_06 = maps\mp\gametypes\_teams::getteamflagfx(game["defenders"]);
var_07 = loadfx(var_06);
var_08 = vectortoangles(var_05["normal"]);
var_09 = anglestoforward(var_08);
var_0A = anglestoright(var_08);
thread spawnfxdelay(var_07,var_05["position"],var_09,var_0A,0.5);
var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend");
var_00 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend");
var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("friendly");
level.extractionzone = var_00;
}
//Function Number: 17
func_3A7E()
{
foreach(var_01 in level.players)
{
if(!var_01.isvip)
{
self.trigger disableplayeruse(var_01);
}
}
}
//Function Number: 18
onuse(param_00)
{
if(!isdefined(param_00.isvip) || !param_00.isvip)
{
return;
}
iprintlnbold("Extraction on its way");
func_3A7F(param_00);
}
//Function Number: 19
func_3A7F(param_00)
{
param_00 endon("death");
level endon("game_end");
level.extractiontime = 45;
maps\mp\gametypes\_gamelogic::pausetimer();
level.timelimitoverride = 1;
setgameendtime(int(gettime() + level.extractiontime * 1000));
wait level.extractiontime;
level thread func_3A7A(game["defenders"],&"MP_DEFENDED_VIP");
}
//Function Number: 20
onenduse(param_00,param_01,param_02)
{
}
//Function Number: 21
oncantuse(param_00)
{
}
//Function Number: 22
spawnfxdelay(param_00,param_01,param_02,param_03,param_04)
{
wait param_04;
var_05 = spawnfx(param_00,param_01,param_02,param_03);
triggerfx(var_05);
}
//Function Number: 23
func_3A81()
{
self endon("death");
self endon("disconnect");
self endon("spawned");
if(self.hasspawned)
{
return;
}
if(!maps\mp\_utility::isvalidclass(self.pers["class"]))
{
self.pers["class"] = "CLASS_CUSTOM1";
self.class = self.pers["class"];
}
maps\mp\_utility::closemenus();
thread maps\mp\gametypes\_playerlogic::spawnclient();
}

View File

@ -0,0 +1,188 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\gametypes\war.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 6
* Decompile Time: 96 ms
* Timestamp: 10/27/2023 2:13:38 AM
*******************************************************************/
//Function Number: 1
main()
{
if(getdvar("mapname") == "mp_background")
{
return;
}
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if(isusingmatchrulesdata())
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9);
maps\mp\_utility::registertimelimitdvar(level.gametype,10);
maps\mp\_utility::registerscorelimitdvar(level.gametype,500);
maps\mp\_utility::registerroundlimitdvar(level.gametype,1);
maps\mp\_utility::registerwinlimitdvar(level.gametype,1);
maps\mp\_utility::registernumlivesdvar(level.gametype,0);
maps\mp\_utility::registerhalftimedvar(level.gametype,0);
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
if(level.matchrules_damagemultiplier || level.matchrules_vampirism)
{
level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
game["dialog"]["gametype"] = "tm_death";
if(getdvarint("g_hardcore"))
{
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
}
else if(getdvarint("camera_thirdPerson"))
{
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_diehard"))
{
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
}
else if(getdvarint("scr_" + level.gametype + "_promode"))
{
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
}
//Function Number: 2
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar("scr_war_roundswitch",0);
maps\mp\_utility::registerroundswitchdvar("war",0,0,9);
setdynamicdvar("scr_war_roundlimit",1);
maps\mp\_utility::registerroundlimitdvar("war",1);
setdynamicdvar("scr_war_winlimit",1);
maps\mp\_utility::registerwinlimitdvar("war",1);
setdynamicdvar("scr_war_halftime",0);
maps\mp\_utility::registerhalftimedvar("war",0);
setdynamicdvar("scr_war_promode",0);
}
//Function Number: 3
onstartgametype()
{
setclientnamemode("auto_change");
if(!isdefined(game["switchedsides"]))
{
game["switchedsides"] = 0;
}
if(game["switchedsides"])
{
var_00 = game["attackers"];
var_01 = game["defenders"];
game["attackers"] = var_01;
game["defenders"] = var_00;
}
maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_WAR");
maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_WAR");
if(level.splitscreen)
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_WAR");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_WAR");
}
else
{
maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_WAR_SCORE");
maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_WAR_SCORE");
}
maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_WAR_HINT");
maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_WAR_HINT");
level.spawnmins = (0,0,0);
level.spawnmaxs = (0,0,0);
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start");
maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start");
maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn");
maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn");
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs);
setmapcenter(level.mapcenter);
var_02[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main(var_7B);
}
//Function Number: 4
getspawnpoint()
{
var_00 = self.pers["team"];
if(game["switchedsides"])
{
var_00 = maps\mp\_utility::getotherteam(var_00);
}
if(level.ingraceperiod)
{
var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start");
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01);
}
else
{
var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02);
var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02);
}
return var_02;
}
//Function Number: 5
onnormaldeath(param_00,param_01,param_02)
{
var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill");
param_01 lib_036E::func_2B88(param_01.pers["team"],var_03);
if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]])
{
param_01.finalkill = 1;
}
}
//Function Number: 6
ontimelimit()
{
level.finalkillcam_winner = "none";
if(game["status"] == "overtime")
{
var_00 = "forfeit";
}
else if(game["teamScores"]["allies"] == game["teamScores"]["axis"])
{
var_00 = "overtime";
}
else if(game["teamScores"]["axis"] > game["teamScores"]["allies"])
{
level.finalkillcam_winner = "axis";
var_00 = "axis";
}
else
{
level.finalkillcam_winner = "allies";
var_00 = "allies";
}
thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]);
}

View File

@ -0,0 +1,567 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_a10.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 22
* Decompile Time: 291 ms
* Timestamp: 10/27/2023 2:13:39 AM
*******************************************************************/
//Function Number: 1
init()
{
precachestring(&"MP_WAR_AIRSTRIKE_INBOUND");
precachestring(&"SPLASHES_DESTROYED_A10");
precachestring(&"KILLSTREAKS_A10_SUPPORT");
precachemodel("vehicle_a10_warthog");
precacheitem("a10_30mm_mp");
precachempanim("MP_A10_strafing_run");
precacheshader("compass_objpoint_a10_friendly");
precacheshader("compass_objpoint_a10_enemy");
precacheminimapicon("compass_objpoint_a10_friendly");
precacheminimapicon("compass_objpoint_a10_enemy");
level.a10_fx["bullet_rain"] = loadfx("misc/warthog_volley_runner");
level.a10_fx["bullet_impacts"] = loadfx("impacts/warthog_volley_runner");
level.a10_fx["bullet_dust"] = loadfx("dust/wing_drop_dust");
level.a10_fx["afterburner"] = loadfx("fire/jet_afterburner");
level.a10_fx["contrail"] = loadfx("smoke/jet_contrail");
level.a10_fx["wingtip_light_green"] = loadfx("misc/aircraft_light_wingtip_green");
level.a10_fx["wingtip_light_red"] = loadfx("misc/aircraft_light_wingtip_red");
level.killstreakfuncs["a10_support"] = ::tryusea10strike;
level.killstreaksetupfuncs["a10_support"] = ::a10supportsetup;
level.a10maxhealth = 350;
level.a10speed = 100;
level.a10speedreduction = 75;
level.a10startpointoffset = 5000;
level.a10impactfxdelay = 0.5;
level.a10damage = 200;
level.a10damageradius = 384;
level.a10damagedelay = 0.5;
level.a10bulletraindelay = 0.5;
level.a10bulletimpactsdelay = 0.5;
level.a10earthquakemagnitude = 0.1;
level.a10earthquakeduration = 0.5;
level.a10earthquakedelay = 0.5;
level.a10dirteffectradius = 350;
level.a10shootinggroundsounddelay = 0.1;
level.a10startpositionscalar = 2000;
}
//Function Number: 2
a10supportsetup()
{
self.useduava10 = 0;
}
//Function Number: 3
tryusea10strike(param_00)
{
var_01 = undefined;
if(isdefined(level.civilianjetflyby))
{
self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC");
return 0;
}
if(maps\mp\_utility::isusingremote())
{
return 0;
}
if(maps\mp\_utility::isairdenied())
{
return 0;
}
if(maps\mp\_utility::isemped())
{
return 0;
}
var_02 = "a10_support";
if(!self.useduava10)
{
self.useduava10 = 1;
maps\mp\killstreaks\_uav::func_356B(var_02);
}
var_01 = selecta10strikelocation(param_00,var_02);
if(!isdefined(var_01) || !var_01)
{
return 0;
}
return 1;
}
//Function Number: 4
selecta10strikelocation(param_00,param_01)
{
self playlocalsound("US_KS_hqr_a10");
maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500);
self endon("stop_location_selection");
self waittill("confirm_location",var_02,var_03);
self playlocalsound("US_KS_a10_inbound");
thread finisha10strikeusage(param_00,var_02,::calla10strike,var_03);
self setblurforplayer(0,0.3);
return 1;
}
//Function Number: 5
finisha10strikeusage(param_00,param_01,param_02,param_03)
{
self notify("used");
wait 0.05;
thread maps\mp\_utility::stoplocationselection(0);
self thread [[ param_02 ]](param_00,param_01,param_03);
return 1;
}
//Function Number: 6
calla10strike(param_00,param_01,param_02)
{
if(!isdefined(self))
{
return;
}
if(level.teambased)
{
var_03 = level.players;
foreach(var_05 in level.players)
{
var_06 = var_05.pers["team"];
if(isdefined(var_06))
{
if(var_06 == self.team)
{
var_05 iprintln(&"MP_WAR_AIRSTRIKE_INBOUND",self);
}
}
}
}
var_08 = (0,param_02,0);
var_09 = 12000;
var_0A = param_01 + anglestoforward(var_08) * -1 * var_09;
var_0B = param_01 + anglestoforward(var_08) * var_09 * 2;
var_0A = var_0A * (1,1,0);
var_0B = var_0B * (1,1,0);
var_0C = getbestheight(var_0A,var_0B);
var_0B = var_0B + (0,0,var_0C);
var_0A = var_0A + (0,0,var_0C);
self endon("disconnect");
var_0D = self.lifeid;
level thread doa10strike(param_00,self,var_0D,param_01,var_0A,var_0B,var_08,0);
}
//Function Number: 7
getbestheight(param_00,param_01)
{
var_02 = getent("airstrikeheight","targetname");
var_03 = level.spawnpoints;
var_04 = var_03[0];
foreach(var_06 in var_03)
{
if(var_06.origin[2] < var_04.origin[2])
{
var_04 = var_06;
}
}
if(isdefined(var_02))
{
var_08 = var_02.origin[2];
}
else if(isdefined(level.airstrikeheightscale))
{
var_08 = 850 * level.airstrikeheightscale;
}
else
{
var_08 = 850;
}
var_09 = var_08;
var_0A = var_08;
var_0B = var_04.origin[2];
var_0C = undefined;
var_0D = 0;
for(;;)
{
var_0E = var_0A - var_0B / 2 + var_0B;
var_0F = bullettrace(param_00 + (0,0,var_0E),param_01 + (0,0,var_0E),0,undefined);
if(var_0F["surfacetype"] != "none")
{
var_0B = var_0E;
var_0D++;
if(var_0D > 4 && isdefined(var_0C))
{
var_08 = var_0C;
break;
}
else if(var_0D > 6)
{
var_08 = var_09;
break;
}
}
else
{
var_0C = var_0E;
var_0A = var_0E;
if(var_0E < var_04.origin[2] + 512)
{
var_08 = var_04.origin[2] + 512;
break;
}
}
wait 0.05;
}
var_0D = 0;
for(;;)
{
wait 0.05;
var_10 = bullettrace(param_00 + (0,0,var_08),param_01 + (0,0,var_08),0,undefined);
var_11 = bullettrace(param_00 + (50,50,var_08 + 50),param_01 + (50,50,var_08 + 50),0,undefined);
wait 0.05;
var_12 = bullettrace(param_00 + (-50,-50,var_08 - 50),param_01 + (-50,-50,var_08 - 50),0,undefined);
var_13 = bullettrace(param_00 + (50,50,var_08 - 50),param_01 + (50,50,var_08 - 50),0,undefined);
wait 0.05;
var_14 = bullettrace(param_00 + (-50,-50,var_08 + 50),param_01 + (-50,-50,var_08 + 50),0,undefined);
if(var_10["surfacetype"] != "none" || var_11["surfacetype"] != "none" || var_12["surfacetype"] != "none" || var_13["surfacetype"] != "none" || var_14["surfacetype"] != "none")
{
var_0D++;
var_08 = var_08 + 200;
if(var_0D > 5)
{
var_08 = var_09;
break;
}
continue;
}
break;
}
return var_08 + 175;
}
//Function Number: 8
doa10strike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07)
{
if(!isdefined(param_01))
{
return;
}
var_08 = spawna10(param_01,param_04,param_05,param_03,param_07);
var_08.lifeid = param_00;
var_08 playloopsound("veh_mig29_dist_loop");
var_09 = level.spawnpoints;
var_0A = var_09[0];
foreach(var_0C in var_09)
{
if(var_0C.origin[2] > var_0A.origin[2])
{
var_0A = var_0C;
}
}
var_08.killcament = spawn("script_model",(var_08.origin[0],var_08.origin[1],var_0A.origin[2] + 5000));
var_08.killcament linkto(var_08);
param_01.a10 = var_08;
var_08 thread watchtimeout();
var_08 thread watchdeath();
var_08 endon("death");
var_08 thread a10startmove();
}
//Function Number: 9
watchtimeout()
{
level endon("game_ended");
self endon("gone");
self endon("death");
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(35);
self notify("death");
}
//Function Number: 10
a10startmove()
{
self endon("death");
wait self.initialdelay;
var_00 = self.startpoint;
var_01 = self.attackpoint;
var_02 = self.endpoint;
var_01 = (var_01[0],var_01[1],var_00[2] - level.a10startpointoffset);
var_03 = distance(var_00,var_01) * 0.5;
var_04 = float(level.a10speed);
var_05 = var_03 / var_04 / 60;
var_06 = var_00 + vectornormalize(var_01 - var_00) * var_03;
thread a10playenginefx();
self moveto(var_06,var_05);
wait var_05;
var_03 = distance(var_00,var_01) * 0.5;
var_04 = float(level.a10speed - level.a10speedreduction);
var_05 = var_03 / var_04 / 60;
self moveto(var_01,var_05);
thread starta10shooting(var_05);
thread monitorkills();
wait var_05;
self notify("stopShooting");
var_03 = distance2d(var_01,var_02);
var_04 = level.a10speed;
var_05 = var_03 / var_04 / 60;
self moveto(var_02,var_05);
var_07 = vectortoangles(var_02 - var_01);
self waittill("movedone");
self notify("gone");
wait 0.5;
removea10();
}
//Function Number: 11
a10playenginefx()
{
self endon("death");
wait 0.5;
playfxontag(level.a10_fx["afterburner"],self,"tag_engine_right");
wait 0.5;
playfxontag(level.a10_fx["afterburner"],self,"tag_engine_left");
wait 0.5;
playfxontag(level.a10_fx["contrail"],self,"tag_right_wingtip");
wait 0.5;
playfxontag(level.a10_fx["contrail"],self,"tag_left_wingtip");
wait 0.5;
playfxontag(level.a10_fx["wingtip_light_red"],self,"tag_right_wingtip");
wait 0.5;
playfxontag(level.a10_fx["wingtip_light_green"],self,"tag_left_wingtip");
}
//Function Number: 12
monitorkills()
{
level endon("game_ended");
self endon("gone");
self endon("death");
self endon("stopShooting");
for(;;)
{
self waittill("killedPlayer");
self.killcount++;
}
}
//Function Number: 13
spawna10(param_00,param_01,param_02,param_03,param_04)
{
param_01 = param_01 + (0,0,level.a10startpointoffset);
var_05 = vectortoangles(param_02 - param_01);
var_06 = spawn("script_model",param_01);
var_07 = spawnplane(param_00,"script_model",param_01,"compass_objpoint_a10_friendly","compass_objpoint_a10_enemy");
if(!isdefined(var_06))
{
return;
}
var_07 linkto(var_06);
var_06.fakea10 = var_07;
var_06 setmodel("vehicle_a10_warthog");
var_06.health = 999999;
var_06.maxhealth = level.a10maxhealth;
var_06.damagetaken = 0;
var_06.owner = param_00;
var_06.team = param_00.team;
var_06.killcount = 0;
var_06.startpoint = param_01;
var_06.endpoint = param_02;
var_06.attackpoint = param_03;
var_06.initialdelay = param_04;
var_06.angles = var_05;
return var_06;
}
//Function Number: 14
starta10shooting(param_00)
{
self endon("gone");
self endon("death");
self endon("stopShooting");
var_01 = level.spawnpoints;
var_02 = var_01[0];
var_03 = vectornormalize(self.origin - self.attackpoint) * level.a10startpositionscalar;
var_03 = self.attackpoint + (var_03[0],var_03[1],0);
var_04 = vectornormalize(self.origin - self.attackpoint) * -1 * level.a10startpositionscalar;
var_04 = self.attackpoint + (var_04[0],var_04[1],0);
var_05 = vectornormalize(var_04 - var_03);
var_06 = distance2d(var_03,var_04) / param_00 / 0.05;
self.a10shootingpos = (var_03[0],var_03[1],var_02.origin[2] - 128);
var_07 = var_05 * var_06;
thread playbulletrain();
thread manageshootingloopsound();
thread manageshootinggroundsound();
thread a10earthquake();
while(param_00 > 0)
{
foreach(var_09 in level.players)
{
if(level.teambased)
{
if(var_09.team != self.owner.team)
{
var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin);
if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius)
{
radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp");
}
}
continue;
}
var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin);
if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius)
{
radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp");
}
}
var_0C = self gettagorigin("tag_gun");
for(var_0D = 0;var_0D < 1;var_0D++)
{
magicbullet("a10_30mm_mp",var_0C,self.a10shootingpos + (randomintrange(-100,100),randomintrange(-100,100),0),self.owner);
}
self.a10shootingpos = self.a10shootingpos + (var_07[0],var_07[1],0);
param_00 = param_00 - 0.05;
wait 0.05;
}
}
//Function Number: 15
playbulletrain()
{
self endon("gone");
self endon("death");
self endon("stopShooting");
for(;;)
{
var_00 = self gettagorigin("tag_gun");
var_01 = self.a10shootingpos - var_00;
var_02 = anglestoup(var_01);
playfx(level.a10_fx["bullet_rain"],var_00,var_01,var_02);
wait level.a10bulletraindelay;
}
}
//Function Number: 16
manageshootingloopsound()
{
var_00 = spawn("script_origin",self gettagorigin("tag_gun"));
if(!isdefined(var_00))
{
return;
}
var_00 linkto(self,"tag_gun");
var_00 playloopsound("pavelow_mg_loop");
common_scripts\utility::waittill_any("stopShooting","gone","death");
var_00 stoploopsound("pavelow_mg_loop");
wait 0.5;
var_00 delete();
}
//Function Number: 17
manageshootinggroundsound()
{
self endon("death");
self endon("gone");
self endon("stopShooting");
for(;;)
{
level thread common_scripts\utility::play_sound_in_space("bullet_a10warthog_default",self.a10shootingpos);
wait level.a10shootinggroundsounddelay;
}
}
//Function Number: 18
a10earthquake()
{
self endon("death");
self endon("gone");
self endon("stopShooting");
for(;;)
{
playrumbleonposition("grenade_rumble",self.a10shootingpos);
earthquake(level.a10earthquakemagnitude,level.a10earthquakeduration,self.a10shootingpos,level.a10damageradius);
foreach(var_01 in level.players)
{
if(var_01 maps\mp\_utility::isusingremote())
{
continue;
}
if(distance(self.a10shootingpos,var_01.origin) > level.a10dirteffectradius)
{
continue;
}
if(var_01 damageconetrace(self.a10shootingpos))
{
var_01 thread maps\mp\gametypes\_shellshock::dirteffect(self.a10shootingpos);
}
}
wait level.a10earthquakedelay;
}
}
//Function Number: 19
watchdeath()
{
self endon("gone");
self waittill("death");
thread a10destroyed();
}
//Function Number: 20
a10destroyed()
{
self endon("gone");
if(!isdefined(self))
{
return;
}
wait randomfloatrange(0.5,1.5);
a10explode();
}
//Function Number: 21
a10explode()
{
self notify("explode");
removea10();
}
//Function Number: 22
removea10()
{
if(isdefined(self.killcament))
{
self.killcament delete();
}
if(isdefined(self.fakea10))
{
self.fakea10 delete();
}
self delete();
}

View File

@ -0,0 +1,253 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_aamissile.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 11
* Decompile Time: 154 ms
* Timestamp: 10/27/2023 2:13:40 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheitem("aamissile_projectile_mp");
precacheshader("ac130_overlay_grain");
level.aamissilelaunchvert = 14000;
level.aamissilelaunchhorz = 30000;
level.aamissilelaunchtargetdist = 1500;
level.rockets = [];
level.killstreakfuncs["aamissile"] = ::tryuseaamissile;
}
//Function Number: 2
tryuseaamissile(param_00)
{
if(isdefined(level.civilianjetflyby))
{
self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC");
return 0;
}
maps\mp\_utility::setusingremote("aamissile");
var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak();
if(var_01 != "success")
{
if(var_01 != "disconnect")
{
maps\mp\_utility::clearusingremote();
}
return 0;
}
level thread aa_missile_fire(param_00,self);
return 1;
}
//Function Number: 3
drawline(param_00,param_01,param_02,param_03)
{
var_04 = int(param_02 * 20);
for(var_05 = 0;var_05 < var_04;var_05++)
{
wait 0.05;
}
}
//Function Number: 4
gettargets()
{
var_00 = [];
var_01 = [];
if(isdefined(level.littlebirds) && level.littlebirds.size)
{
foreach(var_03 in level.littlebirds)
{
if(var_03.team != self.team)
{
var_00[var_00.size] = var_03;
}
}
}
if(isdefined(level.helis) && level.helis.size)
{
foreach(var_06 in level.helis)
{
if(var_06.team != self.team)
{
var_01[var_01.size] = var_06;
}
}
}
if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team)
{
return level.ac130.planemodel;
}
if(isdefined(var_01) && var_01.size)
{
return var_01[0];
}
if(isdefined(var_00) && var_00.size)
{
return var_00[0];
}
}
//Function Number: 5
aa_missile_fire(param_00,param_01)
{
var_02 = undefined;
var_03 = (0,0,level.aamissilelaunchvert);
var_04 = level.aamissilelaunchhorz;
var_05 = level.aammissilelaunchtargetdist;
var_06 = param_01 gettargets();
if(!isdefined(var_06))
{
var_07 = (0,0,0);
}
else
{
var_07 = var_07.origin;
var_03 = (0,0,1) * var_07 + (0,0,1000);
}
var_08 = anglestoforward(param_01.angles);
var_09 = param_01.origin + var_03 + var_08 * var_04 * -1;
var_0A = magicbullet("aamissile_projectile_mp",var_09,var_07,param_01);
if(!isdefined(var_0A))
{
param_01 maps\mp\_utility::clearusingremote();
return;
}
var_0A.lifeid = param_00;
var_0A.type = "remote";
missileeyes(param_01,var_0A);
}
//Function Number: 6
missileeyes(param_00,param_01)
{
param_00 endon("joined_team");
param_00 endon("joined_spectators");
param_01 thread rocket_cleanupondeath();
param_00 thread player_cleanupongameended(param_01);
param_00 thread player_cleanuponteamchange(param_01);
param_00 visionsetmissilecamforplayer("black_bw",0);
param_00 endon("disconnect");
if(isdefined(param_01))
{
param_00 visionsetmissilecamforplayer(game["thermal_vision"],1);
param_00 thread delayedfofoverlay();
param_00 cameralinkto(param_01,"tag_origin");
param_00 controlslinkto(param_01);
if(getdvarint("camera_thirdPerson"))
{
param_00 maps\mp\_utility::setthirdpersondof(0);
}
param_01 waittill("death");
if(isdefined(param_01))
{
param_00 maps\mp\_matchdata::logkillstreakevent("predator_missile",param_01.origin);
}
param_00 controlsunlink();
param_00 maps\mp\_utility::freezecontrolswrapper(1);
if(!level.gameended || isdefined(param_00.finalkill))
{
param_00 thread staticeffect(0.5);
}
wait 0.5;
param_00 thermalvisionfofoverlayoff();
param_00 cameraunlink();
if(getdvarint("camera_thirdPerson"))
{
param_00 maps\mp\_utility::setthirdpersondof(1);
}
}
param_00 maps\mp\_utility::clearusingremote();
}
//Function Number: 7
delayedfofoverlay()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
wait 0.15;
self thermalvisionfofoverlayon();
}
//Function Number: 8
staticeffect(param_00)
{
self endon("disconnect");
var_01 = newclienthudelem(self);
var_01.horzalign = "fullscreen";
var_01.vertalign = "fullscreen";
var_01 setshader("white",640,480);
var_01.archive = 1;
var_01.sort = 10;
var_02 = newclienthudelem(self);
var_02.horzalign = "fullscreen";
var_02.vertalign = "fullscreen";
var_02 setshader("ac130_overlay_grain",640,480);
var_02.archive = 1;
var_02.sort = 20;
wait param_00;
var_02 destroy();
var_01 destroy();
}
//Function Number: 9
player_cleanuponteamchange(param_00)
{
param_00 endon("death");
self endon("disconnect");
common_scripts\utility::waittill_any("joined_team","joined_spectators");
if(self.team != "spectator")
{
self thermalvisionfofoverlayoff();
self controlsunlink();
self cameraunlink();
if(getdvarint("camera_thirdPerson"))
{
maps\mp\_utility::setthirdpersondof(1);
}
}
maps\mp\_utility::clearusingremote();
level.remotemissileinprogress = undefined;
}
//Function Number: 10
rocket_cleanupondeath()
{
var_00 = self getentitynumber();
level.rockets[var_00] = self;
self waittill("death");
level.rockets[var_00] = undefined;
}
//Function Number: 11
player_cleanupongameended(param_00)
{
param_00 endon("death");
self endon("death");
level waittill("game_ended");
self thermalvisionfofoverlayoff();
self controlsunlink();
self cameraunlink();
if(getdvarint("camera_thirdPerson"))
{
maps\mp\_utility::setthirdpersondof(1);
}
}

View File

@ -0,0 +1,318 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_aastrike.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 11
* Decompile Time: 168 ms
* Timestamp: 10/27/2023 2:13:40 AM
*******************************************************************/
//Function Number: 1
init()
{
precacheitem("aamissile_projectile_mp");
precachemodel("vehicle_av8b_harrier_jet_mp");
precachestring(&"MP_NO_AIR_TARGETS");
level.teamairdenied["axis"] = 0;
level.teamairdenied["allies"] = 0;
level.rockets = [];
level.killstreakfuncs["aastrike"] = ::tryuseaastrike;
}
//Function Number: 2
tryuseaastrike(param_00)
{
if(isdefined(level.civilianjetflyby))
{
self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC");
return 0;
}
if(maps\mp\_utility::isusingremote())
{
return 0;
}
if(maps\mp\_utility::isairdenied())
{
return 0;
}
if(maps\mp\_utility::isemped())
{
return 0;
}
maps\mp\_matchdata::logkillstreakevent("aastrike",self.origin);
thread finishaastrike(param_00);
thread maps\mp\_utility::teamplayercardsplash("used_aastrike",self,self.team);
return 1;
}
//Function Number: 3
cycletargets()
{
self endon("stopFindingTargets");
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
self endon("game_ended");
for(;;)
{
wait 0.05;
findtargets();
wait randomintrange(4,5);
}
}
//Function Number: 4
findtargets()
{
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
self endon("game_ended");
var_00 = [];
var_01 = [];
var_02 = [];
if(isdefined(level.littlebirds) && level.littlebirds.size)
{
foreach(var_04 in level.littlebirds)
{
if(isdefined(var_04.team) && var_04.team != self.team)
{
var_00[var_00.size] = var_04;
}
}
}
if(isdefined(level.helis) && level.helis.size)
{
foreach(var_07 in level.helis)
{
if(var_07.team != self.team)
{
var_01[var_01.size] = var_07;
}
}
}
var_09 = maps\mp\_utility::getotherteam(self.team);
if(isdefined(level.activeuavs[var_09]))
{
foreach(var_0B in level.uavmodels[var_09])
{
var_02[var_02.size] = var_0B;
}
}
var_0D = 0;
foreach(var_04 in var_00)
{
wait 3;
if(var_0D % 2)
{
thread fireattarget(var_04,self.team,1);
}
else
{
thread fireattarget(var_04,self.team,0);
}
var_0D++;
}
foreach(var_07 in var_01)
{
wait 3;
thread fireattarget(var_07,self.team,1);
}
foreach(var_0B in var_02)
{
wait 0.5;
thread fireattarget(var_0B,self.team,0);
}
if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team)
{
var_14 = level.ac130.planemodel;
wait 6;
thread fireattarget(var_14,self.team,1);
}
}
//Function Number: 5
earlyabortwatcher()
{
self endon("stopFindingTargets");
var_00 = self.team;
common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","game_ended");
level.teamairdenied[maps\mp\_utility::getotherteam(var_00)] = 0;
level.airdeniedplayer = undefined;
}
//Function Number: 6
finishaastrike(param_00)
{
self endon("disconnect");
self endon("joined_team");
self endon("joined_spectators");
self endon("game_ended");
level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 1;
level.airdeniedplayer = self;
thread earlyabortwatcher();
thread cycletargets();
for(var_01 = 0;var_01 < 4;var_01++)
{
wait 6;
if(var_01 == 1 || var_01 == 3)
{
thread doflyby(1);
continue;
}
thread doflyby(0);
}
wait 3;
self notify("stopFindingTargets");
level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 0;
level.airdeniedplayer = undefined;
}
//Function Number: 7
fireattarget(param_00,param_01,param_02)
{
if(!isdefined(param_00))
{
return;
}
var_03 = (0,0,14000);
var_04 = (0,0,1500);
var_05 = 15000;
var_06 = 20000;
var_07 = param_00.origin;
var_03 = (0,0,1) * var_07 + (0,0,1000);
var_08 = param_00.angles * (0,1,0);
var_09 = anglestoforward(var_08);
var_0A = param_00.origin + var_04 + var_09 * var_05 * -1;
var_0B = param_00.origin + var_04 + var_09 * var_06;
var_0C = magicbullet("aamissile_projectile_mp",var_0A + (0,0,-75),param_00.origin,self);
var_0C missile_settargetent(param_00);
var_0C missile_setflightmodedirect();
var_0D = magicbullet("aamissile_projectile_mp",var_0A + (randomint(500),randomint(500),-75),param_00.origin,self);
var_0D missile_settargetent(param_00);
var_0D missile_setflightmodedirect();
if(param_02)
{
var_0E = spawnplane(self,"script_model",var_0A,"hud_minimap_harrier_green","hud_minimap_harrier_red");
}
else
{
var_0E = spawnplane(self,"script_model",var_0B);
}
if(self.team == "allies")
{
var_0E setmodel("vehicle_av8b_harrier_jet_mp");
}
else
{
var_0E setmodel("vehicle_av8b_harrier_jet_opfor_mp");
}
var_0F = distance(var_0A,var_0B);
var_0E.angles = vectortoangles(var_0B - var_0A);
var_0E thread aasoundmanager(var_0F);
var_0E thread playplanefx();
var_0F = distance(var_0A,var_0B);
var_0E moveto(var_0B * 2,var_0F / 2000,0,0);
wait var_0F / 3000;
var_0E delete();
}
//Function Number: 8
aasoundmanager(param_00)
{
self playloopsound("veh_aastrike_flyover_loop");
wait param_00 / 2 / 2000;
self stoploopsound();
self playloopsound("veh_aastrike_flyover_outgoing_loop");
}
//Function Number: 9
doflyby(param_00)
{
self endon("disconnect");
var_01 = randomint(level.spawnpoints.size - 1);
var_02 = level.spawnpoints[var_01].origin * (1,1,0);
var_03 = 20000;
var_04 = 20000;
var_05 = getent("airstrikeheight","targetname");
var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600));
var_07 = anglestoforward((0,randomint(45),0));
var_08 = var_02 + var_06 + var_07 * var_03 * -1;
var_09 = var_02 + var_06 + var_07 * var_04;
var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300));
var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300));
if(param_00)
{
var_0C = spawnplane(self,"script_model",var_08,"hud_minimap_harrier_green","hud_minimap_harrier_red");
}
else
{
var_0C = spawnplane(self,"script_model",var_09);
}
var_0D = spawnplane(self,"script_model",var_0A);
if(self.team == "allies")
{
var_0C setmodel("vehicle_av8b_harrier_jet_mp");
var_0D setmodel("vehicle_av8b_harrier_jet_mp");
}
else
{
var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp");
var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp");
}
var_0C.angles = vectortoangles(var_09 - var_08);
var_0C playloopsound("veh_aastrike_flyover_loop");
var_0C thread playplanefx();
var_0D.angles = vectortoangles(var_09 - var_0A);
var_0D thread playplanefx();
var_0E = distance(var_08,var_09);
var_0C moveto(var_09 * 2,var_0E / 1800,0,0);
wait randomfloatrange(0.25,0.5);
var_0D moveto(var_0B * 2,var_0E / 1800,0,0);
wait var_0E / 1600;
var_0C delete();
var_0D delete();
}
//Function Number: 10
drawline(param_00,param_01,param_02,param_03)
{
var_04 = int(param_02 * 20);
for(var_05 = 0;var_05 < var_04;var_05++)
{
wait 0.05;
}
}
//Function Number: 11
playplanefx()
{
self endon("death");
wait 0.5;
playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right");
wait 0.5;
playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left");
wait 0.5;
playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip");
wait 0.5;
playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip");
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,132 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_autoshotgun.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 9
* Decompile Time: 173 ms
* Timestamp: 10/27/2023 2:13:54 AM
*******************************************************************/
//Function Number: 1
init()
{
level.killstreakfuncs["auto_shotgun"] = ::tryuseautoshotgun;
level.killstreaksetupfuncs["auto_shotgun"] = ::shotgunsetup;
level.killstreakfuncs["thumper"] = ::tryusethumper;
level.killstreaksetupfuncs["thumper"] = ::thumpersetup;
thread onplayerconnect();
}
//Function Number: 2
shotgunsetup()
{
self givemaxammo("aa12_mp");
thread saveweaponammoondeath("aa12_mp");
}
//Function Number: 3
tryuseautoshotgun(param_00)
{
thread removeweapononoutofammo("aa12_mp");
return 1;
}
//Function Number: 4
thumpersetup()
{
self givemaxammo("m79_mp");
thread saveweaponammoondeath("m79_mp");
}
//Function Number: 5
tryusethumper()
{
thread removeweapononoutofammo("m79_mp");
return 1;
}
//Function Number: 6
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 7
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if(!isdefined(self.pers["ksWeapon_clip_ammo"]) || !isdefined(self.pers["ksWeapon_name"]))
{
continue;
}
var_00 = self.pers["ksWeapon_name"];
if(isdefined(self.pers["killstreak"]) && maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreak"]) != var_00)
{
self.pers["ksWeapon_name"] = undefined;
self.pers["ksWeapon_clip_ammo"] = undefined;
self.pers["ksWeapon_stock_ammo"] = undefined;
continue;
}
maps\mp\killstreaks\_killstreaks::givekillstreakweapon(var_00);
self setweaponammostock(var_00,self.pers["ksWeapon_stock_ammo"]);
self setweaponammoclip(var_00,self.pers["ksWeapon_clip_ammo"]);
thread removeweapononoutofammo(var_00);
thread saveweaponammoondeath(var_00);
}
}
//Function Number: 8
saveweaponammoondeath(param_00)
{
self endon("disconnect");
self endon("got_killstreak");
self notify("saveWeaponAmmoOnDeath");
self endon("saveWeaponAmmoOnDeath");
self.pers["ksWeapon_name"] = undefined;
self.pers["ksWeapon_clip_ammo"] = undefined;
self.pers["ksWeapon_stock_ammo"] = undefined;
self waittill("death");
if(!self hasweapon(param_00))
{
return;
}
self.pers["ksWeapon_name"] = param_00;
self.pers["ksWeapon_clip_ammo"] = self getweaponammoclip(param_00);
self.pers["ksWeapon_stock_ammo"] = self getweaponammostock(param_00);
}
//Function Number: 9
removeweapononoutofammo(param_00)
{
self endon("disconnect");
self endon("death");
self notify(param_00 + "_ammo_monitor");
self endon(param_00 + "_ammo_monitor");
for(;;)
{
self waittill("end_firing");
if(self getcurrentweapon() != param_00)
{
continue;
}
var_01 = self getweaponammoclip(param_00) + self getweaponammostock(param_00);
if(var_01)
{
continue;
}
self takeweapon(param_00);
}
}

View File

@ -0,0 +1,755 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_deployablebox.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 28
* Decompile Time: 508 ms
* Timestamp: 10/27/2023 2:13:57 AM
*******************************************************************/
//Function Number: 1
init()
{
level.killstreakfuncs["deployable_vest"] = ::tryusedeployablevest;
level.boxsettings = [];
level.boxsettings["deployable_vest"] = spawnstruct();
level.boxsettings["deployable_vest"].weaponinfo = "deployable_vest_marker_mp";
level.boxsettings["deployable_vest"].modelbase = "com_deploy_ballistic_vest_friend_world";
level.boxsettings["deployable_vest"].hintstring = &"MP_LIGHT_ARMOR_PICKUP";
level.boxsettings["deployable_vest"].capturingstring = &"MP_BOX_GETTING_VEST";
level.boxsettings["deployable_vest"].eventstring = &"MP_DEPLOYED_VEST";
level.boxsettings["deployable_vest"].streakname = "deployable_vest";
level.boxsettings["deployable_vest"].splashname = "used_deployable_vest";
level.boxsettings["deployable_vest"].shadername = "compass_objpoint_deploy_friendly";
level.boxsettings["deployable_vest"].lifespan = 60;
level.boxsettings["deployable_vest"].xp = 50;
level.boxsettings["deployable_vest"].vodestroyed = "ballistic_vest_destroyed";
foreach(var_01 in level.boxsettings)
{
precacheitem(var_01.weaponinfo);
precachemodel(var_01.modelbase);
precachestring(var_01.hintstring);
precachestring(var_01.capturingstring);
precachestring(var_01.eventstring);
precacheshader(var_01.shadername);
}
precachestring(&"PLATFORM_HOLD_TO_USE");
level._effect["box_explode_mp"] = loadfx("fire/ballistic_vest_death");
}
//Function Number: 2
tryusedeployablevest(param_00)
{
var_01 = begindeployableviamarker(param_00,"deployable_vest");
if(!isdefined(var_01) || !var_01)
{
return 0;
}
maps\mp\_matchdata::logkillstreakevent("deployable_vest",self.origin);
return 1;
}
//Function Number: 3
begindeployableviamarker(param_00,param_01)
{
self endon("death");
self.marker = undefined;
thread watchmarkerusage(param_00,param_01);
var_02 = self getcurrentweapon();
if(ismarker(var_02))
{
var_03 = var_02;
}
else
{
var_03 = undefined;
}
while(ismarker(var_02))
{
self waittill("weapon_change",var_02);
if(ismarker(var_02))
{
var_03 = var_02;
}
}
self notify("stopWatchingMarker");
if(!isdefined(var_03))
{
return 0;
}
return !self getammocount(var_03) && self hasweapon(var_03);
}
//Function Number: 4
watchmarkerusage(param_00,param_01)
{
self notify("watchMarkerUsage");
self endon("death");
self endon("disconnect");
self endon("watchMarkerUsage");
self endon("stopWatchingMarker");
thread watchmarker(param_00,param_01);
for(;;)
{
self waittill("grenade_pullback",var_02);
if(!ismarker(var_02))
{
continue;
}
common_scripts\utility::_disableusability();
beginmarkertracking();
}
}
//Function Number: 5
watchmarker(param_00,param_01)
{
self notify("watchMarker");
self endon("watchMarker");
self endon("spawned_player");
self endon("disconnect");
self endon("stopWatchingMarker");
for(;;)
{
self waittill("grenade_fire",var_02,var_03);
if(!ismarker(var_03))
{
continue;
}
if(!isalive(self))
{
var_02 delete();
return;
}
var_02.owner = self;
var_02.weaponname = var_03;
self.marker = var_02;
thread takeweapononstuck(var_02,var_03);
var_02 thread markeractivate(param_00,param_01,::box_setactive);
}
}
//Function Number: 6
takeweapononstuck(param_00,param_01)
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
param_00 playsoundtoplayer("mp_vest_deployed_ui",self);
if(self hasweapon(param_01))
{
self takeweapon(param_01);
self switchtoweapon(common_scripts\utility::getlastweapon());
}
}
//Function Number: 7
beginmarkertracking()
{
self notify("beginMarkerTracking");
self endon("beginMarkerTracking");
self endon("death");
self endon("disconnect");
common_scripts\utility::waittill_any("grenade_fire","weapon_change");
common_scripts\utility::_enableusability();
}
//Function Number: 8
markeractivate(param_00,param_01,param_02)
{
self notify("markerActivate");
self endon("markerActivate");
self waittill("missile_stuck");
var_03 = self.owner;
var_04 = self.origin;
if(!isdefined(var_03))
{
return;
}
var_05 = createboxforplayer(param_01,var_04,var_03);
wait 0.05;
var_05 thread [[ param_02 ]]();
self delete();
}
//Function Number: 9
ismarker(param_00)
{
switch(param_00)
{
case "deployable_vest_marker_mp":
return 1;
default:
return 0;
}
}
//Function Number: 10
createboxforplayer(param_00,param_01,param_02)
{
var_03 = spawn("script_model",param_01);
var_03 setmodel(level.boxsettings[param_00].modelbase);
var_03.health = 1000;
var_03.angles = param_02.angles;
var_03.boxtype = param_00;
var_03.owner = param_02;
var_03.team = param_02.team;
var_03 box_setinactive();
var_03 thread box_handleownerdisconnect();
return var_03;
}
//Function Number: 11
box_setactive()
{
self setcursorhint("HINT_NOICON");
self sethintstring(level.boxsettings[self.boxtype].hintstring);
self.inuse = 0;
if(level.teambased)
{
var_00 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_00,"invisible",(0,0,0));
objective_position(var_00,self.origin);
objective_state(var_00,"active");
objective_icon(var_00,level.boxsettings[self.boxtype].shadername);
objective_team(var_00,self.team);
self.objidfriendly = var_00;
foreach(var_02 in level.players)
{
if(self.team == var_02.team && !var_02 maps\mp\_utility::isjuggernaut())
{
maps\mp\_entityheadicons::setheadicon(var_02,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
}
}
}
else
{
var_00 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_00,"invisible",(0,0,0));
objective_position(var_00,self.origin);
objective_state(var_00,"active");
objective_icon(var_00,level.boxsettings[self.boxtype].shadername);
objective_player(var_00,self.owner getentitynumber());
self.objidfriendly = var_00;
if(!self.owner maps\mp\_utility::isjuggernaut())
{
maps\mp\_entityheadicons::setheadicon(self.owner,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
}
}
self makeusable();
self.isusable = 1;
self setcandamage(1);
thread box_handledamage();
thread box_handledeath();
thread box_timeout();
thread disablewhenjuggernaut();
foreach(var_02 in level.players)
{
if(level.teambased)
{
if(self.team == var_02.team)
{
if(var_02 maps\mp\_utility::isjuggernaut())
{
self disableplayeruse(var_02);
thread doubledip(var_02);
}
else
{
self enableplayeruse(var_02);
}
thread boxthink(var_02);
}
else
{
self disableplayeruse(var_02);
}
thread box_playerjoinedteam(var_02);
continue;
}
if(isdefined(self.owner) && self.owner == var_02)
{
if(var_02 maps\mp\_utility::isjuggernaut())
{
self disableplayeruse(var_02);
thread doubledip(var_02);
}
else
{
self enableplayeruse(var_02);
}
thread boxthink(var_02);
continue;
}
self disableplayeruse(var_02);
}
level thread maps\mp\_utility::teamplayercardsplash(level.boxsettings[self.boxtype].splashname,self.owner,self.team);
thread box_playerconnected();
}
//Function Number: 12
box_playerconnected()
{
self endon("death");
level waittill("connected",var_00);
var_00 waittill("spawned_player");
if(level.teambased)
{
if(self.team == var_00.team)
{
self enableplayeruse(var_00);
thread boxthink(var_00);
maps\mp\_entityheadicons::setheadicon(var_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
return;
}
self disableplayeruse(var_00);
maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0));
}
}
//Function Number: 13
box_playerjoinedteam(param_00)
{
self endon("death");
param_00 endon("disconnect");
for(;;)
{
param_00 waittill("joined_team");
if(level.teambased)
{
if(self.team == param_00.team)
{
self enableplayeruse(param_00);
thread boxthink(param_00);
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
continue;
}
self disableplayeruse(param_00);
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
}
}
}
//Function Number: 14
box_setinactive()
{
self makeunusable();
self.isusable = 0;
maps\mp\_entityheadicons::setheadicon("none","",(0,0,0));
if(isdefined(self.objidfriendly))
{
maps\mp\_utility::_objective_delete(self.objidfriendly);
}
}
//Function Number: 15
box_handledamage()
{
self.health = 999999;
self.maxhealth = 300;
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_09))
{
switch(var_09)
{
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "concussion_grenade_mp":
break;
}
}
if(!isdefined(self))
{
return;
}
if(var_04 == "MOD_MELEE")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
if(isdefined(var_08) && var_08 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
var_0A = var_00;
if(isplayer(var_01))
{
var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag");
if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET")
{
if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing"))
{
var_0A = var_0A + var_00 * level.armorpiercingmod;
}
}
}
if(isdefined(var_01.owner) && isplayer(var_01.owner))
{
var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag");
}
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":
self.var_30C8 = 0;
var_0A = self.maxhealth + 1;
break;
}
}
self.damagetaken = self.damagetaken + var_0A;
if(self.damagetaken >= self.maxhealth)
{
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.owner))
{
self.owner thread maps\mp\_utility::leaderdialogonplayer(level.boxsettings[self.boxtype].vodestroyed);
}
self notify("death");
return;
}
}
}
//Function Number: 16
box_handledeath()
{
self waittill("death");
if(!isdefined(self))
{
return;
}
box_setinactive();
playfx(common_scripts\utility::getfx("box_explode_mp"),self.origin);
wait 0.5;
self notify("deleting");
self delete();
}
//Function Number: 17
box_handleownerdisconnect()
{
self endon("death");
level endon("game_ended");
self notify("box_handleOwner");
self endon("box_handleOwner");
self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators");
self notify("death");
}
//Function Number: 18
boxthink(param_00)
{
self endon("death");
thread boxcapturethink(param_00);
for(;;)
{
self waittill("captured",var_01);
if(var_01 != param_00)
{
continue;
}
switch(self.boxtype)
{
case "deployable_vest":
param_00 playlocalsound("ammo_crate_use");
param_00 [[ level.killstreakfuncs["light_armor"] ]]();
break;
}
if(isdefined(self.owner) && param_00 != self.owner)
{
self.owner thread maps\mp\gametypes\_rank::func_2F45(level.boxsettings[self.boxtype].eventstring);
self.owner thread maps\mp\gametypes\_rank::giverankxp("support",level.boxsettings[self.boxtype].xp);
}
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
self disableplayeruse(param_00);
thread doubledip(param_00);
}
}
//Function Number: 19
doubledip(param_00)
{
self endon("death");
param_00 endon("disconnect");
param_00 waittill("death");
if(level.teambased)
{
if(self.team == param_00.team)
{
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
self enableplayeruse(param_00);
return;
}
return;
}
if(isdefined(self.owner) && self.owner == param_00)
{
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
self enableplayeruse(param_00);
}
}
//Function Number: 20
boxcapturethink(param_00)
{
while(isdefined(self))
{
self waittill("trigger",var_01);
if(var_01 != param_00)
{
continue;
}
if(!useholdthink(param_00,2000))
{
continue;
}
self notify("captured",param_00);
}
}
//Function Number: 21
isfriendlytobox(param_00)
{
if(level.teambased && self.team == param_00.team)
{
return 1;
}
return 0;
}
//Function Number: 22
box_timeout()
{
self endon("death");
level endon("game_ended");
var_00 = level.boxsettings[self.boxtype].lifespan;
while(var_00)
{
wait 1;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(!isdefined(self.carriedby))
{
var_00 = max(0,var_00 - 1);
}
}
self notify("death");
}
//Function Number: 23
deleteonownerdeath(param_00)
{
wait 0.25;
self linkto(param_00,"tag_origin",(0,0,0),(0,0,0));
param_00 waittill("death");
self delete();
}
//Function Number: 24
box_modelteamupdater(param_00)
{
self endon("death");
self hide();
foreach(var_02 in level.players)
{
if(var_02.team == param_00)
{
self showtoplayer(var_02);
}
}
for(;;)
{
level waittill("joined_team");
self hide();
foreach(var_02 in level.players)
{
if(var_02.team == param_00)
{
self showtoplayer(var_02);
}
}
}
}
//Function Number: 25
useholdthink(param_00,param_01)
{
param_00 playerlinkto(self);
param_00 playerlinkedoffsetenable();
param_00 common_scripts\utility::_disableweapon();
param_00.boxparams = spawnstruct();
param_00.boxparams.curprogress = 0;
param_00.boxparams.inuse = 1;
param_00.boxparams.userate = 0;
if(isdefined(param_01))
{
param_00.boxparams.usetime = param_01;
}
else
{
param_00.boxparams.usetime = 3000;
}
param_00 thread personalusebar(self);
var_02 = useholdthinkloop(param_00);
if(isalive(param_00))
{
param_00 common_scripts\utility::_enableweapon();
param_00 unlink();
}
if(!isdefined(self))
{
return 0;
}
param_00.boxparams.inuse = 0;
param_00.boxparams.curprogress = 0;
return var_02;
}
//Function Number: 26
personalusebar(param_00)
{
self endon("disconnect");
var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25);
var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25);
var_02 settext(level.boxsettings[param_00.boxtype].capturingstring);
var_03 = -1;
while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && self.boxparams.inuse && param_00.isusable && !level.gameended)
{
if(var_03 != self.boxparams.userate)
{
if(self.boxparams.curprogress > self.boxparams.usetime)
{
self.boxparams.curprogress = self.boxparams.usetime;
}
var_01 maps\mp\gametypes\_hud_util::updatebar(self.boxparams.curprogress / self.boxparams.usetime,1000 / self.boxparams.usetime * self.boxparams.userate);
if(!self.boxparams.userate)
{
var_01 maps\mp\gametypes\_hud_util::hideelem();
var_02 maps\mp\gametypes\_hud_util::hideelem();
}
else
{
var_01 maps\mp\gametypes\_hud_util::showelem();
var_02 maps\mp\gametypes\_hud_util::showelem();
}
}
var_03 = self.boxparams.userate;
wait 0.05;
}
var_01 maps\mp\gametypes\_hud_util::destroyelem();
var_02 maps\mp\gametypes\_hud_util::destroyelem();
}
//Function Number: 27
useholdthinkloop(param_00)
{
while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && param_00.boxparams.curprogress < param_00.boxparams.usetime)
{
param_00.boxparams.curprogress = param_00.boxparams.curprogress + 50 * param_00.boxparams.userate;
if(isdefined(param_00.objectivescaler))
{
param_00.boxparams.userate = 1 * param_00.objectivescaler;
}
else
{
param_00.boxparams.userate = 1;
}
if(param_00.boxparams.curprogress >= param_00.boxparams.usetime)
{
return maps\mp\_utility::isreallyalive(param_00);
}
wait 0.05;
}
return 0;
}
//Function Number: 28
disablewhenjuggernaut()
{
level endon("game_ended");
self endon("death");
for(;;)
{
level waittill("juggernaut_equipped",var_00);
maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0));
self disableplayeruse(var_00);
thread doubledip(var_00);
}
}

View File

@ -0,0 +1,558 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_emp.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 21
* Decompile Time: 395 ms
* Timestamp: 10/27/2023 2:13:58 AM
*******************************************************************/
//Function Number: 1
init()
{
level._effect["emp_flash"] = loadfx("explosions/emp_flash_mp");
level.teamemped["allies"] = 0;
level.teamemped["axis"] = 0;
level.empplayer = undefined;
level.emptimeout = 60;
level.emptimeremaining = int(level.emptimeout);
if(level.teambased)
{
level thread emp_teamtracker();
}
else
{
level thread emp_playertracker();
}
level.killstreakfuncs["emp"] = ::emp_use;
level thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self)
{
self setempjammed(1);
}
}
}
//Function Number: 4
emp_use(param_00)
{
if(!maps\mp\_utility::validateusestreak())
{
return 0;
}
var_01 = self.pers["team"];
var_02 = level.otherteam[var_01];
if(level.teambased)
{
thread emp_jamteam(var_02);
}
else
{
thread emp_jamplayers(self);
}
maps\mp\_matchdata::logkillstreakevent("emp",self.origin);
self notify("used_emp");
return 1;
}
//Function Number: 5
emp_jamteam(param_00)
{
level endon("game_ended");
thread maps\mp\_utility::teamplayercardsplash("used_emp",self);
level notify("EMP_JamTeam" + param_00);
level endon("EMP_JamTeam" + param_00);
foreach(var_02 in level.players)
{
var_02 playlocalsound("emp_activate");
if(var_02.team != param_00)
{
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer"))
{
var_02 radarjamoff();
}
}
visionsetnaked("coup_sunblind",0.1);
thread empeffects();
wait 0.1;
visionsetnaked("coup_sunblind",0);
if(isdefined(level.nukedetonated))
{
visionsetnaked(level.nukevisionset,3);
}
else
{
visionsetnaked("",3);
}
level.teamemped[param_00] = 1;
level notify("emp_update");
level func_35BE(self,param_00);
level thread keepemptimeremaining();
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.emptimeout);
level.teamemped[param_00] = 0;
foreach(var_02 in level.players)
{
if(var_02.team != param_00)
{
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer"))
{
var_02 radarjamon();
}
}
level notify("emp_update");
}
//Function Number: 6
emp_jamplayers(param_00)
{
level notify("EMP_JamPlayers");
level endon("EMP_JamPlayers");
foreach(var_02 in level.players)
{
var_02 playlocalsound("emp_activate");
if(var_02 == param_00)
{
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer"))
{
var_02 radarjamoff();
}
}
visionsetnaked("coup_sunblind",0.1);
thread empeffects();
wait 0.1;
visionsetnaked("coup_sunblind",0);
if(isdefined(level.nukedetonated))
{
visionsetnaked(level.nukevisionset,3);
}
else
{
visionsetnaked("",3);
}
level notify("emp_update");
level.empplayer = param_00;
level.empplayer thread empplayerffadisconnect();
level func_35BE(param_00);
level notify("emp_update");
level thread keepemptimeremaining();
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.emptimeout);
foreach(var_02 in level.players)
{
if(var_02 == param_00)
{
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer"))
{
var_02 radarjamon();
}
}
level.empplayer = undefined;
level notify("emp_update");
level notify("emp_ended");
}
//Function Number: 7
keepemptimeremaining()
{
level notify("keepEMPTimeRemaining");
level endon("keepEMPTimeRemaining");
level endon("emp_ended");
level.emptimeremaining = int(level.emptimeout);
while(level.emptimeremaining)
{
wait 1;
level.emptimeremaining--;
}
}
//Function Number: 8
empplayerffadisconnect()
{
level endon("EMP_JamPlayers");
level endon("emp_ended");
self waittill("disconnect");
level notify("emp_update");
}
//Function Number: 9
empeffects()
{
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 = 20000;
var_04 = spawn("script_model",var_01.origin + (0,0,8000) + var_02 * var_03);
var_04 setmodel("tag_origin");
var_04.angles = var_04.angles + (270,0,0);
var_04 thread empeffect(var_01);
}
}
//Function Number: 10
empeffect(param_00)
{
param_00 endon("disconnect");
wait 0.5;
playfxontagforclients(level._effect["emp_flash"],self,"tag_origin",param_00);
}
//Function Number: 11
emp_teamtracker()
{
level endon("game_ended");
for(;;)
{
level common_scripts\utility::waittill_either("joined_team","emp_update");
foreach(var_01 in level.players)
{
if(var_01.team == "spectator")
{
continue;
}
if(!level.teamemped[var_01.team] && !var_01 maps\mp\_utility::isemped())
{
var_01 setempjammed(0);
continue;
}
var_01 setempjammed(1);
}
}
}
//Function Number: 12
emp_playertracker()
{
level endon("game_ended");
for(;;)
{
level common_scripts\utility::waittill_either("joined_team","emp_update");
foreach(var_01 in level.players)
{
if(var_01.team == "spectator")
{
continue;
}
if(isdefined(level.empplayer) && level.empplayer != var_01)
{
var_01 setempjammed(1);
continue;
}
if(!var_01 maps\mp\_utility::isemped())
{
var_01 setempjammed(0);
}
}
}
}
//Function Number: 13
func_35BE(param_00,param_01)
{
thread destroyactivehelis(param_00,param_01);
thread destroyactivelittlebirds(param_00,param_01);
thread destroyactiveturrets(param_00,param_01);
thread destroyactiverockets(param_00,param_01);
thread destroyactiveuavs(param_00,param_01);
thread destroyactiveimss(param_00,param_01);
thread destroyactiveugvs(param_00,param_01);
thread destroyactiveac130(param_00,param_01);
}
//Function Number: 14
destroyactivehelis(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.helis)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 15
destroyactivelittlebirds(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.littlebirds)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 16
destroyactiveturrets(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.turrets)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 17
destroyactiverockets(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.rockets)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
playfx(level.remotemissile_fx["explode"],var_0C.origin);
var_0C delete();
wait 0.05;
}
}
//Function Number: 18
destroyactiveuavs(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
var_0B = level.uavmodels;
if(level.teambased && isdefined(param_01))
{
var_0B = level.uavmodels[param_01];
}
foreach(var_0D in var_0B)
{
if(level.teambased && isdefined(param_01))
{
}
else if(isdefined(var_0D.owner) && var_0D.owner == param_00)
{
continue;
}
var_0D notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 19
destroyactiveimss(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.ims)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 20
destroyactiveugvs(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
foreach(var_0C in level.ugvs)
{
if(level.teambased && isdefined(param_01))
{
if(isdefined(var_0C.team) && var_0C.team != param_01)
{
continue;
}
}
else if(isdefined(var_0C.owner) && var_0C.owner == param_00)
{
continue;
}
var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
wait 0.05;
}
}
//Function Number: 21
destroyactiveac130(param_00,param_01)
{
var_02 = "MOD_EXPLOSIVE";
var_03 = "killstreak_emp_mp";
var_04 = 5000;
var_05 = (0,0,0);
var_06 = (0,0,0);
var_07 = "";
var_08 = "";
var_09 = "";
var_0A = undefined;
if(level.teambased && isdefined(param_01))
{
if(isdefined(level.ac130player) && isdefined(level.ac130player.team) && level.ac130player.team == param_01)
{
level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
return;
}
return;
}
if(isdefined(level.ac130player))
{
if(!isdefined(level.ac130.owner) || isdefined(level.ac130.owner) && level.ac130.owner != param_00)
{
level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03);
return;
}
}
}

View File

@ -0,0 +1,887 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_escortairdrop.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 31
* Decompile Time: 519 ms
* Timestamp: 10/27/2023 2:14:00 AM
*******************************************************************/
//Function Number: 1
init()
{
level.ospreysettings = [];
level.ospreysettings["escort_airdrop"] = spawnstruct();
level.ospreysettings["escort_airdrop"].vehicle = "osprey_mp";
level.ospreysettings["escort_airdrop"].modelbase = "vehicle_v22_osprey_body_mp";
level.ospreysettings["escort_airdrop"].modelblades = "vehicle_v22_osprey_blades_mp";
level.ospreysettings["escort_airdrop"].taghatchl = "tag_le_door_attach";
level.ospreysettings["escort_airdrop"].taghatchr = "tag_ri_door_attach";
level.ospreysettings["escort_airdrop"].tagdropcrates = "tag_turret_attach";
level.ospreysettings["escort_airdrop"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES";
level.ospreysettings["escort_airdrop"].name = &"KILLSTREAKS_ESCORT_AIRDROP";
level.ospreysettings["escort_airdrop"].weaponinfo = "osprey_minigun_mp";
level.ospreysettings["escort_airdrop"].helitype = "osprey";
level.ospreysettings["escort_airdrop"].droptype = "airdrop_escort";
level.ospreysettings["escort_airdrop"].maxhealth = level.heli_maxhealth * 2;
level.ospreysettings["escort_airdrop"].timeout = 60;
level.ospreysettings["osprey_gunner"] = spawnstruct();
level.ospreysettings["osprey_gunner"].vehicle = "osprey_player_mp";
level.ospreysettings["osprey_gunner"].modelbase = "vehicle_v22_osprey_body_mp";
level.ospreysettings["osprey_gunner"].modelblades = "vehicle_v22_osprey_blades_mp";
level.ospreysettings["osprey_gunner"].taghatchl = "tag_le_door_attach";
level.ospreysettings["osprey_gunner"].taghatchr = "tag_ri_door_attach";
level.ospreysettings["osprey_gunner"].tagdropcrates = "tag_turret_attach";
level.ospreysettings["osprey_gunner"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES";
level.ospreysettings["osprey_gunner"].name = &"KILLSTREAKS_OSPREY_GUNNER";
level.ospreysettings["osprey_gunner"].weaponinfo = "osprey_player_minigun_mp";
level.ospreysettings["osprey_gunner"].helitype = "osprey_gunner";
level.ospreysettings["osprey_gunner"].droptype = "airdrop_osprey_gunner";
level.ospreysettings["osprey_gunner"].maxhealth = level.heli_maxhealth * 2;
level.ospreysettings["osprey_gunner"].timeout = 75;
foreach(var_01 in level.ospreysettings)
{
precachevehicle(var_01.vehicle);
precacheitem(var_01.weaponinfo);
precachemodel(var_01.modelbase);
precachemodel(var_01.modelblades);
precachestring(var_01.prompt);
precachestring(var_01.name);
level.chopper_fx["explode"]["death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey");
level.chopper_fx["explode"]["air_death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey_air_mp");
level.chopper_fx["anim"]["blades_anim_up"][var_01.modelbase] = loadfx("props/osprey_blades_anim_up");
level.chopper_fx["anim"]["blades_anim_down"][var_01.modelbase] = loadfx("props/osprey_blades_anim_down");
level.chopper_fx["anim"]["blades_static_up"][var_01.modelbase] = loadfx("props/osprey_blades_up");
level.chopper_fx["anim"]["blades_static_down"][var_01.modelbase] = loadfx("props/osprey_blades_default");
level.chopper_fx["anim"]["hatch_left_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_default");
level.chopper_fx["anim"]["hatch_left_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_open");
level.chopper_fx["anim"]["hatch_left_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_up");
level.chopper_fx["anim"]["hatch_left_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_close");
level.chopper_fx["anim"]["hatch_right_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_default");
level.chopper_fx["anim"]["hatch_right_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_open");
level.chopper_fx["anim"]["hatch_right_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_up");
level.chopper_fx["anim"]["hatch_right_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_close");
}
level.air_support_locs = [];
level.killstreakfuncs["escort_airdrop"] = ::tryuseescortairdrop;
level.killstreakfuncs["osprey_gunner"] = ::tryuseospreygunner;
}
//Function Number: 2
tryuseescortairdrop(param_00,param_01)
{
var_02 = 1;
if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand"))
{
self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND");
return 0;
}
else if(isdefined(level.civilianjetflyby))
{
self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC");
return 0;
}
else if(isdefined(level.chopper))
{
self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED");
return 0;
}
else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
return 0;
}
else if(maps\mp\_utility::isusingremote())
{
return 0;
}
if(maps\mp\_utility::isairdenied())
{
return 0;
}
if(maps\mp\_utility::isemped())
{
return 0;
}
maps\mp\_utility::incrementfauxvehiclecount();
var_04 = maps\mp\killstreaks\_airdrop::beginairdropviamarker(param_00,param_01,"escort_airdrop");
if(!isdefined(var_04) || !var_04)
{
self notify("markerDetermined");
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
maps\mp\_matchdata::logkillstreakevent("escort_airdrop",self.origin);
return 1;
}
//Function Number: 3
tryuseospreygunner(param_00,param_01)
{
var_02 = 1;
if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand"))
{
self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND");
return 0;
}
else if(isdefined(level.civilianjetflyby))
{
self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC");
return 0;
}
else if(isdefined(level.chopper))
{
self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED");
return 0;
}
else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
return 0;
}
else if(maps\mp\_utility::isusingremote())
{
return 0;
}
if(maps\mp\_utility::isairdenied())
{
return 0;
}
if(maps\mp\_utility::isemped())
{
return 0;
}
maps\mp\_utility::incrementfauxvehiclecount();
var_04 = selectdroplocation(param_00,"osprey_gunner","compass_objpoint_osprey_friendly","compass_objpoint_osprey_enemy",&"MP_SELECT_MOBILE_MORTAR_LOCATION");
if(!isdefined(var_04) || !var_04)
{
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
maps\mp\_matchdata::logkillstreakevent("osprey_gunner",self.origin);
return 1;
}
//Function Number: 4
finishsupportescortusage(param_00,param_01,param_02,param_03)
{
self notify("used");
var_04 = (0,param_02,0);
var_05 = 12000;
var_06 = getent("airstrikeheight","targetname");
var_07 = var_06.origin[2];
var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)];
var_09 = var_08.origin;
var_0A = (param_01[0],param_01[1],var_07);
var_0B = param_01 + anglestoforward(var_04) * var_05;
var_0C = vectortoangles(var_0A - var_09);
var_0D = param_01;
param_01 = (param_01[0],param_01[1],var_07);
var_0E = createairship(self,param_00,var_09,var_0C,param_01,param_03);
var_09 = var_08;
usesupportescortairdrop(param_00,var_0E,var_09,var_0A,var_0B,var_07,var_0D);
}
//Function Number: 5
finishospreygunnerusage(param_00,param_01,param_02,param_03)
{
self notify("used");
var_04 = (0,param_02,0);
var_05 = 12000;
var_06 = getent("airstrikeheight","targetname");
var_07 = var_06.origin[2];
var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)];
var_09 = var_08.origin;
var_0A = (param_01[0],param_01[1],var_07);
var_0B = param_01 + anglestoforward(var_04) * var_05;
var_0C = vectortoangles(var_0A - var_09);
param_01 = (param_01[0],param_01[1],var_07);
var_0D = createairship(self,param_00,var_09,var_0C,param_01,param_03);
var_09 = var_08;
useospreygunner(param_00,var_0D,var_09,var_0A,var_0B,var_07);
}
//Function Number: 6
stopselectionwatcher()
{
self waittill("stop_location_selection",var_00);
switch(var_00)
{
case "emp":
case "cancel_location":
case "disconnect":
case "death":
self notify("customCancelLocation");
break;
}
}
//Function Number: 7
selectdroplocation(param_00,param_01,param_02,param_03,param_04)
{
self endon("customCancelLocation");
var_05 = undefined;
var_06 = level.mapsize / 6.46875;
if(level.splitscreen)
{
var_06 = var_06 * 1.5;
}
maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",0,500);
thread stopselectionwatcher();
self waittill("confirm_location",var_07,var_08);
maps\mp\_utility::stoplocationselection(0);
maps\mp\_utility::setusingremote(param_01);
var_09 = maps\mp\killstreaks\_killstreaks::initridekillstreak(param_01);
if(var_09 != "success")
{
if(var_09 != "disconnect")
{
maps\mp\_utility::clearusingremote();
}
return 0;
}
if(isdefined(level.chopper))
{
maps\mp\_utility::clearusingremote();
self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED");
return 0;
}
else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed())
{
maps\mp\_utility::clearusingremote();
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
return 0;
}
thread finishospreygunnerusage(param_00,var_07,var_08,param_01);
return 1;
}
//Function Number: 8
showicons(param_00,param_01,param_02,param_03)
{
var_04 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5);
var_04 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150);
var_04 settext(param_02);
self.locationobjectives = [];
for(var_05 = 0;var_05 < param_03;var_05++)
{
self.locationobjectives[var_05] = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(self.locationobjectives[var_05],"invisible",(0,0,0));
objective_position(self.locationobjectives[var_05],level.air_support_locs[level.script][var_05]["origin"]);
objective_state(self.locationobjectives[var_05],"active");
objective_player(self.locationobjectives[var_05],self getentitynumber());
if(level.air_support_locs[level.script][var_05]["in_use"] == 1)
{
objective_icon(self.locationobjectives[var_05],param_01);
continue;
}
objective_icon(self.locationobjectives[var_05],param_00);
}
common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection");
var_04 maps\mp\gametypes\_hud_util::destroyelem();
for(var_05 = 0;var_05 < param_03;var_05++)
{
maps\mp\_utility::_objective_delete(self.locationobjectives[var_05]);
}
}
//Function Number: 9
createairship(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = spawnhelicopter(param_00,param_02,param_03,level.ospreysettings[param_05].vehicle,level.ospreysettings[param_05].modelbase);
if(!isdefined(var_06))
{
return undefined;
}
var_06.ospreytype = param_05;
var_06.heli_type = level.ospreysettings[param_05].modelbase;
var_06.helitype = level.ospreysettings[param_05].helitype;
var_06.attractor = missile_createattractorent(var_06,level.heli_attract_strength,level.heli_attract_range);
var_06.lifeid = param_01;
var_06.team = param_00.pers["team"];
var_06.pers["team"] = param_00.pers["team"];
var_06.owner = param_00;
var_06.maxhealth = level.ospreysettings[param_05].maxhealth;
var_06.zoffset = (0,0,0);
var_06.targeting_delay = level.heli_targeting_delay;
var_06.primarytarget = undefined;
var_06.secondarytarget = undefined;
var_06.attacker = undefined;
var_06.currentstate = "ok";
var_06.droptype = level.ospreysettings[param_05].droptype;
level.chopper = var_06;
var_06 maps\mp\killstreaks\_helicopter::addtohelilist();
var_06 thread maps\mp\killstreaks\_helicopter::heli_flares_monitor();
var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect(param_00);
var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_changeteams(param_00);
var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended(param_00);
var_07 = level.ospreysettings[param_05].timeout;
var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout(var_07);
var_06 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor();
var_06 thread maps\mp\killstreaks\_helicopter::heli_health();
var_06 thread maps\mp\killstreaks\_helicopter::heli_existance();
var_06 thread airshipfx();
if(param_05 == "escort_airdrop")
{
var_08 = var_06.origin + anglestoforward(var_06.angles) * -200 + anglestoright(var_06.angles) * -200 + (0,0,200);
var_06.killcament = spawn("script_model",var_08);
var_06.killcament setscriptmoverkillcam("explosive");
var_06.killcament linkto(var_06,"tag_origin");
}
return var_06;
}
//Function Number: 10
airshipfx()
{
self endon("death");
wait 0.05;
playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
wait 0.05;
playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
wait 0.05;
playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
wait 0.05;
playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly");
wait 0.05;
playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail");
}
//Function Number: 11
usesupportescortairdrop(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
{
param_01 thread airshipflydefense(self,param_02,param_03,param_04,param_05,param_06);
}
//Function Number: 12
useospreygunner(param_00,param_01,param_02,param_03,param_04,param_05)
{
thread ridegunner(param_00,param_01);
param_01 thread airshipflygunner(self,param_02,param_03,param_04,param_05);
}
//Function Number: 13
ridegunner(param_00,param_01)
{
self endon("disconnect");
param_01 endon("helicopter_done");
thread maps\mp\_utility::teamplayercardsplash("used_osprey_gunner",self);
maps\mp\_utility::_giveweapon("heli_remote_mp");
self switchtoweapon("heli_remote_mp");
if(getdvarint("camera_thirdPerson"))
{
maps\mp\_utility::setthirdpersondof(0);
}
param_01 vehicleturretcontrolon(self);
self playerlinkweaponviewtodelta(param_01,"tag_player",1,0,0,0,0,1);
self setplayerangles(param_01 gettagangles("tag_player"));
param_01 thread maps\mp\killstreaks\_helicopter::heli_targeting();
thread maps\mp\killstreaks\_helicopter::weaponlockthink(param_01);
param_01.gunner = self;
self.heliridelifeid = param_00;
thread endrideonairshipdone(param_01);
thread waitsetthermal(1,param_01);
thread maps\mp\_utility::reinitializethermal(param_01);
for(;;)
{
param_01 waittill("turret_fire");
param_01 fireweapon();
earthquake(0.2,1,param_01.origin,1000);
}
}
//Function Number: 14
waitsetthermal(param_00,param_01)
{
self endon("disconnect");
param_01 endon("death");
param_01 endon("helicopter_done");
param_01 endon("crashing");
param_01 endon("leaving");
wait param_00;
self visionsetthermalforplayer(level.ac130.enhanced_vision,0);
self.lastvisionsetthermal = level.ac130.enhanced_vision;
self thermalvisionon();
self thermalvisionfofoverlayon();
thread maps\mp\killstreaks\_helicopter::thermalvision(param_01);
}
//Function Number: 15
showdefendprompt(param_00)
{
self endon("disconnect");
param_00 endon("helicopter_done");
self.escort_prompt = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",1.5);
self.escort_prompt maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150);
self.escort_prompt settext(level.ospreysettings[param_00.ospreytype].prompt);
wait 6;
if(isdefined(self.escort_prompt))
{
self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem();
}
}
//Function Number: 16
airshippitchpropsup()
{
self endon("crashing");
self endon("death");
stopfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
playfxontag(level.chopper_fx["anim"]["blades_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
wait 1;
if(isdefined(self))
{
playfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
}
}
//Function Number: 17
airshippitchpropsdown()
{
self endon("crashing");
self endon("death");
stopfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
playfxontag(level.chopper_fx["anim"]["blades_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
wait 1;
if(isdefined(self))
{
playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH");
}
}
//Function Number: 18
airshippitchhatchup()
{
self endon("crashing");
self endon("death");
stopfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
playfxontag(level.chopper_fx["anim"]["hatch_left_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
stopfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
playfxontag(level.chopper_fx["anim"]["hatch_right_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
wait 1;
if(isdefined(self))
{
playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
}
}
//Function Number: 19
airshippitchhatchdown()
{
self endon("crashing");
self endon("death");
stopfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
playfxontag(level.chopper_fx["anim"]["hatch_left_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
stopfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
playfxontag(level.chopper_fx["anim"]["hatch_right_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
wait 1;
if(isdefined(self))
{
playfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl);
playfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr);
}
self notify("hatch_down");
}
//Function Number: 20
getbestheight(param_00)
{
self endon("helicopter_removed");
self endon("heightReturned");
var_01 = getent("airstrikeheight","targetname");
if(isdefined(var_01))
{
var_02 = var_01.origin[2];
}
else if(isdefined(level.airstrikeheightscale))
{
var_02 = 850 * level.airstrikeheightscale;
}
else
{
var_02 = 850;
}
self.bestheight = var_02;
var_03 = 200;
var_04 = 0;
var_05 = 0;
for(var_06 = 0;var_06 < 125;var_06++)
{
wait 0.05;
var_07 = var_06 % 8;
var_08 = var_06 * 3;
switch(var_07)
{
case 0:
var_04 = var_08;
var_05 = var_08;
break;
case 1:
var_04 = var_08 * -1;
var_05 = var_08 * -1;
break;
case 2:
var_04 = var_08 * -1;
var_05 = var_08;
break;
case 3:
var_04 = var_08;
var_05 = var_08 * -1;
break;
case 4:
var_04 = 0;
var_05 = var_08 * -1;
break;
case 5:
var_04 = var_08 * -1;
var_05 = 0;
break;
case 6:
var_04 = var_08;
var_05 = 0;
break;
case 7:
var_04 = 0;
var_05 = var_08;
break;
default:
break;
}
var_09 = bullettrace(param_00 + (var_04,var_05,1000),param_00 + (var_04,var_05,-10000),1,self);
if(var_09["position"][2] > var_03)
{
var_03 = var_09["position"][2];
}
}
self.bestheight = var_03 + 300;
}
//Function Number: 21
airshipflydefense(param_00,param_01,param_02,param_03,param_04,param_05)
{
self notify("airshipFlyDefense");
self endon("airshipFlyDefense");
self endon("helicopter_removed");
self endon("death");
thread getbestheight(param_02);
maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01);
self.pathgoal = param_02;
var_06 = self.angles;
self setyawspeed(30,30,30,0.3);
var_07 = self.origin;
var_08 = self.angles[1];
var_09 = self.angles[0];
self.timeout = level.ospreysettings[self.ospreytype].timeout;
self setvehgoalpos(param_02,1);
var_0A = gettime();
self waittill("goal");
var_0B = gettime() - var_0A * 0.001;
self.timeout = self.timeout - var_0B;
thread airshippitchpropsup();
var_0C = param_02 * (1,1,0);
var_0C = var_0C + (0,0,self.bestheight);
self vehicle_setspeed(25,10,10);
self setyawspeed(20,10,10,0.3);
self setvehgoalpos(var_0C,1);
var_0A = gettime();
self waittill("goal");
var_0B = gettime() - var_0A * 0.001;
self.timeout = self.timeout - var_0B;
self sethoverparams(65,50,50);
ospreydropcrateslowimpulse(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0C);
thread killguysnearcrates(param_05);
self waittill("leaving");
self notify("osprey_leaving");
thread airshippitchpropsdown();
}
//Function Number: 22
wait_and_delete(param_00)
{
self endon("death");
level endon("game_ended");
wait param_00;
self delete();
}
//Function Number: 23
killguysnearcrates(param_00)
{
self endon("osprey_leaving");
self endon("helicopter_removed");
self endon("death");
var_01 = param_00;
for(;;)
{
foreach(var_03 in level.players)
{
wait 0.05;
if(!isdefined(self))
{
return;
}
if(!isdefined(var_03))
{
continue;
}
if(!maps\mp\_utility::isreallyalive(var_03))
{
continue;
}
if(level.teambased && var_03.team == self.team)
{
continue;
}
if(isdefined(self.owner) && var_03 == self.owner)
{
continue;
}
if(var_03 maps\mp\_utility::_hasperk("specialty_blindeye"))
{
continue;
}
if(distancesquared(var_01,var_03.origin) > 500000)
{
continue;
}
thread aishootplayer(var_03,var_01);
waitforconfirmation();
}
}
}
//Function Number: 24
aishootplayer(param_00,param_01)
{
self notify("aiShootPlayer");
self endon("aiShootPlayer");
self endon("helicopter_removed");
self endon("leaving");
param_00 endon("death");
self setturrettargetent(param_00);
self setlookatent(param_00);
thread targetdeathwaiter(param_00);
var_02 = 6;
var_03 = 2;
for(;;)
{
var_02--;
self fireweapon("tag_flash",param_00);
wait 0.15;
if(var_02 <= 0)
{
var_03--;
var_02 = 6;
if(distancesquared(param_00.origin,param_01) > 500000 || var_03 <= 0 || !maps\mp\_utility::isreallyalive(param_00))
{
self notify("abandon_target");
return;
}
wait 1;
}
}
}
//Function Number: 25
targetdeathwaiter(param_00)
{
self endon("abandon_target");
self endon("leaving");
self endon("helicopter_removed");
param_00 waittill("death");
self notify("target_killed");
}
//Function Number: 26
waitforconfirmation()
{
self endon("helicopter_removed");
self endon("leaving");
self endon("target_killed");
self endon("abandon_target");
wait 0.05;
}
//Function Number: 27
airshipflygunner(param_00,param_01,param_02,param_03,param_04)
{
self notify("airshipFlyGunner");
self endon("airshipFlyGunner");
self endon("helicopter_removed");
self endon("death");
thread getbestheight(param_02);
maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01);
thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout(level.ospreysettings[self.ospreytype].timeout);
var_05 = self.angles;
self setyawspeed(30,30,30,0.3);
var_06 = self.origin;
var_07 = self.angles[1];
var_08 = self.angles[0];
self.timeout = level.ospreysettings[self.ospreytype].timeout;
self setvehgoalpos(param_02,1);
var_09 = gettime();
self waittill("goal");
var_0A = gettime() - var_09 * 0.001;
self.timeout = self.timeout - var_0A;
thread airshippitchpropsup();
var_0B = param_02 * (1,1,0);
var_0B = var_0B + (0,0,self.bestheight);
self vehicle_setspeed(25,10,10);
self setyawspeed(20,10,10,0.3);
self setvehgoalpos(var_0B,1);
var_09 = gettime();
self waittill("goal");
var_0A = gettime() - var_09 * 0.001;
self.timeout = self.timeout - var_0A;
ospreydropcrates(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0B);
var_0C = 1;
if(isdefined(param_00))
{
param_00 common_scripts\utility::waittill_any_timeout(var_0C,"disconnect");
}
self.timeout = self.timeout - var_0C;
self setvehgoalpos(param_02,1);
var_09 = gettime();
self waittill("goal");
var_0A = gettime() - var_09 * 0.001;
self.timeout = self.timeout - var_0A;
var_0D = getentarray("heli_attack_area","targetname");
var_0E = level.heli_loop_nodes[randomint(level.heli_loop_nodes.size)];
if(var_0D.size)
{
thread maps\mp\killstreaks\_helicopter::heli_fly_well(var_0D);
}
else
{
thread maps\mp\killstreaks\_helicopter::heli_fly_loop_path(var_0E);
}
self waittill("leaving");
thread airshippitchpropsdown();
}
//Function Number: 28
ospreydropcrateslowimpulse(param_00,param_01,param_02)
{
thread airshippitchhatchdown();
self waittill("hatch_down");
var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01);
wait 0.05;
self notify("drop_crate");
wait param_00;
wait 0.05;
self notify("drop_crate",var_7B[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01));
wait param_01;
wait 0.05;
self notify("drop_crate",var_7B[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_7B,param_02));
wait param_01;
wait 0.05;
self notify("drop_crate",var_7B[3],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-100,0),randomintrange(-100,0),randomintrange(-100,0)),var_7B,param_02));
wait param_01;
thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-50,0),randomintrange(-50,0),randomintrange(-50,0)),var_7B,param_02);
wait 0.05;
self notify("drop_crate");
wait 1;
thread airshippitchhatchup();
}
//Function Number: 29
ospreydropcrates(param_00,param_01,param_02)
{
thread airshippitchhatchdown();
self waittill("hatch_down");
var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01);
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify("drop_crate");
wait param_00;
self.timeout = self.timeout - param_00;
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify("drop_crate",var_7B[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01));
wait param_01;
self.timeout = self.timeout - param_01;
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify("drop_crate",var_7B[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_7B,param_02));
wait 1;
thread airshippitchhatchup();
}
//Function Number: 30
endride(param_00)
{
if(isdefined(self.escort_prompt))
{
self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem();
}
self remotecamerasoundscapeoff();
self thermalvisionoff();
self thermalvisionfofoverlayoff();
self unlink();
maps\mp\_utility::clearusingremote();
if(getdvarint("camera_thirdPerson"))
{
maps\mp\_utility::setthirdpersondof(1);
}
self visionsetthermalforplayer(game["thermal_vision"],0);
if(isdefined(param_00))
{
param_00 vehicleturretcontroloff(self);
}
self notify("heliPlayer_removed");
self switchtoweapon(common_scripts\utility::getlastweapon());
self takeweapon("heli_remote_mp");
}
//Function Number: 31
endrideonairshipdone(param_00)
{
self endon("disconnect");
param_00 waittill("helicopter_done");
endride(param_00);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,468 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_helicopter_flock.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 21
* Decompile Time: 379 ms
* Timestamp: 10/27/2023 2:14:10 AM
*******************************************************************/
//Function Number: 1
init()
{
precachevehicle("attack_littlebird_mp");
precachemodel("vehicle_apache_mp");
precachemodel("vehicle_apache_mg");
precacheturret("apache_minigun_mp");
precachevehicle("apache_strafe_mp");
level.killstreakfuncs["littlebird_flock"] = ::tryuselbflock;
level.heli_flock = [];
}
//Function Number: 2
tryuselbflock(param_00,param_01)
{
if(!maps\mp\_utility::validateusestreak())
{
return 0;
}
var_02 = 5;
if(heliflockactive() || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
return 0;
}
maps\mp\_utility::incrementfauxvehiclecount();
maps\mp\_utility::incrementfauxvehiclecount();
maps\mp\_utility::incrementfauxvehiclecount();
maps\mp\_utility::incrementfauxvehiclecount();
maps\mp\_utility::incrementfauxvehiclecount();
var_03 = selectlbstrikelocation(param_00,"littlebird_flock");
if(!isdefined(var_03) || !var_03)
{
maps\mp\_utility::decrementfauxvehiclecount();
maps\mp\_utility::decrementfauxvehiclecount();
maps\mp\_utility::decrementfauxvehiclecount();
maps\mp\_utility::decrementfauxvehiclecount();
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
level thread maps\mp\_utility::teamplayercardsplash("used_littlebird_flock",self,self.team);
return 1;
}
//Function Number: 3
heliflockactive()
{
var_00 = 0;
for(var_01 = 0;var_01 < level.heli_flock.size;var_01++)
{
if(isdefined(level.heli_flock[var_01]))
{
var_00 = 1;
break;
}
}
return var_00;
}
//Function Number: 4
selectlbstrikelocation(param_00,param_01)
{
self playlocalsound(game["voice"][self.team] + "KS_lbd_inposition");
maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500);
self endon("stop_location_selection");
self waittill("confirm_location",var_02,var_03);
if(heliflockactive() || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
self notify("cancel_location");
return 0;
}
level.heli_flock = [];
level.heli_flock_victims = [];
thread littlebirdmadeselectionvo();
thread finishlbstrikeusage(param_00,var_02,::callstrike,var_03);
self setblurforplayer(0,0.3);
return 1;
}
//Function Number: 5
littlebirdmadeselectionvo()
{
self endon("death");
self endon("disconnect");
self playlocalsound(game["voice"][self.team] + "KS_hqr_littlebird");
wait 3;
self playlocalsound(game["voice"][self.team] + "KS_lbd_inbound");
}
//Function Number: 6
finishlbstrikeusage(param_00,param_01,param_02,param_03)
{
self notify("used");
wait 0.05;
thread maps\mp\_utility::stoplocationselection(0);
if(isdefined(self))
{
self thread [[ param_02 ]](param_00,param_01,param_03);
}
}
//Function Number: 7
callstrike(param_00,param_01,param_02)
{
level endon("game_ended");
self endon("disconnect");
var_03 = getflightpath(param_01,param_02,0);
var_04 = getflightpath(param_01,param_02,-520);
var_05 = getflightpath(param_01,param_02,520);
var_06 = getflightpath(param_01,param_02,-1040);
var_07 = getflightpath(param_01,param_02,1040);
level thread dolbstrike(param_00,self,var_03,0);
wait 0.3;
level thread dolbstrike(param_00,self,var_04,1);
level thread dolbstrike(param_00,self,var_05,2);
wait 0.3;
level thread dolbstrike(param_00,self,var_06,3);
level thread dolbstrike(param_00,self,var_07,4);
maps\mp\_matchdata::logkillstreakevent("littlebird_flock",param_01);
}
//Function Number: 8
getflightpath(param_00,param_01,param_02)
{
param_00 = param_00 * (1,1,0);
var_03 = (0,param_01,0);
var_04 = 12000;
var_05 = [];
if(isdefined(param_02) && param_02 != 0)
{
param_00 = param_00 + anglestoright(var_03) * param_02 + (0,0,randomint(300));
}
var_06 = param_00 + anglestoforward(var_03) * -1 * var_04;
var_07 = param_00 + anglestoforward(var_03) * var_04;
var_08 = maps\mp\killstreaks\_airdrop::getflyheightoffset(param_00) + 256;
var_05["start"] = var_06 + (0,0,var_08);
var_05["end"] = var_07 + (0,0,var_08);
return var_05;
}
//Function Number: 9
dolbstrike(param_00,param_01,param_02,param_03)
{
level endon("game_ended");
if(!isdefined(param_01))
{
return;
}
var_04 = vectortoangles(param_02["end"] - param_02["start"]);
var_05 = spawnattacklittlebird(param_01,param_02["start"],var_04,param_03);
var_05.lifeid = param_00;
var_05.alreadydead = 0;
var_05 thread watchtimeout();
var_05 thread watchdeath();
var_05 thread flock_handledamage();
var_05 thread startlbfiring1();
var_05 thread monitorkills();
var_05 endon("death");
var_05 setmaxpitchroll(120,60);
var_05 vehicle_setspeed(48,48);
var_05 setvehgoalpos(param_02["end"],0);
var_05 waittill("goal");
var_05 setmaxpitchroll(30,40);
var_05 vehicle_setspeed(32,32);
var_05 setvehgoalpos(param_02["start"],0);
wait 2;
var_05 setmaxpitchroll(100,60);
var_05 vehicle_setspeed(64,64);
var_05 waittill("goal");
var_05 notify("gone");
var_05 removelittlebird();
}
//Function Number: 10
spawnattacklittlebird(param_00,param_01,param_02,param_03)
{
var_04 = spawnhelicopter(param_00,param_01,param_02,"apache_strafe_mp","vehicle_apache_mp");
if(!isdefined(var_04))
{
return;
}
var_04 maps\mp\killstreaks\_helicopter::addtolittlebirdlist();
var_04 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath();
var_04.health = 999999;
var_04.maxhealth = 2000;
var_04.damagetaken = 0;
var_04 setcandamage(1);
var_04.owner = param_00;
var_04.team = param_00.team;
var_04.killcount = 0;
var_04.streakname = "littlebird_flock";
var_04.helitype = "littlebird";
var_04.specialdamagecallback = ::callback_vehicledamage;
var_05 = spawnturret("misc_turret",var_04.origin,"apache_minigun_mp");
var_05 linkto(var_04,"tag_turret",(0,0,0),(0,0,0));
var_05 setmodel("vehicle_apache_mg");
var_05.angles = var_04.angles;
var_05.owner = var_04.owner;
var_05.team = var_05.owner.team;
var_05 maketurretinoperable();
var_05.vehicle = var_04;
var_06 = var_04.origin + anglestoforward(var_04.angles) * -200 + anglestoright(var_04.angles) * -200 + (0,0,50);
var_05.killcament = spawn("script_model",var_06);
var_05.killcament setscriptmoverkillcam("explosive");
var_05.killcament linkto(var_04,"tag_origin");
var_04.mgturret1 = var_05;
var_04.mgturret1 setdefaultdroppitch(0);
var_04.mgturret1 setmode("auto_nonai");
var_04.mgturret1 setsentryowner(var_04.owner);
if(level.teambased)
{
var_04.mgturret1 setturretteam(var_04.owner.team);
}
level.heli_flock[param_03] = var_04;
return var_04;
}
//Function Number: 11
watchtimeout()
{
level endon("game_ended");
self endon("gone");
self endon("death");
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(60);
self notify("death");
}
//Function Number: 12
monitorkills()
{
level endon("game_ended");
self endon("gone");
self endon("death");
self endon("stopFiring");
for(;;)
{
self waittill("killedPlayer",var_00);
self.killcount++;
level.heli_flock_victims[level.heli_flock_victims.size] = var_00;
}
}
//Function Number: 13
startlbfiring1()
{
self endon("gone");
self endon("death");
self endon("stopFiring");
for(;;)
{
self.mgturret1 waittill("turret_on_target");
var_00 = 1;
var_01 = self.mgturret1 getturrettarget(0);
foreach(var_03 in level.heli_flock_victims)
{
if(var_01 == var_03)
{
self.mgturret1 cleartargetentity();
var_00 = 0;
break;
}
}
if(var_00)
{
self.mgturret1 shootturret();
}
}
}
//Function Number: 14
flock_handledamage()
{
self endon("death");
level endon("game_ended");
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(isdefined(self.specialdamagecallback))
{
self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07);
}
}
}
//Function Number: 15
callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B)
{
if(isdefined(self.alreadydead) && self.alreadydead)
{
return;
}
if(!isdefined(param_01) || param_01 == self)
{
return;
}
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,param_01))
{
return;
}
if(isdefined(param_03) && param_03 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
var_0C = param_02;
if(isplayer(param_01))
{
param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter");
if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET")
{
if(param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing"))
{
var_0C = var_0C + param_02 * level.armorpiercingmod;
}
}
}
if(isdefined(param_01.owner) && isplayer(param_01.owner))
{
param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter");
}
if(isdefined(param_05))
{
switch(param_05)
{
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_0C = self.maxhealth + 1;
break;
case "sam_projectile_mp":
self.var_30C8 = 1;
var_0C = self.maxhealth * 0.25;
break;
case "emp_grenade_mp":
self.var_30C8 = 0;
var_0C = self.maxhealth + 1;
break;
}
}
self.damagetaken = self.damagetaken + var_0C;
if(self.damagetaken >= self.maxhealth)
{
if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner)
{
self.alreadydead = 1;
param_01 notify("destroyed_helicopter");
param_01 notify("destroyed_killstreak",param_05);
thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",param_01);
param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,param_05,param_04);
param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_HELICOPTER");
thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05);
}
self notify("death");
}
}
//Function Number: 16
watchdeath()
{
self endon("gone");
self waittill("death");
thread helidestroyed();
}
//Function Number: 17
helidestroyed()
{
self endon("gone");
if(!isdefined(self))
{
return;
}
self vehicle_setspeed(25,5);
thread lbspin(randomintrange(180,220));
wait randomfloatrange(0.5,1.5);
lbexplode();
}
//Function Number: 18
lbspin(param_00)
{
self endon("explode");
playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt");
thread trail_fx(level.chopper_fx["smoke"]["trail"],"tail_rotor_jnt","stop tail smoke");
self setyawspeed(param_00,param_00,param_00);
while(isdefined(self))
{
self settargetyaw(self.angles[1] + param_00 * 0.9);
wait 1;
}
}
//Function Number: 19
trail_fx(param_00,param_01,param_02)
{
self notify(param_02);
self endon(param_02);
self endon("death");
for(;;)
{
playfxontag(param_00,self,param_01);
wait 0.05;
}
}
//Function Number: 20
lbexplode()
{
var_00 = self.origin + (0,0,1) - self.origin;
var_01 = self gettagangles("tag_deathfx");
playfx(level.chopper_fx["explode"]["air_death"]["littlebird"],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01));
self playsound("cobra_helicopter_crash");
self notify("explode");
removelittlebird();
}
//Function Number: 21
removelittlebird()
{
if(isdefined(self.mgturret1))
{
if(isdefined(self.mgturret1.killcament))
{
self.mgturret1.killcament delete();
}
self.mgturret1 delete();
}
maps\mp\_utility::decrementfauxvehiclecount();
self delete();
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,186 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_juggernaut.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 7
* Decompile Time: 125 ms
* Timestamp: 10/27/2023 2:14:17 AM
*******************************************************************/
//Function Number: 1
init()
{
level.juggsettings = [];
level.juggsettings["juggernaut"] = spawnstruct();
level.juggsettings["juggernaut"].splashusedname = "used_juggernaut";
level.juggsettings["juggernaut"].overlay = "goggles_overlay";
level.juggsettings["juggernaut_recon"] = spawnstruct();
level.juggsettings["juggernaut_recon"].splashusedname = "used_juggernaut";
level.juggsettings["juggernaut_recon"].overlay = "goggles_overlay";
foreach(var_01 in level.juggsettings)
{
precacheshader(var_01.overlay);
}
}
//Function Number: 2
givejuggernaut(param_00)
{
self endon("death");
self endon("disconnect");
wait 0.05;
if(isdefined(self.haslightarmor) && self.haslightarmor == 1)
{
maps\mp\perks\_perkfunctions::removelightarmor(self.previousmaxhealth);
}
if(maps\mp\_utility::_hasperk("specialty_explosivebullets"))
{
maps\mp\_utility::_unsetperk("specialty_explosivebullets");
}
switch(param_00)
{
case "juggernaut":
self.isjuggernaut = 1;
self.juggmovespeedscaler = 0.65;
maps\mp\gametypes\_class::giveloadout(self.pers["team"],param_00,0,0);
self.movespeedscaler = 0.65;
break;
case "juggernaut_recon":
self.isjuggernautrecon = 1;
self.juggmovespeedscaler = 0.75;
maps\mp\gametypes\_class::giveloadout(self.pers["team"],param_00,0,0);
self.movespeedscaler = 0.75;
var_01 = spawn("script_model",self.origin);
var_01.team = self.team;
var_01 makeportableradar(self);
self.personalradar = var_01;
thread radarmover(var_01);
break;
}
maps\mp\gametypes\_weapons::updatemovespeedscale();
self disableweaponpickup();
if(!getdvarint("camera_thirdPerson"))
{
self.juggernautoverlay = newclienthudelem(self);
self.juggernautoverlay.x = 0;
self.juggernautoverlay.y = 0;
self.juggernautoverlay.alignx = "left";
self.juggernautoverlay.aligny = "top";
self.juggernautoverlay.horzalign = "fullscreen";
self.juggernautoverlay.vertalign = "fullscreen";
self.juggernautoverlay setshader(level.juggsettings[param_00].overlay,640,480);
self.juggernautoverlay.sort = -10;
self.juggernautoverlay.archived = 1;
self.juggernautoverlay.hidein3rdperson = 1;
}
thread juggernautsounds();
self setperk("specialty_radarjuggernaut",1,0);
thread maps\mp\_utility::teamplayercardsplash(level.juggsettings[param_00].splashusedname,self);
if(self.streaktype == "specialist")
{
thread maps\mp\killstreaks\_killstreaks::clearkillstreaks();
}
else
{
thread maps\mp\killstreaks\_killstreaks::updatekillstreaks(1);
}
thread juggremover();
if(isdefined(self.carryflag))
{
wait 0.05;
self attach(self.carryflag,"J_spine4",1);
}
level notify("juggernaut_equipped",self);
maps\mp\_matchdata::logkillstreakevent("juggernaut",self.origin);
}
//Function Number: 3
juggernautsounds()
{
level endon("game_ended");
self endon("death");
self endon("disconnect");
self endon("jugg_removed");
for(;;)
{
wait 3;
self playsound("juggernaut_breathing_sound");
}
}
//Function Number: 4
radarmover(param_00)
{
level endon("game_ended");
self endon("disconnect");
self endon("jugg_removed");
self endon("jugdar_removed");
for(;;)
{
param_00 moveto(self.origin,0.05);
wait 0.05;
}
}
//Function Number: 5
juggremover()
{
level endon("game_ended");
self endon("disconnect");
self endon("jugg_removed");
thread juggremoveongameended();
thread func_01A7();
common_scripts\utility::waittill_any("death","joined_team","joined_spectators","lost_juggernaut");
self enableweaponpickup();
self.isjuggernaut = 0;
self.isjuggernautdef = 0;
self.isjuggernautgl = 0;
self.isjuggernautrecon = 0;
if(isdefined(self.juggernautoverlay))
{
self.juggernautoverlay destroy();
}
self unsetperk("specialty_radarjuggernaut",1);
if(isdefined(self.personalradar))
{
self notify("jugdar_removed");
level maps\mp\gametypes\_portable_radar::deleteportableradar(self.personalradar);
self.personalradar = undefined;
}
self notify("jugg_removed");
}
//Function Number: 6
juggremoveongameended()
{
self endon("disconnect");
self endon("jugg_removed");
level waittill("game_ended");
if(isdefined(self.juggernautoverlay))
{
self.juggernautoverlay destroy();
}
}
//Function Number: 7
func_01A7()
{
self endon("jugg_removed");
level endon("game_ended");
var_00 = self.personalradar;
self waittill("disconnect");
if(isdefined(var_00))
{
level maps\mp\gametypes\_portable_radar::deleteportableradar(var_00);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,660 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_mobilemortar.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 16
* Decompile Time: 314 ms
* Timestamp: 10/27/2023 2:14:22 AM
*******************************************************************/
//Function Number: 1
init()
{
precachemodel("vehicle_bradley");
precachemodel("vehicle_bradley_destroyed");
precacheshader("compass_objpoint_tank_friendly");
precacheshader("compass_objpoint_tank_enemy");
precacheshader("compass_objpoint_mortar_target");
precachestring(&"KILLSTREAKS_MOBILE_MORTAR");
precachestring(&"MP_GROUND_APPROACHES_TOO_CROWDED");
precachestring(&"MP_SELECT_MOBILE_MORTAR_LOCATION");
level.tankfire = loadfx("props/barrelexp");
level.tankexplode = loadfx("explosions/large_vehicle_explosion");
level.tankflash = loadfx("muzzleflashes/ac130_105mm");
level.tankdust1 = loadfx("smoke/ground_smoke_launch_a");
level.tankdust2 = loadfx("smoke/ground_smoke_launch_a");
level.ground_support_locs = [];
level.ground_support_locs["mp_alpha"][0]["origin"] = (-2748.91,2921.33,125.394);
level.ground_support_locs["mp_alpha"][0]["angles"] = (0,16,0);
level.ground_support_locs["mp_alpha"][1]["origin"] = (707.795,-499.191,-7.875);
level.ground_support_locs["mp_alpha"][1]["angles"] = (0,90,0);
level.ground_support_locs["mp_alpha"][2]["origin"] = (81.8557,2343.87,-7.875);
level.ground_support_locs["mp_alpha"][2]["angles"] = (0,-90.1,0);
level.ground_support_locs["mp_bravo"][0]["origin"] = (-761.529,1221.7,1212.13);
level.ground_support_locs["mp_bravo"][0]["angles"] = (0,-92.373,0);
level.ground_support_locs["mp_bravo"][1]["origin"] = (1474.99,971.865,1140.13);
level.ground_support_locs["mp_bravo"][1]["angles"] = (0,-178.401,0);
level.ground_support_locs["mp_bravo"][2]["origin"] = (-1366.57,-370.995,975.807);
level.ground_support_locs["mp_bravo"][2]["angles"] = (0,0.807495,0);
level.ground_support_locs["mp_dome"][0]["origin"] = (960.279,-482.564,-388.872);
level.ground_support_locs["mp_dome"][0]["angles"] = (0,100.536,0);
level.ground_support_locs["mp_dome"][1]["origin"] = (-921.941,166.449,-418.131);
level.ground_support_locs["mp_dome"][1]["angles"] = (0,25.4524,0);
level.ground_support_locs["mp_dome"][2]["origin"] = (43.3564,2102.85,-290.875);
level.ground_support_locs["mp_dome"][2]["angles"] = (0,-95.0347,0);
level.ground_support_locs["mp_plaza2"][0]["origin"] = (-1579.34,-2349.41,556.125);
level.ground_support_locs["mp_plaza2"][0]["angles"] = (0,5.32288,0);
level.ground_support_locs["mp_plaza2"][1]["origin"] = (-135.286,1622.04,607.13);
level.ground_support_locs["mp_plaza2"][1]["angles"] = (0,173.639,0);
level.ground_support_locs["mp_plaza2"][2]["origin"] = (-1544.55,1966.84,632.024);
level.ground_support_locs["mp_plaza2"][2]["angles"] = (0,0.796509,0);
level.ground_support_locs["mp_radar"][0]["origin"] = (896.685,2692.74,1208.13);
level.ground_support_locs["mp_radar"][0]["angles"] = (0,-178.313,0);
level.ground_support_locs["mp_radar"][1]["origin"] = (-2455.87,1564.41,1308.9);
level.ground_support_locs["mp_radar"][1]["angles"] = (0,1.93471,0);
level.ground_support_locs["mp_radar"][2]["origin"] = (1609,-1098.99,1162.13);
level.ground_support_locs["mp_radar"][2]["angles"] = (0,170.421,0);
level.ground_support_locs["mp_interchange"][0]["origin"] = (-2067.08,1218.17,-82.0487);
level.ground_support_locs["mp_interchange"][0]["angles"] = (0,-26.2946,0);
level.ground_support_locs["mp_interchange"][1]["origin"] = (-1198.2,-1782.62,103.665);
level.ground_support_locs["mp_interchange"][1]["angles"] = (0,23.3544,0);
level.ground_support_locs["mp_interchange"][2]["origin"] = (2391.95,899.034,87.7839);
level.ground_support_locs["mp_interchange"][2]["angles"] = (0,-136.134,0);
level.ground_support_locs["mp_lambeth"][0]["origin"] = (1641.37,-1318.01,-260.173);
level.ground_support_locs["mp_lambeth"][0]["angles"] = (0,133.329,0);
level.ground_support_locs["mp_lambeth"][1]["origin"] = (-1346.56,-880.226,-191.875);
level.ground_support_locs["mp_lambeth"][1]["angles"] = (0,0.432892,0);
level.ground_support_locs["mp_lambeth"][2]["origin"] = (1403.95,3083.4,-287.354);
level.ground_support_locs["mp_lambeth"][2]["angles"] = (0,-106.321,0);
level.ground_support_locs["mp_paris"][0]["origin"] = (-2427.42,619.217,188.826);
level.ground_support_locs["mp_paris"][0]["angles"] = (0,-2.90588,0);
level.ground_support_locs["mp_paris"][1]["origin"] = (2066.95,796.542,-88.322);
level.ground_support_locs["mp_paris"][1]["angles"] = (0,177.292,0);
level.ground_support_locs["mp_paris"][2]["origin"] = (506.406,-2165.36,-64.1201);
level.ground_support_locs["mp_paris"][2]["angles"] = (0,89.5715,0);
level.ground_support_locs["mp_hardhat"][0]["origin"] = (2033.65,-1428.62,299.86);
level.ground_support_locs["mp_hardhat"][0]["angles"] = (0,177.979,0);
level.ground_support_locs["mp_hardhat"][1]["origin"] = (-1044.73,82.9179,181.022);
level.ground_support_locs["mp_hardhat"][1]["angles"] = (0,-2.68066,0);
level.ground_support_locs["mp_hardhat"][2]["origin"] = (1248.95,1322.56,304.125);
level.ground_support_locs["mp_hardhat"][2]["angles"] = (0,-93.4772,0);
level.ground_support_locs["mp_carbon"][0]["origin"] = (-47.1408,-2841.26,3940.01);
level.ground_support_locs["mp_carbon"][0]["angles"] = (0,-101.667,0);
level.ground_support_locs["mp_carbon"][1]["origin"] = (-1686.2,-4727.09,3756.16);
level.ground_support_locs["mp_carbon"][1]["angles"] = (0,87.6436,0);
level.ground_support_locs["mp_carbon"][2]["origin"] = (-3761.18,-3716.69,3568.91);
level.ground_support_locs["mp_carbon"][2]["angles"] = (0,-4.20761,0);
level.ground_support_locs["mp_seatown"][0]["origin"] = (1339.87,763.592,175.114);
level.ground_support_locs["mp_seatown"][0]["angles"] = (0,178.551,0);
level.ground_support_locs["mp_seatown"][1]["origin"] = (1317.92,-725.589,232.125);
level.ground_support_locs["mp_seatown"][1]["angles"] = (0,177.738,0);
level.ground_support_locs["mp_seatown"][2]["origin"] = (-961.699,-1581.56,144.125);
level.ground_support_locs["mp_seatown"][2]["angles"] = (0,90.0176,0);
level.ground_support_locs["mp_bootleg"][0]["origin"] = (-988.964,1833.74,-99.9509);
level.ground_support_locs["mp_bootleg"][0]["angles"] = (0,-78.8909,0);
level.ground_support_locs["mp_bootleg"][1]["origin"] = (1105.84,-1116.13,-72.3048);
level.ground_support_locs["mp_bootleg"][1]["angles"] = (0,176.558,0);
level.ground_support_locs["mp_bootleg"][2]["origin"] = (-2027.31,84.2235,-51.875);
level.ground_support_locs["mp_bootleg"][2]["angles"] = (0,-5.12868,0);
level.ground_support_locs["mp_meteora"][0]["origin"] = (-590.972,1667.65,-99.6187);
level.ground_support_locs["mp_meteora"][0]["angles"] = (0,-89.7745,0);
level.ground_support_locs["mp_meteora"][1]["origin"] = (-1371.02,-1095.66,4.125);
level.ground_support_locs["mp_meteora"][1]["angles"] = (0,179.879,0);
level.ground_support_locs["mp_meteora"][2]["origin"] = (938.851,-1376.99,-60.0877);
level.ground_support_locs["mp_meteora"][2]["angles"] = (0,110.545,0);
level.killstreakfuncs["mobile_mortar"] = ::tryusemobilemortar;
}
//Function Number: 2
tryusemobilemortar(param_00,param_01)
{
if(!isdefined(level.ground_support_locs[level.script]))
{
self iprintlnbold(&"MP_UNAVAILABLE_IN_LEVEL");
return 0;
}
if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand"))
{
self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND");
return 0;
}
else if(isdefined(level.mobilemortar))
{
self iprintlnbold(&"MP_GROUND_APPROACHES_TOO_CROWDED");
return 0;
}
else if(maps\mp\_utility::isusingremote())
{
return 0;
}
var_02 = selectentrancelocation();
if(!isdefined(var_02))
{
return 0;
}
else
{
thread maps\mp\_utility::stoplocationselection(0);
}
var_03 = createmobilemortar(self,var_02);
if(!isdefined(var_03))
{
return 0;
}
var_03 thread movetoposition("entrance");
return 1;
}
//Function Number: 3
selectentrancelocation()
{
var_00 = undefined;
for(;;)
{
thread showicons();
maps\mp\_utility::_beginlocationselection("mobile_mortar","map_artillery_selector",0,500);
self endon("stop_location_selection");
self waittill("confirm_location",var_01);
for(var_02 = 0;var_02 < 3;var_02++)
{
var_03 = level.ground_support_locs[level.script][var_02]["origin"] * (1,1,0);
var_04 = distancesquared(var_01,var_03);
if(var_04 < -5536)
{
var_00 = var_02;
break;
}
}
if(isdefined(var_00))
{
for(var_02 = 0;var_02 < 3;var_02++)
{
if(var_02 == var_00)
{
objective_icon(self.locationobjectives[var_02],"compass_objpoint_mortar_target");
continue;
}
objective_state(self.locationobjectives[var_02],"invisible");
}
}
else
{
for(var_02 = 0;var_02 < 3;var_02++)
{
objective_icon(self.locationobjectives[var_02],"compass_objpoint_tank_enemy");
}
}
wait 0.5;
self notify("picked_location");
wait 0.05;
if(isdefined(var_00))
{
break;
}
}
return var_00;
}
//Function Number: 4
showicons()
{
var_00 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5);
var_00 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150);
var_00 settext(&"MP_SELECT_MOBILE_MORTAR_LOCATION");
self.locationobjectives = [];
for(var_01 = 0;var_01 < 3;var_01++)
{
self.locationobjectives[var_01] = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(self.locationobjectives[var_01],"invisible",(0,0,0));
objective_position(self.locationobjectives[var_01],level.ground_support_locs[level.script][var_01]["origin"]);
objective_state(self.locationobjectives[var_01],"active");
objective_team(self.locationobjectives[var_01],self.team);
objective_icon(self.locationobjectives[var_01],"compass_objpoint_tank_friendly");
}
common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection");
var_00 maps\mp\gametypes\_hud_util::destroyelem();
for(var_01 = 0;var_01 < 3;var_01++)
{
maps\mp\_utility::_objective_delete(self.locationobjectives[var_01]);
}
}
//Function Number: 5
createmobilemortar(param_00,param_01)
{
var_02 = maps\mp\killstreaks\_airdrop::getflyheightoffset(level.ground_support_locs[level.script][param_01]["origin"]);
var_03 = bullettrace(level.ground_support_locs[level.script][param_01]["origin"] + (0,0,var_02),level.ground_support_locs[level.script][param_01]["origin"] - (0,0,var_02),0);
var_04 = var_03["position"] + anglestoforward(level.ground_support_locs[level.script][param_01]["angles"]) * -1000;
var_05 = spawn("script_model",var_04);
if(!isdefined(var_05))
{
return undefined;
}
var_05.angles = level.ground_support_locs[level.script][param_01]["angles"];
var_05 setmodel("vehicle_bradley");
var_05 setcandamage(1);
var_05.maxhealth = level.heli_maxhealth * 2;
var_05.health = var_05.maxhealth;
var_05.owner = param_00;
var_05.playersattacked = [];
var_05.lasttarget = var_05.origin;
if(level.teambased)
{
var_05.team = param_00.team;
}
var_05.lowx = level.spawnpoints[0].origin[0];
var_05.highx = level.spawnpoints[0].origin[0];
var_05.lowy = level.spawnpoints[0].origin[1];
var_05.highy = level.spawnpoints[0].origin[1];
var_06 = 200;
if(level.spawnpoints.size > 1)
{
for(var_07 = 1;var_07 < level.spawnpoints.size;var_07++)
{
if(level.spawnpoints[var_07].origin[0] < var_05.lowx)
{
var_05.lowx = level.spawnpoints[var_07].origin[0];
}
else if(level.spawnpoints[var_07].origin[0] > var_05.highx)
{
var_05.highx = level.spawnpoints[var_07].origin[0];
}
if(level.spawnpoints[var_07].origin[1] < var_05.lowy)
{
var_05.lowy = level.spawnpoints[var_07].origin[1];
continue;
}
if(level.spawnpoints[var_07].origin[1] > var_05.highy)
{
var_05.highy = level.spawnpoints[var_07].origin[1];
}
}
}
else
{
var_06 = -2000;
}
var_05.lowx = var_05.lowx + var_06;
var_05.highx = var_05.highx - var_06;
var_05.lowy = var_05.lowy + var_06;
var_05.highy = var_05.highy - var_06;
if(level.teambased)
{
var_08 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_08,"invisible",(0,0,0));
objective_position(var_08,var_03["position"]);
objective_state(var_08,"active");
objective_team(var_08,var_05.team);
objective_icon(var_08,"compass_objpoint_tank_friendly");
var_05.objidfriendly = var_08;
var_08 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_08,"invisible",(0,0,0));
objective_position(var_08,var_03["position"]);
objective_state(var_08,"active");
objective_team(var_08,level.otherteam[var_05.team]);
objective_icon(var_08,"compass_objpoint_tank_enemy");
var_05.objidenemy = var_08;
}
var_05 thread watchtimeout();
var_05 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor();
var_05 thread watchdeath();
var_05 thread watchproximity();
level.mobilemortar = var_05;
return var_05;
}
//Function Number: 6
movetoposition(param_00)
{
level endon("game_ended");
self endon("death");
if(param_00 == "entrance")
{
var_01 = self.origin + anglestoforward(self.angles) * 1000;
}
else
{
self notify("leaving");
var_01 = self.origin + anglestoforward(self.angles) * -1000;
}
var_02 = 3;
self moveto(var_01,var_02,var_02 * 0.6,var_02 * 0.4);
wait var_02;
if(param_00 == "entrance")
{
thread mortarattack();
return;
}
stopfxontag(level.tankdust1,self.fxent,"tag_origin");
stopfxontag(level.tankdust2,self.fxent,"tag_origin");
self.fxent delete();
maps\mp\_utility::_objective_delete(self.objidfriendly);
maps\mp\_utility::_objective_delete(self.objidenemy);
level.mobilemortar = undefined;
self delete();
}
//Function Number: 7
findtarget()
{
var_00 = undefined;
foreach(var_02 in level.players)
{
if(var_02 == self.owner)
{
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_blindeye"))
{
continue;
}
if(level.teambased && var_02.team == self.owner.team)
{
continue;
}
if(distancesquared(self.origin,var_02.origin) < 1000000)
{
continue;
}
for(var_03 = 0;var_03 < self.playersattacked.size;var_03++)
{
if(var_02 == self.playersattacked[var_03])
{
continue;
}
}
if(distancesquared(var_02.origin,self.lasttarget) < 500000)
{
continue;
}
if(level.teambased)
{
var_04 = 0;
for(var_03 = 0;var_03 < level.players.size;var_03++)
{
if(level.players[var_03].team != var_02.team && distancesquared(var_02.origin,level.players[var_03].origin) < 250000)
{
var_04 = 1;
break;
}
}
if(var_04 == 1)
{
continue;
}
}
wait 0.05;
var_05 = bullettrace(var_02.origin + (0,0,var_02 maps\mp\killstreaks\_airdrop::getflyheightoffset(var_02.origin)),var_02.origin + (0,0,100),0);
if(var_05["surfacetype"] != "none")
{
continue;
}
var_00 = var_02.origin;
self.lasttarget = var_02.origin;
self.playersattacked[self.playersattacked.size] = var_02;
break;
}
return var_00;
}
//Function Number: 8
findrandomtarget()
{
var_00 = undefined;
for(var_01 = 0;var_01 < 20;var_01++)
{
var_02 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0);
if(distancesquared(self.origin * (1,1,0),var_02) < 1000000)
{
continue;
}
if(distancesquared(self.owner.origin * (1,1,0),var_02) < 250000)
{
continue;
}
if(distancesquared(self.origin * (1,1,0),self.lasttarget) < 500000)
{
continue;
}
var_03 = 0;
if(level.teambased)
{
foreach(var_05 in level.players)
{
if(var_05.team == self.owner.team && distancesquared(var_05.origin * (1,1,0),var_02) < 250000)
{
var_03 = 1;
break;
}
}
}
if(var_03 == 0)
{
var_00 = var_02;
self.lasttarget = var_02;
break;
}
}
if(!isdefined(var_00))
{
var_00 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0);
}
return var_00;
}
//Function Number: 9
mortarattack()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
var_00 = 0;
self.fxent = spawn("script_model",self.origin);
self.fxent setmodel("tag_origin");
self.fxent.angles = self.angles;
self.fxent addpitch(-90);
for(;;)
{
var_01 = findtarget();
if(!isdefined(var_01))
{
var_01 = findrandomtarget();
}
var_02 = self.origin[2] + 3500;
var_03 = bullettrace(var_01 + (0,0,var_02),var_01 - (0,0,var_02),0);
var_04 = var_01 + (0,0,var_02);
var_05 = var_01 + (0,0,var_03["position"][2]);
self playsound("bmp_fire");
playfx(level.tankflash,self.origin + anglestoforward(self.angles) * 50);
if(var_00 < 3)
{
playfxontag(level.tankdust1,self.fxent,"tag_origin");
playfxontag(level.tankdust2,self.fxent,"tag_origin");
var_00++;
}
thread mortarrecoil();
level thread firemortar(self,var_04,var_05);
self waittill("mortar_fire_done");
wait 2.5;
}
}
//Function Number: 10
firemortar(param_00,param_01,param_02)
{
level endon("game_ended");
var_03 = param_00.owner;
var_04 = magicbullet("javelin_mp",param_00.origin + (0,0,150),param_01,var_03);
var_05 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_05,"invisible",(0,0,0));
objective_position(var_05,param_02);
objective_state(var_05,"active");
objective_team(var_05,param_00.team);
objective_icon(var_05,"compass_objpoint_mortar_target");
var_04.objidfriendly = var_05;
var_06 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_06,"invisible",(0,0,0));
objective_position(var_06,param_02);
objective_state(var_06,"active");
objective_team(var_06,level.otherteam[param_00.team]);
objective_icon(var_06,"compass_objpoint_mortar_target");
var_04.objidenemy = var_06;
var_07 = 0;
for(;;)
{
if(!isdefined(var_04) || var_07 > 115 || distancesquared(var_04.origin,param_01) < 500)
{
break;
}
else
{
wait 0.05;
}
var_07++;
}
if(isdefined(var_04))
{
var_04 delete();
}
if(isdefined(var_03))
{
var_08 = magicbullet("javelin_mp",param_01 + (0,0,200),param_02,var_03);
}
else
{
var_08 = magicbullet("javelin_mp",param_02 + (0,0,200),var_03);
}
var_08.objidfriendly = var_05;
var_08.objidenemy = var_06;
var_08 thread watchprojectileonminimap(param_00);
}
//Function Number: 11
watchprojectileonminimap(param_00)
{
level endon("game_ended");
self waittill("death");
maps\mp\_utility::_objective_delete(self.objidfriendly);
maps\mp\_utility::_objective_delete(self.objidenemy);
if(isdefined(param_00))
{
param_00 notify("mortar_fire_done");
}
}
//Function Number: 12
mortarrecoil()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
var_00 = self.origin + anglestoforward(self.angles) * -20;
var_01 = self.origin;
var_02 = self.angles;
self moveto(var_00,0.1);
self rotatepitch(-3,0.1);
wait 0.1;
self moveto(var_01,0.15);
self rotateto(var_02,0.15);
wait 0.15;
}
//Function Number: 13
watchtimeout()
{
level endon("game_ended");
self endon("death");
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(90);
self setcandamage(0);
thread movetoposition("exit");
}
//Function Number: 14
watchproximity()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
for(;;)
{
radiusdamage(self.origin,200,20,20);
wait 1;
}
}
//Function Number: 15
watchdeath()
{
level endon("game_ended");
self endon("leaving");
self waittill("death");
playfx(level.tankfire,self.origin);
playfx(level.tankexplode,self.origin);
var_00 = spawn("script_model",self.origin);
var_00 setmodel("vehicle_bradley_destroyed");
var_00.angles = self.angles;
stopfxontag(level.tankdust1,self.fxent,"tag_origin");
stopfxontag(level.tankdust2,self.fxent,"tag_origin");
maps\mp\_utility::_objective_delete(self.objidfriendly);
maps\mp\_utility::_objective_delete(self.objidenemy);
self.fxent delete();
self delete();
wait 3.5;
var_00 delete();
level.mobilemortar = undefined;
}
//Function Number: 16
watchdamage()
{
level endon("game_ended");
self endon("death");
for(;;)
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04);
if(self.health < 0)
{
break;
}
}
}

View File

@ -0,0 +1,403 @@
/*******************************************************************
* 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);
}
}

View File

@ -0,0 +1,178 @@
/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_perkstreaks.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 22
* Decompile Time: 402 ms
* Timestamp: 10/27/2023 2:14:24 AM
*******************************************************************/
//Function Number: 1
init()
{
level.killstreakfuncs["specialty_longersprint_ks"] = ::tryuseextremeconditioning;
level.killstreakfuncs["specialty_fastreload_ks"] = ::tryusesleightofhand;
level.killstreakfuncs["specialty_scavenger_ks"] = ::tryusescavenger;
level.killstreakfuncs["specialty_blindeye_ks"] = ::tryuseblindeye;
level.killstreakfuncs["specialty_paint_ks"] = ::tryusepaint;
level.killstreakfuncs["specialty_hardline_ks"] = ::tryusehardline;
level.killstreakfuncs["specialty_coldblooded_ks"] = ::tryusecoldblooded;
level.killstreakfuncs["specialty_quickdraw_ks"] = ::tryusequickdraw;
level.killstreakfuncs["specialty_assists_ks"] = ::tryuseassists;
level.killstreakfuncs["_specialty_blastshield_ks"] = ::tryuseblastshield;
level.killstreakfuncs["specialty_detectexplosive_ks"] = ::tryusesitrep;
level.killstreakfuncs["specialty_autospot_ks"] = ::tryuseironlungs;
level.killstreakfuncs["specialty_bulletaccuracy_ks"] = ::tryusesteadyaim;
level.killstreakfuncs["specialty_quieter_ks"] = ::tryusedeadsilence;
level.killstreakfuncs["specialty_stalker_ks"] = ::tryusestalker;
level.killstreakfuncs["all_perks_bonus"] = ::tryuseallperks;
}
//Function Number: 2
tryuseallperks()
{
}
//Function Number: 3
tryuseblindeye(param_00)
{
doperkfunctions("specialty_blindeye");
}
//Function Number: 4
tryusepaint(param_00)
{
doperkfunctions("specialty_paint");
}
//Function Number: 5
tryuseassists(param_00)
{
doperkfunctions("specialty_assists");
}
//Function Number: 6
tryusesteadyaim(param_00)
{
doperkfunctions("specialty_bulletaccuracy");
}
//Function Number: 7
tryusestalker(param_00)
{
doperkfunctions("specialty_stalker");
}
//Function Number: 8
tryuseextremeconditioning(param_00)
{
doperkfunctions("specialty_longersprint");
}
//Function Number: 9
tryusesleightofhand(param_00)
{
doperkfunctions("specialty_fastreload");
}
//Function Number: 10
tryusescavenger(param_00)
{
doperkfunctions("specialty_scavenger");
}
//Function Number: 11
tryusehardline(param_00)
{
doperkfunctions("specialty_hardline");
maps\mp\killstreaks\_killstreaks::setstreakcounttonext();
}
//Function Number: 12
tryusecoldblooded(param_00)
{
doperkfunctions("specialty_coldblooded");
}
//Function Number: 13
tryusequickdraw(param_00)
{
doperkfunctions("specialty_quickdraw");
}
//Function Number: 14
tryuseblastshield(param_00)
{
doperkfunctions("_specialty_blastshield");
}
//Function Number: 15
tryusesitrep(param_00)
{
doperkfunctions("specialty_detectexplosive");
}
//Function Number: 16
tryuseironlungs(param_00)
{
doperkfunctions("specialty_autospot");
}
//Function Number: 17
tryuseassassin(param_00)
{
doperkfunctions("specialty_heartbreaker");
}
//Function Number: 18
tryusedeadsilence(param_00)
{
doperkfunctions("specialty_quieter");
}
//Function Number: 19
doperkfunctions(param_00)
{
maps\mp\_utility::giveperk(param_00,0);
thread watchdeath(param_00);
thread checkforperkupgrade(param_00);
maps\mp\_matchdata::logkillstreakevent(param_00 + "_ks",self.origin);
}
//Function Number: 20
watchdeath(param_00)
{
self endon("disconnect");
self waittill("death");
maps\mp\_utility::_unsetperk(param_00);
maps\mp\_utility::_unsetextraperks(param_00);
}
//Function Number: 21
checkforperkupgrade(param_00)
{
var_01 = maps\mp\gametypes\_class::getperkupgrade(param_00);
if(var_01 != "specialty_null")
{
maps\mp\_utility::giveperk(var_01,0);
thread watchdeath(var_01);
}
}
//Function Number: 22
isperkstreakon(param_00)
{
for(var_01 = 1;var_01 < 4;var_01++)
{
if(isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].streakname == param_00)
{
if(self.pers["killstreaks"][var_01].available)
{
return 1;
}
}
}
return 0;
}

Some files were not shown because too many files have changed in this diff Show More