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

704 lines
20 KiB
Plaintext

/*******************************************************************
* 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"]);
}