Page 3 of 4 FirstFirst 1234 LastLast
Results 31 to 45 of 48
  1. #31
    master131's Avatar
    Join Date
    Apr 2010
    Gender
    male
    Location
    Melbourne, Australia
    Posts
    8,802
    Reputation
    3165
    Thanks
    73,317
    My Mood
    Breezy
    Quote Originally Posted by iVenom View Post
    Hey Guys I need Some Help! I Did alot Of Modding Servers On Mw2 And i Know How to use Mods But When i Click *******loader I open black ops Then I see when i starting black ops i see *******loader Closes and then game starts when in game i click Console My Game Closes And Goes To my Desktop and Its anoying Then i Load *******loader again and I click Console I type /devmap mp_nuked and It loads in private match and the mods not work
    Make sure you have the latest *******Loader for Black Ops and also make sure your put the 'maps' folder inside the 'mod' folder.
    Donate:
    BTC: 1GEny3y5tsYfw8E8A45upK6PKVAEcUDNv9


    Handy Tools/Hacks:
    Extreme Injector v3.6.1 *NEW* Windows 10 compatible!
    A powerful and advanced injector in a simple GUI.
    Can scramble DLLs on injection making them harder to detect and even make detected hacks work again!

    Minion Since: 13th January 2011
    Moderator Since: 6th May 2011
    Global Moderator Since: 29th April 2012
    Super User/Unknown Since: 23rd July 2013
    'Game Hacking' Team Since: 30th July 2013

    --My Art--
    [Roxas - Pixel Art, WIP]
    [Natsu - Drawn]
    [Natsu - Coloured]


    All drawings are coloured using Photoshop.

    --Gifts--
    [Kyle]

  2. #32
    Skyline.'s Avatar
    Join Date
    Dec 2009
    Gender
    male
    Posts
    10,160
    Reputation
    403
    Thanks
    1,613
    very nice,
    is it possible to crash the game/pc..?


  3. The Following User Says Thank You to Skyline. For This Useful Post:

    [MPGH]master131 (01-09-2011)

  4. #33
    master131's Avatar
    Join Date
    Apr 2010
    Gender
    male
    Location
    Melbourne, Australia
    Posts
    8,802
    Reputation
    3165
    Thanks
    73,317
    My Mood
    Breezy
    Quote Originally Posted by toobanooba View Post
    very nice,
    is it possible to crash the game/pc..?
    Don't think so.
    Donate:
    BTC: 1GEny3y5tsYfw8E8A45upK6PKVAEcUDNv9


    Handy Tools/Hacks:
    Extreme Injector v3.6.1 *NEW* Windows 10 compatible!
    A powerful and advanced injector in a simple GUI.
    Can scramble DLLs on injection making them harder to detect and even make detected hacks work again!

    Minion Since: 13th January 2011
    Moderator Since: 6th May 2011
    Global Moderator Since: 29th April 2012
    Super User/Unknown Since: 23rd July 2013
    'Game Hacking' Team Since: 30th July 2013

    --My Art--
    [Roxas - Pixel Art, WIP]
    [Natsu - Drawn]
    [Natsu - Coloured]


    All drawings are coloured using Photoshop.

    --Gifts--
    [Kyle]

  5. #34
    iVenom's Avatar
    Join Date
    Aug 2010
    Gender
    male
    Location
    Ireland
    Posts
    5
    Reputation
    10
    Thanks
    1
    Quote Originally Posted by master131 View Post
    Make sure you have the latest *******Loader for Black Ops and also make sure your put the 'maps' folder inside the 'mod' folder.
    Where can i get the latest one? I dont realy know If i got the latest one or not . And i did put maps inside the Mod folder.

  6. #35
    erikkire1's Avatar
    Join Date
    Nov 2010
    Gender
    male
    Posts
    79
    Reputation
    10
    Thanks
    52
    My Mood
    Cool
    hi master131
    i dont understand your extremebunkerextractor
    what i have to do ?
    maybe you can explain me
    also thanks

  7. #36
    Ye Old Hack's Avatar
    Join Date
    Sep 2010
    Gender
    male
    Posts
    7
    Reputation
    10
    Thanks
    0
    My Mood
    Hot
    Quote Originally Posted by master131 View Post
    [

    You need both files which can be downloaded at the bottom of the thread,
    1 contains the mod + modloader for easy startup, and the other file contains a .exe with the BunkerListExtractor program.

    The detections are most likely FPs from *******Loader.

    MAKE SURE to read this before using the Mod Loader if you haven't used it before!
    Don't u read??

  8. #37
    Skyline.'s Avatar
    Join Date
    Dec 2009
    Gender
    male
    Posts
    10,160
    Reputation
    403
    Thanks
    1,613
    Quote Originally Posted by master131 View Post
    Don't think so.
    hahah

    bind "f1" spawn 1,000,000 crates,

    end if pc =


  9. #38
    iKiLLYouCro's Avatar
    Join Date
    Aug 2010
    Gender
    male
    Location
    Germany, Croatia
    Posts
    678
    Reputation
    16
    Thanks
    49
    My Mood
    Bitchy
    Omg So Awesome! :O
    But Black Ops Failed
    ADD ME ON XFire: iKiLLYouCro



  10. #39
    ekibyo's Avatar
    Join Date
    Oct 2010
    Gender
    male
    Posts
    2
    Reputation
    10
    Thanks
    0
    My Mood
    Amused
    some help ?

    i alredy got the coordinates

    but not really sure where to put the other things

    Code:
    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
     
    init()
    {
    	level.minigunList = [];
    	level.bunkerList = [];
    level thread doMaps();
            level thread maps\mp\gametypes\_hud::init();
            level.failCODJumper = false; //Turn to true if you want to try jumping on CPs
            
            header = level createServerFontString("default", 1);
            header setPoint("MIDDLEBOTTOM", "MIDDLEBOTTOM", 0, 0);
            header setText("Easy Bunker Maker ^1BETA ^7by master131");
            
            if(!isDefined(level.bunkerList)) {
                    level.minigunList = [];
                    level.bunkerList = [];
                    level.blockEnt = [];
                    level.minigunEnt = [];
            }
            
            level thread maps\mp\_serverfaceanim_mp::doJumpers();
            
            level.scoreInfo = [];
            level.xpScale = GetDvarInt( #"scr_xpscale" );
            level.codPointsXpScale = GetDvarFloat( #"scr_codpointsxpscale" );
            level.codPointsMatchScale = GetDvarFloat( #"scr_codpointsmatchscale" );
            level.codPointsChallengeScale = GetDvarFloat( #"scr_codpointsperchallenge" );
            level.rankXpCap = GetDvarInt( #"scr_rankXpCap" );
            level.codPointsCap = GetDvarInt( #"scr_codPointsCap" ); 
     
            level.rankTable = [];
     
            precacheShader("white");
     
            precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
            precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
            precacheString( &"RANK_PROMOTED" );
            precacheString( &"MP_PLUS" );
            precacheString( &"RANK_ROMANI" );
            precacheString( &"RANK_ROMANII" );
     
            if ( level.teamBased )
            {
                    registerScoreInfo( "kill", 100 );
                    registerScoreInfo( "headshot", 100 );
                    registerScoreInfo( "assist_75", 80 );
                    registerScoreInfo( "assist_50", 60 );
                    registerScoreInfo( "assist_25", 40 );
                    registerScoreInfo( "assist", 20 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
                    registerScoreInfo( "dogkill", 30 );
                    registerScoreInfo( "dogassist", 10 );
                    registerScoreInfo( "helicopterkill", 200 );
                    registerScoreInfo( "helicopterassist", 100 );
                    registerScoreInfo( "helicopterassist_75", 0 );
                    registerScoreInfo( "helicopterassist_50", 0 );
                    registerScoreInfo( "helicopterassist_25", 0 );
                    registerScoreInfo( "spyplanekill", 100 );
                    registerScoreInfo( "spyplaneassist", 50 );
                    registerScoreInfo( "rcbombdestroy", 50 );
            }
            else
            {
                    registerScoreInfo( "kill", 50 );
                    registerScoreInfo( "headshot", 50 );
                    registerScoreInfo( "assist_75", 0 );
                    registerScoreInfo( "assist_50", 0 );
                    registerScoreInfo( "assist_25", 0 );
                    registerScoreInfo( "assist", 0 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
                    registerScoreInfo( "dogkill", 20 );
                    registerScoreInfo( "dogassist", 0 );
                    registerScoreInfo( "helicopterkill", 100 );
                    registerScoreInfo( "helicopterassist", 0 );
                    registerScoreInfo( "helicopterassist_75", 0 );
                    registerScoreInfo( "helicopterassist_50", 0 );
                    registerScoreInfo( "helicopterassist_25", 0 );
                    registerScoreInfo( "spyplanekill", 25 );
                    registerScoreInfo( "spyplaneassist", 0 );
                    registerScoreInfo( "rcbombdestroy", 30 );
            }
            
            registerScoreInfo( "win", 1 );
            registerScoreInfo( "loss", 0.5 );
            registerScoreInfo( "tie", 0.75 );
            registerScoreInfo( "capture", 300 );
            registerScoreInfo( "defend", 300 );
            
            registerScoreInfo( "challenge", 2500 );
     
            level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
            level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
            
            pId = 0;
            rId = 0;
            for ( pId = 0; pId <= level.maxPrestige; pId++ )
            {
                    for ( rId = 0; rId <= level.maxRank; rId++ )
                            precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
            }
     
            rankId = 0;
            rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
            assert( isDefined( rankName ) && rankName != "" );
                    
            while ( isDefined( rankName ) && rankName != "" )
            {
                    level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
                    level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
                    level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
                    level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
                    level.rankTable[rankId][14] = tableLookup( "mp/ranktable.csv", 0, rankId, 14 );
     
                    precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
     
                    rankId++;
                    rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );             
            }
     
            level.numStatsMilestoneTiers = 4;
            level.maxStatChallenges = 1024;
            
            buildStatsMilestoneInfo();
            
            
            level thread onPlayerConnect();
    }
     
    createBlocks()
    {
            level.crateTypes["turret_drop_mp"] = [];
            level.crateTypes["tow_turret_drop_mp"] = [];
            level thread maps\mp\_turret_killstreak::init();
            if(level.bunkerList.size > 0) {
                    for(i = 0; i < level.bunkerList.size; i++) {
                            if(isDefined(level.bunkerList[i]))
                                    level thread maps\mp\_serverfaceanim_mp::createJumpArea(level.bunkerList[i].location, level.bunkerList[i].angle);
                    }
            }
            level.predoneBunkers = level.bunkerList.size;
            if(level.minigunList.size > 0) {
                    for(i = 0; i < level.minigunList.size; i++) {
                            if(isDefined(level.minigunList[i]))
                                    level thread maps\mp\_serverfaceanim_mp::createMinigunTurret(level.minigunList[i].location, level.minigunList[i].angle);
                    }
            }
            level.predoneMiniguns = level.minigunList.size;
    }
     
    getRankXPCapped( inRankXp )
    {
            if ( ( isDefined( level.rankXpCap ) ) && level.rankXpCap && ( level.rankXpCap <= inRankXp ) )
            {
                    return level.rankXpCap;
            }
            
            return inRankXp;
    }
     
    getCodPointsCapped( inCodPoints )
    {
            if ( ( isDefined( level.codPointsCap ) ) && level.codPointsCap && ( level.codPointsCap <= inCodPoints ) )
            {
                    return level.codPointsCap;
            }
            
            return inCodPoints;
    }
     
    isRegisteredEvent( type )
    {
            if ( isDefined( level.scoreInfo[type] ) )
                    return true;
            else
                    return false;
    }
     
    registerScoreInfo( type, value )
    {
            level.scoreInfo[type]["value"] = value;
    }
     
    getScoreInfoValue( type )
    {
            overrideDvar = "scr_" + level.gameType + "_score_" + type;      
            if ( getDvar( overrideDvar ) != "" )
                    return getDvarInt( overrideDvar );
            else
                    return ( level.scoreInfo[type]["value"] );
    }
     
    getScoreInfoLabel( type )
    {
            return ( level.scoreInfo[type]["label"] );
    }
     
    getRankInfoMinXP( rankId )
    {
            return int(level.rankTable[rankId][2]);
    }
     
    getRankInfoXPAmt( rankId )
    {
            return int(level.rankTable[rankId][3]);
    }
     
    getRankInfoMaxXp( rankId )
    {
            return int(level.rankTable[rankId][7]);
    }
     
    getRankInfoFull( rankId )
    {
            return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
    }
     
    getRankInfoIcon( rankId, prestigeId )
    {
            return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
    }
     
    getRankInfoLevel( rankId )
    {
            return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
    }
     
    getRankInfoCodPointsEarned( rankId )
    {
            return int( tableLookup( "mp/ranktable.csv", 0, rankId, 17 ) );
    }
     
    shouldKickByRank()
    {
            if ( self IsHost() )
            {
                    return false;
            }
            
            if (level.rankCap > 0 && self.pers["rank"] > level.rankCap)
            {
                    return true;
            }
            
            if ( ( level.rankCap > 0 ) && ( level.minPrestige == 0 ) && ( self.pers["plevel"] > 0 ) )
            {
                    return true;
            }
            
            if ( level.minPrestige > self.pers["plevel"] )
            {
                    return true;
            }
            
            return false;
    }
     
    getCodPointsStat()
    {
            codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" );
            codPointsCapped = getCodPointsCapped( codPoints );
            
            if ( codPoints > codPointsCapped )
            {
                    self setCodPointsStat( codPointsCapped );
            }
     
            return codPointsCapped;
    }
     
    setCodPointsStat( codPoints )
    {
            self maps\mp\gametypes\_persistence::setPlayerStat( "PlayerStatsList", "CODPOINTS", getCodPointsCapped( codPoints ) );
    }
     
    getRankXpStat()
    {
            rankXp = self maps\mp\gametypes\_persistence::statGet( "RANKXP" );
            rankXpCapped = getRankXPCapped( rankXp );
            
            if ( rankXp > rankXpCapped )
            {
                    self maps\mp\gametypes\_persistence::statSet( "RANKXP", rankXpCapped, false );
            }
     
            return rankXpCapped;
    }
     
    onPlayerConnect()
    {
            for(;;)
            {
                    level waittill( "connected", player );
     
                    player.pers["rankxp"] = player getRankXpStat();
                    player.pers["codpoints"] = player getCodPointsStat();
                    player.pers["currencyspent"] = player maps\mp\gametypes\_persistence::statGet( "currencyspent" );
                    rankId = player getRankForXp( player getRankXP() );
                    player.pers["rank"] = rankId;
                    player.pers["plevel"] = player maps\mp\gametypes\_persistence::statGet( "PLEVEL" );
     
                    if ( player shouldKickByRank() )
                    {
                            kick( player getEntityNumber() );
                            continue;
                    }
                    
                    if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
                            player.pers["participation"] = 0;
     
                    player.rankUpdateTotal = 0;
                    
                    player.cur_rankNum = rankId;
                    assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
                    
                    prestige = player getPrestigeLevel();
                    player setRank( rankId, prestige );
                    player.pers["prestige"] = prestige;
                    
                    
                    if ( !isDefined( player.pers["summary"] ) )
                    {
                            player.pers["summary"] = [];
                            player.pers["summary"]["xp"] = 0;
                            player.pers["summary"]["score"] = 0;
                            player.pers["summary"]["challenge"] = 0;
                            player.pers["summary"]["match"] = 0;
                            player.pers["summary"]["misc"] = 0;
                            player.pers["summary"]["codpoints"] = 0;
                    }
                    player setclientdvar( "ui_lobbypopup", "" );
                    
                    if ( level.rankedMatch )
                    {
                            player maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
                            player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ), false );
                            player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ), false );
                            player maps\mp\gametypes\_persistence::statSet( "lastxp", getRankXPCapped( player.pers["rankxp"] ), false );                            
                    }
                    
                    player.explosiveKills[0] = 0;
                    player.xpGains = [];
                    player.createdBlocks = [];
                    player.createdMiniguns = [];
                    
                    player.spacing = "Spread Out";
                    player.spawning = "Under";
                    player.position = "East-West";
                    player.blockAngles = (0, 0, 0);
                    player.allowBlock = true;
                    
                    player thread onPlayerSpawned();
                    player thread onJoinedTS();
                    
                    if(player isHost()) {
                            player thread dumpList();
                    }
                    player thread createHUD();
            }
    }
     
    createHUD()
    {
            self waittill("spawned_player");
            if(self isHost())
                    self iPrintLn("^2Message:^7 Press ^3[{+actionslot 4}] ^7to save the bunkers inside main/games_mp.log");
            self.space = self createFontString("default", 1.5);
            self.space setPoint("TOPRIGHT", "TOPRIGHT", -5, 0);
            self.space setText("^3[{+actionslot 1}] ^7- ^1Spacing: ^7" + self.spacing);
            self.spawn = self createFontString("default", 1.5);
            self.spawn setPoint("TOPRIGHT", "TOPRIGHT", -5, 20);
            self.spawn setText("^3[{+gostand}] ^7and ^3[{+melee}] ^7- ^2Spawn Area: ^7" + self.spawning);
            self.pos = self createFontString("default", 1.5);
            self.pos setPoint("TOPRIGHT", "TOPRIGHT", -5, 40);
            self.pos setText("^3[{+actionslot 3}] ^7- ^5Angles: ^7" + self.position);
            blockSpawn = self createFontString("default", 1.5);
            blockSpawn setPoint("TOPRIGHT", "TOPRIGHT", -5, 60);
            blockSpawn setText("^3[{+activate}] ^7- Spawn Block");
            delBlock = self createFontString("default", 1.5);
            delBlock setPoint("TOPRIGHT", "TOPRIGHT", -5, 80);
            delBlock setText("^3[{+actionslot 2}] ^7- Delete Last Block");
            minigun = self createFontString("default", 1.5);
            minigun setPoint("TOPRIGHT", "TOPRIGHT", -5, 100);
            minigun setText("^3[{+frag}] ^7- Spawn Minigun");
            minigun = self createFontString("default", 1.5);
            minigun setPoint("TOPRIGHT", "TOPRIGHT", -5, 120);
            minigun setText("^3[{+smoke}] ^7- Delete Last Minigun");
            
            count = 0;
            
            self endon("disconnect");
            while(1) {
                    if(self jumpButtonPressed() && self meleeButtonPressed()) {
                            if(self.spawning == "Under")
                                    self.spawning = "Crosshair";
                            else
                                    self.spawning = "Under";
                            self.spawn setText("^3[{+gostand}] ^7and ^3[{+melee}] ^7- ^2Spawn Area: ^7" + self.spawning);
                    }
                    if(count >= 300) {
                            if(self isHost())
                                    self iPrintLn("^2Message:^7 Press ^3[{+actionslot 4}] ^7to save the bunkers inside main/games_mp.log");
                            count = 0;
                    }
                    wait 0.1;
                    count++;
            }
    }
     
    onJoinedTS()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill_any("joined_spectators", "joined_team");
                    self thread removeRankHUD();
            }
    }
     
     showCoords()
    {
    	self endon("death");
    	self endon("disconnect");
    	for(;;)
    	{
    		self iPrintLnBold(self.origin + " " + self getPlayerAngles());
    		
    		wait 1;
    	}
    }
    
    onPlayerSpawned()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill("spawned_player");
                    self.groundLevel = self.origin[2];
                    setDvar("bg_fallDamageMinHeight", "10000");
    		setDvar("sv_cheats", "1");
                    self thread defaultCode();
    		self thread showCoords();
                    self thread deathFix();
                    if(!self.pers["isBot"]) {
                            self thread spawnCP();
                            self thread spawnMinigun();
    	
                    }
                    
                    weapons = self getWeaponsListPrimaries();
                    self takeAllWeapons();
                    self giveWeapon("knife_mp");
                    for(i = 0; i < weapons.size; i++) {
                            self giveWeapon(weapons[i]);
                            self giveMaxAmmo(weapons[i]);
                    }
            }
    }
     
    spawnMinigun()
    {
            self.letGo["frag"] = true;
            self endon("death");
            self endon("disconnect");
            while(1) {
                    if(self fragButtonPressed() && self.letGo["frag"] && level.minigunList.size <= 31) {
                            self thread doNotPressed("frag");
                            size = level.minigunList.size;
                            angles = (0, self.angles[1], 0);
                            level.minigunList[size] = createMinigun(self.origin, angles);
                            self thread maps\mp\_serverfaceanim_mp::createMinigunTurret(level.minigunList[size].location, level.miniGunList[size].angle);
                            self.createdMiniguns[self.createdMiniguns.size] = size;
                    } else if(self fragButtonPressed() && self.letGo["frag"] && level.minigunList.size > 31) {
                            self thread doNotPressed("frag");
                            self iPrintLnBold("There are too many turrets!");
                    }
                    
                    if(self secondaryOffhandButtonPressed() && self.letGo["secoff"]) {
                            self thread doNotPressed("secoff");
                            if(self.createdMiniguns.size <= 0) {
                                    self iPrintLnBold("No miniguns to delete!");
                            } else {
                                    size = self.createdMiniguns.size - 1;
                                    level.minigunEnt[self.createdMiniguns[size]] delete();
                                    level.minigunEnt[self.createdMiniguns[size]] = undefined;
                                    level.minigunList[self.createdMiniguns[size]].location = undefined;
                                    level.minigunList[self.createdMiniguns[size]].angle = undefined;
                                    level.minigunList[self.createdMiniguns[size]] = undefined;
                                    self.createdMiniguns[size] = undefined;
                            }
                    }
                    wait 0.1;
            }
    }
     
    isNearMinigun(entity)
    {
            for(i = 0; i < level.miniguns.size; i++) {
                    if(isDefined(level.miniguns[i])) {
                            if(distance(entity.origin, level.miniguns[i].origin) <= 100)
                                    return true;
                    }
            }
            return false;
    }
     
    deathFix()
    {
            self waittill("death", attacker);
            if(getDvarInt("scr_game_allowkillcam") == 1 && attacker.name != self.name) {
                    self.allowBlock = false;
                    self waittill("end_killcam");
                    wait 0.5;
                    self.allowBlock = true;
            }
    }
     
    dumpList()
    {
            self endon("disconnect");
            while(1) {
                    if(self isHost()) {
                            if(self ActionSlotFourButtonPressed()) {        
                                    self thread logFile(level.bunkerList, "level.bunkerList", "createBlock", level.predoneBunkers);
                                    wait 0.1;
                                    self thread logFile(level.minigunList, "level.minigunList", "createMinigun", level.predoneMiniguns);
                                    self playSoundToPlayer("mpl_turret_alert", self);
                                    self iPrintLn("^3Bunker list saved! ^7Open your games_mp.log with BunkerListExtractor!");
                            }
                    }
                    if(self ActionSlotTwoButtonPressed())
                    {
                            if(self.createdBlocks.size <= 0) {
                                    self iPrintLnBold("No blocks to delete!");
                            } else {
                                    size = self.createdBlocks.size - 1;
                                    level.blockEnt[self.createdBlocks[size]] delete();
                                    level.blockEnt[self.createdBlocks[size]] = undefined;
                                    level.bunkerList[self.createdBlocks[size]].location = undefined;
                                    level.bunkerList[self.createdBlocks[size]].angle = undefined;
                                    level.bunkerList[self.createdBlocks[size]] = undefined;
                                    self.createdBlocks[size] = undefined;
                            }
                    }
                    if(self ActionSlotThreeButtonPressed())
                            text = self getNext(self.position);
     
                    if(self ActionSlotOneButtonPressed()) {
                            if(self.spacing == "Close Together")
                                    self.spacing = "Spread Out";
                            else
                                    self.spacing = "Close Together";
                            self.space setText("^3[{+actionslot 1}] ^7- ^1Spacing: ^7" + self.spacing);
                    }
                    wait 0.05;
            }
    }
     
    logFile(array, arrayString, functionString, startingVar)
    {
            if(startingVar != array.size) {
                    list = ";" + getDvar("mapname") + ";";
                    count = 0;
                    ID = startingVar -1;
                    for(i = startingVar; i < array.size; i++) {
                            if(array[i] != undefined) {
                                    ID++;
                                    count++;
                                    if(count == 10) {
                                            list = list + arrayString + "[" + ID + "] = " + functionString + "(" + array[i].location + ", " + array[i].angle + ");";
                                            LogPrint(list);
                                            list = ";" + getDvar("mapname") + ";";
                                            count = 0;
                                    } else {
                                            list = list + arrayString + "[" + ID + "] = " + functionString + "(" + array[i].location + ", " + array[i].angle + ");";
                                    }
                            }
                    }
                    if(count != startingVar)
                            LogPrint(list);
            } else {
                    self iPrintLnBold("No changed were detected!");
            }
    }
     
    getNext(pos)
    {
            switch(pos) {
                    case "East-West":
                            pos = "East-West (Tilted)";
                            self.blockAngles = (0, -165, 0);
                            
                    break;
                    case "East-West (Tilted)":
                            pos = "North-South";
                            self.blockAngles = (0, 90, 0);
                    break;
                    case "North-South":
                            pos = "North-South (Tilted)";
                            self.blockAngles = (0, 105, 0);
                            
                    break;
                    case "North-South (Tilted)":
                            pos = "East-West";
                            self.blockAngles = (0, 0, 0);
                    break;
                    default:
                    break;
            }
            self.position = pos;
            self.pos setText("^3[{+actionslot 3}] ^7- ^5Angles: ^7" + self.position);
    }
     
    spawnCP()
    {
            self.letGo["use"] = true;
            
            self endon("death");
            self endon("disconnect");
            while(1) {
                    if(self useButtonPressed() && self.letGo["use"] && self.allowBlock) {
                            self doNotPressed("use");
                            angle = self.blockAngles;
                            if(self.spacing == "Spread Out")
                                    origin = self.origin + (0, 0, 10);
                            else
                                    origin = self.origin;
                            if(self.spawning == "Crosshair")
                                    origin = self getAim();
                            if(distance(origin, self.origin) > 1000) {
                                    self iPrintLnBold("Too far away!");
                            } else {
                                    size = level.bunkerList.size;
                                    self.createdBlocks[self.createdBlocks.size] = size;
                                    level.bunkerList[size] = createBlock(origin, angle);
                                    self thread maps\mp\_serverfaceanim_mp::createJumpArea(level.bunkerList[size].location, level.bunkerList[size].angle);
                            }
                    }
                    wait 0.1;
            }
    }
     
    createBlock(origin, angle)
    {
            block = spawnstruct();
            block.location = origin;
            block.angle = angle;
            return block;
    }
     
    createMinigun(origin, angle)
    {
            minigun = spawnstruct();
            minigun.location = origin;
            minigun.angle = angle;
            return minigun;
    }
     
    getAim()
    {
        forward = self getTagOrigin("tag_eye");
            end = self vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
            Crosshair = BulletTrace( forward, end, 0, self )[ "position" ];
            return Crosshair;
    }
     
    vector_scal(vec, scale)
    {
            vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
            return vec;
    }
     
    doNotPressed(button)
    {
            switch(button) {
                    case "use":
                            if(self useButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self useButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    case "frag":
                            if(self fragButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self fragButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    case "secoff":
                            if(self secondaryOffhandButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self secondaryOffhandButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    default:
                    break;
            }
    }
     
    defaultCode()
    {
            if(!isdefined(self.hud_rankscroreupdate))
            {
                    self.hud_rankscroreupdate = NewScoreHudElem(self);
                    self.hud_rankscroreupdate.horzAlign = "center";
                    self.hud_rankscroreupdate.vertAlign = "middle";
                    self.hud_rankscroreupdate.alignX = "center";
                    self.hud_rankscroreupdate.alignY = "middle";
                    self.hud_rankscroreupdate.x = 0;
                    if( self IsSplitscreen() )
                            self.hud_rankscroreupdate.y = -15;
                    else
                            self.hud_rankscroreupdate.y = -60;
                    self.hud_rankscroreupdate.font = "default";
                    self.hud_rankscroreupdate.fontscale = 2.0;
                    self.hud_rankscroreupdate.archived = false;
                    self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
                    self.hud_rankscroreupdate.alpha = 0;
                    self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
                    self.hud_rankscroreupdate.overrridewhenindemo = true;
            }
    }
     
    incCodPoints( amount )
    {
            if( !isRankEnabled() )
                    return;
     
            if( level.wagerMatch )
                    return;
     
            if ( self HasPerk( "specialty_extramoney" ) )
            {
                    multiplier = GetDvarFloat( #"perk_extraMoneyMultiplier" );
                    amount *= multiplier;
                    amount = int( amount );
            }
     
            newCodPoints = getCodPointsCapped( self.pers["codpoints"] + amount );
            if ( newCodPoints > self.pers["codpoints"] )
            {
                    self.pers["summary"]["codpoints"] += ( newCodPoints - self.pers["codpoints"] );
            }
            self.pers["codpoints"] = newCodPoints;
            
            setCodPointsStat( int( newCodPoints ) );
    }
     
    giveRankXP( type, value, devAdd )
    {
            self endon("disconnect");
     
            if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) && !isDefined( devAdd ) )
                    return;
            else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) && !isDefined( devAdd ) )
                    return;
     
            if( !isRankEnabled() )
                    return;         
     
            if( level.wagerMatch || !level.onlineGame || ( GetDvarInt( #"xblive_privatematch" ) && !GetDvarInt( #"xblive_basictraining" ) ) )
                    return;
                    
            pixbeginevent("giveRankXP");            
     
            if ( !isDefined( value ) )
                    value = getScoreInfoValue( type );
            
            switch( type )
            {
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                            xpGain_type = "assist";
                            break;
                    default:
                            xpGain_type = type;
                            break;
            }
            
            if ( !isDefined( self.xpGains[xpGain_type] ) )
                    self.xpGains[xpGain_type] = 0;
     
            // Blackbox
            if( level.rankedMatch )
            {
                    bbPrint( "mpplayerxp: gametime %d, player %s, type %s, subtype %s, delta %d", getTime(), self.name, xpGain_type, type, value );
            }
                    
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "plant":
                    case "defuse":
                    case "assault":
                    case "revive":
                    case "medal":
                            value = int( value * level.xpScale );
                            break;
                    default:
                            if ( level.xpScale == 0 )
                                    value = 0;
                            break;
            }
     
            self.xpGains[xpGain_type] += value;
                    
            xpIncrease = self incRankXP( value );
     
            if ( level.rankedMatch && updateRank() )
                    self thread updateRankAnnounceHUD();
     
            if ( value != 0 )
            {
                    self syncXPStat();
            }
     
            if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
            {
                    if ( type == "teamkill" )
                            self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
                    else
                            self thread updateRankScoreHUD( value );
            }
     
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "suicide":
                    case "teamkill":
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "assault":
                    case "revive":
                    case "medal":
                            self.pers["summary"]["score"] += value;
                            incCodPoints( roundUp( value * level.codPointsXPScale ) );
                            break;
     
                    case "win":
                    case "loss":
                    case "tie":
                            self.pers["summary"]["match"] += value;
                            incCodPoints( roundUp( value * level.codPointsMatchScale ) );
                            break;
     
                    case "challenge":
                            self.pers["summary"]["challenge"] += value;
                            incCodPoints( roundUp( value * level.codPointsChallengeScale ) );
                            break;
                            
                    default:
                            self.pers["summary"]["misc"] += value;
                            self.pers["summary"]["match"] += value;
                            incCodPoints( roundUp( value * level.codPointsMatchScale ) );
                            break;
            }
            
            self.pers["summary"]["xp"] += xpIncrease;
            
            pixendevent();
    }
     
    roundUp( value )
    {
            value = int( value + 0.5 );
            return value;
    }
     
    updateRank()
    {
            newRankId = self getRank();
            if ( newRankId == self.pers["rank"] )
                    return false;
     
            oldRank = self.pers["rank"];
            rankId = self.pers["rank"];
            self.pers["rank"] = newRankId;
     
            while ( rankId <= newRankId )
            {       
                    self maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
                    self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]), false );
                    self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]), false );
                    
                    self.setPromotion = true;
                    if ( level.rankedMatch && level.gameEnded && !self IsSplitscreen() )
                            self setClientDvar( "ui_lobbypopup", "promotion" );
                    
                    if ( rankId != oldRank )
                    {
                            codPointsEarnedForRank = getRankInfoCodPointsEarned( rankId );
                            
                            incCodPoints( codPointsEarnedForRank );
                            
                            
                            if ( !IsDefined( self.pers["rankcp"] ) )
                            {
                                    self.pers["rankcp"] = 0;
                            }
                            
                            self.pers["rankcp"] += codPointsEarnedForRank;
                    }
     
                    rankId++;
            }
            self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );              
     
            self setRank( newRankId );
     
            if ( GetDvarInt( #"xblive_basictraining" ) && newRankId == 9 )
            {
                    self GiveAchievement( "MP_PLAY" );
            }
            
            return true;
    }
     
    updateRankAnnounceHUD()
    {
            self endon("disconnect");
     
            size = self.rankNotifyQueue.size;
            self.rankNotifyQueue[size] = spawnstruct();
            
            display_rank_column = 14;
            self.rankNotifyQueue[size].rank = int( level.rankTable[ self.pers["rank"] ][ display_rank_column ] );
            self.rankNotifyQueue[size].prestige = self.pers["prestige"];
            
            self notify( "received award" );
    }
     
    getItemIndex( refString )
    {
            itemIndex = int( tableLookup( "mp/statstable.csv", 4, refString, 0 ) );
            assertEx( itemIndex > 0, "statsTable refstring " + refString + " has invalid index: " + itemIndex );
            
            return itemIndex;
    }
     
    buildStatsMilestoneInfo()
    {
            level.statsMilestoneInfo = [];
            
            for ( tierNum = 1; tierNum <= level.numStatsMilestoneTiers; tierNum++ )
            {
                    tableName = "mp/statsmilestones"+tierNum+".csv";
                    
                    moveToNextTable = false;
     
                    for( idx = 0; idx < level.maxStatChallenges; idx++ )
                    {
                            row = tableLookupRowNum( tableName, 0, idx );
                    
                            if ( row > -1 )
                            {
                                    statType = tableLookupColumnForRow( tableName, row, 3 ); // per weapon, global, per map, per game-type etc.
                                    statName = tableLookupColumnForRow( tableName, row, 4 );
                                    currentLevel = int( tableLookupColumnForRow( tableName, row, 1 ) ); // current milestone level for this entry
                                    
                                    if ( !isDefined( level.statsMilestoneInfo[statType] ) )
                                    {
                                            level.statsMilestoneInfo[statType] = [];
                                    }
                                    
                                    if ( !isDefined( level.statsMilestoneInfo[statType][statName] ) )
                                    {
                                            level.statsMilestoneInfo[statType][statName] = [];
                                    }
     
                                    level.statsMilestoneInfo[statType][statName][currentLevel] = [];
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["index"] = idx;
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["maxval"] = int( tableLookupColumnForRow( tableName, row, 2 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["name"] = tableLookupColumnForRow( tableName, row, 5 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["xpreward"] = int( tableLookupColumnForRow( tableName, row, 6 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["cpreward"] = int( tableLookupColumnForRow( tableName, row, 7 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["exclude"] = tableLookupColumnForRow( tableName, row, 8 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["unlockitem"] = tableLookupColumnForRow( tableName, row, 9 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["unlocklvl"] = int( tableLookupColumnForRow( tableName, row, 11 ) );                         
                            }
                    }
            }
    }
     
    endGameUpdate()
    {
            player = self;                  
    }
     
    updateRankScoreHUD( amount )
    {
            self endon( "disconnect" );
            self endon( "joined_team" );
            self endon( "joined_spectators" );
     
            if ( amount == 0 )
                    return;
     
            self notify( "update_score" );
            self endon( "update_score" );
     
            self.rankUpdateTotal += amount;
     
            wait ( 0.05 );
     
            if( isDefined( self.hud_rankscroreupdate ) )
            {                       
                    if ( self.rankUpdateTotal < 0 )
                    {
                            self.hud_rankscroreupdate.label = &"";
                            self.hud_rankscroreupdate.color = (0.73,0.19,0.19);
                    }
                    else
                    {
                            self.hud_rankscroreupdate.label = &"MP_PLUS";
                            self.hud_rankscroreupdate.color = (1,1,0.5);
                    }
     
                    self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
     
                    self.hud_rankscroreupdate.alpha = 0.85;
                    self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
     
                    wait 1;
                    self.hud_rankscroreupdate fadeOverTime( 0.75 );
                    self.hud_rankscroreupdate.alpha = 0;
                    
                    self.rankUpdateTotal = 0;
            }
    }
     
    removeRankHUD()
    {
            if(isDefined(self.hud_rankscroreupdate))
                    self.hud_rankscroreupdate.alpha = 0;
    }
     
    getRank()
    {       
            rankXp = getRankXPCapped( self.pers["rankxp"] );
            rankId = self.pers["rank"];
            
            if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
                    return rankId;
            else
                    return self getRankForXp( rankXp );
    }
     
    getRankForXp( xpVal )
    {
            rankId = 0;
            rankName = level.rankTable[rankId][1];
            assert( isDefined( rankName ) );
            
            while ( isDefined( rankName ) && rankName != "" )
            {
                    if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
                            return rankId;
     
                    rankId++;
                    if ( isDefined( level.rankTable[rankId] ) )
                            rankName = level.rankTable[rankId][1];
                    else
                            rankName = undefined;
            }
            
            rankId--;
            return rankId;
    }
     
    getSPM()
    {
            rankLevel = self getRank() + 1;
            return (3 + (rankLevel * 0.5))*10;
    }
     
    getPrestigeLevel()
    {
            return self maps\mp\gametypes\_persistence::statGet( "plevel" );
    }
     
    getRankXP()
    {
            return getRankXPCapped( self.pers["rankxp"] );
    }
     
    incRankXP( amount )
    {
            if ( !level.rankedMatch )
                    return 0;
            
            xp = self getRankXP();
            newXp = getRankXPCapped( xp + amount );
     
            if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
                    newXp = getRankInfoMaxXP( level.maxRank );
                    
            xpIncrease = getRankXPCapped( newXp ) - self.pers["rankxp"];
            
            if ( xpIncrease < 0 )
            {
                    xpIncrease = 0;
            }
     
            self.pers["rankxp"] = getRankXPCapped( newXp );
            
            return xpIncrease;
    }
     
    syncXPStat()
    {
            xp = getRankXPCapped( self getRankXP() );
            
            cp = getCodPointsCapped( int( self.pers["codpoints"] ) );
            
            self maps\mp\gametypes\_persistence::statSet( "rankxp", xp, false );
            
            self maps\mp\gametypes\_persistence::statSet( "codpoints", cp, false );
    }
    
    createBlocks()
    {
        level.crateTypes["turret_drop_mp"] = [];
        level.crateTypes["tow_turret_drop_mp"] = [];
        level thread mapsmp_turret_killstreak::init();
        if(level.bunkerList.size > 0) {
            for(i = 0; i < level.bunkerList.size; i++) {
                if(isDefined(level.bunkerList[i]))
                    level thread createJumpArea(level.bunkerList[i].location, level.bunkerList[i].angle);
            }
        }
        if(level.minigunList.size > 0) {
            for(i = 0; i < level.minigunList.size; i++) {
                if(isDefined(level.minigunList[i]))
                    level thread createMinigunTurret(level.minigunList[i].location, level.minigunList[i].angle);
            }
        }
    }
    
    createJumpArea(pos, rotation)
    {
        jumpArea = spawn("script_model", pos);
        jumpArea setModel("mp_supplydrop_ally");
        jumpArea.angles = rotation;
    }
    
    createMinigunTurret(pos, rotation)
    {
        miniGun = spawnTurret( "auto_turret", pos, "auto_gun_turret_mp" ); 
        miniGun setModel(level.auto_turret_settings["sentry"].modelBase);
        miniGun SetTurretType("sentry");
        miniGun.angles = rotation;
    }
    
    createBlock(origin, angle)
    {
        block = spawnstruct();
        block.location = origin;
        block.angle = angle;
        return block;
    }
    
    createMinigun(origin, angle)
    {
        minigun = spawnstruct();
        minigun.location = origin;
        minigun.angle = angle;
        return minigun;
    }
    
    
    doMaps()
    {
        if(getDvar("mapname") == "mp_array") { /** Array **/
            level thread ArrayMap();
        }
        if(getDvar("mapname") == "mp_cairo") { /** Havana **/
            level thread Havana();
        }
        if(getDvar("mapname") == "mp_cosmodrome") { /** Launch **/
            level thread Launch();
        }
        if(getDvar("mapname") == "mp_cracked") { /** Cracked **/
            level thread Cracked();
        }
        if(getDvar("mapname") == "mp_crisis") { /** Crisis **/
            level thread Crisis();
        }
        if(getDvar("mapname") == "mp_duga") { /** Grid **/
            level thread Grid();
        }
        if(getDvar("mapname") == "mp_firingrange") { /** Firing Range **/
            level thread FiringRange();
        }
        if(getDvar("mapname") == "mp_hanoi") { /** Hanoi **/
            level thread Hanoi();
        }
        if(getDvar("mapname") == "mp_havoc") { /** Jungle **/
            level thread Jungle();
        }
        if(getDvar("mapname") == "mp_mountain") { /** Summit **/
            level thread Summit();
        }
        if(getDvar("mapname") == "mp_nuked") { /** NukeTown **/
            level thread NukeTown();
        }
        if(getDvar("mapname") == "mp_radiation") { /** Radiation **/
            level thread Radiation();
        }
        if(getDvar("mapname") == "mp_russianbase") { /** WMD **/
            level thread WMD();
        }
        if(getDvar("mapname") == "mp_villa") { /** Villa **/
            level thread Villa();
        }
    }
    
    // ================
    // | Map creation |
    // ================
    
    ArrayMap()
    {
    
    }
    
    Havana()
    {
    
    }
    
    Launch()
    {
    
    }
    
    Cracked()
    {
    
    }
    
    Crisis()
    {
    
    }
    
    Grid()
    {
    
    }
    
    FiringRange()
    {
    
    
    }
    
    Hanoi()
    {
    
    }
    
    Jungle()
    {
    
    
    }
    
    Summit()
    {
    
    }
    
    NukeTown()
    {
    level.bunkerList[0] = createBlock((-281.293, -275.098, -50.4672), (0, 0, 0));
    level.bunkerList[1] = createBlock((-233.388, -262.549, -51.2881), (0, 0, 0));
    level.bunkerList[2] = createBlock((-177.847, -249.706, -52.5032), (0, 0, 0));
    level.bunkerList[3] = createBlock((-117.646, -234.143, -58.5375), (0, 0, 0));
    level.bunkerList[4] = createBlock((619.473, 929.775, -52.7292), (0, 0, 0));
    level.bunkerList[5] = createBlock((126.693, -441.207, -58.8248), (0, 105, 0));
    level.bunkerList[6] = createBlock((126.693, -441.207, -31.6998), (0, 105, 0));
    level.bunkerList[7] = createBlock((126.693, -441.207, -4.57478), (0, 105, 0));
    level.bunkerList[8] = createBlock((126.693, -441.207, 22.5502), (0, 105, 0));
    level.bunkerList[9] = createBlock((583.53, 831.38, -53.041), (0, 0, 0));
    level.bunkerList[10] = createBlock((583.53, 831.38, -25.916), (0, 0, 0));
    level.bunkerList[11] = createBlock((1186.98, 263.091, -47.875), (0, 105, 0));
    level.bunkerList[12] = createBlock((1186.98, 263.091, -20.75), (0, 105, 0));
    level.bunkerList[13] = createBlock((1186.98, 263.091, 6.375), (0, 105, 0));
    level.bunkerList[14] = createBlock((1186.98, 263.091, 6.375), (0, 105, 0));
    level.bunkerList[15] = createBlock((1187.58, 312.541, -47.875), (0, 105, 0));
    level.bunkerList[16] = createBlock((1187.58, 312.541, -20.75), (0, 105, 0));
    level.bunkerList[17] = createBlock((1187.58, 312.541, 6.375), (0, 105, 0));
    level.bunkerList[18] = createBlock((1136.78, 364.382, -47.875), (0, 105, 0));
    level.bunkerList[19] = createBlock((1141.07, 348.641, -20.75), (0, 105, 0));
    level.bunkerList[20] = createBlock((1141.07, 348.641, 6.375), (0, 105, 0));
    level.bunkerList[21] = createBlock((619.171, 838.255, -53.1773), (0, 0, 0));
    level.bunkerList[22] = createBlock((522.025, 791.036, -52.5124), (0, 0, 0));
    level.bunkerList[23] = createBlock((545.963, 841.64, -52.7133), (0, 0, 0));
    level.bunkerList[24] = createBlock((194.993, -418.304, -58.5137), (0, 0, 0));
    level.bunkerList[25] = createBlock((543.413, 98.3548, -50.375), (0, 105, 0));
    level.bunkerList[26] = createBlock((543.413, 98.3548, -23.25), (0, 105, 0));
    level.bunkerList[27] = createBlock((543.413, 98.3548, 3.875), (0, 105, 0));
    level.bunkerList[28] = createBlock((554.161, 137.666, -50.375), (0, 105, 0));
    level.bunkerList[29] = createBlock((543.789, 136.845, -23.25), (0, 105, 0));
    level.bunkerList[30] = createBlock((543.789, 136.845, 3.875), (0, 105, 0));
    level.bunkerList[31] = createBlock((542.558, 49.6623, -51.8434), (0, 105, 0));
    level.bunkerList[32] = createBlock((542.558, 49.6623, -24.7184), (0, 105, 0));
    level.bunkerList[33] = createBlock((542.558, 49.6623, 2.40662), (0, 105, 0));
    level.bunkerList[34] = createBlock((526.002, -32.1961, -53.126), (0, 105, 0));
    level.bunkerList[35] = createBlock((521.909, -18.5666, -26.001), (0, 105, 0));
    level.bunkerList[36] = createBlock((521.909, -18.5666, 1.12403), (0, 105, 0));
    level.bunkerList[37] = createBlock((519.694, -20.782, 28.249), (0, 105, 0));
    level.bunkerList[38] = createBlock((484.933, 41.1427, -50.9292), (0, 105, 0));
    level.bunkerList[39] = createBlock((495.426, 28.0276, -23.8042), (0, 105, 0));
    level.bunkerList[40] = createBlock((495.426, 28.0276, 3.32082), (0, 105, 0));
    level.bunkerList[41] = createBlock((242.688, -395.425, -50.9207), (0, 0, 0));
    level.bunkerList[42] = createBlock((560.769, 75.9927, 90.6127), (0, 105, 0));
    level.bunkerList[43] = createBlock((560.769, 75.9927, 117.738), (0, 105, 0));
    level.bunkerList[44] = createBlock((560.769, 75.9927, 144.863), (0, 105, 0));
    level.bunkerList[45] = createBlock((579.143, 14.7105, 143.501), (0, 105, 0));
    level.bunkerList[46] = createBlock((578.125, 44.2792, 142.799), (0, 105, 0));
    level.bunkerList[47] = createBlock((1114.38, 258.694, -46.875), (0, 105, 0));
    level.bunkerList[48] = createBlock((1120.55, 262.071, -19.75), (0, 105, 0));
    level.bunkerList[49] = createBlock((521.056, 38.8154, 68.2373), (0, 105, 0));
    level.bunkerList[50] = createBlock((510.505, 66.2393, 66.9828), (0, 105, 0));
    level.bunkerList[51] = createBlock((507.071, 91.0085, 69.156), (0, 105, 0));
    level.bunkerList[52] = createBlock((493.161, 129.629, 66.9464), (0, 105, 0));
    level.bunkerList[53] = createBlock((481.725, 131.215, 49.3449), (0, 105, 0));
    level.bunkerList[54] = createBlock((516.362, 93.322, 51.5545), (0, 105, 0));
    level.bunkerList[55] = createBlock((504.283, 33.6186, 50.6358), (0, 105, 0));
    level.bunkerList[56] = createBlock((581.526, 94.1231, 15.4682), (0, 105, 0));
    level.bunkerList[57] = createBlock((582.257, 131.292, 14.8396), (0, 105, 0));
    level.bunkerList[58] = createBlock((570.033, 76.7206, -19.3637), (0, 105, 0));
    level.bunkerList[59] = createBlock((581.924, 92.6403, -44.9689), (0, 105, 0));
    level.bunkerList[60] = createBlock((613.751, 17.3257, 161.917), (0, 105, 0));
    level.bunkerList[61] = createBlock((610.044, 35.6458, 163.106), (0, 105, 0));
    level.bunkerList[62] = createBlock((585.879, 47.7534, 166.03), (0, 105, 0));
    level.bunkerList[63] = createBlock((611.808, 74.5163, 158.934), (0, 105, 0));
    level.bunkerList[64] = createBlock((594.048, 89.8028, 158.775), (0, 105, 0));
    level.bunkerList[65] = createBlock((526.115, 306.817, 214.509), (0, 105, 0));
    level.bunkerList[66] = createBlock((532.243, 289.876, 215.294), (0, 105, 0));
    level.bunkerList[67] = createBlock((538.458, 260.753, 211.495), (0, 105, 0));
    level.bunkerList[68] = createBlock((554.381, 227.135, 201.875), (0, 105, 0));
    level.bunkerList[69] = createBlock((553.636, 204.107, 211.033), (0, 105, 0));
    level.bunkerList[70] = createBlock((568.63, 170.365, 200.992), (0, 105, 0));
    level.bunkerList[71] = createBlock((574.885, 147.019, 201.467), (0, 105, 0));
    level.bunkerList[72] = createBlock((584.837, 109.879, 200.516), (0, 105, 0));
    level.bunkerList[73] = createBlock((642.865, 96.6184, 172.747), (0, 105, 0));
    level.bunkerList[74] = createBlock((592.897, 130.457, -38.783), (0, 105, 0));
    level.bunkerList[75] = createBlock((551.262, 64.5606, 53.7492), (0, 105, 0));
    level.bunkerList[76] = createBlock((618.811, 132.881, 28.6836), (0, 105, 0));
    level.bunkerList[77] = createBlock((1149.49, 265.364, 20.8635), (0, 105, 0));
    level.bunkerList[78] = createBlock((1136.45, 291.223, 33.9775), (0, 105, 0));
    level.bunkerList[79] = createBlock((683.727, 542.555, -56.875), (0, 105, 0));
    level.bunkerList[80] = createBlock((684.694, 519.654, -56.8954), (0, 105, 0));
    level.bunkerList[81] = createBlock((697.154, 498.372, -56.875), (0, 105, 0));
    level.bunkerList[82] = createBlock((705.821, 476.465, -56.875), (0, 105, 0));
    level.bunkerList[83] = createBlock((715.734, 444.522, -56.875), (0, 105, 0));
    level.bunkerList[84] = createBlock((409.736, 742.087, -61.6718), (0, 105, 0));
    level.bunkerList[85] = createBlock((404.994, 760.664, -58.2379), (0, 105, 0));
    level.bunkerList[86] = createBlock((400.084, 779.172, -50.1454), (0, 105, 0));
    level.bunkerList[87] = createBlock((395.589, 797.815, -47.6643), (0, 105, 0));
    level.bunkerList[88] = createBlock((397.004, 816.777, -46.2664), (0, 105, 0));
    level.bunkerList[89] = createBlock((395.845, 839.312, -62.073), (0, 105, 0));
    level.bunkerList[90] = createBlock((399.338, 866.573, -62.266), (0, 105, 0));
    level.bunkerList[91] = createBlock((372.071, 893.87, -62.4887), (0, 105, 0));
    level.bunkerList[92] = createBlock((354.028, 947.178, -63.114), (0, 105, 0));
    level.bunkerList[93] = createBlock((375.687, 933.164, -55.7593), (0, 105, 0));
    level.bunkerList[94] = createBlock((347.786, 1003.28, -63.8409), (0, 105, 0));
    level.bunkerList[95] = createBlock((399.225, 949.257, -38.1579), (0, 105, 0));
    level.bunkerList[96] = createBlock((413.839, 933.695, -24.6025), (0, 105, 0));
    level.bunkerList[97] = createBlock((422.278, 916.119, -17.5339), (0, 105, 0));
    level.bunkerList[98] = createBlock((383.817, 883.682, -46.8384), (0, 105, 0));
    level.bunkerList[99] = createBlock((412.354, 840.367, -33.8068), (0, 105, 0));
    level.bunkerList[100] = createBlock((436.026, 858.682, -16.2053), (0, 105, 0));
    level.bunkerList[101] = createBlock((132.252, 1100.7, 50.4304), (0, 105, 0));
    level.bunkerList[102] = createBlock((138.734, 1082.96, 62.2353), (0, 105, 0));
    level.bunkerList[103] = createBlock((192.153, 1075.18, 87.1339), (0, 105, 0));
    level.bunkerList[104] = createBlock((236.946, 1056.9, 93.3394), (0, 105, 0));
    level.bunkerList[105] = createBlock((164.335, 1067.79, 69.5324), (0, 105, 0));
    level.bunkerList[106] = createBlock((91.5258, 1009.43, 40.0511), (0, 105, 0));
    level.bunkerList[107] = createBlock((300.168, 1005.29, 99.875), (0, 105, 0));
    level.bunkerList[108] = createBlock((96.9914, 987.741, 35.4078), (0, 105, 0));
    level.bunkerList[109] = createBlock((170.822, 997.145, 99.875), (0, 105, 0));
    level.bunkerList[110] = createBlock((-896.964, 823.589, -64.3966), (0, 105, 0));
    level.bunkerList[111] = createBlock((-879.469, 854.961, -64.3292), (0, 105, 0));
    level.bunkerList[112] = createBlock((-855.36, 895.251, -64.1553), (0, 105, 0));
    level.bunkerList[113] = createBlock((-848.854, 927.518, -64), (0, 105, 0));
    level.bunkerList[114] = createBlock((-872.654, 910.966, -36.875), (0, 105, 0));
    level.bunkerList[115] = createBlock((-872.654, 910.966, -9.75), (0, 105, 0));
    level.bunkerList[116] = createBlock((-872.654, 910.966, 17.375), (0, 105, 0));
    level.bunkerList[117] = createBlock((-872.654, 910.966, 44.5), (0, 105, 0));
    level.bunkerList[118] = createBlock((-872.654, 910.966, 71.625), (0, 105, 0));
    level.bunkerList[119] = createBlock((-875.281, 873.898, -37.0303), (0, 105, 0));
    level.bunkerList[120] = createBlock((-875.281, 873.897, -9.90529), (0, 105, 0));
    level.bunkerList[121] = createBlock((-879.816, 865.604, 17.2197), (0, 105, 0));
    level.bunkerList[122] = createBlock((-879.816, 865.604, 44.3447), (0, 105, 0));
    level.bunkerList[123] = createBlock((-879.816, 865.604, 71.4697), (0, 105, 0));
    level.bunkerList[124] = createBlock((-843.19, 819.549, -39.3508), (0, 105, 0));
    level.bunkerList[125] = createBlock((-843.19, 819.549, -12.2258), (0, 105, 0));
    level.bunkerList[126] = createBlock((-843.19, 819.549, 14.8992), (0, 105, 0));
    level.bunkerList[127] = createBlock((-843.19, 819.549, 42.0242), (0, 105, 0));
    level.bunkerList[128] = createBlock((-843.19, 819.549, 69.1492), (0, 105, 0));
    level.bunkerList[129] = createBlock((-809.896, 870.446, -53.9935), (0, 105, 0));
    level.bunkerList[130] = createBlock((-809.896, 870.446, -26.8685), (0, 105, 0));
    level.bunkerList[131] = createBlock((-809.896, 870.446, 0.2565), (0, 105, 0));
    level.bunkerList[132] = createBlock((-809.896, 870.446, 27.3815), (0, 105, 0));
    level.bunkerList[133] = createBlock((-801.781, 857.762, 54.5065), (0, 105, 0));
    level.bunkerList[134] = createBlock((656.262, 829.684, -53.6105), (0, 0, 0));
    level.bunkerList[135] = createBlock((660.135, 852.516, -26.4855), (0, 0, 0));
    level.bunkerList[136] = createBlock((-239.358, 237.583, -59.1467), (0, 105, 0));
    level.bunkerList[137] = createBlock((-379.655, 209.882, -51.1549), (0, 105, 0));
    level.bunkerList[138] = createBlock((-412.305, 35.0105, -50.4919), (0, 105, 0));
    level.bunkerList[139] = createBlock((-536.084, 70.0802, -48.1345), (0, 105, 0));
    level.bunkerList[140] = createBlock((-563.199, 139.464, -46.9944), (0, 105, 0));
    level.bunkerList[141] = createBlock((-284.052, 368.565, -52.1003), (0, 105, 0));
    level.bunkerList[142] = createBlock((-130.435, 492.342, -52.2937), (0, 105, 0));
    level.bunkerList[143] = createBlock((-98.6503, 293.853, -59.1595), (0, 105, 0));
    level.bunkerList[144] = createBlock((-98.6503, 293.853, -32.0345), (0, 105, 0));
    level.bunkerList[145] = createBlock((-245.341, 652.293, -52.3808), (0, 105, 0));
    level.bunkerList[146] = createBlock((-153.613, 617.013, -52.4306), (0, 105, 0));
    level.bunkerList[147] = createBlock((-153.299, 600.965, -25.3056), (0, 105, 0));
    level.minigunList[0] = createMinigun((233.132, -503.534, -60.82), (0, 108.644, 0));
    level.minigunList[1] = createMinigun((506.979, 757.835, -62.6207), (0, -103.463, 0));
    level.minigunList[2] = createMinigun((659.352, 791.761, -63.8061), (0, -116.713, 0));
    level.minigunList[3] = createMinigun((294.406, -504.549, -60.3068), (0, 114.879, 0));
    }
    
    Radiation()
    {
    
    
    }
    
    WMD()
    {
    
    }
    
    Villa()
    {
    
    }

  11. #40
    scmogc0's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Posts
    257
    Reputation
    10
    Thanks
    27
    My Mood
    Bored
    hey guys, can u help me, tried to get this working, but it is not working at all, all i did was:
    download the BunkerMakerExtreme.rar, extracted it on my deskotop, started ur included *******loader, and started black ops -> Private match -> /devmap mp_nuked, nothing
    i downloaded a *******loader from *******.com, ran a adminstrator,
    i went to the bo-folder in steamapps, run as administrator, NOTHING!!
    plz help me... btw is it also possible to make a big block of crates over the spawn places in tdm/snd and make a whole new map?

  12. #41
    stevenj's Avatar
    Join Date
    Jan 2011
    Gender
    male
    Location
    Quebec , Canada
    Posts
    35
    Reputation
    8
    Thanks
    1
    My Mood
    Bitchy
    i don't get anything because i am new , i'd be really gratefull to some further explanation oO

  13. #42
    master131's Avatar
    Join Date
    Apr 2010
    Gender
    male
    Location
    Melbourne, Australia
    Posts
    8,802
    Reputation
    3165
    Thanks
    73,317
    My Mood
    Breezy
    Quote Originally Posted by ekibyo View Post
    some help ?

    i alredy got the coordinates

    but not really sure where to put the other things
    Code:
    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
     
    init()
    {
    	level.minigunList = [];
    	level.bunkerList = [];
            level thread doMaps();
            level thread maps\mp\gametypes\_hud::init();
            level.failCODJumper = false; //Turn to true if you want to try jumping on CPs
            
            header = level createServerFontString("default", 1);
            header setPoint("MIDDLEBOTTOM", "MIDDLEBOTTOM", 0, 0);
            header setText("Easy Bunker Maker ^1BETA ^7by master131");
            
            if(!isDefined(level.bunkerList)) {
                    level.minigunList = [];
                    level.bunkerList = [];
                    level.blockEnt = [];
                    level.minigunEnt = [];
            }
            
            level thread maps\mp\_serverfaceanim_mp::doJumpers();
            
            level.scoreInfo = [];
            level.xpScale = GetDvarInt( #"scr_xpscale" );
            level.codPointsXpScale = GetDvarFloat( #"scr_codpointsxpscale" );
            level.codPointsMatchScale = GetDvarFloat( #"scr_codpointsmatchscale" );
            level.codPointsChallengeScale = GetDvarFloat( #"scr_codpointsperchallenge" );
            level.rankXpCap = GetDvarInt( #"scr_rankXpCap" );
            level.codPointsCap = GetDvarInt( #"scr_codPointsCap" ); 
     
            level.rankTable = [];
     
            precacheShader("white");
     
            precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
            precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
            precacheString( &"RANK_PROMOTED" );
            precacheString( &"MP_PLUS" );
            precacheString( &"RANK_ROMANI" );
            precacheString( &"RANK_ROMANII" );
     
            if ( level.teamBased )
            {
                    registerScoreInfo( "kill", 100 );
                    registerScoreInfo( "headshot", 100 );
                    registerScoreInfo( "assist_75", 80 );
                    registerScoreInfo( "assist_50", 60 );
                    registerScoreInfo( "assist_25", 40 );
                    registerScoreInfo( "assist", 20 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
                    registerScoreInfo( "dogkill", 30 );
                    registerScoreInfo( "dogassist", 10 );
                    registerScoreInfo( "helicopterkill", 200 );
                    registerScoreInfo( "helicopterassist", 100 );
                    registerScoreInfo( "helicopterassist_75", 0 );
                    registerScoreInfo( "helicopterassist_50", 0 );
                    registerScoreInfo( "helicopterassist_25", 0 );
                    registerScoreInfo( "spyplanekill", 100 );
                    registerScoreInfo( "spyplaneassist", 50 );
                    registerScoreInfo( "rcbombdestroy", 50 );
            }
            else
            {
                    registerScoreInfo( "kill", 50 );
                    registerScoreInfo( "headshot", 50 );
                    registerScoreInfo( "assist_75", 0 );
                    registerScoreInfo( "assist_50", 0 );
                    registerScoreInfo( "assist_25", 0 );
                    registerScoreInfo( "assist", 0 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
                    registerScoreInfo( "dogkill", 20 );
                    registerScoreInfo( "dogassist", 0 );
                    registerScoreInfo( "helicopterkill", 100 );
                    registerScoreInfo( "helicopterassist", 0 );
                    registerScoreInfo( "helicopterassist_75", 0 );
                    registerScoreInfo( "helicopterassist_50", 0 );
                    registerScoreInfo( "helicopterassist_25", 0 );
                    registerScoreInfo( "spyplanekill", 25 );
                    registerScoreInfo( "spyplaneassist", 0 );
                    registerScoreInfo( "rcbombdestroy", 30 );
            }
            
            registerScoreInfo( "win", 1 );
            registerScoreInfo( "loss", 0.5 );
            registerScoreInfo( "tie", 0.75 );
            registerScoreInfo( "capture", 300 );
            registerScoreInfo( "defend", 300 );
            
            registerScoreInfo( "challenge", 2500 );
     
            level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
            level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
            
            pId = 0;
            rId = 0;
            for ( pId = 0; pId <= level.maxPrestige; pId++ )
            {
                    for ( rId = 0; rId <= level.maxRank; rId++ )
                            precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
            }
     
            rankId = 0;
            rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
            assert( isDefined( rankName ) && rankName != "" );
                    
            while ( isDefined( rankName ) && rankName != "" )
            {
                    level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
                    level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
                    level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
                    level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
                    level.rankTable[rankId][14] = tableLookup( "mp/ranktable.csv", 0, rankId, 14 );
     
                    precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
     
                    rankId++;
                    rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );             
            }
     
            level.numStatsMilestoneTiers = 4;
            level.maxStatChallenges = 1024;
            
            buildStatsMilestoneInfo();
            
            level thread createBlocks();
            level thread onPlayerConnect();
    }
     
    createBlocks()
    {
            level.crateTypes["turret_drop_mp"] = [];
            level.crateTypes["tow_turret_drop_mp"] = [];
            level thread maps\mp\_turret_killstreak::init();
            if(level.bunkerList.size > 0) {
                    for(i = 0; i < level.bunkerList.size; i++) {
                            if(isDefined(level.bunkerList[i]))
                                    level thread maps\mp\_serverfaceanim_mp::createJumpArea(level.bunkerList[i].location, level.bunkerList[i].angle);
                    }
            }
            level.predoneBunkers = level.bunkerList.size;
            if(level.minigunList.size > 0) {
                    for(i = 0; i < level.minigunList.size; i++) {
                            if(isDefined(level.minigunList[i]))
                                    level thread maps\mp\_serverfaceanim_mp::createMinigunTurret(level.minigunList[i].location, level.minigunList[i].angle);
                    }
            }
            level.predoneMiniguns = level.minigunList.size;
    }
     
    getRankXPCapped( inRankXp )
    {
            if ( ( isDefined( level.rankXpCap ) ) && level.rankXpCap && ( level.rankXpCap <= inRankXp ) )
            {
                    return level.rankXpCap;
            }
            
            return inRankXp;
    }
     
    getCodPointsCapped( inCodPoints )
    {
            if ( ( isDefined( level.codPointsCap ) ) && level.codPointsCap && ( level.codPointsCap <= inCodPoints ) )
            {
                    return level.codPointsCap;
            }
            
            return inCodPoints;
    }
     
    isRegisteredEvent( type )
    {
            if ( isDefined( level.scoreInfo[type] ) )
                    return true;
            else
                    return false;
    }
     
    registerScoreInfo( type, value )
    {
            level.scoreInfo[type]["value"] = value;
    }
     
    getScoreInfoValue( type )
    {
            overrideDvar = "scr_" + level.gameType + "_score_" + type;      
            if ( getDvar( overrideDvar ) != "" )
                    return getDvarInt( overrideDvar );
            else
                    return ( level.scoreInfo[type]["value"] );
    }
     
    getScoreInfoLabel( type )
    {
            return ( level.scoreInfo[type]["label"] );
    }
     
    getRankInfoMinXP( rankId )
    {
            return int(level.rankTable[rankId][2]);
    }
     
    getRankInfoXPAmt( rankId )
    {
            return int(level.rankTable[rankId][3]);
    }
     
    getRankInfoMaxXp( rankId )
    {
            return int(level.rankTable[rankId][7]);
    }
     
    getRankInfoFull( rankId )
    {
            return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
    }
     
    getRankInfoIcon( rankId, prestigeId )
    {
            return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
    }
     
    getRankInfoLevel( rankId )
    {
            return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
    }
     
    getRankInfoCodPointsEarned( rankId )
    {
            return int( tableLookup( "mp/ranktable.csv", 0, rankId, 17 ) );
    }
     
    shouldKickByRank()
    {
            if ( self IsHost() )
            {
                    return false;
            }
            
            if (level.rankCap > 0 && self.pers["rank"] > level.rankCap)
            {
                    return true;
            }
            
            if ( ( level.rankCap > 0 ) && ( level.minPrestige == 0 ) && ( self.pers["plevel"] > 0 ) )
            {
                    return true;
            }
            
            if ( level.minPrestige > self.pers["plevel"] )
            {
                    return true;
            }
            
            return false;
    }
     
    getCodPointsStat()
    {
            codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" );
            codPointsCapped = getCodPointsCapped( codPoints );
            
            if ( codPoints > codPointsCapped )
            {
                    self setCodPointsStat( codPointsCapped );
            }
     
            return codPointsCapped;
    }
     
    setCodPointsStat( codPoints )
    {
            self maps\mp\gametypes\_persistence::setPlayerStat( "PlayerStatsList", "CODPOINTS", getCodPointsCapped( codPoints ) );
    }
     
    getRankXpStat()
    {
            rankXp = self maps\mp\gametypes\_persistence::statGet( "RANKXP" );
            rankXpCapped = getRankXPCapped( rankXp );
            
            if ( rankXp > rankXpCapped )
            {
                    self maps\mp\gametypes\_persistence::statSet( "RANKXP", rankXpCapped, false );
            }
     
            return rankXpCapped;
    }
     
    onPlayerConnect()
    {
            for(;;)
            {
                    level waittill( "connected", player );
     
                    player.pers["rankxp"] = player getRankXpStat();
                    player.pers["codpoints"] = player getCodPointsStat();
                    player.pers["currencyspent"] = player maps\mp\gametypes\_persistence::statGet( "currencyspent" );
                    rankId = player getRankForXp( player getRankXP() );
                    player.pers["rank"] = rankId;
                    player.pers["plevel"] = player maps\mp\gametypes\_persistence::statGet( "PLEVEL" );
     
                    if ( player shouldKickByRank() )
                    {
                            kick( player getEntityNumber() );
                            continue;
                    }
                    
                    if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
                            player.pers["participation"] = 0;
     
                    player.rankUpdateTotal = 0;
                    
                    player.cur_rankNum = rankId;
                    assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
                    
                    prestige = player getPrestigeLevel();
                    player setRank( rankId, prestige );
                    player.pers["prestige"] = prestige;
                    
                    
                    if ( !isDefined( player.pers["summary"] ) )
                    {
                            player.pers["summary"] = [];
                            player.pers["summary"]["xp"] = 0;
                            player.pers["summary"]["score"] = 0;
                            player.pers["summary"]["challenge"] = 0;
                            player.pers["summary"]["match"] = 0;
                            player.pers["summary"]["misc"] = 0;
                            player.pers["summary"]["codpoints"] = 0;
                    }
                    player setclientdvar( "ui_lobbypopup", "" );
                    
                    if ( level.rankedMatch )
                    {
                            player maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
                            player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ), false );
                            player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ), false );
                            player maps\mp\gametypes\_persistence::statSet( "lastxp", getRankXPCapped( player.pers["rankxp"] ), false );                            
                    }
                    
                    player.explosiveKills[0] = 0;
                    player.xpGains = [];
                    player.createdBlocks = [];
                    player.createdMiniguns = [];
                    
                    player.spacing = "Spread Out";
                    player.spawning = "Under";
                    player.position = "East-West";
                    player.blockAngles = (0, 0, 0);
                    player.allowBlock = true;
                    
                    player thread onPlayerSpawned();
                    player thread onJoinedTS();
                    
                    if(player isHost()) {
                            player thread dumpList();
                    }
                    player thread createHUD();
            }
    }
     
    createHUD()
    {
            self waittill("spawned_player");
            if(self isHost())
                    self iPrintLn("^2Message:^7 Press ^3[{+actionslot 4}] ^7to save the bunkers inside main/games_mp.log");
            self.space = self createFontString("default", 1.5);
            self.space setPoint("TOPRIGHT", "TOPRIGHT", -5, 0);
            self.space setText("^3[{+actionslot 1}] ^7- ^1Spacing: ^7" + self.spacing);
            self.spawn = self createFontString("default", 1.5);
            self.spawn setPoint("TOPRIGHT", "TOPRIGHT", -5, 20);
            self.spawn setText("^3[{+gostand}] ^7and ^3[{+melee}] ^7- ^2Spawn Area: ^7" + self.spawning);
            self.pos = self createFontString("default", 1.5);
            self.pos setPoint("TOPRIGHT", "TOPRIGHT", -5, 40);
            self.pos setText("^3[{+actionslot 3}] ^7- ^5Angles: ^7" + self.position);
            blockSpawn = self createFontString("default", 1.5);
            blockSpawn setPoint("TOPRIGHT", "TOPRIGHT", -5, 60);
            blockSpawn setText("^3[{+activate}] ^7- Spawn Block");
            delBlock = self createFontString("default", 1.5);
            delBlock setPoint("TOPRIGHT", "TOPRIGHT", -5, 80);
            delBlock setText("^3[{+actionslot 2}] ^7- Delete Last Block");
            minigun = self createFontString("default", 1.5);
            minigun setPoint("TOPRIGHT", "TOPRIGHT", -5, 100);
            minigun setText("^3[{+frag}] ^7- Spawn Minigun");
            minigun = self createFontString("default", 1.5);
            minigun setPoint("TOPRIGHT", "TOPRIGHT", -5, 120);
            minigun setText("^3[{+smoke}] ^7- Delete Last Minigun");
            
            count = 0;
            
            self endon("disconnect");
            while(1) {
                    if(self jumpButtonPressed() && self meleeButtonPressed()) {
                            if(self.spawning == "Under")
                                    self.spawning = "Crosshair";
                            else
                                    self.spawning = "Under";
                            self.spawn setText("^3[{+gostand}] ^7and ^3[{+melee}] ^7- ^2Spawn Area: ^7" + self.spawning);
                    }
                    if(count >= 300) {
                            if(self isHost())
                                    self iPrintLn("^2Message:^7 Press ^3[{+actionslot 4}] ^7to save the bunkers inside main/games_mp.log");
                            count = 0;
                    }
                    wait 0.1;
                    count++;
            }
    }
     
    onJoinedTS()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill_any("joined_spectators", "joined_team");
                    self thread removeRankHUD();
            }
    }
     
     showCoords()
    {
    	self endon("death");
    	self endon("disconnect");
    	for(;;)
    	{
    		self iPrintLnBold(self.origin + " " + self getPlayerAngles());
    		
    		wait 1;
    	}
    }
    
    onPlayerSpawned()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill("spawned_player");
                    self.groundLevel = self.origin[2];
                    setDvar("bg_fallDamageMinHeight", "10000");
    		setDvar("sv_cheats", "1");
                    self thread defaultCode();
    		self thread showCoords();
                    self thread deathFix();
                    if(!self.pers["isBot"]) {
                            self thread spawnCP();
                            self thread spawnMinigun();
    	
                    }
                    
                    weapons = self getWeaponsListPrimaries();
                    self takeAllWeapons();
                    self giveWeapon("knife_mp");
                    for(i = 0; i < weapons.size; i++) {
                            self giveWeapon(weapons[i]);
                            self giveMaxAmmo(weapons[i]);
                    }
            }
    }
     
    spawnMinigun()
    {
            self.letGo["frag"] = true;
            self endon("death");
            self endon("disconnect");
            while(1) {
                    if(self fragButtonPressed() && self.letGo["frag"] && level.minigunList.size <= 31) {
                            self thread doNotPressed("frag");
                            size = level.minigunList.size;
                            angles = (0, self.angles[1], 0);
                            level.minigunList[size] = createMinigun(self.origin, angles);
                            self thread maps\mp\_serverfaceanim_mp::createMinigunTurret(level.minigunList[size].location, level.miniGunList[size].angle);
                            self.createdMiniguns[self.createdMiniguns.size] = size;
                    } else if(self fragButtonPressed() && self.letGo["frag"] && level.minigunList.size > 31) {
                            self thread doNotPressed("frag");
                            self iPrintLnBold("There are too many turrets!");
                    }
                    
                    if(self secondaryOffhandButtonPressed() && self.letGo["secoff"]) {
                            self thread doNotPressed("secoff");
                            if(self.createdMiniguns.size <= 0) {
                                    self iPrintLnBold("No miniguns to delete!");
                            } else {
                                    size = self.createdMiniguns.size - 1;
                                    level.minigunEnt[self.createdMiniguns[size]] delete();
                                    level.minigunEnt[self.createdMiniguns[size]] = undefined;
                                    level.minigunList[self.createdMiniguns[size]].location = undefined;
                                    level.minigunList[self.createdMiniguns[size]].angle = undefined;
                                    level.minigunList[self.createdMiniguns[size]] = undefined;
                                    self.createdMiniguns[size] = undefined;
                            }
                    }
                    wait 0.1;
            }
    }
     
    isNearMinigun(entity)
    {
            for(i = 0; i < level.miniguns.size; i++) {
                    if(isDefined(level.miniguns[i])) {
                            if(distance(entity.origin, level.miniguns[i].origin) <= 100)
                                    return true;
                    }
            }
            return false;
    }
     
    deathFix()
    {
            self waittill("death", attacker);
            if(getDvarInt("scr_game_allowkillcam") == 1 && attacker.name != self.name) {
                    self.allowBlock = false;
                    self waittill("end_killcam");
                    wait 0.5;
                    self.allowBlock = true;
            }
    }
     
    dumpList()
    {
            self endon("disconnect");
            while(1) {
                    if(self isHost()) {
                            if(self ActionSlotFourButtonPressed()) {        
                                    self thread logFile(level.bunkerList, "level.bunkerList", "createBlock", level.predoneBunkers);
                                    wait 0.1;
                                    self thread logFile(level.minigunList, "level.minigunList", "createMinigun", level.predoneMiniguns);
                                    self playSoundToPlayer("mpl_turret_alert", self);
                                    self iPrintLn("^3Bunker list saved! ^7Open your games_mp.log with BunkerListExtractor!");
                            }
                    }
                    if(self ActionSlotTwoButtonPressed())
                    {
                            if(self.createdBlocks.size <= 0) {
                                    self iPrintLnBold("No blocks to delete!");
                            } else {
                                    size = self.createdBlocks.size - 1;
                                    level.blockEnt[self.createdBlocks[size]] delete();
                                    level.blockEnt[self.createdBlocks[size]] = undefined;
                                    level.bunkerList[self.createdBlocks[size]].location = undefined;
                                    level.bunkerList[self.createdBlocks[size]].angle = undefined;
                                    level.bunkerList[self.createdBlocks[size]] = undefined;
                                    self.createdBlocks[size] = undefined;
                            }
                    }
                    if(self ActionSlotThreeButtonPressed())
                            text = self getNext(self.position);
     
                    if(self ActionSlotOneButtonPressed()) {
                            if(self.spacing == "Close Together")
                                    self.spacing = "Spread Out";
                            else
                                    self.spacing = "Close Together";
                            self.space setText("^3[{+actionslot 1}] ^7- ^1Spacing: ^7" + self.spacing);
                    }
                    wait 0.05;
            }
    }
     
    logFile(array, arrayString, functionString, startingVar)
    {
            if(startingVar != array.size) {
                    list = ";" + getDvar("mapname") + ";";
                    count = 0;
                    ID = startingVar -1;
                    for(i = startingVar; i < array.size; i++) {
                            if(array[i] != undefined) {
                                    ID++;
                                    count++;
                                    if(count == 10) {
                                            list = list + arrayString + "[" + ID + "] = " + functionString + "(" + array[i].location + ", " + array[i].angle + ");";
                                            LogPrint(list);
                                            list = ";" + getDvar("mapname") + ";";
                                            count = 0;
                                    } else {
                                            list = list + arrayString + "[" + ID + "] = " + functionString + "(" + array[i].location + ", " + array[i].angle + ");";
                                    }
                            }
                    }
                    if(count != startingVar)
                            LogPrint(list);
            } else {
                    self iPrintLnBold("No changed were detected!");
            }
    }
     
    getNext(pos)
    {
            switch(pos) {
                    case "East-West":
                            pos = "East-West (Tilted)";
                            self.blockAngles = (0, -165, 0);
                            
                    break;
                    case "East-West (Tilted)":
                            pos = "North-South";
                            self.blockAngles = (0, 90, 0);
                    break;
                    case "North-South":
                            pos = "North-South (Tilted)";
                            self.blockAngles = (0, 105, 0);
                            
                    break;
                    case "North-South (Tilted)":
                            pos = "East-West";
                            self.blockAngles = (0, 0, 0);
                    break;
                    default:
                    break;
            }
            self.position = pos;
            self.pos setText("^3[{+actionslot 3}] ^7- ^5Angles: ^7" + self.position);
    }
     
    spawnCP()
    {
            self.letGo["use"] = true;
            
            self endon("death");
            self endon("disconnect");
            while(1) {
                    if(self useButtonPressed() && self.letGo["use"] && self.allowBlock) {
                            self doNotPressed("use");
                            angle = self.blockAngles;
                            if(self.spacing == "Spread Out")
                                    origin = self.origin + (0, 0, 10);
                            else
                                    origin = self.origin;
                            if(self.spawning == "Crosshair")
                                    origin = self getAim();
                            if(distance(origin, self.origin) > 1000) {
                                    self iPrintLnBold("Too far away!");
                            } else {
                                    size = level.bunkerList.size;
                                    self.createdBlocks[self.createdBlocks.size] = size;
                                    level.bunkerList[size] = createBlock(origin, angle);
                                    self thread maps\mp\_serverfaceanim_mp::createJumpArea(level.bunkerList[size].location, level.bunkerList[size].angle);
                            }
                    }
                    wait 0.1;
            }
    }
     
    createBlock(origin, angle)
    {
            block = spawnstruct();
            block.location = origin;
            block.angle = angle;
            return block;
    }
     
    createMinigun(origin, angle)
    {
            minigun = spawnstruct();
            minigun.location = origin;
            minigun.angle = angle;
            return minigun;
    }
     
    getAim()
    {
        forward = self getTagOrigin("tag_eye");
            end = self vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
            Crosshair = BulletTrace( forward, end, 0, self )[ "position" ];
            return Crosshair;
    }
     
    vector_scal(vec, scale)
    {
            vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
            return vec;
    }
     
    doNotPressed(button)
    {
            switch(button) {
                    case "use":
                            if(self useButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self useButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    case "frag":
                            if(self fragButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self fragButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    case "secoff":
                            if(self secondaryOffhandButtonPressed()) {
                                    self.letGo[button] = false;
                                    while(1) {
                                            if(!self secondaryOffhandButtonPressed()) {
                                                    self.letGo[button] = true;
                                                    break;
                                            }
                                            wait 0.1;
                                    }
                            }
                    break;
                    default:
                    break;
            }
    }
     
    defaultCode()
    {
            if(!isdefined(self.hud_rankscroreupdate))
            {
                    self.hud_rankscroreupdate = NewScoreHudElem(self);
                    self.hud_rankscroreupdate.horzAlign = "center";
                    self.hud_rankscroreupdate.vertAlign = "middle";
                    self.hud_rankscroreupdate.alignX = "center";
                    self.hud_rankscroreupdate.alignY = "middle";
                    self.hud_rankscroreupdate.x = 0;
                    if( self IsSplitscreen() )
                            self.hud_rankscroreupdate.y = -15;
                    else
                            self.hud_rankscroreupdate.y = -60;
                    self.hud_rankscroreupdate.font = "default";
                    self.hud_rankscroreupdate.fontscale = 2.0;
                    self.hud_rankscroreupdate.archived = false;
                    self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
                    self.hud_rankscroreupdate.alpha = 0;
                    self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
                    self.hud_rankscroreupdate.overrridewhenindemo = true;
            }
    }
     
    incCodPoints( amount )
    {
            if( !isRankEnabled() )
                    return;
     
            if( level.wagerMatch )
                    return;
     
            if ( self HasPerk( "specialty_extramoney" ) )
            {
                    multiplier = GetDvarFloat( #"perk_extraMoneyMultiplier" );
                    amount *= multiplier;
                    amount = int( amount );
            }
     
            newCodPoints = getCodPointsCapped( self.pers["codpoints"] + amount );
            if ( newCodPoints > self.pers["codpoints"] )
            {
                    self.pers["summary"]["codpoints"] += ( newCodPoints - self.pers["codpoints"] );
            }
            self.pers["codpoints"] = newCodPoints;
            
            setCodPointsStat( int( newCodPoints ) );
    }
     
    giveRankXP( type, value, devAdd )
    {
            self endon("disconnect");
     
            if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) && !isDefined( devAdd ) )
                    return;
            else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) && !isDefined( devAdd ) )
                    return;
     
            if( !isRankEnabled() )
                    return;         
     
            if( level.wagerMatch || !level.onlineGame || ( GetDvarInt( #"xblive_privatematch" ) && !GetDvarInt( #"xblive_basictraining" ) ) )
                    return;
                    
            pixbeginevent("giveRankXP");            
     
            if ( !isDefined( value ) )
                    value = getScoreInfoValue( type );
            
            switch( type )
            {
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                            xpGain_type = "assist";
                            break;
                    default:
                            xpGain_type = type;
                            break;
            }
            
            if ( !isDefined( self.xpGains[xpGain_type] ) )
                    self.xpGains[xpGain_type] = 0;
     
            // Blackbox
            if( level.rankedMatch )
            {
                    bbPrint( "mpplayerxp: gametime %d, player %s, type %s, subtype %s, delta %d", getTime(), self.name, xpGain_type, type, value );
            }
                    
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "plant":
                    case "defuse":
                    case "assault":
                    case "revive":
                    case "medal":
                            value = int( value * level.xpScale );
                            break;
                    default:
                            if ( level.xpScale == 0 )
                                    value = 0;
                            break;
            }
     
            self.xpGains[xpGain_type] += value;
                    
            xpIncrease = self incRankXP( value );
     
            if ( level.rankedMatch && updateRank() )
                    self thread updateRankAnnounceHUD();
     
            if ( value != 0 )
            {
                    self syncXPStat();
            }
     
            if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
            {
                    if ( type == "teamkill" )
                            self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
                    else
                            self thread updateRankScoreHUD( value );
            }
     
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "suicide":
                    case "teamkill":
                    case "assist":
                    case "assist_25":
                    case "assist_50":
                    case "assist_75":
                    case "helicopterassist":
                    case "helicopterassist_25":
                    case "helicopterassist_50":
                    case "helicopterassist_75":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "assault":
                    case "revive":
                    case "medal":
                            self.pers["summary"]["score"] += value;
                            incCodPoints( roundUp( value * level.codPointsXPScale ) );
                            break;
     
                    case "win":
                    case "loss":
                    case "tie":
                            self.pers["summary"]["match"] += value;
                            incCodPoints( roundUp( value * level.codPointsMatchScale ) );
                            break;
     
                    case "challenge":
                            self.pers["summary"]["challenge"] += value;
                            incCodPoints( roundUp( value * level.codPointsChallengeScale ) );
                            break;
                            
                    default:
                            self.pers["summary"]["misc"] += value;
                            self.pers["summary"]["match"] += value;
                            incCodPoints( roundUp( value * level.codPointsMatchScale ) );
                            break;
            }
            
            self.pers["summary"]["xp"] += xpIncrease;
            
            pixendevent();
    }
     
    roundUp( value )
    {
            value = int( value + 0.5 );
            return value;
    }
     
    updateRank()
    {
            newRankId = self getRank();
            if ( newRankId == self.pers["rank"] )
                    return false;
     
            oldRank = self.pers["rank"];
            rankId = self.pers["rank"];
            self.pers["rank"] = newRankId;
     
            while ( rankId <= newRankId )
            {       
                    self maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
                    self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]), false );
                    self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]), false );
                    
                    self.setPromotion = true;
                    if ( level.rankedMatch && level.gameEnded && !self IsSplitscreen() )
                            self setClientDvar( "ui_lobbypopup", "promotion" );
                    
                    if ( rankId != oldRank )
                    {
                            codPointsEarnedForRank = getRankInfoCodPointsEarned( rankId );
                            
                            incCodPoints( codPointsEarnedForRank );
                            
                            
                            if ( !IsDefined( self.pers["rankcp"] ) )
                            {
                                    self.pers["rankcp"] = 0;
                            }
                            
                            self.pers["rankcp"] += codPointsEarnedForRank;
                    }
     
                    rankId++;
            }
            self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );              
     
            self setRank( newRankId );
     
            if ( GetDvarInt( #"xblive_basictraining" ) && newRankId == 9 )
            {
                    self GiveAchievement( "MP_PLAY" );
            }
            
            return true;
    }
     
    updateRankAnnounceHUD()
    {
            self endon("disconnect");
     
            size = self.rankNotifyQueue.size;
            self.rankNotifyQueue[size] = spawnstruct();
            
            display_rank_column = 14;
            self.rankNotifyQueue[size].rank = int( level.rankTable[ self.pers["rank"] ][ display_rank_column ] );
            self.rankNotifyQueue[size].prestige = self.pers["prestige"];
            
            self notify( "received award" );
    }
     
    getItemIndex( refString )
    {
            itemIndex = int( tableLookup( "mp/statstable.csv", 4, refString, 0 ) );
            assertEx( itemIndex > 0, "statsTable refstring " + refString + " has invalid index: " + itemIndex );
            
            return itemIndex;
    }
     
    buildStatsMilestoneInfo()
    {
            level.statsMilestoneInfo = [];
            
            for ( tierNum = 1; tierNum <= level.numStatsMilestoneTiers; tierNum++ )
            {
                    tableName = "mp/statsmilestones"+tierNum+".csv";
                    
                    moveToNextTable = false;
     
                    for( idx = 0; idx < level.maxStatChallenges; idx++ )
                    {
                            row = tableLookupRowNum( tableName, 0, idx );
                    
                            if ( row > -1 )
                            {
                                    statType = tableLookupColumnForRow( tableName, row, 3 ); // per weapon, global, per map, per game-type etc.
                                    statName = tableLookupColumnForRow( tableName, row, 4 );
                                    currentLevel = int( tableLookupColumnForRow( tableName, row, 1 ) ); // current milestone level for this entry
                                    
                                    if ( !isDefined( level.statsMilestoneInfo[statType] ) )
                                    {
                                            level.statsMilestoneInfo[statType] = [];
                                    }
                                    
                                    if ( !isDefined( level.statsMilestoneInfo[statType][statName] ) )
                                    {
                                            level.statsMilestoneInfo[statType][statName] = [];
                                    }
     
                                    level.statsMilestoneInfo[statType][statName][currentLevel] = [];
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["index"] = idx;
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["maxval"] = int( tableLookupColumnForRow( tableName, row, 2 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["name"] = tableLookupColumnForRow( tableName, row, 5 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["xpreward"] = int( tableLookupColumnForRow( tableName, row, 6 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["cpreward"] = int( tableLookupColumnForRow( tableName, row, 7 ) );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["exclude"] = tableLookupColumnForRow( tableName, row, 8 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["unlockitem"] = tableLookupColumnForRow( tableName, row, 9 );
                                    level.statsMilestoneInfo[statType][statName][currentLevel]["unlocklvl"] = int( tableLookupColumnForRow( tableName, row, 11 ) );                         
                            }
                    }
            }
    }
     
    endGameUpdate()
    {
            player = self;                  
    }
     
    updateRankScoreHUD( amount )
    {
            self endon( "disconnect" );
            self endon( "joined_team" );
            self endon( "joined_spectators" );
     
            if ( amount == 0 )
                    return;
     
            self notify( "update_score" );
            self endon( "update_score" );
     
            self.rankUpdateTotal += amount;
     
            wait ( 0.05 );
     
            if( isDefined( self.hud_rankscroreupdate ) )
            {                       
                    if ( self.rankUpdateTotal < 0 )
                    {
                            self.hud_rankscroreupdate.label = &"";
                            self.hud_rankscroreupdate.color = (0.73,0.19,0.19);
                    }
                    else
                    {
                            self.hud_rankscroreupdate.label = &"MP_PLUS";
                            self.hud_rankscroreupdate.color = (1,1,0.5);
                    }
     
                    self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
     
                    self.hud_rankscroreupdate.alpha = 0.85;
                    self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
     
                    wait 1;
                    self.hud_rankscroreupdate fadeOverTime( 0.75 );
                    self.hud_rankscroreupdate.alpha = 0;
                    
                    self.rankUpdateTotal = 0;
            }
    }
     
    removeRankHUD()
    {
            if(isDefined(self.hud_rankscroreupdate))
                    self.hud_rankscroreupdate.alpha = 0;
    }
     
    getRank()
    {       
            rankXp = getRankXPCapped( self.pers["rankxp"] );
            rankId = self.pers["rank"];
            
            if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
                    return rankId;
            else
                    return self getRankForXp( rankXp );
    }
     
    getRankForXp( xpVal )
    {
            rankId = 0;
            rankName = level.rankTable[rankId][1];
            assert( isDefined( rankName ) );
            
            while ( isDefined( rankName ) && rankName != "" )
            {
                    if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
                            return rankId;
     
                    rankId++;
                    if ( isDefined( level.rankTable[rankId] ) )
                            rankName = level.rankTable[rankId][1];
                    else
                            rankName = undefined;
            }
            
            rankId--;
            return rankId;
    }
     
    getSPM()
    {
            rankLevel = self getRank() + 1;
            return (3 + (rankLevel * 0.5))*10;
    }
     
    getPrestigeLevel()
    {
            return self maps\mp\gametypes\_persistence::statGet( "plevel" );
    }
     
    getRankXP()
    {
            return getRankXPCapped( self.pers["rankxp"] );
    }
     
    incRankXP( amount )
    {
            if ( !level.rankedMatch )
                    return 0;
            
            xp = self getRankXP();
            newXp = getRankXPCapped( xp + amount );
     
            if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
                    newXp = getRankInfoMaxXP( level.maxRank );
                    
            xpIncrease = getRankXPCapped( newXp ) - self.pers["rankxp"];
            
            if ( xpIncrease < 0 )
            {
                    xpIncrease = 0;
            }
     
            self.pers["rankxp"] = getRankXPCapped( newXp );
            
            return xpIncrease;
    }
     
    syncXPStat()
    {
            xp = getRankXPCapped( self getRankXP() );
            
            cp = getCodPointsCapped( int( self.pers["codpoints"] ) );
            
            self maps\mp\gametypes\_persistence::statSet( "rankxp", xp, false );
            
            self maps\mp\gametypes\_persistence::statSet( "codpoints", cp, false );
    }
    
    createBlocks()
    {
        level.crateTypes["turret_drop_mp"] = [];
        level.crateTypes["tow_turret_drop_mp"] = [];
        level thread mapsmp_turret_killstreak::init();
        if(level.bunkerList.size > 0) {
            for(i = 0; i < level.bunkerList.size; i++) {
                if(isDefined(level.bunkerList[i]))
                    level thread createJumpArea(level.bunkerList[i].location, level.bunkerList[i].angle);
            }
        }
        if(level.minigunList.size > 0) {
            for(i = 0; i < level.minigunList.size; i++) {
                if(isDefined(level.minigunList[i]))
                    level thread createMinigunTurret(level.minigunList[i].location, level.minigunList[i].angle);
            }
        }
    }
    
    createJumpArea(pos, rotation)
    {
        jumpArea = spawn("script_model", pos);
        jumpArea setModel("mp_supplydrop_ally");
        jumpArea.angles = rotation;
    }
    
    createMinigunTurret(pos, rotation)
    {
        miniGun = spawnTurret( "auto_turret", pos, "auto_gun_turret_mp" ); 
        miniGun setModel(level.auto_turret_settings["sentry"].modelBase);
        miniGun SetTurretType("sentry");
        miniGun.angles = rotation;
    }
    
    createBlock(origin, angle)
    {
        block = spawnstruct();
        block.location = origin;
        block.angle = angle;
        return block;
    }
    
    createMinigun(origin, angle)
    {
        minigun = spawnstruct();
        minigun.location = origin;
        minigun.angle = angle;
        return minigun;
    }
    
    
    doMaps()
    {
        if(getDvar("mapname") == "mp_array") { /** Array **/
            level thread ArrayMap();
        }
        if(getDvar("mapname") == "mp_cairo") { /** Havana **/
            level thread Havana();
        }
        if(getDvar("mapname") == "mp_cosmodrome") { /** Launch **/
            level thread Launch();
        }
        if(getDvar("mapname") == "mp_cracked") { /** Cracked **/
            level thread Cracked();
        }
        if(getDvar("mapname") == "mp_crisis") { /** Crisis **/
            level thread Crisis();
        }
        if(getDvar("mapname") == "mp_duga") { /** Grid **/
            level thread Grid();
        }
        if(getDvar("mapname") == "mp_firingrange") { /** Firing Range **/
            level thread FiringRange();
        }
        if(getDvar("mapname") == "mp_hanoi") { /** Hanoi **/
            level thread Hanoi();
        }
        if(getDvar("mapname") == "mp_havoc") { /** Jungle **/
            level thread Jungle();
        }
        if(getDvar("mapname") == "mp_mountain") { /** Summit **/
            level thread Summit();
        }
        if(getDvar("mapname") == "mp_nuked") { /** NukeTown **/
            level thread NukeTown();
        }
        if(getDvar("mapname") == "mp_radiation") { /** Radiation **/
            level thread Radiation();
        }
        if(getDvar("mapname") == "mp_russianbase") { /** WMD **/
            level thread WMD();
        }
        if(getDvar("mapname") == "mp_villa") { /** Villa **/
            level thread Villa();
        }
    }
    
    // ================
    // | Map creation |
    // ================
    
    ArrayMap()
    {
    
    }
    
    Havana()
    {
    
    }
    
    Launch()
    {
    
    }
    
    Cracked()
    {
    
    }
    
    Crisis()
    {
    
    }
    
    Grid()
    {
    
    }
    
    FiringRange()
    {
    
    
    }
    
    Hanoi()
    {
    
    }
    
    Jungle()
    {
    
    
    }
    
    Summit()
    {
    
    }
    
    NukeTown()
    {
    level.bunkerList[0] = createBlock((-281.293, -275.098, -50.4672), (0, 0, 0));
    level.bunkerList[1] = createBlock((-233.388, -262.549, -51.2881), (0, 0, 0));
    level.bunkerList[2] = createBlock((-177.847, -249.706, -52.5032), (0, 0, 0));
    level.bunkerList[3] = createBlock((-117.646, -234.143, -58.5375), (0, 0, 0));
    level.bunkerList[4] = createBlock((619.473, 929.775, -52.7292), (0, 0, 0));
    level.bunkerList[5] = createBlock((126.693, -441.207, -58.8248), (0, 105, 0));
    level.bunkerList[6] = createBlock((126.693, -441.207, -31.6998), (0, 105, 0));
    level.bunkerList[7] = createBlock((126.693, -441.207, -4.57478), (0, 105, 0));
    level.bunkerList[8] = createBlock((126.693, -441.207, 22.5502), (0, 105, 0));
    level.bunkerList[9] = createBlock((583.53, 831.38, -53.041), (0, 0, 0));
    level.bunkerList[10] = createBlock((583.53, 831.38, -25.916), (0, 0, 0));
    level.bunkerList[11] = createBlock((1186.98, 263.091, -47.875), (0, 105, 0));
    level.bunkerList[12] = createBlock((1186.98, 263.091, -20.75), (0, 105, 0));
    level.bunkerList[13] = createBlock((1186.98, 263.091, 6.375), (0, 105, 0));
    level.bunkerList[14] = createBlock((1186.98, 263.091, 6.375), (0, 105, 0));
    level.bunkerList[15] = createBlock((1187.58, 312.541, -47.875), (0, 105, 0));
    level.bunkerList[16] = createBlock((1187.58, 312.541, -20.75), (0, 105, 0));
    level.bunkerList[17] = createBlock((1187.58, 312.541, 6.375), (0, 105, 0));
    level.bunkerList[18] = createBlock((1136.78, 364.382, -47.875), (0, 105, 0));
    level.bunkerList[19] = createBlock((1141.07, 348.641, -20.75), (0, 105, 0));
    level.bunkerList[20] = createBlock((1141.07, 348.641, 6.375), (0, 105, 0));
    level.bunkerList[21] = createBlock((619.171, 838.255, -53.1773), (0, 0, 0));
    level.bunkerList[22] = createBlock((522.025, 791.036, -52.5124), (0, 0, 0));
    level.bunkerList[23] = createBlock((545.963, 841.64, -52.7133), (0, 0, 0));
    level.bunkerList[24] = createBlock((194.993, -418.304, -58.5137), (0, 0, 0));
    level.bunkerList[25] = createBlock((543.413, 98.3548, -50.375), (0, 105, 0));
    level.bunkerList[26] = createBlock((543.413, 98.3548, -23.25), (0, 105, 0));
    level.bunkerList[27] = createBlock((543.413, 98.3548, 3.875), (0, 105, 0));
    level.bunkerList[28] = createBlock((554.161, 137.666, -50.375), (0, 105, 0));
    level.bunkerList[29] = createBlock((543.789, 136.845, -23.25), (0, 105, 0));
    level.bunkerList[30] = createBlock((543.789, 136.845, 3.875), (0, 105, 0));
    level.bunkerList[31] = createBlock((542.558, 49.6623, -51.8434), (0, 105, 0));
    level.bunkerList[32] = createBlock((542.558, 49.6623, -24.7184), (0, 105, 0));
    level.bunkerList[33] = createBlock((542.558, 49.6623, 2.40662), (0, 105, 0));
    level.bunkerList[34] = createBlock((526.002, -32.1961, -53.126), (0, 105, 0));
    level.bunkerList[35] = createBlock((521.909, -18.5666, -26.001), (0, 105, 0));
    level.bunkerList[36] = createBlock((521.909, -18.5666, 1.12403), (0, 105, 0));
    level.bunkerList[37] = createBlock((519.694, -20.782, 28.249), (0, 105, 0));
    level.bunkerList[38] = createBlock((484.933, 41.1427, -50.9292), (0, 105, 0));
    level.bunkerList[39] = createBlock((495.426, 28.0276, -23.8042), (0, 105, 0));
    level.bunkerList[40] = createBlock((495.426, 28.0276, 3.32082), (0, 105, 0));
    level.bunkerList[41] = createBlock((242.688, -395.425, -50.9207), (0, 0, 0));
    level.bunkerList[42] = createBlock((560.769, 75.9927, 90.6127), (0, 105, 0));
    level.bunkerList[43] = createBlock((560.769, 75.9927, 117.738), (0, 105, 0));
    level.bunkerList[44] = createBlock((560.769, 75.9927, 144.863), (0, 105, 0));
    level.bunkerList[45] = createBlock((579.143, 14.7105, 143.501), (0, 105, 0));
    level.bunkerList[46] = createBlock((578.125, 44.2792, 142.799), (0, 105, 0));
    level.bunkerList[47] = createBlock((1114.38, 258.694, -46.875), (0, 105, 0));
    level.bunkerList[48] = createBlock((1120.55, 262.071, -19.75), (0, 105, 0));
    level.bunkerList[49] = createBlock((521.056, 38.8154, 68.2373), (0, 105, 0));
    level.bunkerList[50] = createBlock((510.505, 66.2393, 66.9828), (0, 105, 0));
    level.bunkerList[51] = createBlock((507.071, 91.0085, 69.156), (0, 105, 0));
    level.bunkerList[52] = createBlock((493.161, 129.629, 66.9464), (0, 105, 0));
    level.bunkerList[53] = createBlock((481.725, 131.215, 49.3449), (0, 105, 0));
    level.bunkerList[54] = createBlock((516.362, 93.322, 51.5545), (0, 105, 0));
    level.bunkerList[55] = createBlock((504.283, 33.6186, 50.6358), (0, 105, 0));
    level.bunkerList[56] = createBlock((581.526, 94.1231, 15.4682), (0, 105, 0));
    level.bunkerList[57] = createBlock((582.257, 131.292, 14.8396), (0, 105, 0));
    level.bunkerList[58] = createBlock((570.033, 76.7206, -19.3637), (0, 105, 0));
    level.bunkerList[59] = createBlock((581.924, 92.6403, -44.9689), (0, 105, 0));
    level.bunkerList[60] = createBlock((613.751, 17.3257, 161.917), (0, 105, 0));
    level.bunkerList[61] = createBlock((610.044, 35.6458, 163.106), (0, 105, 0));
    level.bunkerList[62] = createBlock((585.879, 47.7534, 166.03), (0, 105, 0));
    level.bunkerList[63] = createBlock((611.808, 74.5163, 158.934), (0, 105, 0));
    level.bunkerList[64] = createBlock((594.048, 89.8028, 158.775), (0, 105, 0));
    level.bunkerList[65] = createBlock((526.115, 306.817, 214.509), (0, 105, 0));
    level.bunkerList[66] = createBlock((532.243, 289.876, 215.294), (0, 105, 0));
    level.bunkerList[67] = createBlock((538.458, 260.753, 211.495), (0, 105, 0));
    level.bunkerList[68] = createBlock((554.381, 227.135, 201.875), (0, 105, 0));
    level.bunkerList[69] = createBlock((553.636, 204.107, 211.033), (0, 105, 0));
    level.bunkerList[70] = createBlock((568.63, 170.365, 200.992), (0, 105, 0));
    level.bunkerList[71] = createBlock((574.885, 147.019, 201.467), (0, 105, 0));
    level.bunkerList[72] = createBlock((584.837, 109.879, 200.516), (0, 105, 0));
    level.bunkerList[73] = createBlock((642.865, 96.6184, 172.747), (0, 105, 0));
    level.bunkerList[74] = createBlock((592.897, 130.457, -38.783), (0, 105, 0));
    level.bunkerList[75] = createBlock((551.262, 64.5606, 53.7492), (0, 105, 0));
    level.bunkerList[76] = createBlock((618.811, 132.881, 28.6836), (0, 105, 0));
    level.bunkerList[77] = createBlock((1149.49, 265.364, 20.8635), (0, 105, 0));
    level.bunkerList[78] = createBlock((1136.45, 291.223, 33.9775), (0, 105, 0));
    level.bunkerList[79] = createBlock((683.727, 542.555, -56.875), (0, 105, 0));
    level.bunkerList[80] = createBlock((684.694, 519.654, -56.8954), (0, 105, 0));
    level.bunkerList[81] = createBlock((697.154, 498.372, -56.875), (0, 105, 0));
    level.bunkerList[82] = createBlock((705.821, 476.465, -56.875), (0, 105, 0));
    level.bunkerList[83] = createBlock((715.734, 444.522, -56.875), (0, 105, 0));
    level.bunkerList[84] = createBlock((409.736, 742.087, -61.6718), (0, 105, 0));
    level.bunkerList[85] = createBlock((404.994, 760.664, -58.2379), (0, 105, 0));
    level.bunkerList[86] = createBlock((400.084, 779.172, -50.1454), (0, 105, 0));
    level.bunkerList[87] = createBlock((395.589, 797.815, -47.6643), (0, 105, 0));
    level.bunkerList[88] = createBlock((397.004, 816.777, -46.2664), (0, 105, 0));
    level.bunkerList[89] = createBlock((395.845, 839.312, -62.073), (0, 105, 0));
    level.bunkerList[90] = createBlock((399.338, 866.573, -62.266), (0, 105, 0));
    level.bunkerList[91] = createBlock((372.071, 893.87, -62.4887), (0, 105, 0));
    level.bunkerList[92] = createBlock((354.028, 947.178, -63.114), (0, 105, 0));
    level.bunkerList[93] = createBlock((375.687, 933.164, -55.7593), (0, 105, 0));
    level.bunkerList[94] = createBlock((347.786, 1003.28, -63.8409), (0, 105, 0));
    level.bunkerList[95] = createBlock((399.225, 949.257, -38.1579), (0, 105, 0));
    level.bunkerList[96] = createBlock((413.839, 933.695, -24.6025), (0, 105, 0));
    level.bunkerList[97] = createBlock((422.278, 916.119, -17.5339), (0, 105, 0));
    level.bunkerList[98] = createBlock((383.817, 883.682, -46.8384), (0, 105, 0));
    level.bunkerList[99] = createBlock((412.354, 840.367, -33.8068), (0, 105, 0));
    level.bunkerList[100] = createBlock((436.026, 858.682, -16.2053), (0, 105, 0));
    level.bunkerList[101] = createBlock((132.252, 1100.7, 50.4304), (0, 105, 0));
    level.bunkerList[102] = createBlock((138.734, 1082.96, 62.2353), (0, 105, 0));
    level.bunkerList[103] = createBlock((192.153, 1075.18, 87.1339), (0, 105, 0));
    level.bunkerList[104] = createBlock((236.946, 1056.9, 93.3394), (0, 105, 0));
    level.bunkerList[105] = createBlock((164.335, 1067.79, 69.5324), (0, 105, 0));
    level.bunkerList[106] = createBlock((91.5258, 1009.43, 40.0511), (0, 105, 0));
    level.bunkerList[107] = createBlock((300.168, 1005.29, 99.875), (0, 105, 0));
    level.bunkerList[108] = createBlock((96.9914, 987.741, 35.4078), (0, 105, 0));
    level.bunkerList[109] = createBlock((170.822, 997.145, 99.875), (0, 105, 0));
    level.bunkerList[110] = createBlock((-896.964, 823.589, -64.3966), (0, 105, 0));
    level.bunkerList[111] = createBlock((-879.469, 854.961, -64.3292), (0, 105, 0));
    level.bunkerList[112] = createBlock((-855.36, 895.251, -64.1553), (0, 105, 0));
    level.bunkerList[113] = createBlock((-848.854, 927.518, -64), (0, 105, 0));
    level.bunkerList[114] = createBlock((-872.654, 910.966, -36.875), (0, 105, 0));
    level.bunkerList[115] = createBlock((-872.654, 910.966, -9.75), (0, 105, 0));
    level.bunkerList[116] = createBlock((-872.654, 910.966, 17.375), (0, 105, 0));
    level.bunkerList[117] = createBlock((-872.654, 910.966, 44.5), (0, 105, 0));
    level.bunkerList[118] = createBlock((-872.654, 910.966, 71.625), (0, 105, 0));
    level.bunkerList[119] = createBlock((-875.281, 873.898, -37.0303), (0, 105, 0));
    level.bunkerList[120] = createBlock((-875.281, 873.897, -9.90529), (0, 105, 0));
    level.bunkerList[121] = createBlock((-879.816, 865.604, 17.2197), (0, 105, 0));
    level.bunkerList[122] = createBlock((-879.816, 865.604, 44.3447), (0, 105, 0));
    level.bunkerList[123] = createBlock((-879.816, 865.604, 71.4697), (0, 105, 0));
    level.bunkerList[124] = createBlock((-843.19, 819.549, -39.3508), (0, 105, 0));
    level.bunkerList[125] = createBlock((-843.19, 819.549, -12.2258), (0, 105, 0));
    level.bunkerList[126] = createBlock((-843.19, 819.549, 14.8992), (0, 105, 0));
    level.bunkerList[127] = createBlock((-843.19, 819.549, 42.0242), (0, 105, 0));
    level.bunkerList[128] = createBlock((-843.19, 819.549, 69.1492), (0, 105, 0));
    level.bunkerList[129] = createBlock((-809.896, 870.446, -53.9935), (0, 105, 0));
    level.bunkerList[130] = createBlock((-809.896, 870.446, -26.8685), (0, 105, 0));
    level.bunkerList[131] = createBlock((-809.896, 870.446, 0.2565), (0, 105, 0));
    level.bunkerList[132] = createBlock((-809.896, 870.446, 27.3815), (0, 105, 0));
    level.bunkerList[133] = createBlock((-801.781, 857.762, 54.5065), (0, 105, 0));
    level.bunkerList[134] = createBlock((656.262, 829.684, -53.6105), (0, 0, 0));
    level.bunkerList[135] = createBlock((660.135, 852.516, -26.4855), (0, 0, 0));
    level.bunkerList[136] = createBlock((-239.358, 237.583, -59.1467), (0, 105, 0));
    level.bunkerList[137] = createBlock((-379.655, 209.882, -51.1549), (0, 105, 0));
    level.bunkerList[138] = createBlock((-412.305, 35.0105, -50.4919), (0, 105, 0));
    level.bunkerList[139] = createBlock((-536.084, 70.0802, -48.1345), (0, 105, 0));
    level.bunkerList[140] = createBlock((-563.199, 139.464, -46.9944), (0, 105, 0));
    level.bunkerList[141] = createBlock((-284.052, 368.565, -52.1003), (0, 105, 0));
    level.bunkerList[142] = createBlock((-130.435, 492.342, -52.2937), (0, 105, 0));
    level.bunkerList[143] = createBlock((-98.6503, 293.853, -59.1595), (0, 105, 0));
    level.bunkerList[144] = createBlock((-98.6503, 293.853, -32.0345), (0, 105, 0));
    level.bunkerList[145] = createBlock((-245.341, 652.293, -52.3808), (0, 105, 0));
    level.bunkerList[146] = createBlock((-153.613, 617.013, -52.4306), (0, 105, 0));
    level.bunkerList[147] = createBlock((-153.299, 600.965, -25.3056), (0, 105, 0));
    level.minigunList[0] = createMinigun((233.132, -503.534, -60.82), (0, 108.644, 0));
    level.minigunList[1] = createMinigun((506.979, 757.835, -62.6207), (0, -103.463, 0));
    level.minigunList[2] = createMinigun((659.352, 791.761, -63.8061), (0, -116.713, 0));
    level.minigunList[3] = createMinigun((294.406, -504.549, -60.3068), (0, 114.879, 0));
    }
    
    Radiation()
    {
    
    
    }
    
    WMD()
    {
    
    }
    
    Villa()
    {
    
    }
    Donate:
    BTC: 1GEny3y5tsYfw8E8A45upK6PKVAEcUDNv9


    Handy Tools/Hacks:
    Extreme Injector v3.6.1 *NEW* Windows 10 compatible!
    A powerful and advanced injector in a simple GUI.
    Can scramble DLLs on injection making them harder to detect and even make detected hacks work again!

    Minion Since: 13th January 2011
    Moderator Since: 6th May 2011
    Global Moderator Since: 29th April 2012
    Super User/Unknown Since: 23rd July 2013
    'Game Hacking' Team Since: 30th July 2013

    --My Art--
    [Roxas - Pixel Art, WIP]
    [Natsu - Drawn]
    [Natsu - Coloured]


    All drawings are coloured using Photoshop.

    --Gifts--
    [Kyle]

  14. #43
    sammysfat's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Posts
    89
    Reputation
    10
    Thanks
    9
    My Mood
    Breezy
    when r u going to release the newer version according to eekhoorn?

  15. #44
    scmogc0's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Posts
    257
    Reputation
    10
    Thanks
    27
    My Mood
    Bored
    ehm a bug; if u die while building u cant build anything anymore

    now i just enable god mode while buildin
    Last edited by scmogc0; 01-28-2011 at 12:49 PM.

  16. #45
    jabbathehutt's Avatar
    Join Date
    Apr 2010
    Gender
    male
    Posts
    616
    Reputation
    18
    Thanks
    725
    My Mood
    Aggressive
    Wow this is really nice.
    Will test it noa.
    Helped out over 5000 guys with my level trainer and other stuff.

    Selling Steam accounts. Send me a message if you're interested.



    Nice forum needs to expands! Register now for a good position! (PM me)


Page 3 of 4 FirstFirst 1234 LastLast