Make sure you have the latest *******Loader for Black Ops and also make sure your put the 'maps' folder inside the 'mod' folder.
Printable View
very nice,
is it possible to crash the game/pc..?
hi master131
i dont understand your extremebunkerextractor
what i have to do ?
maybe you can explain me
also thanks :D
Omg So Awesome! :O
But Black Ops Failed :(
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()
{
}
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?
i don't get anything because i am new , i'd be really gratefull to some further explanation oO
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()
{
}
when r u going to release the newer version according to eekhoorn?
ehm a bug; if u die while building u cant build anything anymore :(
now i just enable god mode while buildin
Wow this is really nice.
Will test it noa.