// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool init() { if ( !isdefined( game["gamestarted"] ) ) { setmatchdatadef( "mp/matchdata.def" ); setmatchdata( "map", level.script ); if ( level.hardcoremode ) { var_0 = level.gametype + " hc"; setmatchdata( "gametype", var_0 ); } 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 = 64; level.maxlogclients = 30; level.maxnumchallengesperplayer = 10; level.maxnumawardsperplayer = 10; if ( !maps\mp\_utility::is_aliens() ) { level thread gameendlistener(); level thread endofgamesummarylogger(); } } getmatchdatetime() { return getmatchdata( "dateTime" ); } logkillstreakevent( var_0, var_1 ) { if ( !canlogclient( self ) || !canlogkillstreak() ) return; var_2 = getmatchdata( "killstreakCount" ); setmatchdata( "killstreakCount", var_2 + 1 ); setmatchdata( "killstreaks", var_2, "eventType", var_0 ); setmatchdata( "killstreaks", var_2, "player", self.clientid ); setmatchdata( "killstreaks", var_2, "eventTime", gettime() ); setmatchdata( "killstreaks", var_2, "eventPos", 0, int( var_1[0] ) ); setmatchdata( "killstreaks", var_2, "eventPos", 1, int( var_1[1] ) ); setmatchdata( "killstreaks", var_2, "eventPos", 2, int( var_1[2] ) ); } loggameevent( var_0, var_1 ) { if ( !canlogclient( self ) || !canlogevent() ) return; var_2 = getmatchdata( "eventCount" ); setmatchdata( "eventCount", var_2 + 1 ); setmatchdata( "events", var_2, "eventType", var_0 ); setmatchdata( "events", var_2, "player", self.clientid ); setmatchdata( "events", var_2, "eventTime", gettime() ); setmatchdata( "events", var_2, "eventPos", 0, int( var_1[0] ) ); setmatchdata( "events", var_2, "eventPos", 1, int( var_1[1] ) ); setmatchdata( "events", var_2, "eventPos", 2, int( var_1[2] ) ); } logkillevent( var_0, var_1 ) { if ( !canloglife( var_0 ) ) return; setmatchdata( "lives", var_0, "modifiers", var_1, 1 ); } logmultikill( var_0, var_1 ) { if ( !canloglife( var_0 ) ) return; setmatchdata( "lives", var_0, "multikill", var_1 ); } logplayerlife() { if ( !canlogclient( self ) ) var_0 = level.maxlives; if ( self.curclass == "gamemode" ) var_0 = self logmatchdatalife( self.clientid, self.spawnpos, self.spawntime, self.wasti ); else if ( issubstr( self.curclass, "custom" ) ) { var_1 = maps\mp\_utility::getclassindex( self.curclass ); var_2 = maps\mp\gametypes\_class::cac_getweapon( var_1, 0 ); var_3 = maps\mp\gametypes\_class::cac_getweaponattachment( var_1, 0 ); var_4 = maps\mp\gametypes\_class::cac_getweaponattachmenttwo( var_1, 0 ); var_5 = maps\mp\gametypes\_class::cac_getweapon( var_1, 1 ); var_6 = maps\mp\gametypes\_class::cac_getweaponattachment( var_1, 1 ); var_7 = maps\mp\gametypes\_class::cac_getweaponattachmenttwo( var_1, 1 ); var_8 = "none"; var_9 = maps\mp\gametypes\_class::cac_getperk( var_1, 0 ); var_0 = self logmatchdatalife( self.clientid, self.spawnpos, self.spawntime, self.wasti, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ); logplayerabilityperks( var_0 ); } else { var_1 = maps\mp\_utility::getclassindex( self.curclass ); var_2 = maps\mp\gametypes\_class::table_getweapon( level.classtablename, var_1, 0 ); var_3 = maps\mp\gametypes\_class::table_getweaponattachment( level.classtablename, var_1, 0, 0 ); var_4 = maps\mp\gametypes\_class::table_getweaponattachment( level.classtablename, var_1, 0, 1 ); var_5 = maps\mp\gametypes\_class::table_getweapon( level.classtablename, var_1, 1 ); var_6 = maps\mp\gametypes\_class::table_getweaponattachment( level.classtablename, var_1, 1, 0 ); var_7 = maps\mp\gametypes\_class::table_getweaponattachment( level.classtablename, var_1, 1, 1 ); var_8 = maps\mp\gametypes\_class::table_getoffhand( level.classtablename, var_1 ); var_9 = maps\mp\gametypes\_class::table_getequipment( level.classtablename, var_1, 0 ); var_0 = self logmatchdatalife( self.clientid, self.spawnpos, self.spawntime, self.wasti, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ); logplayerabilityperks( var_0 ); } return var_0; } logplayerabilityperks( var_0 ) { if ( getdvarint( "scr_trackPlayerAbilities", 0 ) != 0 ) { if ( isdefined( self.abilityflags ) && self.abilityflags.size == 2 ) { setmatchdata( "lives", var_0, "abilityFlags", 0, self.abilityflags[0] ); setmatchdata( "lives", var_0, "abilityFlags", 1, self.abilityflags[1] ); } } } logplayerxp( var_0, var_1 ) { if ( !canlogclient( self ) ) return; setmatchdata( "players", self.clientid, var_1, var_0 ); } logplayerdeath( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { if ( !canlogclient( self ) ) return; if ( var_0 >= level.maxlives ) return; if ( isplayer( var_1 ) && canlogclient( var_1 ) ) self logmatchdatadeath( var_0, self.clientid, var_1, var_1.clientid, var_4, var_3, maps\mp\_utility::iskillstreakweapon( var_4 ), var_1 maps\mp\_utility::isjuggernaut() ); else self logmatchdatadeath( var_0, self.clientid, undefined, undefined, var_4, var_3, maps\mp\_utility::iskillstreakweapon( var_4 ), 0 ); } 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 ); else setmatchdata( "players", self.clientid, "longestStreak", maps\mp\_utility::getpersstat( "longestStreak" ) ); if ( maps\mp\_utility::getpersstat( "validationInfractions" ) > 255 ) setmatchdata( "players", self.clientid, "validationInfractions", 255 ); else setmatchdata( "players", self.clientid, "validationInfractions", maps\mp\_utility::getpersstat( "validationInfractions" ) ); } endofgamesummarylogger() { level waittill( "game_ended" ); foreach ( var_1 in level.players ) { wait 0.05; if ( !isdefined( var_1 ) ) continue; if ( isdefined( var_1.detectedexploit ) && var_1.detectedexploit && var_1 maps\mp\_utility::rankingenabled() ) var_1 setrankedplayerdata( "restXPGoal", var_1.detectedexploit ); if ( isdefined( var_1.weaponsused ) ) { var_1 doublebubblesort(); var_2 = 0; if ( var_1.weaponsused.size > 3 ) { for ( var_3 = var_1.weaponsused.size - 1; var_3 > var_1.weaponsused.size - 3; var_3-- ) { var_1 setcommonplayerdata( "round", "weaponsUsed", var_2, var_1.weaponsused[var_3] ); var_1 setcommonplayerdata( "round", "weaponXpEarned", var_2, var_1.weaponxpearned[var_3] ); var_2++; } } else { for ( var_3 = var_1.weaponsused.size - 1; var_3 >= 0; var_3-- ) { var_1 setcommonplayerdata( "round", "weaponsUsed", var_2, var_1.weaponsused[var_3] ); var_1 setcommonplayerdata( "round", "weaponXpEarned", var_2, var_1.weaponxpearned[var_3] ); var_2++; } } } else { var_1 setcommonplayerdata( "round", "weaponsUsed", 0, "none" ); var_1 setcommonplayerdata( "round", "weaponsUsed", 1, "none" ); var_1 setcommonplayerdata( "round", "weaponsUsed", 2, "none" ); var_1 setcommonplayerdata( "round", "weaponXpEarned", 0, 0 ); var_1 setcommonplayerdata( "round", "weaponXpEarned", 1, 0 ); var_1 setcommonplayerdata( "round", "weaponXpEarned", 2, 0 ); } if ( isdefined( var_1.operationscompleted ) ) var_1 setcommonplayerdata( "round", "operationNumCompleted", var_1.operationscompleted.size ); else var_1 setcommonplayerdata( "round", "operationNumCompleted", 0 ); for ( var_3 = 0; var_3 < 5; var_3++ ) { if ( isdefined( var_1.operationscompleted ) && isdefined( var_1.operationscompleted[var_3] ) && var_1.operationscompleted[var_3] != "ch_prestige" && !issubstr( var_1.operationscompleted[var_3], "_daily" ) && !issubstr( var_1.operationscompleted[var_3], "_weekly" ) ) { var_1 setcommonplayerdata( "round", "operationsCompleted", var_3, var_1.operationscompleted[var_3] ); continue; } var_1 setcommonplayerdata( "round", "operationsCompleted", var_3, "" ); } if ( isdefined( var_1.challengescompleted ) ) var_1 setcommonplayerdata( "round", "challengeNumCompleted", var_1.challengescompleted.size ); else var_1 setcommonplayerdata( "round", "challengeNumCompleted", 0 ); for ( var_3 = 0; var_3 < 20; var_3++ ) { if ( isdefined( var_1.challengescompleted ) && isdefined( var_1.challengescompleted[var_3] ) && var_1.challengescompleted[var_3] != "ch_prestige" && !issubstr( var_1.challengescompleted[var_3], "_daily" ) && !issubstr( var_1.challengescompleted[var_3], "_weekly" ) ) { var_1 setcommonplayerdata( "round", "challengesCompleted", var_3, var_1.challengescompleted[var_3] ); continue; } var_1 setcommonplayerdata( "round", "challengesCompleted", var_3, "" ); } var_1 setcommonplayerdata( "round", "gameMode", level.gametype ); var_1 setcommonplayerdata( "round", "map", tolower( getdvar( "mapname" ) ) ); if ( issquadsmode() ) { var_1 setcommonplayerdata( "round", "squadMode", 1 ); continue; } var_1 setcommonplayerdata( "round", "squadMode", 0 ); } } doublebubblesort() { var_0 = self.weaponxpearned; var_1 = self.weaponxpearned.size; for ( var_2 = var_1 - 1; var_2 > 0; var_2-- ) { for ( var_3 = 1; var_3 <= var_2; var_3++ ) { if ( var_0[var_3 - 1] < var_0[var_3] ) { var_4 = self.weaponsused[var_3]; self.weaponsused[var_3] = self.weaponsused[var_3 - 1]; self.weaponsused[var_3 - 1] = var_4; var_5 = self.weaponxpearned[var_3]; self.weaponxpearned[var_3] = self.weaponxpearned[var_3 - 1]; self.weaponxpearned[var_3 - 1] = var_5; var_0 = self.weaponxpearned; } } } } gameendlistener() { level waittill( "game_ended" ); foreach ( var_1 in level.players ) { var_1 logplayerdata(); if ( !isalive( var_1 ) ) continue; var_1 logplayerlife(); } } canlogclient( var_0 ) { if ( isagent( var_0 ) ) return 0; return var_0.clientid < level.maxlogclients; } canlogevent() { return getmatchdata( "eventCount" ) < level.maxevents; } canlogkillstreak() { return getmatchdata( "killstreakCount" ) < level.maxkillstreaks; } canloglife( var_0 ) { return getmatchdata( "lifeCount" ) < level.maxlives; } logweaponstat( var_0, var_1, var_2 ) { if ( !canlogclient( self ) ) return; if ( var_0 == "iw6_pdwauto" ) var_0 = "iw6_pdw"; else if ( var_0 == "iw6_knifeonlyfast" ) var_0 = "iw6_knifeonly"; if ( maps\mp\_utility::iskillstreakweapon( var_0 ) ) return; storeweaponandattachmentstats( "weaponStats", var_0, var_1, var_2 ); } logattachmentstat( var_0, var_1, var_2 ) { if ( !canlogclient( self ) ) return; storeweaponandattachmentstats( "attachmentsStats", var_0, var_1, var_2 ); } storeweaponandattachmentstats( var_0, var_1, var_2, var_3 ) { var_4 = getmatchdata( "players", self.clientid, var_0, var_1, var_2 ); var_5 = var_4 + var_3; if ( var_2 == "kills" || var_2 == "deaths" || var_2 == "headShots" ) { if ( var_5 > 255 ) var_5 = 255; } else if ( var_5 > 65535 ) var_5 = 65535; setmatchdata( "players", self.clientid, var_0, var_1, var_2, var_5 ); } buildbaseweaponlist() { var_0 = []; var_1 = 149; for ( var_2 = 0; var_2 <= var_1; var_2++ ) { var_3 = tablelookup( "mp/statstable.csv", 0, var_2, 4 ); if ( var_3 == "" || var_3 == "uav" || var_3 == "iw6_knifeonlyfast" || var_3 == "laser_designator" || var_3 == "iw6_pdwauto" ) continue; if ( !issubstr( tablelookup( "mp/statsTable.csv", 0, var_2, 2 ), "weapon_" ) ) continue; if ( tablelookup( "mp/statsTable.csv", 0, var_2, 2 ) == "weapon_other" ) continue; var_0[var_0.size] = var_3; } return var_0; } logchallenge( var_0, var_1 ) { if ( !canlogclient( self ) ) return; if ( issubstr( var_0, "_daily" ) || issubstr( var_0, "_weekly" ) ) return; var_2 = getmatchdata( "players", self.clientid, "challengeCount" ); if ( var_2 < level.maxnumchallengesperplayer ) { setmatchdata( "players", self.clientid, "challenge", var_2, var_0 ); setmatchdata( "players", self.clientid, "tier", var_2, var_1 ); setmatchdata( "players", self.clientid, "challengeCount", var_2 + 1 ); } } logaward( var_0 ) { if ( !canlogclient( self ) ) return; var_1 = getmatchdata( "players", self.clientid, "awardCount" ); if ( var_1 < level.maxnumawardsperplayer ) { setmatchdata( "players", self.clientid, "awards", var_1, var_0 ); setmatchdata( "players", self.clientid, "awardCount", var_1 + 1 ); } } logkillsconfirmed() { if ( !canlogclient( self ) ) return; setmatchdata( "players", self.clientid, "killsConfirmed", self.pers["confirmed"] ); } logkillsdenied() { if ( !canlogclient( self ) ) return; setmatchdata( "players", self.clientid, "killsDenied", self.pers["denied"] ); } loginitialstats() { if ( getdvarint( "mdsd" ) > 0 ) { setmatchdata( "players", self.clientid, "startXp", self getrankedplayerdata( "experience" ) ); setmatchdata( "players", self.clientid, "startKills", self getrankedplayerdata( "kills" ) ); setmatchdata( "players", self.clientid, "startDeaths", self getrankedplayerdata( "deaths" ) ); setmatchdata( "players", self.clientid, "startWins", self getrankedplayerdata( "wins" ) ); setmatchdata( "players", self.clientid, "startLosses", self getrankedplayerdata( "losses" ) ); setmatchdata( "players", self.clientid, "startHits", self getrankedplayerdata( "hits" ) ); setmatchdata( "players", self.clientid, "startMisses", self getrankedplayerdata( "misses" ) ); setmatchdata( "players", self.clientid, "startGamesPlayed", self getrankedplayerdata( "gamesPlayed" ) ); setmatchdata( "players", self.clientid, "startTimePlayedTotal", self getrankedplayerdata( "timePlayedTotal" ) ); setmatchdata( "players", self.clientid, "startScore", self getrankedplayerdata( "score" ) ); setmatchdata( "players", self.clientid, "startUnlockPoints", self getrankedplayerdata( "unlockPoints" ) ); setmatchdata( "players", self.clientid, "startPrestige", self getrankedplayerdata( "prestige" ) ); for ( var_0 = 0; var_0 < 10; var_0++ ) setmatchdata( "players", self.clientid, "startCharacterXP", var_0, self getrankedplayerdata( "characterXP", var_0 ) ); } } logfinalstats() { if ( getdvarint( "mdsd" ) > 0 ) { setmatchdata( "players", self.clientid, "endXp", self getrankedplayerdata( "experience" ) ); setmatchdata( "players", self.clientid, "endKills", self getrankedplayerdata( "kills" ) ); setmatchdata( "players", self.clientid, "endDeaths", self getrankedplayerdata( "deaths" ) ); setmatchdata( "players", self.clientid, "endWins", self getrankedplayerdata( "wins" ) ); setmatchdata( "players", self.clientid, "endLosses", self getrankedplayerdata( "losses" ) ); setmatchdata( "players", self.clientid, "endHits", self getrankedplayerdata( "hits" ) ); setmatchdata( "players", self.clientid, "endMisses", self getrankedplayerdata( "misses" ) ); setmatchdata( "players", self.clientid, "endGamesPlayed", self getrankedplayerdata( "gamesPlayed" ) ); setmatchdata( "players", self.clientid, "endTimePlayedTotal", self getrankedplayerdata( "timePlayedTotal" ) ); setmatchdata( "players", self.clientid, "endScore", self getrankedplayerdata( "score" ) ); setmatchdata( "players", self.clientid, "endUnlockPoints", self getrankedplayerdata( "unlockPoints" ) ); setmatchdata( "players", self.clientid, "endPrestige", self getrankedplayerdata( "prestige" ) ); for ( var_0 = 0; var_0 < 10; var_0++ ) setmatchdata( "players", self.clientid, "endCharacterXP", var_0, self getrankedplayerdata( "characterXP", var_0 ) ); } }