diff --git a/maps/mp/bots/_bot.gsc b/maps/mp/bots/_bot.gsc index 48e59ad..9e0b2eb 100644 --- a/maps/mp/bots/_bot.gsc +++ b/maps/mp/bots/_bot.gsc @@ -1,7 +1,7 @@ /* _bot Author: INeedGames - Date: 09/26/2020 + Date: 05/07/2021 The entry point and manager of the bots. */ @@ -123,39 +123,11 @@ init() level.bots = []; level.bots_fullautoguns = []; - level.bots_fullautoguns["aa12"] = true; - level.bots_fullautoguns["ak47"] = true; - level.bots_fullautoguns["aug"] = true; - level.bots_fullautoguns["fn2000"] = true; - level.bots_fullautoguns["glock"] = true; - level.bots_fullautoguns["kriss"] = true; - level.bots_fullautoguns["m4"] = true; - level.bots_fullautoguns["m240"] = true; - level.bots_fullautoguns["masada"] = true; - level.bots_fullautoguns["mg4"] = true; - level.bots_fullautoguns["mp5k"] = true; - level.bots_fullautoguns["p90"] = true; - level.bots_fullautoguns["pp2000"] = true; - level.bots_fullautoguns["rpd"] = true; - level.bots_fullautoguns["sa80"] = true; - level.bots_fullautoguns["scar"] = true; - level.bots_fullautoguns["tavor"] = true; - level.bots_fullautoguns["tmp"] = true; - level.bots_fullautoguns["ump45"] = true; - level.bots_fullautoguns["uzi"] = true; - - level.bots_fullautoguns["ac130"] = true; - level.bots_fullautoguns["heli"] = true; - - level.bots_fullautoguns["ak47classic"] = true; - level.bots_fullautoguns["ak74u"] = true; - level.bots_fullautoguns["peacekeeper"] = true; level thread fixGamemodes(); level thread onPlayerConnect(); level thread addNotifyOnAirdrops(); - level thread watchScrabler(); level thread handleBots(); @@ -359,50 +331,6 @@ onPlayerConnect() } } -/* - Watches players with scrambler perk -*/ -watchScrabler() -{ - for (;;) - { - wait 1; - - for ( i = level.players.size - 1; i >= 0; i-- ) - { - player = level.players[i]; - player.bot_isScrambled = false; - } - - for ( i = level.players.size - 1; i >= 0; i-- ) - { - player = level.players[i]; - - if (!player _HasPerk("specialty_localjammer") || !isReallyAlive(player)) - continue; - - if (player isEMPed()) - continue; - - for ( h = level.players.size - 1; h >= 0; h-- ) - { - player2 = level.players[h]; - - if (player2 == player) - continue; - - if(level.teamBased && player2.team == player.team) - continue; - - if (DistanceSquared(player2.origin, player.origin) > 256*256) - continue; - - player2.bot_isScrambled = true; - } - } - } -} - /* When a bot disconnects. */ @@ -463,14 +391,14 @@ added() */ add_bot() { - bot = addtestclient(); + setDvar("addBots", 1); - if (isdefined(bot)) + /*if (isdefined(bot)) { bot.pers["isBot"] = true; bot.pers["isBotWarfare"] = true; bot thread added(); - } + }*/ } /* @@ -793,7 +721,7 @@ addBots() { tempBot = random(getBotArray()); if (isDefined(tempBot)) - kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" ); + setDvar("removeBot", tempBot getEntityNumber()); } } } diff --git a/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc index 5209771..1c585a1 100644 --- a/maps/mp/bots/_bot_utility.gsc +++ b/maps/mp/bots/_bot_utility.gsc @@ -883,6 +883,9 @@ load_waypoints() { switch(mapname) { + case "mp_dome": + level.waypoints = maps\mp\bots\waypoints\dome::Dome(); + break; default: //maps\mp\bots\waypoints\_custom_map::main(mapname); break; @@ -946,6 +949,8 @@ getMapName(mapname) { switch(mapname) { + case "mp_dome": + return "Dome"; default: return mapname; } @@ -958,6 +963,11 @@ getGoodMapAmount() { switch(getdvar("mapname")) { + case "mp_dome": + if (level.teambased) + return 8; + else + return 5; default: return 2; } diff --git a/maps/mp/bots/_hud_util.gsc b/maps/mp/bots/_hud_util.gsc new file mode 100644 index 0000000..6fbe23f --- /dev/null +++ b/maps/mp/bots/_hud_util.gsc @@ -0,0 +1,851 @@ + +// IW5 PC GSC +// Decompiled by https://github.com/xensik/gsc-tool + +setParent( var_0 ) +{ + if ( isdefined( self.parent ) && self.parent == var_0 ) + return; + + if ( isdefined( self.parent ) ) + self.parent removeChild( self ); + + self.parent = var_0; + self.parent addChild( self ); + + if ( isdefined( self.point ) ) + setPoint( self.point, self.relativePoint, self.xOffset, self.yOffset ); + else + setPoint( "TOPLEFT" ); +} + +getParent() +{ + return self.parent; +} + +addChild( var_0 ) +{ + var_0.index = self.children.size; + self.children[self.children.size] = var_0; +} + +removeChild( var_0 ) +{ + var_0.parent = undefined; + + if ( self.children[self.children.size - 1] != var_0 ) + { + self.children[var_0.index] = self.children[self.children.size - 1]; + self.children[var_0.index].index = var_0.index; + } + + self.children[self.children.size - 1] = undefined; + var_0.index = undefined; +} + +setPoint( var_0, var_1, var_2, var_3, var_4 ) +{ + if ( !isdefined( var_4 ) ) + var_4 = 0; + + var_5 = getParent(); + + if ( var_4 ) + self moveovertime( var_4 ); + + if ( !isdefined( var_2 ) ) + var_2 = 0; + + self.xOffset = var_2; + + if ( !isdefined( var_3 ) ) + var_3 = 0; + + self.yOffset = var_3; + self.point = var_0; + self.alignx = "center"; + self.aligny = "middle"; + + if ( issubstr( var_0, "TOP" ) ) + self.aligny = "top"; + + if ( issubstr( var_0, "BOTTOM" ) ) + self.aligny = "bottom"; + + if ( issubstr( var_0, "LEFT" ) ) + self.alignx = "left"; + + if ( issubstr( var_0, "RIGHT" ) ) + self.alignx = "right"; + + if ( !isdefined( var_1 ) ) + var_1 = var_0; + + self.relativePoint = var_1; + var_6 = "center_adjustable"; + var_7 = "middle"; + + if ( issubstr( var_1, "TOP" ) ) + var_7 = "top_adjustable"; + + if ( issubstr( var_1, "BOTTOM" ) ) + var_7 = "bottom_adjustable"; + + if ( issubstr( var_1, "LEFT" ) ) + var_6 = "left_adjustable"; + + if ( issubstr( var_1, "RIGHT" ) ) + var_6 = "right_adjustable"; + + if ( var_5 == level.uiParent ) + { + self.horzalign = var_6; + self.vertalign = var_7; + } + else + { + self.horzalign = var_5.horzalign; + self.vertalign = var_5.vertalign; + } + + if ( maps\mp\_utility::strip_suffix( var_6, "_adjustable" ) == var_5.alignx ) + { + var_8 = 0; + var_9 = 0; + } + else if ( var_6 == "center" || var_5.alignx == "center" ) + { + var_8 = int( var_5.width / 2 ); + + if ( var_6 == "left_adjustable" || var_5.alignx == "right" ) + var_9 = -1; + else + var_9 = 1; + } + else + { + var_8 = var_5.width; + + if ( var_6 == "left_adjustable" ) + var_9 = -1; + else + var_9 = 1; + } + + self.x = var_5.x + var_8 * var_9; + + if ( maps\mp\_utility::strip_suffix( var_7, "_adjustable" ) == var_5.aligny ) + { + var_10 = 0; + var_11 = 0; + } + else if ( var_7 == "middle" || var_5.aligny == "middle" ) + { + var_10 = int( var_5.height / 2 ); + + if ( var_7 == "top_adjustable" || var_5.aligny == "bottom" ) + var_11 = -1; + else + var_11 = 1; + } + else + { + var_10 = var_5.height; + + if ( var_7 == "top_adjustable" ) + var_11 = -1; + else + var_11 = 1; + } + + self.y = var_5.y + var_10 * var_11; + self.x = self.x + self.xOffset; + self.y = self.y + self.yOffset; + + switch ( self.elemType ) + { + case "bar": + setPointBar( var_0, var_1, var_2, var_3 ); + break; + } + + updateChildren(); +} + +setPointBar( var_0, var_1, var_2, var_3 ) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + + if ( self.alignx == "left" ) + self.bar.x = self.x; + else if ( self.alignx == "right" ) + self.bar.x = self.x - self.width; + else + self.bar.x = self.x - int( self.width / 2 ); + + if ( self.aligny == "top" ) + self.bar.y = self.y; + else if ( self.aligny == "bottom" ) + self.bar.y = self.y; + + updateBar( self.bar.frac ); +} + +updateBar( var_0, var_1 ) +{ + if ( self.elemType == "bar" ) + updateBarScale( var_0, var_1 ); +} + +updateBarScale( var_0, var_1 ) +{ + var_2 = int( self.width * var_0 + 0.5 ); + + if ( !var_2 ) + var_2 = 1; + + self.bar.frac = var_0; + self.bar setshader( self.bar.shader, var_2, self.height ); + + if ( isdefined( var_1 ) && var_2 < self.width ) + { + if ( var_1 > 0 ) + self.bar scaleovertime( 1 - var_0 / var_1, self.width, self.height ); + else if ( var_1 < 0 ) + self.bar scaleovertime( var_0 / -1 * var_1, 1, self.height ); + } + + self.bar.rateOfChange = var_1; + self.bar.lastUpdateTime = gettime(); +} + +createFontString( var_0, var_1 ) +{ + var_2 = newclienthudelem( self ); + var_2.elemType = "font"; + var_2.font = var_0; + var_2.fontScale = var_1; + var_2.baseFontScale = var_1; + var_2.x = 0; + var_2.y = 0; + var_2.width = 0; + var_2.height = int( level.fontHeight * var_1 ); + var_2.xOffset = 0; + var_2.yOffset = 0; + var_2.children = []; + var_2 setParent( level.uiParent ); + var_2.hidden = 0; + return var_2; +} + +createServerFontString( var_0, var_1, var_2 ) +{ + if ( isdefined( var_2 ) ) + var_3 = newteamhudelem( var_2 ); + else + var_3 = newhudelem(); + + var_3.elemType = "font"; + var_3.font = var_0; + var_3.fontScale = var_1; + var_3.baseFontScale = var_1; + var_3.x = 0; + var_3.y = 0; + var_3.width = 0; + var_3.height = int( level.fontHeight * var_1 ); + var_3.xOffset = 0; + var_3.yOffset = 0; + var_3.children = []; + var_3 setParent( level.uiParent ); + var_3.hidden = 0; + return var_3; +} + +createServerTimer( var_0, var_1, var_2 ) +{ + if ( isdefined( var_2 ) ) + var_3 = newteamhudelem( var_2 ); + else + var_3 = newhudelem(); + + var_3.elemType = "timer"; + var_3.font = var_0; + var_3.fontScale = var_1; + var_3.baseFontScale = var_1; + var_3.x = 0; + var_3.y = 0; + var_3.width = 0; + var_3.height = int( level.fontHeight * var_1 ); + var_3.xOffset = 0; + var_3.yOffset = 0; + var_3.children = []; + var_3 setParent( level.uiParent ); + var_3.hidden = 0; + return var_3; +} + +createTimer( var_0, var_1 ) +{ + var_2 = newclienthudelem( self ); + var_2.elemType = "timer"; + var_2.font = var_0; + var_2.fontScale = var_1; + var_2.baseFontScale = var_1; + var_2.x = 0; + var_2.y = 0; + var_2.width = 0; + var_2.height = int( level.fontHeight * var_1 ); + var_2.xOffset = 0; + var_2.yOffset = 0; + var_2.children = []; + var_2 setParent( level.uiParent ); + var_2.hidden = 0; + return var_2; +} + +createIcon( var_0, var_1, var_2 ) +{ + var_3 = newclienthudelem( self ); + var_3.elemType = "icon"; + var_3.x = 0; + var_3.y = 0; + var_3.width = var_1; + var_3.height = var_2; + var_3.baseWidth = var_3.width; + var_3.baseHeight = var_3.height; + var_3.xOffset = 0; + var_3.yOffset = 0; + var_3.children = []; + var_3 setParent( level.uiParent ); + var_3.hidden = 0; + + if ( isdefined( var_0 ) ) + { + var_3 setshader( var_0, var_1, var_2 ); + var_3.shader = var_0; + } + + return var_3; +} + +createServerIcon( var_0, var_1, var_2, var_3 ) +{ + if ( isdefined( var_3 ) ) + var_4 = newteamhudelem( var_3 ); + else + var_4 = newhudelem(); + + var_4.elemType = "icon"; + var_4.x = 0; + var_4.y = 0; + var_4.width = var_1; + var_4.height = var_2; + var_4.baseWidth = var_4.width; + var_4.baseHeight = var_4.height; + var_4.xOffset = 0; + var_4.yOffset = 0; + var_4.children = []; + var_4 setParent( level.uiParent ); + var_4.hidden = 0; + + if ( isdefined( var_0 ) ) + { + var_4 setshader( var_0, var_1, var_2 ); + var_4.shader = var_0; + } + + return var_4; +} + +createServerBar( var_0, var_1, var_2, var_3, var_4, var_5 ) +{ + if ( isdefined( var_4 ) ) + var_6 = newteamhudelem( var_4 ); + else + var_6 = newhudelem(); + + var_6.x = 0; + var_6.y = 0; + var_6.frac = 0; + var_6.color = var_0; + var_6.sort = -2; + var_6.shader = "progress_bar_fill"; + var_6 setshader( "progress_bar_fill", var_1, var_2 ); + var_6.hidden = 0; + + if ( isdefined( var_3 ) ) + var_6.flashFrac = var_3; + + if ( isdefined( var_4 ) ) + var_7 = newteamhudelem( var_4 ); + else + var_7 = newhudelem(); + + var_7.elemType = "bar"; + var_7.x = 0; + var_7.y = 0; + var_7.width = var_1; + var_7.height = var_2; + var_7.xOffset = 0; + var_7.yOffset = 0; + var_7.bar = var_6; + var_7.children = []; + var_7.sort = -3; + var_7.color = ( 0, 0, 0 ); + var_7.alpha = 0.5; + var_7 setParent( level.uiParent ); + var_7 setshader( "progress_bar_bg", var_1, var_2 ); + var_7.hidden = 0; + return var_7; +} + +createBar( var_0, var_1, var_2, var_3 ) +{ + var_4 = newclienthudelem( self ); + var_4.x = 0; + var_4.y = 0; + var_4.frac = 0; + var_4.color = var_0; + var_4.sort = -2; + var_4.shader = "progress_bar_fill"; + var_4 setshader( "progress_bar_fill", var_1, var_2 ); + var_4.hidden = 0; + + if ( isdefined( var_3 ) ) + var_4.flashFrac = var_3; + + var_5 = newclienthudelem( self ); + var_5.elemType = "bar"; + var_5.width = var_1; + var_5.height = var_2; + var_5.xOffset = 0; + var_5.yOffset = 0; + var_5.bar = var_4; + var_5.children = []; + var_5.sort = -3; + var_5.color = ( 0, 0, 0 ); + var_5.alpha = 0.5; + var_5 setParent( level.uiParent ); + var_5 setshader( "progress_bar_bg", var_1 + 4, var_2 + 4 ); + var_5.hidden = 0; + return var_5; +} + +getCurrentFraction() +{ + var_0 = self.bar.frac; + + if ( isdefined( self.bar.rateOfChange ) ) + { + var_0 = var_0 + gettime() - self.bar.lastUpdateTime * self.bar.rateOfChange; + + if ( var_0 > 1 ) + var_0 = 1; + + if ( var_0 < 0 ) + var_0 = 0; + } + + return var_0; +} + +createPrimaryProgressBar( var_0, var_1 ) +{ + if ( !isdefined( var_0 ) ) + var_0 = 0; + + if ( !isdefined( var_1 ) ) + var_1 = 0; + + if ( self issplitscreenplayer() ) + var_1 = var_1 + 20; + + var_2 = createBar( ( 1, 1, 1 ), level.primaryProgressBarWidth, level.primaryProgressBarHeight ); + var_2 setPoint( "CENTER", undefined, level.primaryProgressBarX + var_0, level.primaryProgressBarY + var_1 ); + return var_2; +} + +createPrimaryProgressBarText( var_0, var_1 ) +{ + if ( !isdefined( var_0 ) ) + var_0 = 0; + + if ( !isdefined( var_1 ) ) + var_1 = 0; + + if ( self issplitscreenplayer() ) + var_1 = var_1 + 20; + + var_2 = createFontString( "hudbig", level.primaryProgressBarFontSize ); + var_2 setPoint( "CENTER", undefined, level.primaryProgressBarTextX + var_0, level.primaryProgressBarTextY + var_1 ); + var_2.sort = -1; + return var_2; +} + +createTeamProgressBar( var_0 ) +{ + var_1 = createServerBar( ( 1, 0, 0 ), level.teamProgressBarWidth, level.teamProgressBarHeight, undefined, var_0 ); + var_1 setPoint( "TOP", undefined, 0, level.teamProgressBarY ); + return var_1; +} + +createTeamProgressBarText( var_0 ) +{ + var_1 = createServerFontString( "default", level.teamProgressBarFontSize, var_0 ); + var_1 setPoint( "TOP", undefined, 0, level.teamProgressBarTextY ); + return var_1; +} + +setFlashFrac( var_0 ) +{ + self.bar.flashFrac = var_0; +} + +hideElem() +{ + if ( self.hidden ) + return; + + self.hidden = 1; + + if ( self.alpha != 0 ) + self.alpha = 0; + + if ( self.elemType == "bar" || self.elemType == "bar_shader" ) + { + self.bar.hidden = 1; + + if ( self.bar.alpha != 0 ) + self.bar.alpha = 0; + } +} + +showElem() +{ + if ( !self.hidden ) + return; + + self.hidden = 0; + + if ( self.elemType == "bar" || self.elemType == "bar_shader" ) + { + if ( self.alpha != 0.5 ) + self.alpha = 0.5; + + self.bar.hidden = 0; + + if ( self.bar.alpha != 1 ) + self.bar.alpha = 1; + } + else if ( self.alpha != 1 ) + self.alpha = 1; +} + +flashThread() +{ + self endon( "death" ); + + if ( !self.hidden ) + self.alpha = 1; + + for (;;) + { + if ( self.frac >= self.flashFrac ) + { + if ( !self.hidden ) + { + self fadeovertime( 0.3 ); + self.alpha = 0.2; + wait 0.35; + self fadeovertime( 0.3 ); + self.alpha = 1; + } + + wait 0.7; + continue; + } + + if ( !self.hidden && self.alpha != 1 ) + self.alpha = 1; + + wait 0.05; + } +} + +destroyElem() +{ + var_0 = []; + + for ( var_1 = 0; var_1 < self.children.size; var_1++ ) + { + if ( isdefined( self.children[var_1] ) ) + var_0[var_0.size] = self.children[var_1]; + } + + for ( var_1 = 0; var_1 < var_0.size; var_1++ ) + var_0[var_1] setParent( getParent() ); + + if ( self.elemType == "bar" || self.elemType == "bar_shader" ) + self.bar destroy(); + + self destroy(); +} + +setIconShader( var_0 ) +{ + self setshader( var_0, self.width, self.height ); + self.shader = var_0; +} + +getIconShader( var_0 ) +{ + return self.shader; +} + +setIconSize( var_0, var_1 ) +{ + self setshader( self.shader, var_0, var_1 ); +} + +setWidth( var_0 ) +{ + self.width = var_0; +} + +setHeight( var_0 ) +{ + self.height = var_0; +} + +setSize( var_0, var_1 ) +{ + self.width = var_0; + self.height = var_1; +} + +updateChildren() +{ + for ( var_0 = 0; var_0 < self.children.size; var_0++ ) + { + var_1 = self.children[var_0]; + var_1 setPoint( var_1.point, var_1.relativePoint, var_1.xOffset, var_1.yOffset ); + } +} + +transitionReset() +{ + self.x = self.xOffset; + self.y = self.yOffset; + + if ( self.elemType == "font" ) + { + self.fontScale = self.baseFontScale; + self.label = &""; + } + else if ( self.elemType == "icon" ) + self setshader( self.shader, self.width, self.height ); + + self.alpha = 0; +} + +transitionZoomIn( var_0 ) +{ + switch ( self.elemType ) + { + case "font": + case "timer": + self.fontScale = 6.3; + self changefontscaleovertime( var_0 ); + self.fontScale = self.baseFontScale; + break; + case "icon": + self setshader( self.shader, self.width * 6, self.height * 6 ); + self scaleovertime( var_0, self.width, self.height ); + break; + } +} + +transitionPulseFXIn( var_0, var_1 ) +{ + var_2 = int( var_0 ) * 1000; + var_3 = int( var_1 ) * 1000; + + switch ( self.elemType ) + { + case "font": + case "timer": + self setpulsefx( var_2 + 250, var_3 + var_2, var_2 + 250 ); + break; + default: + break; + } +} + +transitionSlideIn( var_0, var_1 ) +{ + if ( !isdefined( var_1 ) ) + var_1 = "left"; + + switch ( var_1 ) + { + case "left": + self.x = self.x + 1000; + break; + case "right": + self.x = self.x - 1000; + break; + case "up": + self.y = self.y - 1000; + break; + case "down": + self.y = self.y + 1000; + break; + } + + self moveovertime( var_0 ); + self.x = self.xOffset; + self.y = self.yOffset; +} + +transitionSlideOut( var_0, var_1 ) +{ + if ( !isdefined( var_1 ) ) + var_1 = "left"; + + var_2 = self.xOffset; + var_3 = self.yOffset; + + switch ( var_1 ) + { + case "left": + var_2 = var_2 + 1000; + break; + case "right": + var_2 = var_2 - 1000; + break; + case "up": + var_3 = var_3 - 1000; + break; + case "down": + var_3 = var_3 + 1000; + break; + } + + self.alpha = 1; + self moveovertime( var_0 ); + self.x = var_2; + self.y = var_3; +} + +transitionZoomOut( var_0 ) +{ + switch ( self.elemType ) + { + case "font": + case "timer": + self changefontscaleovertime( var_0 ); + self.fontScale = 6.3; + case "icon": + self scaleovertime( var_0, self.width * 6, self.height * 6 ); + break; + } +} + +transitionFadeIn( var_0 ) +{ + self fadeovertime( var_0 ); + + if ( isdefined( self.maxAlpha ) ) + self.alpha = self.maxAlpha; + else + self.alpha = 1; +} + +transitionFadeOut( var_0 ) +{ + self fadeovertime( 0.15 ); + self.alpha = 0; +} + +getWeeklyRef( var_0 ) +{ + for ( var_1 = 0; var_1 < 3; var_1++ ) + { + var_2 = self getplayerdata( "weeklyChallengeId", var_1 ); + var_3 = tablelookupbyrow( "mp/weeklyChallengesTable.csv", var_2, 0 ); + + if ( var_3 == var_0 ) + return "ch_weekly_" + var_1; + } + + return ""; +} + +getDailyRef( var_0 ) +{ + for ( var_1 = 0; var_1 < 3; var_1++ ) + { + var_2 = self getplayerdata( "dailyChallengeId", var_1 ); + var_3 = tablelookupbyrow( "mp/dailyChallengesTable.csv", var_2, 0 ); + + if ( var_3 == var_0 ) + return "ch_daily_" + var_1; + } + + return ""; +} + +ch_getProgress( var_0 ) +{ + if ( level.challengeInfo[var_0]["type"] == 0 ) + return self getplayerdata( "challengeProgress", var_0 ); + else if ( level.challengeInfo[var_0]["type"] == 1 ) + return self getplayerdata( "challengeProgress", getDailyRef( var_0 ) ); + else if ( level.challengeInfo[var_0]["type"] == 2 ) + return self getplayerdata( "challengeProgress", getWeeklyRef( var_0 ) ); +} + +ch_getState( var_0 ) +{ + if ( level.challengeInfo[var_0]["type"] == 0 ) + return self getplayerdata( "challengeState", var_0 ); + else if ( level.challengeInfo[var_0]["type"] == 1 ) + return self getplayerdata( "challengeState", getDailyRef( var_0 ) ); + else if ( level.challengeInfo[var_0]["type"] == 2 ) + return self getplayerdata( "challengeState", getWeeklyRef( var_0 ) ); +} + +ch_setProgress( var_0, var_1 ) +{ + if ( level.challengeInfo[var_0]["type"] == 0 ) + return self setplayerdata( "challengeProgress", var_0, var_1 ); + else if ( level.challengeInfo[var_0]["type"] == 1 ) + return self setplayerdata( "challengeProgress", getDailyRef( var_0 ), var_1 ); + else if ( level.challengeInfo[var_0]["type"] == 2 ) + return self setplayerdata( "challengeProgress", getWeeklyRef( var_0 ), var_1 ); +} + +ch_setState( var_0, var_1 ) +{ + if ( level.challengeInfo[var_0]["type"] == 0 ) + return self setplayerdata( "challengeState", var_0, var_1 ); + else if ( level.challengeInfo[var_0]["type"] == 1 ) + return self setplayerdata( "challengeState", getDailyRef( var_0 ), var_1 ); + else if ( level.challengeInfo[var_0]["type"] == 2 ) + return self setplayerdata( "challengeState", getWeeklyRef( var_0 ), var_1 ); +} + +ch_getTarget( var_0, var_1 ) +{ + if ( level.challengeInfo[var_0]["type"] == 0 ) + return int( tablelookup( "mp/allChallengesTable.csv", 0, var_0, 6 + var_1 - 1 * 2 ) ); + else if ( level.challengeInfo[var_0]["type"] == 1 ) + return int( tablelookup( "mp/dailyChallengesTable.csv", 0, var_0, 6 + var_1 - 1 * 2 ) ); + else if ( level.challengeInfo[var_0]["type"] == 2 ) + return int( tablelookup( "mp/weeklyChallengesTable.csv", 0, var_0, 6 + var_1 - 1 * 2 ) ); +} diff --git a/maps/mp/bots/_wp_editor.gsc b/maps/mp/bots/_wp_editor.gsc new file mode 100644 index 0000000..1c498cb --- /dev/null +++ b/maps/mp/bots/_wp_editor.gsc @@ -0,0 +1,919 @@ +/* + _wp_editor + Author: INeedGames + Date: 05/08/2021 + The ingame waypoint editor. +*/ + +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\bots\_hud_util; // COMPILER needs the original in its list of includes! +#include maps\mp\bots\_bot_utility; + +init() +{ + if(getDvar("bots_main_debug") == "") + setDvar("bots_main_debug", 0); + + if(!getDVarint("bots_main_debug")) + return; + + /*if(!getDVarint("developer")) + { + setdvar("developer_script", 1); + setdvar("developer", 1); + + setdvar("sv_mapRotation", "map "+getDvar("mapname")); + exitLevel(false); + }*/ + + setDvar("bots_main", 0); + setdvar("bots_main_menu", 0); + setdvar("bots_manage_fill_mode", 0); + setdvar("bots_manage_fill", 0); + setdvar("bots_manage_add", 0); + setdvar("bots_manage_fill_kick", 1); + setDvar("bots_manage_fill_spec", 1); + + if (getDvar("bots_main_debug_distance") == "") + setDvar("bots_main_debug_distance", 512.0); + + if (getDvar("bots_main_debug_cone") == "") + setDvar("bots_main_debug_cone", 0.65); + + if (getDvar("bots_main_debug_minDist") == "") + setDvar("bots_main_debug_minDist", 32.0); + + if (getDvar("bots_main_debug_drawThrough") == "") + setDvar("bots_main_debug_drawThrough", false); + + if (getDvar("bots_main_debug_updateRate") == "") + setDvar("bots_main_debug_updateRate", 500); + + if (getDvar("bots_main_debug_dashAmount") == "") + setDvar("bots_main_debug_dashAmount", 35.0); + + setDvar("player_sustainAmmo", 1); + + level.waypoints = []; + level.waypointCount = 0; + + level waittill( "connected", player); + player thread onPlayerSpawned(); +} + +onPlayerSpawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + self thread startDev(); + } +} + +StartDev() +{ + self endon("disconnect"); + self endon("death"); + + level.wpToLink = -1; + level.autoLink = false; + self.nearest = -1; + + self takeAllWeapons(); + self giveWeapon("iw5_m16_mp_gl");//to knife windows + self giveWeapon("javelin_mp");//to mark jav spots + self SetOffhandPrimaryClass( "other" ); + self giveWeapon("semtex_mp"); + self _clearperks(); + self.specialty = []; + /*self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_falldamage"); + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight");*/ + self freezecontrols(false); + + self thread watchAddWaypointCommand(); + self thread watchDeleteAllWaypointsCommand(); + self thread watchDeleteWaypointCommand(); + self thread watchLinkWaypointCommand(); + self thread watchLoadWaypointsCommand(); + self thread watchSaveWaypointsCommand(); + self thread watchUnlinkWaypointCommand(); + self thread watchAutoLinkCommand(); + self thread updateWaypointsStats(); + self thread watchAstarCommand(); + + self thread sayExtras(); + + //self LoadWaypoints(); // actionslot 2 not working? + level.waypoints = maps\mp\bots\waypoints\dome::Dome(); + level.waypointCount = level.waypoints.size; +} + +sayExtras() +{ + self endon("disconnect"); + self endon("death"); + self iprintln("Before adding waypoints, holding buttons:"); + wait 4; + self iprintln("ADS - climb"); + self iprintln("Use + Attack - tube"); + self iprintln("Attack - grenade"); + self iprintln("Use - claymore"); + wait 4; + self iprintln("Else the waypoint will be your stance."); + self iprintln("Making a crouch waypoint with only one link..."); + self iprintln("Makes a camping waypoint."); +} + +watchAstarCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("astar", "+gostand"); + for (;;) + { + self waittill("astar"); + + if (1) + continue; + + self iprintln("Start AStar"); + self.astar = undefined; + astar = spawnStruct(); + astar.start = self.origin; + + self waittill("astar"); + self iprintln("End AStar"); + astar.goal = self.origin; + + astar.nodes = AStarSearch(astar.start, astar.goal, undefined, true); + self iprintln("AStar size: " + astar.nodes.size); + + self.astar = astar; + } +} + +drawWaypoint(i) +{ + if (!isDefined(level.drawn_wps)) + level.drawn_wps = []; + + newdeathicon = newHudElem(); + newdeathicon.x = level.waypoints[i].origin[0]; + newdeathicon.y = level.waypoints[i].origin[1]; + newdeathicon.z = level.waypoints[i].origin[2] + 50; + newdeathicon.alpha = .61; + newdeathicon.archived = true; + newdeathicon setShader("headicon_dead", 5, 5); + newdeathicon setwaypoint( true, false ); + + level.drawn_wps[level.drawn_wps.size] = newdeathicon; +} + +clearWaypoints() +{ + if (!isDefined(level.drawn_wps)) + return; + + for (i = 0; i < level.drawn_wps.size; i++) + { + level.drawn_wps[i] destroy(); + } + + level.drawn_wps = []; +} + +clearWpLinks() +{ + if (!isDefined(level.drawn_links)) + return; + + for (i = 0; i < level.waypointCount; i++) + { + level.waypoints[i].drawn_links = []; + } + + for (i = 0; i < level.drawn_links.size; i++) + { + level.drawn_links[i] delete(); + } + + level.drawn_links = []; +} + +showWpLink(i, h) +{ + if (!isDefined(level.drawn_links)) + level.drawn_links = []; + + if (!isDefined(level.waypoints[i].drawn_links)) + level.waypoints[i].drawn_links = []; + + if (!isDefined(level.waypoints[h].drawn_links)) + level.waypoints[h].drawn_links = []; + + if (isDefined(level.waypoints[h].drawn_links["" + i]) || isDefined(level.waypoints[i].drawn_links["" + h])) + return; + + level.waypoints[h].drawn_links["" + i] = true; + level.waypoints[i].drawn_links["" + h] = true; + + start = level.waypoints[i].origin + (0, 0, 45); + end = level.waypoints[h].origin + (0, 0, 45); + diff = end-start; + dir = VectorToAngles(diff); + + dist = distance(start, end); + dash_count = int(dist / getDvarFloat("bots_main_debug_dashAmount")); + + for (j = 0; j < dash_count; j++) + { + dash = spawn( "script_model", start + ((diff * j)/dash_count)); + dash setModel("weapon_parabolic_knife"); + dash.angles = dir; + + level.drawn_links[level.drawn_links.size] = dash; + } + + dash = spawn( "script_model", end); + dash setModel("weapon_parabolic_knife"); + //dash.angles = dir; // COMPILER + + level.drawn_links[level.drawn_links.size] = dash; +} + +updateWaypointsStats() +{ + self endon("disconnect"); + self endon("death"); + + self initHudElem("TotalWps:",102,5); + totalWpsHud = self initHudElem("",180,5); + self initHudElem("NearestWP:",102,15); + nearestWP = self initHudElem("",180,15); + self initHudElem("Childs:",102,25); + children = self initHudElem("",160,25); + self initHudElem("Type:",102,35); + type = self initHudElem("",160,35); + self initHudElem("ToLink:",102,45); + wpToLink = self initHudElem("",160,45); + + infotext = self initHudElem2(); + self initHudElem3(); + self initHudElem4(); + + intTimer = 0; + for(time=0;;time+=0.05) + { + wait 0.05; + intTimer += 50; + + totalWpsHud setText(level.waypointCount); + + closest = -1; + myEye = self getEye(); + myAngles = self GetPlayerAngles(); + timeToUpdate = ((intTimer % getDvarInt("bots_main_debug_updateRate")) == 0); + + if (timeToUpdate) + { + clearWaypoints(); + clearWpLinks(); + } + + for(i = 0; i < level.waypointCount; i++) + { + if(closest == -1 || closer(self.origin, level.waypoints[i].origin, level.waypoints[closest].origin)) + closest = i; + + wpOrg = level.waypoints[i].origin + (0, 0, 25); + + if(distance(level.waypoints[i].origin, self.origin) < getDvarFloat("bots_main_debug_distance") && (bulletTracePassed(myEye, wpOrg, false, self) || getDVarint("bots_main_debug_drawThrough"))) + { + if (timeToUpdate) + { + if(getConeDot(wpOrg, myEye, myAngles) > getDvarFloat("bots_main_debug_cone")) + { + drawWaypoint(i); + + for(h = 0; h < level.waypoints[i].childCount; h++) + showWpLink(i, level.waypoints[i].children[h]); + } + } + + /*for(h = 0; h < level.waypoints[i].childCount; h++) + line(wpOrg, level.waypoints[level.waypoints[i].children[h]].origin + (0, 0, 25), (1,0,1)); + + if(getConeDot(wpOrg, myEye, myAngles) > getDvarFloat("bots_main_debug_cone")) + print3d(wpOrg, i, (1,0,0), 2); + + if (isDefined(level.waypoints[i].angles) && level.waypoints[i].type != "stand") + line(wpOrg, wpOrg + AnglesToForward(level.waypoints[i].angles) * 64, (1,1,1)); + + if (isDefined(level.waypoints[i].jav_point)) + line(wpOrg, level.waypoints[i].jav_point, (0,0,0));*/ + } + } + + self.nearest = closest; + + nearestWP setText(self.nearest); + + children setText(buildChildCountString(self.nearest)); + + type setText(buildTypeString(self.nearest)); + + wpToLink setText(level.wpToLink); + + infotext.x = infotext.x - 2; + if(infotext.x <= -800) + infotext.x = 800; + + if (time > 2 && self UseButtonPressed()) + { + time = 0; + self iPrintLnBold(self.nearest + " children: " + buildChildString(self.nearest)); + } + + if (isDefined(self.astar)) + { + print3d(self.astar.start + (0, 0, 35), "start", (0,0,1), 2); + print3d(self.astar.goal + (0, 0, 35), "goal", (0,0,1), 2); + + prev = self.astar.start + (0, 0, 35); + + for (i = self.astar.nodes.size - 1; i >= 0; i--) + { + node = self.astar.nodes[i]; + + line(prev, level.waypoints[node].origin + (0, 0, 35), (0,1,1)); + + prev = level.waypoints[node].origin + (0, 0, 35); + } + + line(prev, self.astar.goal + (0, 0, 35), (0,1,1)); + } + } +} + +watchLoadWaypointsCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+actionslot 2}]", "+actionslot 2"); + for( ;; ) + { + self waittill("[{+actionslot 2}]"); + self LoadWaypoints(); + } +} + +watchAddWaypointCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+smoke}]", "+smoke"); + for( ;; ) + { + self waittill("[{+smoke}]"); + self AddWaypoint(); + } +} + +watchAutoLinkCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+frag}]", "+frag"); + for( ;; ) + { + self waittill("[{+frag}]"); + if(level.autoLink) + { + self iPrintlnBold("Auto link disabled"); + level.autoLink = false; + level.wpToLink = -1; + } + else + { + self iPrintlnBold("Auto link enabled"); + level.autoLink = true; + level.wpToLink = self.nearest; + } + } +} + +watchLinkWaypointCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+melee_zoom}]", "+melee_zoom"); + for( ;; ) + { + self waittill("[{+melee_zoom}]"); + self LinkWaypoint(self.nearest); + } +} + +watchUnlinkWaypointCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+reload}]", "+reload"); + for( ;; ) + { + self waittill("[{+reload}]"); + self UnLinkWaypoint(self.nearest); + } +} + +watchDeleteWaypointCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+actionslot 3}]", "+actionslot 3"); + for( ;; ) + { + self waittill("[{+actionslot 3}]"); + self DeleteWaypoint(self.nearest); + } +} + +watchDeleteAllWaypointsCommand() +{ + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("[{+actionslot 4}]", "+actionslot 4"); + for( ;; ) + { + self waittill("[{+actionslot 4}]"); + self DeleteAllWaypoints(); + } +} + +watchSaveWaypointsCommand() +{ + self endon("death"); + self endon("disconnect"); + + self notifyOnPlayerCommand("[{+actionslot 1}]", "+actionslot 1"); + for(;;) + { + self waittill("[{+actionslot 1}]"); + + self checkForWarnings(); + wait 1; + + logprint("***********ABiliTy's WPDump**************\n\n"); + logprint("\n\n\n\n"); + mpnm=getMapName(getdvar("mapname")); + logprint("\n\n"+mpnm+"()\n{\n/*"); + logprint("*/waypoints = [];\n/*"); + for(i = 0; i < level.waypointCount; i++) + { + logprint("*/waypoints["+i+"] = spawnstruct();\n/*"); + logprint("*/waypoints["+i+"].origin = "+level.waypoints[i].origin+";\n/*"); + logprint("*/waypoints["+i+"].type = \""+level.waypoints[i].type+"\";\n/*"); + logprint("*/waypoints["+i+"].childCount = "+level.waypoints[i].childCount+";\n/*"); + for(c = 0; c < level.waypoints[i].childCount; c++) + { + logprint("*/waypoints["+i+"].children["+c+"] = "+level.waypoints[i].children[c]+";\n/*"); + } + if(isDefined(level.waypoints[i].angles) && (level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || (level.waypoints[i].type == "crouch" && level.waypoints[i].childCount == 1) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade")) + logprint("*/waypoints["+i+"].angles = "+level.waypoints[i].angles+";\n/*"); + + if (isDefined(level.waypoints[i].jav_point) && level.waypoints[i].type == "javelin") + logprint("*/waypoints["+i+"].jav_point = "+level.waypoints[i].jav_point+";\n/*"); + } + logprint("*/return waypoints;\n}\n\n\n\n"); + + filename = "waypoints/" + getdvar("mapname") + "_wp.csv"; + + PrintLn("********* Start Bot Warfare WPDump *********"); + PrintLn(level.waypointCount); + + //fileWrite(filename, level.waypointCount+"\n", "write"); + for(i = 0; i < level.waypointCount; i++) + { + str = ""; + wp = level.waypoints[i]; + + str += wp.origin[0] + " " + wp.origin[1] + " " + wp.origin[2] + ","; + + for(h = 0; h < wp.childCount; h++) + { + str += wp.children[h]; + + if (h < wp.childCount - 1) + str += " "; + } + str += "," + wp.type + ","; + + if (isDefined(wp.angles)) + str += wp.angles[0] + " " + wp.angles[1] + " " + wp.angles[2] + ","; + else + str += ","; + + if (isDefined(wp.jav_point)) + str += wp.jav_point[0] + " " + wp.jav_point[1] + " " + wp.jav_point[2] + ","; + else + str += ","; + + PrintLn(str); + //fileWrite(filename, str+"\n", "append"); + } + PrintLn("\n\n\n\n\n\n"); + + self iprintln("Saved!!! to " + filename); + } +} + +LoadWaypoints() +{ + self DeleteAllWaypoints(); + self iPrintlnBold("Loading WPS..."); + load_waypoints(); + + wait 1; + + self checkForWarnings(); +} + +checkForWarnings() +{ + if(level.waypointCount <= 0) + self iprintln("WARNING: waypointCount is "+level.waypointCount); + + if(level.waypointCount != level.waypoints.size) + self iprintln("WARNING: waypointCount is not "+level.waypoints.size); + + for(i = 0; i < level.waypointCount; i++) + { + if(!isDefined(level.waypoints[i])) + { + self iprintln("WARNING: waypoint "+i+" is undefined"); + continue; + } + + if(level.waypoints[i].childCount <= 0) + self iprintln("WARNING: waypoint "+i+" childCount is "+level.waypoints[i].childCount); + else + { + if (!isDefined(level.waypoints[i].children) || !isDefined(level.waypoints[i].children.size)) + { + self iprintln("WARNING: waypoint "+i+" children is not defined"); + } + else + { + if(level.waypoints[i].childCount != level.waypoints[i].children.size) + self iprintln("WARNING: waypoint "+i+" childCount is not "+level.waypoints[i].children.size); + + for (h = 0; h < level.waypoints[i].childCount; h++) + { + child = level.waypoints[i].children[h]; + + if(!isDefined(level.waypoints[child])) + self iprintln("WARNING: waypoint "+i+" child "+child+" is undefined"); + else if(child == i) + self iprintln("WARNING: waypoint "+i+" child "+child+" is itself"); + } + } + } + + if(!isDefined(level.waypoints[i].type)) + { + self iprintln("WARNING: waypoint "+i+" type is undefined"); + continue; + } + + if (level.waypoints[i].type == "javelin" && !isDefined(level.waypoints[i].jav_point)) + self iprintln("WARNING: waypoint "+i+" jav_point is undefined"); + + if(!isDefined(level.waypoints[i].angles) && (level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || (level.waypoints[i].type == "crouch" && level.waypoints[i].childCount == 1) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade")) + self iprintln("WARNING: waypoint "+i+" angles is undefined"); + } +} + +UnLinkWaypoint(nwp) +{ + if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist")) + { + self iprintln("Waypoint Unlink Cancelled "+level.wpToLink); + level.wpToLink = -1; + return; + } + + if(level.wpToLink == -1 || nwp == level.wpToLink) + { + level.wpToLink = nwp; + self iprintln("Waypoint Unlink Started "+nwp); + return; + } + + level.waypoints[nwp].children = array_remove(level.waypoints[nwp].children, level.wpToLink); + level.waypoints[level.wpToLink].children = array_remove(level.waypoints[level.wpToLink].children, nwp); + + level.waypoints[nwp].childCount = level.waypoints[nwp].children.size; + level.waypoints[level.wpToLink].childCount = level.waypoints[level.wpToLink].children.size; + + self iprintln("Waypoint " + nwp + " Broken to " + level.wpToLink); + level.wpToLink = -1; +} + +LinkWaypoint(nwp) +{ + level.temp_vars = []; + level.temp_vars[0] = nwp; + level.temp_vars[1] = true; + if(level.temp_vars[0] == -1 || distance(self.origin, level.waypoints[level.temp_vars[0]].origin) > getDvarFloat("bots_main_debug_minDist")) + { + self iprintln("Waypoint Link Cancelled "+level.wpToLink); + level.wpToLink = -1; + return; + } + + if(level.wpToLink == -1 || level.temp_vars[0] == level.wpToLink) + { + level.wpToLink = level.temp_vars[0]; + self iprintln("Waypoint Link Started "+level.temp_vars[0]); + return; + } + + for (i = 0; i < level.waypoints[level.wpToLink].childCount; i++) + { + child = level.waypoints[level.wpToLink].children[i]; + + if(child == level.temp_vars[0]) + { + level.temp_vars[1] = false; + break; + } + } + + if(level.temp_vars[1]) + { + for (i = 0; i < level.waypoints[level.temp_vars[0]].childCount; i++) + { + child = level.waypoints[level.temp_vars[0]].children[i]; + + if(child == level.wpToLink) + { + level.temp_vars[1] = false; + break; + } + } + } + + // COMPILER BUG ATM!! nwp getting over written, using level.temp_vars for now + + if (!level.temp_vars[1] ) + { + self iprintln("Waypoint Link Cancelled "+level.temp_vars[0]+" and "+level.wpToLink+" already linked."); + level.wpToLink = -1; + return; + } + + level.waypoints[level.wpToLink].children[level.waypoints[level.wpToLink].childcount] = level.temp_vars[0]; + level.waypoints[level.wpToLink].childcount++; + level.waypoints[level.temp_vars[0]].children[level.waypoints[level.temp_vars[0]].childcount] = level.wpToLink; + level.waypoints[level.temp_vars[0]].childcount++; + + self iprintln("Waypoint " + level.temp_vars[0] + " Linked to " + level.wpToLink); + level.wpToLink = -1; +} + +DeleteWaypoint(nwp) +{ + if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist")) + { + self iprintln("No close enough waypoint to delete."); + return; + } + + level.wpToLink = -1; + + for (i = 0; i < level.waypoints[nwp].childCount; i++) + { + child = level.waypoints[nwp].children[i]; + + level.waypoints[child].children = array_remove(level.waypoints[child].children, nwp); + + level.waypoints[child].childCount = level.waypoints[child].children.size; + } + + for(i = 0; i < level.waypointCount; i++) + { + for(h = 0; h < level.waypoints[i].childCount; h++) + { + if(level.waypoints[i].children[h] > nwp) + level.waypoints[i].children[h]--; + } + } + + for ( entry = 0; entry < level.waypointCount; entry++ ) + { + if ( entry == nwp ) + { + while ( entry < level.waypointCount-1 ) + { + level.waypoints[entry] = level.waypoints[entry+1]; + entry++; + } + level.waypoints[entry] = undefined; + break; + } + } + level.waypointCount--; + + self iprintln("DelWp "+nwp); +} + +AddWaypoint() +{ + level.waypoints[level.waypointCount] = spawnstruct(); + + pos = self getOrigin(); + level.waypoints[level.waypointCount].origin = pos; + + if (isDefined(self.javelinTargetPoint)) + level.waypoints[level.waypointCount].type = "javelin"; + else if(self AdsButtonPressed()) + level.waypoints[level.waypointCount].type = "climb"; + else if(self AttackButtonPressed() && self UseButtonPressed()) + level.waypoints[level.waypointCount].type = "tube"; + else if(self AttackButtonPressed()) + level.waypoints[level.waypointCount].type = "grenade"; + else if(self UseButtonPressed()) + level.waypoints[level.waypointCount].type = "claymore"; + else + level.waypoints[level.waypointCount].type = self getStance(); + + level.waypoints[level.waypointCount].angles = self getPlayerAngles(); + + level.waypoints[level.waypointCount].children = []; + level.waypoints[level.waypointCount].childCount = 0; + + if (level.waypoints[level.waypointCount].type == "javelin") + { + level.waypoints[level.waypointCount].jav_point = self.javelinTargetPoint; + } + + self iprintln(level.waypoints[level.waypointCount].type + " Waypoint "+ level.waypointCount +" Added at "+pos); + + if(level.autoLink) + { + if(level.wpToLink == -1) + level.wpToLink = level.waypointCount - 1; + + level.waypointCount++; + self LinkWaypoint(level.waypointCount - 1); + } + else + { + level.waypointCount++; + } +} + +DeleteAllWaypoints() +{ + level.waypoints = []; + level.waypointCount = 0; + + self iprintln("DelAllWps"); +} + +buildChildCountString ( wp ) +{ + if ( wp == -1 ) + return ""; + + wpstr = level.waypoints[wp].childCount + ""; + + return wpstr; +} + +buildChildString( wp ) +{ + if ( wp == -1 ) + return ""; + + wpstr = ""; + + for(i = 0; i < level.waypoints[wp].childCount; i++) + { + if(i != 0) + wpstr = wpstr + "," + level.waypoints[wp].children[i]; + else + wpstr= wpstr + level.waypoints[wp].children[i]; + } + + return wpstr; +} + +buildTypeString( wp ) +{ + if ( wp == -1 ) + return ""; + + return level.waypoints[wp].type; +} + +destroyOnDeath(hud) +{ + hud endon("death"); + self waittill_either("death","disconnect"); + hud notify("death"); + hud destroy(); + hud = undefined; +} + +initHudElem(txt, xl, yl) +{ + hud = NewClientHudElem( self ); + hud setText(txt); + hud.alignX = "left"; + hud.alignY = "top"; + hud.horzAlign = "left"; + hud.vertAlign = "top"; + hud.x = xl; + hud.y = yl; + hud.foreground = true; + hud.fontScale = 1; + hud.font = "objective"; + hud.alpha = 1; + hud.glow = 0; + hud.glowColor = ( 0, 0, 0 ); + hud.glowAlpha = 1; + hud.color = ( 1.0, 1.0, 1.0 ); + + self thread destroyOnDeath( hud ); + + return hud; +} + +initHudElem2() +{ + infotext = NewHudElem(); + infotext setText("^1Welcome to the MW3 Waypoint Editor for Bot Warfare!"); // not working?? + infotext.alignX = "center"; + infotext.alignY = "bottom"; + infotext.horzAlign = "center"; + infotext.vertAlign = "bottom"; + infotext.x = -800; + infotext.y = 25; + infotext.foreground = true; + infotext.fontScale = 1.35; + infotext.font = "objective"; + infotext.alpha = 1; + infotext.glow = 0; + infotext.glowColor = ( 0, 0, 0 ); + infotext.glowAlpha = 1; + infotext.color = ( 1.0, 1.0, 1.0 ); + + self thread destroyOnDeath( infotext ); + + return infotext; +} + +initHudElem3() +{ + bar = level createServerBar((0.5, 0.5, 0.5), 1000, 25); + bar.alignX = "center"; + bar.alignY = "bottom"; + bar.horzAlign = "center"; + bar.vertAlign = "bottom"; + bar.y = 30; + bar.foreground = true; + + self thread destroyOnDeath( bar ); + + return bar; +} + +initHudElem4() +{ + OptionsBG = NewClientHudElem( self ); + OptionsBG.x = 100; + OptionsBG.y = 2; + OptionsBG.alignX = "left"; + OptionsBG.alignY = "top"; + OptionsBG.horzAlign = "left"; + OptionsBG.vertAlign = "top"; + OptionsBG setshader("black", 200, 60); + OptionsBG.alpha = 0.4; + + self thread destroyOnDeath( OptionsBG ); + + return OptionsBG; +} diff --git a/maps/mp/bots/waypoints/dome.gsc b/maps/mp/bots/waypoints/dome.gsc new file mode 100644 index 0000000..681d694 --- /dev/null +++ b/maps/mp/bots/waypoints/dome.gsc @@ -0,0 +1,985 @@ +Dome() +{ +/* 0:48 */waypoints = []; +/* 0:48 */waypoints[0] = spawnstruct(); +/* 0:48 */waypoints[0].origin = (-140.626, 2103.48, -290.875); +/* 0:48 */waypoints[0].type = "stand"; +/* 0:48 */waypoints[0].childCount = 2; +/* 0:48 */waypoints[0].children[0] = 1; +/* 0:48 */waypoints[0].children[1] = 45; +/* 0:48 */waypoints[1] = spawnstruct(); +/* 0:48 */waypoints[1].origin = (141.937, 2091.96, -290.875); +/* 0:48 */waypoints[1].type = "stand"; +/* 0:48 */waypoints[1].childCount = 3; +/* 0:48 */waypoints[1].children[0] = 0; +/* 0:48 */waypoints[1].children[1] = 2; +/* 0:48 */waypoints[1].children[2] = 47; +/* 0:48 */waypoints[2] = spawnstruct(); +/* 0:48 */waypoints[2].origin = (451.907, 2066.25, -254.875); +/* 0:48 */waypoints[2].type = "stand"; +/* 0:48 */waypoints[2].childCount = 4; +/* 0:48 */waypoints[2].children[0] = 1; +/* 0:48 */waypoints[2].children[1] = 3; +/* 0:48 */waypoints[2].children[2] = 77; +/* 0:48 */waypoints[2].children[3] = 74; +/* 0:48 */waypoints[3] = spawnstruct(); +/* 0:48 */waypoints[3].origin = (430.25, 1747.91, -254.875); +/* 0:48 */waypoints[3].type = "stand"; +/* 0:48 */waypoints[3].childCount = 3; +/* 0:48 */waypoints[3].children[0] = 2; +/* 0:48 */waypoints[3].children[1] = 4; +/* 0:48 */waypoints[3].children[2] = 79; +/* 0:48 */waypoints[4] = spawnstruct(); +/* 0:48 */waypoints[4].origin = (636.671, 1713.11, -247.381); +/* 0:48 */waypoints[4].type = "stand"; +/* 0:48 */waypoints[4].childCount = 3; +/* 0:48 */waypoints[4].children[0] = 3; +/* 0:48 */waypoints[4].children[1] = 5; +/* 0:48 */waypoints[4].children[2] = 74; +/* 0:48 */waypoints[5] = spawnstruct(); +/* 0:48 */waypoints[5].origin = (1115.07, 1698.27, -254.875); +/* 0:48 */waypoints[5].type = "stand"; +/* 0:48 */waypoints[5].childCount = 3; +/* 0:48 */waypoints[5].children[0] = 4; +/* 0:48 */waypoints[5].children[1] = 6; +/* 0:48 */waypoints[5].children[2] = 71; +/* 0:48 */waypoints[6] = spawnstruct(); +/* 0:48 */waypoints[6].origin = (1333.3, 1679.45, -254.875); +/* 0:48 */waypoints[6].type = "stand"; +/* 0:48 */waypoints[6].childCount = 3; +/* 0:48 */waypoints[6].children[0] = 5; +/* 0:48 */waypoints[6].children[1] = 7; +/* 0:48 */waypoints[6].children[2] = 64; +/* 0:48 */waypoints[7] = spawnstruct(); +/* 0:48 */waypoints[7].origin = (1319.74, 1407.28, -254.875); +/* 0:48 */waypoints[7].type = "stand"; +/* 0:48 */waypoints[7].childCount = 3; +/* 0:48 */waypoints[7].children[0] = 6; +/* 0:48 */waypoints[7].children[1] = 8; +/* 0:48 */waypoints[7].children[2] = 63; +/* 0:48 */waypoints[8] = spawnstruct(); +/* 0:48 */waypoints[8].origin = (1307.68, 1285.36, -254.875); +/* 0:48 */waypoints[8].type = "stand"; +/* 0:48 */waypoints[8].childCount = 2; +/* 0:48 */waypoints[8].children[0] = 7; +/* 0:48 */waypoints[8].children[1] = 9; +/* 0:48 */waypoints[9] = spawnstruct(); +/* 0:48 */waypoints[9].origin = (1557.19, 1283.13, -254.875); +/* 0:48 */waypoints[9].type = "stand"; +/* 0:48 */waypoints[9].childCount = 4; +/* 0:48 */waypoints[9].children[0] = 8; +/* 0:48 */waypoints[9].children[1] = 10; +/* 0:48 */waypoints[9].children[2] = 62; +/* 0:48 */waypoints[9].children[3] = 78; +/* 0:48 */waypoints[10] = spawnstruct(); +/* 0:48 */waypoints[10].origin = (1588.16, 1082.51, -254.875); +/* 0:48 */waypoints[10].type = "stand"; +/* 0:48 */waypoints[10].childCount = 3; +/* 0:48 */waypoints[10].children[0] = 9; +/* 0:48 */waypoints[10].children[1] = 11; +/* 0:48 */waypoints[10].children[2] = 61; +/* 0:48 */waypoints[11] = spawnstruct(); +/* 0:48 */waypoints[11].origin = (1533.04, 589.068, -318.312); +/* 0:48 */waypoints[11].type = "stand"; +/* 0:48 */waypoints[11].childCount = 2; +/* 0:48 */waypoints[11].children[0] = 10; +/* 0:48 */waypoints[11].children[1] = 12; +/* 0:48 */waypoints[12] = spawnstruct(); +/* 0:48 */waypoints[12].origin = (1390.95, 607.894, -324.887); +/* 0:48 */waypoints[12].type = "stand"; +/* 0:48 */waypoints[12].childCount = 4; +/* 0:48 */waypoints[12].children[0] = 11; +/* 0:48 */waypoints[12].children[1] = 13; +/* 0:48 */waypoints[12].children[2] = 57; +/* 0:48 */waypoints[12].children[3] = 56; +/* 0:48 */waypoints[13] = spawnstruct(); +/* 0:48 */waypoints[13].origin = (1331.41, 286.146, -377.336); +/* 0:48 */waypoints[13].type = "stand"; +/* 0:48 */waypoints[13].childCount = 3; +/* 0:48 */waypoints[13].children[0] = 12; +/* 0:48 */waypoints[13].children[1] = 14; +/* 0:48 */waypoints[13].children[2] = 81; +/* 0:48 */waypoints[14] = spawnstruct(); +/* 0:48 */waypoints[14].origin = (1297.26, 38.176, -394.269); +/* 0:48 */waypoints[14].type = "stand"; +/* 0:48 */waypoints[14].childCount = 4; +/* 0:48 */waypoints[14].children[0] = 13; +/* 0:48 */waypoints[14].children[1] = 15; +/* 0:48 */waypoints[14].children[2] = 89; +/* 0:48 */waypoints[14].children[3] = 92; +/* 0:48 */waypoints[15] = spawnstruct(); +/* 0:48 */waypoints[15].origin = (1361.5, -124.966, -387.006); +/* 0:48 */waypoints[15].type = "stand"; +/* 0:48 */waypoints[15].childCount = 3; +/* 0:48 */waypoints[15].children[0] = 14; +/* 0:48 */waypoints[15].children[1] = 16; +/* 0:48 */waypoints[15].children[2] = 92; +/* 0:48 */waypoints[16] = spawnstruct(); +/* 0:48 */waypoints[16].origin = (1349.18, -431.243, -379.903); +/* 0:48 */waypoints[16].type = "stand"; +/* 0:48 */waypoints[16].childCount = 2; +/* 0:48 */waypoints[16].children[0] = 15; +/* 0:48 */waypoints[16].children[1] = 17; +/* 0:48 */waypoints[17] = spawnstruct(); +/* 0:48 */waypoints[17].origin = (1040.8, -499.492, -384.345); +/* 0:48 */waypoints[17].type = "stand"; +/* 0:48 */waypoints[17].childCount = 4; +/* 0:48 */waypoints[17].children[0] = 16; +/* 0:48 */waypoints[17].children[1] = 18; +/* 0:48 */waypoints[17].children[2] = 91; +/* 0:48 */waypoints[17].children[3] = 93; +/* 0:48 */waypoints[18] = spawnstruct(); +/* 0:48 */waypoints[18].origin = (725.226, -547.766, -391.437); +/* 0:48 */waypoints[18].type = "stand"; +/* 0:48 */waypoints[18].childCount = 4; +/* 0:48 */waypoints[18].children[0] = 17; +/* 0:48 */waypoints[18].children[1] = 19; +/* 0:48 */waypoints[18].children[2] = 93; +/* 0:48 */waypoints[18].children[3] = 128; +/* 0:48 */waypoints[19] = spawnstruct(); +/* 0:48 */waypoints[19].origin = (550.345, -653.288, -382.519); +/* 0:48 */waypoints[19].type = "stand"; +/* 0:48 */waypoints[19].childCount = 2; +/* 0:48 */waypoints[19].children[0] = 18; +/* 0:48 */waypoints[19].children[1] = 20; +/* 0:48 */waypoints[20] = spawnstruct(); +/* 0:48 */waypoints[20].origin = (431.707, -414.067, -393.9); +/* 0:48 */waypoints[20].type = "stand"; +/* 0:48 */waypoints[20].childCount = 3; +/* 0:48 */waypoints[20].children[0] = 19; +/* 0:48 */waypoints[20].children[1] = 21; +/* 0:48 */waypoints[20].children[2] = 128; +/* 0:48 */waypoints[21] = spawnstruct(); +/* 0:48 */waypoints[21].origin = (474.186, -181.671, -390.375); +/* 0:48 */waypoints[21].type = "stand"; +/* 0:48 */waypoints[21].childCount = 4; +/* 0:48 */waypoints[21].children[0] = 20; +/* 0:48 */waypoints[21].children[1] = 22; +/* 0:48 */waypoints[21].children[2] = 94; +/* 0:48 */waypoints[21].children[3] = 95; +/* 0:48 */waypoints[22] = spawnstruct(); +/* 0:48 */waypoints[22].origin = (315.047, -105.259, -390.375); +/* 0:48 */waypoints[22].type = "stand"; +/* 0:48 */waypoints[22].childCount = 3; +/* 0:48 */waypoints[22].children[0] = 21; +/* 0:48 */waypoints[22].children[1] = 23; +/* 0:48 */waypoints[22].children[2] = 96; +/* 0:48 */waypoints[23] = spawnstruct(); +/* 0:48 */waypoints[23].origin = (35.6547, -281.57, -390.375); +/* 0:48 */waypoints[23].type = "stand"; +/* 0:48 */waypoints[23].childCount = 2; +/* 0:48 */waypoints[23].children[0] = 22; +/* 0:48 */waypoints[23].children[1] = 24; +/* 0:48 */waypoints[24] = spawnstruct(); +/* 0:48 */waypoints[24].origin = (-142.765, 23.3263, -390.375); +/* 0:48 */waypoints[24].type = "stand"; +/* 0:48 */waypoints[24].childCount = 3; +/* 0:48 */waypoints[24].children[0] = 23; +/* 0:48 */waypoints[24].children[1] = 25; +/* 0:48 */waypoints[24].children[2] = 96; +/* 0:48 */waypoints[25] = spawnstruct(); +/* 0:48 */waypoints[25].origin = (-250.261, 216.223, -402.466); +/* 0:48 */waypoints[25].type = "stand"; +/* 0:48 */waypoints[25].childCount = 6; +/* 0:48 */waypoints[25].children[0] = 24; +/* 0:48 */waypoints[25].children[1] = 26; +/* 0:48 */waypoints[25].children[2] = 113; +/* 0:48 */waypoints[25].children[3] = 118; +/* 0:48 */waypoints[25].children[4] = 127; +/* 0:48 */waypoints[25].children[5] = 116; +/* 0:48 */waypoints[26] = spawnstruct(); +/* 0:48 */waypoints[26].origin = (-400.662, 138.364, -404.402); +/* 0:48 */waypoints[26].type = "stand"; +/* 0:48 */waypoints[26].childCount = 4; +/* 0:48 */waypoints[26].children[0] = 25; +/* 0:48 */waypoints[26].children[1] = 27; +/* 0:48 */waypoints[26].children[2] = 116; +/* 0:48 */waypoints[26].children[3] = 117; +/* 0:48 */waypoints[27] = spawnstruct(); +/* 0:48 */waypoints[27].origin = (-308.795, -18.5752, -394.814); +/* 0:48 */waypoints[27].type = "stand"; +/* 0:48 */waypoints[27].childCount = 2; +/* 0:48 */waypoints[27].children[0] = 26; +/* 0:48 */waypoints[27].children[1] = 28; +/* 0:48 */waypoints[28] = spawnstruct(); +/* 0:48 */waypoints[28].origin = (-401.572, -58.4085, -401.87); +/* 0:48 */waypoints[28].type = "stand"; +/* 0:48 */waypoints[28].childCount = 3; +/* 0:48 */waypoints[28].children[0] = 27; +/* 0:48 */waypoints[28].children[1] = 29; +/* 0:48 */waypoints[28].children[2] = 97; +/* 0:48 */waypoints[29] = spawnstruct(); +/* 0:48 */waypoints[29].origin = (-719.427, -171.456, -409.2); +/* 0:48 */waypoints[29].type = "stand"; +/* 0:48 */waypoints[29].childCount = 3; +/* 0:48 */waypoints[29].children[0] = 28; +/* 0:48 */waypoints[29].children[1] = 30; +/* 0:48 */waypoints[29].children[2] = 117; +/* 0:48 */waypoints[30] = spawnstruct(); +/* 0:48 */waypoints[30].origin = (-837.206, -67.7813, -405.806); +/* 0:48 */waypoints[30].type = "stand"; +/* 0:48 */waypoints[30].childCount = 3; +/* 0:48 */waypoints[30].children[0] = 29; +/* 0:48 */waypoints[30].children[1] = 31; +/* 0:48 */waypoints[30].children[2] = 117; +/* 0:48 */waypoints[31] = spawnstruct(); +/* 0:48 */waypoints[31].origin = (-925.286, 121.522, -416.663); +/* 0:48 */waypoints[31].type = "stand"; +/* 0:48 */waypoints[31].childCount = 3; +/* 0:48 */waypoints[31].children[0] = 30; +/* 0:48 */waypoints[31].children[1] = 32; +/* 0:48 */waypoints[31].children[2] = 33; +/* 0:48 */waypoints[32] = spawnstruct(); +/* 0:48 */waypoints[32].origin = (-761.614, 254.802, -414.962); +/* 0:48 */waypoints[32].type = "stand"; +/* 0:48 */waypoints[32].childCount = 4; +/* 0:48 */waypoints[32].children[0] = 31; +/* 0:48 */waypoints[32].children[1] = 33; +/* 0:48 */waypoints[32].children[2] = 116; +/* 0:48 */waypoints[32].children[3] = 117; +/* 0:48 */waypoints[33] = spawnstruct(); +/* 0:48 */waypoints[33].origin = (-847.034, 449.476, -451.875); +/* 0:48 */waypoints[33].type = "stand"; +/* 0:48 */waypoints[33].childCount = 4; +/* 0:48 */waypoints[33].children[0] = 32; +/* 0:48 */waypoints[33].children[1] = 34; +/* 0:48 */waypoints[33].children[2] = 31; +/* 0:48 */waypoints[33].children[3] = 116; +/* 0:48 */waypoints[34] = spawnstruct(); +/* 0:48 */waypoints[34].origin = (-969.523, 664.428, -451.875); +/* 0:48 */waypoints[34].type = "stand"; +/* 0:48 */waypoints[34].childCount = 2; +/* 0:48 */waypoints[34].children[0] = 33; +/* 0:48 */waypoints[34].children[1] = 35; +/* 0:48 */waypoints[35] = spawnstruct(); +/* 0:48 */waypoints[35].origin = (-1111.27, 873.424, -451.875); +/* 0:48 */waypoints[35].type = "stand"; +/* 0:48 */waypoints[35].childCount = 4; +/* 0:48 */waypoints[35].children[0] = 34; +/* 0:48 */waypoints[35].children[1] = 36; +/* 0:48 */waypoints[35].children[2] = 124; +/* 0:48 */waypoints[35].children[3] = 125; +/* 0:48 */waypoints[36] = spawnstruct(); +/* 0:48 */waypoints[36].origin = (-1287.73, 801.399, -451.875); +/* 0:48 */waypoints[36].type = "stand"; +/* 0:48 */waypoints[36].childCount = 2; +/* 0:48 */waypoints[36].children[0] = 35; +/* 0:48 */waypoints[36].children[1] = 37; +/* 0:48 */waypoints[37] = spawnstruct(); +/* 0:48 */waypoints[37].origin = (-1417.17, 1073.99, -423.891); +/* 0:48 */waypoints[37].type = "stand"; +/* 0:48 */waypoints[37].childCount = 2; +/* 0:48 */waypoints[37].children[0] = 36; +/* 0:48 */waypoints[37].children[1] = 38; +/* 0:48 */waypoints[38] = spawnstruct(); +/* 0:48 */waypoints[38].origin = (-1521.36, 1354.2, -427.875); +/* 0:48 */waypoints[38].type = "stand"; +/* 0:48 */waypoints[38].childCount = 2; +/* 0:48 */waypoints[38].children[0] = 37; +/* 0:48 */waypoints[38].children[1] = 39; +/* 0:48 */waypoints[39] = spawnstruct(); +/* 0:48 */waypoints[39].origin = (-1327.86, 1433.06, -451.875); +/* 0:48 */waypoints[39].type = "stand"; +/* 0:48 */waypoints[39].childCount = 3; +/* 0:48 */waypoints[39].children[0] = 38; +/* 0:48 */waypoints[39].children[1] = 40; +/* 0:48 */waypoints[39].children[2] = 125; +/* 0:48 */waypoints[40] = spawnstruct(); +/* 0:48 */waypoints[40].origin = (-1173.54, 1511.18, -427.875); +/* 0:48 */waypoints[40].type = "stand"; +/* 0:48 */waypoints[40].childCount = 3; +/* 0:48 */waypoints[40].children[0] = 39; +/* 0:48 */waypoints[40].children[1] = 41; +/* 0:48 */waypoints[40].children[2] = 126; +/* 0:48 */waypoints[41] = spawnstruct(); +/* 0:48 */waypoints[41].origin = (-911.663, 1631.31, -355.875); +/* 0:48 */waypoints[41].type = "stand"; +/* 0:48 */waypoints[41].childCount = 2; +/* 0:48 */waypoints[41].children[0] = 40; +/* 0:48 */waypoints[41].children[1] = 42; +/* 0:48 */waypoints[42] = spawnstruct(); +/* 0:48 */waypoints[42].origin = (-691.944, 1653.04, -347.875); +/* 0:48 */waypoints[42].type = "stand"; +/* 0:48 */waypoints[42].childCount = 2; +/* 0:48 */waypoints[42].children[0] = 41; +/* 0:48 */waypoints[42].children[1] = 43; +/* 0:48 */waypoints[43] = spawnstruct(); +/* 0:48 */waypoints[43].origin = (-526.375, 1682.81, -283.875); +/* 0:48 */waypoints[43].type = "stand"; +/* 0:48 */waypoints[43].childCount = 2; +/* 0:48 */waypoints[43].children[0] = 42; +/* 0:48 */waypoints[43].children[1] = 44; +/* 0:48 */waypoints[44] = spawnstruct(); +/* 0:48 */waypoints[44].origin = (-382.993, 1695.68, -286.993); +/* 0:48 */waypoints[44].type = "stand"; +/* 0:48 */waypoints[44].childCount = 5; +/* 0:48 */waypoints[44].children[0] = 43; +/* 0:48 */waypoints[44].children[1] = 45; +/* 0:48 */waypoints[44].children[2] = 46; +/* 0:48 */waypoints[44].children[3] = 119; +/* 0:48 */waypoints[44].children[4] = 120; +/* 0:48 */waypoints[45] = spawnstruct(); +/* 0:48 */waypoints[45].origin = (-168.297, 1825.4, -290.875); +/* 0:48 */waypoints[45].type = "stand"; +/* 0:48 */waypoints[45].childCount = 3; +/* 0:48 */waypoints[45].children[0] = 44; +/* 0:48 */waypoints[45].children[1] = 0; +/* 0:48 */waypoints[45].children[2] = 46; +/* 0:48 */waypoints[46] = spawnstruct(); +/* 0:48 */waypoints[46].origin = (-89.693, 1677.63, -290.875); +/* 0:48 */waypoints[46].type = "stand"; +/* 0:48 */waypoints[46].childCount = 5; +/* 0:48 */waypoints[46].children[0] = 45; +/* 0:48 */waypoints[46].children[1] = 47; +/* 0:48 */waypoints[46].children[2] = 44; +/* 0:48 */waypoints[46].children[3] = 48; +/* 0:48 */waypoints[46].children[4] = 120; +/* 0:48 */waypoints[47] = spawnstruct(); +/* 0:48 */waypoints[47].origin = (114.637, 1707.08, -290.875); +/* 0:48 */waypoints[47].type = "stand"; +/* 0:48 */waypoints[47].childCount = 2; +/* 0:48 */waypoints[47].children[0] = 46; +/* 0:48 */waypoints[47].children[1] = 1; +/* 0:48 */waypoints[48] = spawnstruct(); +/* 0:48 */waypoints[48].origin = (-101.491, 1476.55, -290.875); +/* 0:48 */waypoints[48].type = "stand"; +/* 0:48 */waypoints[48].childCount = 3; +/* 0:48 */waypoints[48].children[0] = 46; +/* 0:48 */waypoints[48].children[1] = 120; +/* 0:48 */waypoints[48].children[2] = 135; +/* 0:48 */waypoints[49] = spawnstruct(); +/* 0:48 */waypoints[49].origin = (107.344, 1440.72, -290.875); +/* 0:48 */waypoints[49].type = "stand"; +/* 0:48 */waypoints[49].childCount = 2; +/* 0:48 */waypoints[49].children[0] = 50; +/* 0:48 */waypoints[49].children[1] = 135; +/* 0:48 */waypoints[50] = spawnstruct(); +/* 0:48 */waypoints[50].origin = (39.3621, 1200.41, -294.064); +/* 0:48 */waypoints[50].type = "stand"; +/* 0:48 */waypoints[50].childCount = 6; +/* 0:48 */waypoints[50].children[0] = 49; +/* 0:48 */waypoints[50].children[1] = 51; +/* 0:48 */waypoints[50].children[2] = 52; +/* 0:48 */waypoints[50].children[3] = 109; +/* 0:48 */waypoints[50].children[4] = 110; +/* 0:48 */waypoints[50].children[5] = 135; +/* 0:48 */waypoints[51] = spawnstruct(); +/* 0:48 */waypoints[51].origin = (258.337, 952.614, -312.547); +/* 0:48 */waypoints[51].type = "stand"; +/* 0:48 */waypoints[51].childCount = 3; +/* 0:48 */waypoints[51].children[0] = 50; +/* 0:48 */waypoints[51].children[1] = 52; +/* 0:48 */waypoints[51].children[2] = 110; +/* 0:48 */waypoints[52] = spawnstruct(); +/* 0:48 */waypoints[52].origin = (280.264, 1158.05, -310.61); +/* 0:48 */waypoints[52].type = "stand"; +/* 0:48 */waypoints[52].childCount = 5; +/* 0:48 */waypoints[52].children[0] = 51; +/* 0:48 */waypoints[52].children[1] = 53; +/* 0:48 */waypoints[52].children[2] = 50; +/* 0:48 */waypoints[52].children[3] = 136; +/* 0:48 */waypoints[52].children[4] = 109; +/* 0:48 */waypoints[53] = spawnstruct(); +/* 0:48 */waypoints[53].origin = (526.268, 1166.44, -310.556); +/* 0:48 */waypoints[53].type = "stand"; +/* 0:48 */waypoints[53].childCount = 3; +/* 0:48 */waypoints[53].children[0] = 52; +/* 0:48 */waypoints[53].children[1] = 54; +/* 0:48 */waypoints[53].children[2] = 108; +/* 0:48 */waypoints[54] = spawnstruct(); +/* 0:48 */waypoints[54].origin = (994.21, 1145.78, -262.875); +/* 0:48 */waypoints[54].type = "stand"; +/* 0:48 */waypoints[54].childCount = 2; +/* 0:48 */waypoints[54].children[0] = 53; +/* 0:48 */waypoints[54].children[1] = 55; +/* 0:48 */waypoints[55] = spawnstruct(); +/* 0:48 */waypoints[55].origin = (949.323, 933.281, -321.75); +/* 0:48 */waypoints[55].type = "stand"; +/* 0:48 */waypoints[55].childCount = 3; +/* 0:48 */waypoints[55].children[0] = 54; +/* 0:48 */waypoints[55].children[1] = 56; +/* 0:48 */waypoints[55].children[2] = 108; +/* 0:48 */waypoints[56] = spawnstruct(); +/* 0:48 */waypoints[56].origin = (1010.72, 809.411, -328.52); +/* 0:48 */waypoints[56].type = "stand"; +/* 0:48 */waypoints[56].childCount = 4; +/* 0:48 */waypoints[56].children[0] = 55; +/* 0:48 */waypoints[56].children[1] = 57; +/* 0:48 */waypoints[56].children[2] = 12; +/* 0:48 */waypoints[56].children[3] = 81; +/* 0:48 */waypoints[57] = spawnstruct(); +/* 0:48 */waypoints[57].origin = (1308.6, 753.461, -321.163); +/* 0:48 */waypoints[57].type = "stand"; +/* 0:48 */waypoints[57].childCount = 3; +/* 0:48 */waypoints[57].children[0] = 56; +/* 0:48 */waypoints[57].children[1] = 12; +/* 0:48 */waypoints[57].children[2] = 58; +/* 0:48 */waypoints[58] = spawnstruct(); +/* 0:48 */waypoints[58].origin = (1356.77, 997.187, -313.694); +/* 0:48 */waypoints[58].type = "stand"; +/* 0:48 */waypoints[58].childCount = 2; +/* 0:48 */waypoints[58].children[0] = 57; +/* 0:48 */waypoints[58].children[1] = 59; +/* 0:48 */waypoints[59] = spawnstruct(); +/* 0:48 */waypoints[59].origin = (1366.64, 1045.85, -311.667); +/* 0:48 */waypoints[59].type = "climb"; +/* 0:48 */waypoints[59].childCount = 2; +/* 0:48 */waypoints[59].children[0] = 58; +/* 0:48 */waypoints[59].children[1] = 60; +/* 0:48 */waypoints[59].angles = (0.284424, 82.8207, 0); +/* 0:48 */waypoints[60] = spawnstruct(); +/* 0:48 */waypoints[60].origin = (1371.74, 1061.79, -254.875); +/* 0:48 */waypoints[60].type = "climb"; +/* 0:48 */waypoints[60].childCount = 2; +/* 0:48 */waypoints[60].children[0] = 59; +/* 0:48 */waypoints[60].children[1] = 61; +/* 0:48 */waypoints[60].angles = (5.55786, 82.6065, 0); +/* 0:48 */waypoints[61] = spawnstruct(); +/* 0:48 */waypoints[61].origin = (1377.94, 1096, -254.875); +/* 0:48 */waypoints[61].type = "stand"; +/* 0:48 */waypoints[61].childCount = 2; +/* 0:48 */waypoints[61].children[0] = 60; +/* 0:48 */waypoints[61].children[1] = 10; +/* 0:48 */waypoints[62] = spawnstruct(); +/* 0:48 */waypoints[62].origin = (1714.13, 1296.49, -254.875); +/* 0:48 */waypoints[62].type = "stand"; +/* 0:48 */waypoints[62].childCount = 1; +/* 0:48 */waypoints[62].children[0] = 9; +/* 0:48 */waypoints[63] = spawnstruct(); +/* 0:48 */waypoints[63].origin = (1202.76, 1421.01, -254.875); +/* 0:48 */waypoints[63].type = "stand"; +/* 0:48 */waypoints[63].childCount = 1; +/* 0:48 */waypoints[63].children[0] = 7; +/* 0:48 */waypoints[64] = spawnstruct(); +/* 0:48 */waypoints[64].origin = (1355.06, 1907.43, -254.875); +/* 0:48 */waypoints[64].type = "stand"; +/* 0:48 */waypoints[64].childCount = 2; +/* 0:48 */waypoints[64].children[0] = 6; +/* 0:48 */waypoints[64].children[1] = 65; +/* 0:48 */waypoints[65] = spawnstruct(); +/* 0:48 */waypoints[65].origin = (1393.57, 2328.93, -254.875); +/* 0:48 */waypoints[65].type = "stand"; +/* 0:48 */waypoints[65].childCount = 2; +/* 0:48 */waypoints[65].children[0] = 64; +/* 0:48 */waypoints[65].children[1] = 66; +/* 0:48 */waypoints[66] = spawnstruct(); +/* 0:48 */waypoints[66].origin = (1170.13, 2381.39, -254.875); +/* 0:48 */waypoints[66].type = "stand"; +/* 0:48 */waypoints[66].childCount = 3; +/* 0:48 */waypoints[66].children[0] = 65; +/* 0:48 */waypoints[66].children[1] = 67; +/* 0:48 */waypoints[66].children[2] = 72; +/* 0:48 */waypoints[67] = spawnstruct(); +/* 0:48 */waypoints[67].origin = (1014.51, 2377.43, -254.875); +/* 0:48 */waypoints[67].type = "stand"; +/* 0:48 */waypoints[67].childCount = 3; +/* 0:48 */waypoints[67].children[0] = 66; +/* 0:48 */waypoints[67].children[1] = 73; +/* 0:48 */waypoints[67].children[2] = 75; +/* 0:48 */waypoints[68] = spawnstruct(); +/* 0:48 */waypoints[68].origin = (979.227, 2084.34, -254.875); +/* 0:48 */waypoints[68].type = "stand"; +/* 0:48 */waypoints[68].childCount = 2; +/* 0:48 */waypoints[68].children[0] = 69; +/* 0:48 */waypoints[68].children[1] = 73; +/* 0:48 */waypoints[69] = spawnstruct(); +/* 0:48 */waypoints[69].origin = (902.656, 2024.9, -254.875); +/* 0:48 */waypoints[69].type = "stand"; +/* 0:48 */waypoints[69].childCount = 3; +/* 0:48 */waypoints[69].children[0] = 68; +/* 0:48 */waypoints[69].children[1] = 70; +/* 0:48 */waypoints[69].children[2] = 74; +/* 0:48 */waypoints[70] = spawnstruct(); +/* 0:48 */waypoints[70].origin = (996.304, 1906.7, -254.875); +/* 0:48 */waypoints[70].type = "stand"; +/* 0:48 */waypoints[70].childCount = 2; +/* 0:48 */waypoints[70].children[0] = 69; +/* 0:48 */waypoints[70].children[1] = 71; +/* 0:48 */waypoints[71] = spawnstruct(); +/* 0:48 */waypoints[71].origin = (1139.33, 1889.9, -254.875); +/* 0:48 */waypoints[71].type = "stand"; +/* 0:48 */waypoints[71].childCount = 3; +/* 0:48 */waypoints[71].children[0] = 70; +/* 0:48 */waypoints[71].children[1] = 72; +/* 0:48 */waypoints[71].children[2] = 5; +/* 0:48 */waypoints[72] = spawnstruct(); +/* 0:48 */waypoints[72].origin = (1163.52, 2236.09, -254.875); +/* 0:48 */waypoints[72].type = "stand"; +/* 0:48 */waypoints[72].childCount = 3; +/* 0:48 */waypoints[72].children[0] = 71; +/* 0:48 */waypoints[72].children[1] = 66; +/* 0:48 */waypoints[72].children[2] = 73; +/* 0:48 */waypoints[73] = spawnstruct(); +/* 0:48 */waypoints[73].origin = (994.506, 2264.26, -254.875); +/* 0:48 */waypoints[73].type = "stand"; +/* 0:48 */waypoints[73].childCount = 3; +/* 0:48 */waypoints[73].children[0] = 68; +/* 0:48 */waypoints[73].children[1] = 67; +/* 0:48 */waypoints[73].children[2] = 72; +/* 0:48 */waypoints[74] = spawnstruct(); +/* 0:48 */waypoints[74].origin = (682.072, 2050.36, -251.554); +/* 0:48 */waypoints[74].type = "stand"; +/* 0:48 */waypoints[74].childCount = 4; +/* 0:48 */waypoints[74].children[0] = 69; +/* 0:48 */waypoints[74].children[1] = 75; +/* 0:48 */waypoints[74].children[2] = 2; +/* 0:48 */waypoints[74].children[3] = 4; +/* 0:48 */waypoints[75] = spawnstruct(); +/* 0:48 */waypoints[75].origin = (701.443, 2361.35, -254.875); +/* 0:48 */waypoints[75].type = "stand"; +/* 0:48 */waypoints[75].childCount = 3; +/* 0:48 */waypoints[75].children[0] = 74; +/* 0:48 */waypoints[75].children[1] = 67; +/* 0:48 */waypoints[75].children[2] = 76; +/* 0:48 */waypoints[76] = spawnstruct(); +/* 0:48 */waypoints[76].origin = (515.645, 2387.23, -254.875); +/* 0:48 */waypoints[76].type = "stand"; +/* 0:48 */waypoints[76].childCount = 3; +/* 0:48 */waypoints[76].children[0] = 75; +/* 0:48 */waypoints[76].children[1] = 77; +/* 0:48 */waypoints[76].children[2] = 80; +/* 0:48 */waypoints[77] = spawnstruct(); +/* 0:48 */waypoints[77].origin = (473.813, 2258.23, -254.875); +/* 0:48 */waypoints[77].type = "stand"; +/* 0:48 */waypoints[77].childCount = 2; +/* 0:48 */waypoints[77].children[0] = 76; +/* 0:48 */waypoints[77].children[1] = 2; +/* 0:48 */waypoints[78] = spawnstruct(); +/* 0:48 */waypoints[78].origin = (1525.34, 1407.82, -254.875); +/* 0:48 */waypoints[78].type = "stand"; +/* 0:48 */waypoints[78].childCount = 1; +/* 0:48 */waypoints[78].children[0] = 9; +/* 0:48 */waypoints[79] = spawnstruct(); +/* 0:48 */waypoints[79].origin = (451.671, 1655.78, -254.875); +/* 0:48 */waypoints[79].type = "stand"; +/* 0:48 */waypoints[79].childCount = 1; +/* 0:48 */waypoints[79].children[0] = 3; +/* 0:48 */waypoints[80] = spawnstruct(); +/* 0:48 */waypoints[80].origin = (490.071, 2487.04, -254.875); +/* 0:48 */waypoints[80].type = "stand"; +/* 0:48 */waypoints[80].childCount = 1; +/* 0:48 */waypoints[80].children[0] = 76; +/* 0:48 */waypoints[81] = spawnstruct(); +/* 0:48 */waypoints[81].origin = (913.091, 370.703, -387.799); +/* 0:48 */waypoints[81].type = "stand"; +/* 0:48 */waypoints[81].childCount = 4; +/* 0:48 */waypoints[81].children[0] = 56; +/* 0:48 */waypoints[81].children[1] = 13; +/* 0:48 */waypoints[81].children[2] = 82; +/* 0:48 */waypoints[81].children[3] = 89; +/* 0:48 */waypoints[82] = spawnstruct(); +/* 0:48 */waypoints[82].origin = (797.453, 371.782, -392.174); +/* 0:48 */waypoints[82].type = "stand"; +/* 0:48 */waypoints[82].childCount = 4; +/* 0:48 */waypoints[82].children[0] = 81; +/* 0:48 */waypoints[82].children[1] = 83; +/* 0:48 */waypoints[82].children[2] = 85; +/* 0:48 */waypoints[82].children[3] = 88; +/* 0:48 */waypoints[83] = spawnstruct(); +/* 0:48 */waypoints[83].origin = (856.362, 694.132, -375.049); +/* 0:48 */waypoints[83].type = "stand"; +/* 0:48 */waypoints[83].childCount = 2; +/* 0:48 */waypoints[83].children[0] = 82; +/* 0:48 */waypoints[83].children[1] = 84; +/* 0:48 */waypoints[84] = spawnstruct(); +/* 0:48 */waypoints[84].origin = (538.862, 742.707, -380.796); +/* 0:48 */waypoints[84].type = "stand"; +/* 0:48 */waypoints[84].childCount = 2; +/* 0:48 */waypoints[84].children[0] = 83; +/* 0:48 */waypoints[84].children[1] = 85; +/* 0:48 */waypoints[85] = spawnstruct(); +/* 0:48 */waypoints[85].origin = (500.164, 476.458, -387.518); +/* 0:48 */waypoints[85].type = "stand"; +/* 0:48 */waypoints[85].childCount = 3; +/* 0:48 */waypoints[85].children[0] = 84; +/* 0:48 */waypoints[85].children[1] = 82; +/* 0:48 */waypoints[85].children[2] = 86; +/* 0:48 */waypoints[86] = spawnstruct(); +/* 0:48 */waypoints[86].origin = (407.621, 398.096, -383.07); +/* 0:48 */waypoints[86].type = "stand"; +/* 0:48 */waypoints[86].childCount = 2; +/* 0:48 */waypoints[86].children[0] = 85; +/* 0:48 */waypoints[86].children[1] = 87; +/* 0:48 */waypoints[87] = spawnstruct(); +/* 0:48 */waypoints[87].origin = (508.517, 178.557, -396.049); +/* 0:48 */waypoints[87].type = "stand"; +/* 0:48 */waypoints[87].childCount = 3; +/* 0:48 */waypoints[87].children[0] = 86; +/* 0:48 */waypoints[87].children[1] = 88; +/* 0:48 */waypoints[87].children[2] = 95; +/* 0:48 */waypoints[88] = spawnstruct(); +/* 0:48 */waypoints[88].origin = (643.868, 200.858, -400.038); +/* 0:48 */waypoints[88].type = "stand"; +/* 0:48 */waypoints[88].childCount = 4; +/* 0:48 */waypoints[88].children[0] = 87; +/* 0:48 */waypoints[88].children[1] = 82; +/* 0:48 */waypoints[88].children[2] = 89; +/* 0:48 */waypoints[88].children[3] = 90; +/* 0:48 */waypoints[89] = spawnstruct(); +/* 0:48 */waypoints[89].origin = (894.341, 137.528, -402.816); +/* 0:48 */waypoints[89].type = "stand"; +/* 0:48 */waypoints[89].childCount = 5; +/* 0:48 */waypoints[89].children[0] = 88; +/* 0:48 */waypoints[89].children[1] = 81; +/* 0:48 */waypoints[89].children[2] = 14; +/* 0:48 */waypoints[89].children[3] = 90; +/* 0:48 */waypoints[89].children[4] = 92; +/* 0:48 */waypoints[90] = spawnstruct(); +/* 0:48 */waypoints[90].origin = (741.433, 80.7025, -400.823); +/* 0:48 */waypoints[90].type = "stand"; +/* 0:48 */waypoints[90].childCount = 5; +/* 0:48 */waypoints[90].children[0] = 89; +/* 0:48 */waypoints[90].children[1] = 91; +/* 0:48 */waypoints[90].children[2] = 88; +/* 0:48 */waypoints[90].children[3] = 95; +/* 0:48 */waypoints[90].children[4] = 129; +/* 0:48 */waypoints[91] = spawnstruct(); +/* 0:48 */waypoints[91].origin = (994.47, -194.488, -402.978); +/* 0:48 */waypoints[91].type = "stand"; +/* 0:48 */waypoints[91].childCount = 4; +/* 0:48 */waypoints[91].children[0] = 90; +/* 0:48 */waypoints[91].children[1] = 92; +/* 0:48 */waypoints[91].children[2] = 17; +/* 0:48 */waypoints[91].children[3] = 93; +/* 0:48 */waypoints[92] = spawnstruct(); +/* 0:48 */waypoints[92].origin = (1117.71, -99.9487, -401.085); +/* 0:48 */waypoints[92].type = "stand"; +/* 0:48 */waypoints[92].childCount = 4; +/* 0:48 */waypoints[92].children[0] = 91; +/* 0:48 */waypoints[92].children[1] = 14; +/* 0:48 */waypoints[92].children[2] = 89; +/* 0:48 */waypoints[92].children[3] = 15; +/* 0:48 */waypoints[93] = spawnstruct(); +/* 0:48 */waypoints[93].origin = (863.089, -314.854, -397.504); +/* 0:48 */waypoints[93].type = "stand"; +/* 0:48 */waypoints[93].childCount = 6; +/* 0:48 */waypoints[93].children[0] = 91; +/* 0:48 */waypoints[93].children[1] = 94; +/* 0:48 */waypoints[93].children[2] = 18; +/* 0:48 */waypoints[93].children[3] = 17; +/* 0:48 */waypoints[93].children[4] = 128; +/* 0:48 */waypoints[93].children[5] = 129; +/* 0:48 */waypoints[94] = spawnstruct(); +/* 0:48 */waypoints[94].origin = (587.945, -193.994, -394.219); +/* 0:48 */waypoints[94].type = "stand"; +/* 0:48 */waypoints[94].childCount = 4; +/* 0:48 */waypoints[94].children[0] = 93; +/* 0:48 */waypoints[94].children[1] = 21; +/* 0:48 */waypoints[94].children[2] = 95; +/* 0:48 */waypoints[94].children[3] = 128; +/* 0:48 */waypoints[95] = spawnstruct(); +/* 0:48 */waypoints[95].origin = (496.864, 30.3787, -395.699); +/* 0:48 */waypoints[95].type = "stand"; +/* 0:48 */waypoints[95].childCount = 6; +/* 0:48 */waypoints[95].children[0] = 94; +/* 0:48 */waypoints[95].children[1] = 87; +/* 0:48 */waypoints[95].children[2] = 90; +/* 0:48 */waypoints[95].children[3] = 21; +/* 0:48 */waypoints[95].children[4] = 107; +/* 0:48 */waypoints[95].children[5] = 129; +/* 0:48 */waypoints[96] = spawnstruct(); +/* 0:48 */waypoints[96].origin = (167.797, 177.289, -390.375); +/* 0:48 */waypoints[96].type = "stand"; +/* 0:48 */waypoints[96].childCount = 2; +/* 0:48 */waypoints[96].children[0] = 22; +/* 0:48 */waypoints[96].children[1] = 24; +/* 0:48 */waypoints[97] = spawnstruct(); +/* 0:48 */waypoints[97].origin = (-383.358, -92.625, -401.699); +/* 0:48 */waypoints[97].type = "climb"; +/* 0:48 */waypoints[97].childCount = 2; +/* 0:48 */waypoints[97].children[0] = 28; +/* 0:48 */waypoints[97].children[1] = 98; +/* 0:48 */waypoints[97].angles = (1.11511, -65.4066, 0); +/* 0:48 */waypoints[98] = spawnstruct(); +/* 0:48 */waypoints[98].origin = (-382.828, -93.9653, -179.875); +/* 0:48 */waypoints[98].type = "climb"; +/* 0:48 */waypoints[98].childCount = 2; +/* 0:48 */waypoints[98].children[0] = 97; +/* 0:48 */waypoints[98].children[1] = 99; +/* 0:48 */waypoints[98].angles = (-6.50269, -63.3796, 0); +/* 0:48 */waypoints[99] = spawnstruct(); +/* 0:48 */waypoints[99].origin = (-340.253, -163.489, -194.375); +/* 0:48 */waypoints[99].type = "stand"; +/* 0:48 */waypoints[99].childCount = 2; +/* 0:48 */waypoints[99].children[0] = 98; +/* 0:48 */waypoints[99].children[1] = 100; +/* 0:48 */waypoints[100] = spawnstruct(); +/* 0:48 */waypoints[100].origin = (-275.16, -140.512, -194.375); +/* 0:48 */waypoints[100].type = "stand"; +/* 0:48 */waypoints[100].childCount = 2; +/* 0:48 */waypoints[100].children[0] = 99; +/* 0:48 */waypoints[100].children[1] = 101; +/* 0:48 */waypoints[101] = spawnstruct(); +/* 0:48 */waypoints[101].origin = (-305.948, 98.6066, -194.375); +/* 0:48 */waypoints[101].type = "stand"; +/* 0:48 */waypoints[101].childCount = 2; +/* 0:48 */waypoints[101].children[0] = 100; +/* 0:48 */waypoints[101].children[1] = 102; +/* 0:48 */waypoints[102] = spawnstruct(); +/* 0:48 */waypoints[102].origin = (-122.798, 309.559, -194.375); +/* 0:48 */waypoints[102].type = "stand"; +/* 0:48 */waypoints[102].childCount = 2; +/* 0:48 */waypoints[102].children[0] = 101; +/* 0:48 */waypoints[102].children[1] = 103; +/* 0:48 */waypoints[103] = spawnstruct(); +/* 0:48 */waypoints[103].origin = (133.673, 380.693, -194.375); +/* 0:48 */waypoints[103].type = "stand"; +/* 0:48 */waypoints[103].childCount = 2; +/* 0:48 */waypoints[103].children[0] = 102; +/* 0:48 */waypoints[103].children[1] = 104; +/* 0:48 */waypoints[104] = spawnstruct(); +/* 0:48 */waypoints[104].origin = (325.663, 330.752, -194.375); +/* 0:48 */waypoints[104].type = "stand"; +/* 0:48 */waypoints[104].childCount = 2; +/* 0:48 */waypoints[104].children[0] = 103; +/* 0:48 */waypoints[104].children[1] = 105; +/* 0:48 */waypoints[105] = spawnstruct(); +/* 0:48 */waypoints[105].origin = (445.029, 167.173, -194.375); +/* 0:48 */waypoints[105].type = "stand"; +/* 0:48 */waypoints[105].childCount = 2; +/* 0:48 */waypoints[105].children[0] = 104; +/* 0:48 */waypoints[105].children[1] = 106; +/* 0:48 */waypoints[106] = spawnstruct(); +/* 0:48 */waypoints[106].origin = (468.042, 105.494, -179.875); +/* 0:48 */waypoints[106].type = "climb"; +/* 0:48 */waypoints[106].childCount = 2; +/* 0:48 */waypoints[106].children[0] = 105; +/* 0:48 */waypoints[106].children[1] = 107; +/* 0:48 */waypoints[106].angles = (-1.026, 115.725, 0); +/* 0:48 */waypoints[107] = spawnstruct(); +/* 0:48 */waypoints[107].origin = (471.229, 103.116, -395.515); +/* 0:48 */waypoints[107].type = "climb"; +/* 0:48 */waypoints[107].childCount = 2; +/* 0:48 */waypoints[107].children[0] = 106; +/* 0:48 */waypoints[107].children[1] = 95; +/* 0:48 */waypoints[107].angles = (2.92908, 115.011, 0); +/* 0:48 */waypoints[108] = spawnstruct(); +/* 0:48 */waypoints[108].origin = (642.994, 983.978, -317.816); +/* 0:48 */waypoints[108].type = "stand"; +/* 0:48 */waypoints[108].childCount = 4; +/* 0:48 */waypoints[108].children[0] = 55; +/* 0:48 */waypoints[108].children[1] = 53; +/* 0:48 */waypoints[108].children[2] = 136; +/* 0:48 */waypoints[108].children[3] = 137; +/* 0:48 */waypoints[109] = spawnstruct(); +/* 0:48 */waypoints[109].origin = (-243.877, 963.082, -283.192); +/* 0:48 */waypoints[109].type = "stand"; +/* 0:48 */waypoints[109].childCount = 6; +/* 0:48 */waypoints[109].children[0] = 50; +/* 0:48 */waypoints[109].children[1] = 110; +/* 0:48 */waypoints[109].children[2] = 130; +/* 0:48 */waypoints[109].children[3] = 134; +/* 0:48 */waypoints[109].children[4] = 121; +/* 0:48 */waypoints[109].children[5] = 52; +/* 0:48 */waypoints[110] = spawnstruct(); +/* 0:48 */waypoints[110].origin = (205.911, 883.668, -307.23); +/* 0:48 */waypoints[110].type = "stand"; +/* 0:48 */waypoints[110].childCount = 4; +/* 0:48 */waypoints[110].children[0] = 109; +/* 0:48 */waypoints[110].children[1] = 51; +/* 0:48 */waypoints[110].children[2] = 111; +/* 0:48 */waypoints[110].children[3] = 50; +/* 0:48 */waypoints[111] = spawnstruct(); +/* 0:48 */waypoints[111].origin = (-84.5282, 700.434, -344.46); +/* 0:48 */waypoints[111].type = "stand"; +/* 0:48 */waypoints[111].childCount = 2; +/* 0:48 */waypoints[111].children[0] = 110; +/* 0:48 */waypoints[111].children[1] = 112; +/* 0:48 */waypoints[112] = spawnstruct(); +/* 0:48 */waypoints[112].origin = (-115.248, 554.238, -371.893); +/* 0:48 */waypoints[112].type = "stand"; +/* 0:48 */waypoints[112].childCount = 4; +/* 0:48 */waypoints[112].children[0] = 111; +/* 0:48 */waypoints[112].children[1] = 113; +/* 0:48 */waypoints[112].children[2] = 114; +/* 0:48 */waypoints[112].children[3] = 127; +/* 0:48 */waypoints[113] = spawnstruct(); +/* 0:48 */waypoints[113].origin = (68.356, 381.081, -379.74); +/* 0:48 */waypoints[113].type = "stand"; +/* 0:48 */waypoints[113].childCount = 2; +/* 0:48 */waypoints[113].children[0] = 112; +/* 0:48 */waypoints[113].children[1] = 25; +/* 0:48 */waypoints[114] = spawnstruct(); +/* 0:48 */waypoints[114].origin = (-370.804, 550.571, -384.103); +/* 0:48 */waypoints[114].type = "stand"; +/* 0:48 */waypoints[114].childCount = 3; +/* 0:48 */waypoints[114].children[0] = 112; +/* 0:48 */waypoints[114].children[1] = 115; +/* 0:48 */waypoints[114].children[2] = 118; +/* 0:48 */waypoints[115] = spawnstruct(); +/* 0:48 */waypoints[115].origin = (-622.699, 491.826, -399.676); +/* 0:48 */waypoints[115].type = "stand"; +/* 0:48 */waypoints[115].childCount = 2; +/* 0:48 */waypoints[115].children[0] = 114; +/* 0:48 */waypoints[115].children[1] = 116; +/* 0:48 */waypoints[116] = spawnstruct(); +/* 0:48 */waypoints[116].origin = (-636.888, 301.869, -417.383); +/* 0:48 */waypoints[116].type = "stand"; +/* 0:48 */waypoints[116].childCount = 6; +/* 0:48 */waypoints[116].children[0] = 115; +/* 0:48 */waypoints[116].children[1] = 32; +/* 0:48 */waypoints[116].children[2] = 26; +/* 0:48 */waypoints[116].children[3] = 118; +/* 0:48 */waypoints[116].children[4] = 25; +/* 0:48 */waypoints[116].children[5] = 33; +/* 0:48 */waypoints[117] = spawnstruct(); +/* 0:48 */waypoints[117].origin = (-636.804, 44.4847, -413.49); +/* 0:48 */waypoints[117].type = "stand"; +/* 0:48 */waypoints[117].childCount = 5; +/* 0:48 */waypoints[117].children[0] = 29; +/* 0:48 */waypoints[117].children[1] = 32; +/* 0:48 */waypoints[117].children[2] = 118; +/* 0:48 */waypoints[117].children[3] = 30; +/* 0:48 */waypoints[117].children[4] = 26; +/* 0:48 */waypoints[118] = spawnstruct(); +/* 0:48 */waypoints[118].origin = (-404.56, 334.421, -403.183); +/* 0:48 */waypoints[118].type = "stand"; +/* 0:48 */waypoints[118].childCount = 5; +/* 0:48 */waypoints[118].children[0] = 117; +/* 0:48 */waypoints[118].children[1] = 25; +/* 0:48 */waypoints[118].children[2] = 116; +/* 0:48 */waypoints[118].children[3] = 114; +/* 0:48 */waypoints[118].children[4] = 127; +/* 0:48 */waypoints[119] = spawnstruct(); +/* 0:48 */waypoints[119].origin = (-423.306, 1480.43, -275.509); +/* 0:48 */waypoints[119].type = "stand"; +/* 0:48 */waypoints[119].childCount = 5; +/* 0:48 */waypoints[119].children[0] = 44; +/* 0:48 */waypoints[119].children[1] = 120; +/* 0:48 */waypoints[119].children[2] = 121; +/* 0:48 */waypoints[119].children[3] = 122; +/* 0:48 */waypoints[119].children[4] = 123; +/* 0:48 */waypoints[120] = spawnstruct(); +/* 0:48 */waypoints[120].origin = (-206.077, 1495.28, -290.875); +/* 0:48 */waypoints[120].type = "stand"; +/* 0:48 */waypoints[120].childCount = 5; +/* 0:48 */waypoints[120].children[0] = 119; +/* 0:48 */waypoints[120].children[1] = 48; +/* 0:48 */waypoints[120].children[2] = 46; +/* 0:48 */waypoints[120].children[3] = 121; +/* 0:48 */waypoints[120].children[4] = 44; +/* 0:48 */waypoints[121] = spawnstruct(); +/* 0:48 */waypoints[121].origin = (-434.805, 1124.8, -295.25); +/* 0:48 */waypoints[121].type = "stand"; +/* 0:48 */waypoints[121].childCount = 6; +/* 0:48 */waypoints[121].children[0] = 120; +/* 0:48 */waypoints[121].children[1] = 119; +/* 0:48 */waypoints[121].children[2] = 109; +/* 0:48 */waypoints[121].children[3] = 134; +/* 0:48 */waypoints[121].children[4] = 123; +/* 0:48 */waypoints[121].children[5] = 133; +/* 0:48 */waypoints[122] = spawnstruct(); +/* 0:48 */waypoints[122].origin = (-831.922, 1428.51, -258.958); +/* 0:48 */waypoints[122].type = "stand"; +/* 0:48 */waypoints[122].childCount = 2; +/* 0:48 */waypoints[122].children[0] = 119; +/* 0:48 */waypoints[122].children[1] = 123; +/* 0:48 */waypoints[123] = spawnstruct(); +/* 0:48 */waypoints[123].origin = (-739.076, 1099.4, -362.637); +/* 0:48 */waypoints[123].type = "stand"; +/* 0:48 */waypoints[123].childCount = 6; +/* 0:48 */waypoints[123].children[0] = 122; +/* 0:48 */waypoints[123].children[1] = 124; +/* 0:48 */waypoints[123].children[2] = 133; +/* 0:48 */waypoints[123].children[3] = 121; +/* 0:48 */waypoints[123].children[4] = 119; +/* 0:48 */waypoints[123].children[5] = 134; +/* 0:48 */waypoints[124] = spawnstruct(); +/* 0:48 */waypoints[124].origin = (-948.116, 1043.17, -423.777); +/* 0:48 */waypoints[124].type = "stand"; +/* 0:48 */waypoints[124].childCount = 3; +/* 0:48 */waypoints[124].children[0] = 123; +/* 0:48 */waypoints[124].children[1] = 35; +/* 0:48 */waypoints[124].children[2] = 126; +/* 0:48 */waypoints[125] = spawnstruct(); +/* 0:48 */waypoints[125].origin = (-1231.56, 1184.14, -435.875); +/* 0:48 */waypoints[125].type = "stand"; +/* 0:48 */waypoints[125].childCount = 2; +/* 0:48 */waypoints[125].children[0] = 35; +/* 0:48 */waypoints[125].children[1] = 39; +/* 0:48 */waypoints[126] = spawnstruct(); +/* 0:48 */waypoints[126].origin = (-1034.11, 1238.07, -427.875); +/* 0:48 */waypoints[126].type = "stand"; +/* 0:48 */waypoints[126].childCount = 2; +/* 0:48 */waypoints[126].children[0] = 40; +/* 0:48 */waypoints[126].children[1] = 124; +/* 0:48 */waypoints[127] = spawnstruct(); +/* 0:48 */waypoints[127].origin = (-155.102, 413.338, -393.544); +/* 0:48 */waypoints[127].type = "stand"; +/* 0:48 */waypoints[127].childCount = 3; +/* 0:48 */waypoints[127].children[0] = 118; +/* 0:48 */waypoints[127].children[1] = 112; +/* 0:48 */waypoints[127].children[2] = 25; +/* 0:48 */waypoints[128] = spawnstruct(); +/* 0:48 */waypoints[128].origin = (658.248, -367.854, -394.062); +/* 0:48 */waypoints[128].type = "stand"; +/* 0:48 */waypoints[128].childCount = 4; +/* 0:48 */waypoints[128].children[0] = 20; +/* 0:48 */waypoints[128].children[1] = 94; +/* 0:48 */waypoints[128].children[2] = 18; +/* 0:48 */waypoints[128].children[3] = 93; +/* 0:48 */waypoints[129] = spawnstruct(); +/* 0:48 */waypoints[129].origin = (663.152, -20.8519, -397.814); +/* 0:48 */waypoints[129].type = "stand"; +/* 0:48 */waypoints[129].childCount = 3; +/* 0:48 */waypoints[129].children[0] = 93; +/* 0:48 */waypoints[129].children[1] = 90; +/* 0:48 */waypoints[129].children[2] = 95; +/* 0:48 */waypoints[130] = spawnstruct(); +/* 0:48 */waypoints[130].origin = (-294.536, 678.959, -279.34); +/* 0:48 */waypoints[130].type = "stand"; +/* 0:48 */waypoints[130].childCount = 2; +/* 0:48 */waypoints[130].children[0] = 109; +/* 0:48 */waypoints[130].children[1] = 131; +/* 0:48 */waypoints[131] = spawnstruct(); +/* 0:48 */waypoints[131].origin = (-433.7, 636.783, -278.302); +/* 0:48 */waypoints[131].type = "stand"; +/* 0:48 */waypoints[131].childCount = 3; +/* 0:48 */waypoints[131].children[0] = 130; +/* 0:48 */waypoints[131].children[1] = 132; +/* 0:48 */waypoints[131].children[2] = 134; +/* 0:48 */waypoints[132] = spawnstruct(); +/* 0:48 */waypoints[132].origin = (-617.004, 606.418, -272.533); +/* 0:48 */waypoints[132].type = "stand"; +/* 0:48 */waypoints[132].childCount = 2; +/* 0:48 */waypoints[132].children[0] = 131; +/* 0:48 */waypoints[132].children[1] = 133; +/* 0:48 */waypoints[133] = spawnstruct(); +/* 0:48 */waypoints[133].origin = (-662.596, 900.245, -292.093); +/* 0:48 */waypoints[133].type = "stand"; +/* 0:48 */waypoints[133].childCount = 4; +/* 0:48 */waypoints[133].children[0] = 132; +/* 0:48 */waypoints[133].children[1] = 123; +/* 0:48 */waypoints[133].children[2] = 134; +/* 0:48 */waypoints[133].children[3] = 121; +/* 0:48 */waypoints[134] = spawnstruct(); +/* 0:48 */waypoints[134].origin = (-453.665, 953.718, -282.675); +/* 0:48 */waypoints[134].type = "stand"; +/* 0:48 */waypoints[134].childCount = 5; +/* 0:48 */waypoints[134].children[0] = 133; +/* 0:48 */waypoints[134].children[1] = 109; +/* 0:48 */waypoints[134].children[2] = 121; +/* 0:48 */waypoints[134].children[3] = 131; +/* 0:48 */waypoints[134].children[4] = 123; +/* 0:48 */waypoints[135] = spawnstruct(); +/* 0:48 */waypoints[135].origin = (-23.1219, 1462.42, -290.875); +/* 0:48 */waypoints[135].type = "stand"; +/* 0:48 */waypoints[135].childCount = 3; +/* 0:48 */waypoints[135].children[0] = 50; +/* 0:48 */waypoints[135].children[1] = 48; +/* 0:48 */waypoints[135].children[2] = 49; +/* 0:48 */waypoints[136] = spawnstruct(); +/* 0:48 */waypoints[136].origin = (444.563, 995.776, -317.715); +/* 0:48 */waypoints[136].type = "stand"; +/* 0:48 */waypoints[136].childCount = 3; +/* 0:48 */waypoints[136].children[0] = 108; +/* 0:48 */waypoints[136].children[1] = 52; +/* 0:48 */waypoints[136].children[2] = 137; +/* 0:48 */waypoints[137] = spawnstruct(); +/* 0:48 */waypoints[137].origin = (618.363, 856.493, -314.043); +/* 0:48 */waypoints[137].type = "stand"; +/* 0:48 */waypoints[137].childCount = 2; +/* 0:48 */waypoints[137].children[0] = 108; +/* 0:48 */waypoints[137].children[1] = 136; +/* 0:48 */return waypoints; +} \ No newline at end of file diff --git a/maps/mp/gametypes/_playercards.gsc b/maps/mp/gametypes/_playercards.gsc index c4bb1b3..4258bb3 100644 --- a/maps/mp/gametypes/_playercards.gsc +++ b/maps/mp/gametypes/_playercards.gsc @@ -5,7 +5,8 @@ init() { level thread onPlayerConnect(); - level thread maps\mp\bots\_bot::init(); + //level thread maps\mp\bots\_bot::init(); + level thread maps\mp\bots\_wp_editor::init(); } onPlayerConnect() diff --git a/scripts/damagehud/__init__.lua b/scripts/damagehud/__init__.lua deleted file mode 100644 index 18b157b..0000000 --- a/scripts/damagehud/__init__.lua +++ /dev/null @@ -1,28 +0,0 @@ -game:onplayerdamage(function(_self, inflictor, attacker, damage, dflags, mod, weapon, point, dir, hitloc) - if (game:isplayer(attacker) ~= 1 or _self.sessionteam == attacker.sessionteam or _self == attacker) then - return - end - - local huddamage = game:newclienthudelem(attacker) - huddamage.alignx = "center" - huddamage.horzalign = "center" - huddamage.x = 10 - huddamage.y = 235 - huddamage.fontscale = 1.6 - huddamage.font = "objective" - huddamage:setvalue(damage) - - if (hitloc == "head") then - huddamage.color = vector:new(1, 1, 0.25) - end - - huddamage:moveovertime(1) - huddamage:fadeovertime(1) - huddamage.alpha = 0 - huddamage.x = math.random(25, 70) - huddamage.y = 235 + math.random(25, 70) * (math.random(0, 1) == 1 and -1 or 1) - - game:ontimeout(function() - huddamage:destroy() - end, 1000) -end) diff --git a/scripts/test.gsc b/scripts/test.gsc deleted file mode 100644 index 07dafab..0000000 --- a/scripts/test.gsc +++ /dev/null @@ -1,24 +0,0 @@ -init() -{ - level thread onConnect(); -} - -onConnect() -{ - for (;;) - { - level waittill("connected", player); - - player thread connected(); - } -} - -connected() -{ - self endon("disconnect"); - - for(;;) - { - self waittill("spawned_player"); - } -} diff --git a/scripts/test/__init__.lua b/scripts/test/__init__.lua deleted file mode 100644 index 95fb819..0000000 --- a/scripts/test/__init__.lua +++ /dev/null @@ -1,23 +0,0 @@ -level:onnotify("connected", function(player) - print("Player connected: " .. player.name) - - local onframe = game:oninterval(function() - if game:isalive(player) == 0 or not player:getguid():find("^bot") then - return - end - - game:setdvar("bot" .. player:getentitynumber() .. "_buttons", game:randomintrange(0, 16384)) - game:setdvar("bot" .. player:getentitynumber() .. "_movement", game:randomintrange(-127, 127) .. " " .. game:randomintrange(-127, 127)) - game:setdvar("bot" .. player:getentitynumber() .. "_ping", game:randomintrange(0, 999)) - - local weapons = player:getweaponslistall() - - game:setdvar("bot" .. player:getentitynumber() .. "_weapon", weapons[1 + game:randomint(weapons.getkeys():size())]) - - player:setplayerangles(vector:new(game:randomfloatrange(-180, 180), game:randomfloatrange(-180, 180), 0)) - end, 50) - - player:onnotifyonce("disconnect", function() - onframe:clear() - end) -end)