/* _menu Author: INeedGames Date: 09/26/2020 The ingame menu. */ #include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\gametypes\_hud_util; #include maps\mp\bots\_bot_utility; init() { if ( getDvar( "bots_main_menu" ) == "" ) setDvar( "bots_main_menu", true ); if ( !getDvarInt( "bots_main_menu" ) ) return; thread watchPlayers(); } watchPlayers() { for ( ;; ) { wait 1; if ( !getDvarInt( "bots_main_menu" ) ) return; for ( i = level.players.size - 1; i >= 0; i-- ) { player = level.players[i]; if ( !player is_host() ) continue; if ( isDefined( player.menuInit ) && player.menuInit ) continue; player thread init_menu(); } } } init_menu() { self.menuInit = true; self.menuOpen = false; self.menu_player = undefined; self.SubMenu = "Main"; self.Curs["Main"]["X"] = 0; self AddOptions(); self thread watchPlayerOpenMenu(); self thread MenuSelect(); self thread RightMenu(); self thread LeftMenu(); self thread watchDisconnect(); self thread doGreetings(); } kill_menu() { self notify( "bots_kill_menu" ); self.menuInit = undefined; } watchDisconnect() { self waittill_either( "disconnect", "bots_kill_menu" ); if ( self.menuOpen ) { if ( isDefined( self.MenuTextY ) ) for ( i = 0; i < self.MenuTextY.size; i++ ) if ( isDefined( self.MenuTextY[i] ) ) self.MenuTextY[i] destroy(); if ( isDefined( self.MenuText ) ) for ( i = 0; i < self.MenuText.size; i++ ) if ( isDefined( self.MenuText[i] ) ) self.MenuText[i] destroy(); if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) { if ( isDefined( self.Menu["X"]["Shader"] ) ) self.Menu["X"]["Shader"] destroy(); if ( isDefined( self.Menu["X"]["Scroller"] ) ) self.Menu["X"]["Scroller"] destroy(); } if ( isDefined( self.menuVersionHud ) ) self.menuVersionHud destroy(); } } doGreetings() { self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); wait 1; self iPrintln( "Welcome to Bot Warfare " + self.name + "!" ); wait 5; self iPrintln( "Press [{+frag}] + [{+smoke}] to open menu!" ); } watchPlayerOpenMenu() { self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); for ( ;; ) { while ( !self FragButtonPressed() || !self SecondaryOffhandButtonPressed() ) wait 0.05; if ( !self.menuOpen ) { self playLocalSound( "mouse_click" ); self thread OpenSub( self.SubMenu ); } else { self playLocalSound( "mouse_click" ); if ( self.SubMenu != "Main" ) self ExitSub(); else { self ExitMenu(); if ( level.inPrematchPeriod || level.gameEnded ) self freezeControls( true ); else self freezecontrols( false ); } } while ( self FragButtonPressed() && self SecondaryOffhandButtonPressed() ) wait 0.05; } } MenuSelect() { self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); for ( ;; ) { while ( !self MeleeButtonPressed() ) wait 0.05; if ( self.MenuOpen ) { self playLocalSound( "mouse_click" ); if ( self.SubMenu == "Main" ) self thread [[self.Option["Function"][self.SubMenu][self.Curs["Main"]["X"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs["Main"]["X"]], self.Option["Arg2"][self.SubMenu][self.Curs["Main"]["X"]] ); else self thread [[self.Option["Function"][self.SubMenu][self.Curs[self.SubMenu]["Y"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs[self.SubMenu]["Y"]], self.Option["Arg2"][self.SubMenu][self.Curs[self.SubMenu]["Y"]] ); } while ( self MeleeButtonPressed() ) wait 0.05; } } LeftMenu() { self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); for ( ;; ) { while ( !self AttackButtonPressed() ) wait 0.05; if ( self.MenuOpen ) { self playLocalSound( "mouse_over" ); if ( self.SubMenu == "Main" ) { self.Curs["Main"]["X"]--; if ( self.Curs["Main"]["X"] < 0 ) self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size - 1; self CursMove( "X" ); } else { self.Curs[self.SubMenu]["Y"]--; if ( self.Curs[self.SubMenu]["Y"] < 0 ) self.Curs[self.SubMenu]["Y"] = self.Option["Name"][self.SubMenu].size - 1; self CursMove( "Y" ); } } while ( self AttackButtonPressed() ) wait 0.05; } } RightMenu() { self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); for ( ;; ) { while ( !self AdsButtonPressed() ) wait 0.05; if ( self.MenuOpen ) { self playLocalSound( "mouse_over" ); if ( self.SubMenu == "Main" ) { self.Curs["Main"]["X"]++; if ( self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size - 1 ) self.Curs["Main"]["X"] = 0; self CursMove( "X" ); } else { self.Curs[self.SubMenu]["Y"]++; if ( self.Curs[self.SubMenu]["Y"] > self.Option["Name"][self.SubMenu].size - 1 ) self.Curs[self.SubMenu]["Y"] = 0; self CursMove( "Y" ); } } while ( self AdsButtonPressed() ) wait 0.05; } } OpenSub( menu, menu2 ) { if ( menu != "Main" && ( !isDefined( self.Menu[menu] ) || !!isDefined( self.Menu[menu]["FirstOpen"] ) ) ) { self.Curs[menu]["Y"] = 0; self.Menu[menu]["FirstOpen"] = true; } logoldi = true; self.SubMenu = menu; if ( self.SubMenu == "Main" ) { if ( isDefined( self.MenuText ) ) for ( i = 0; i < self.MenuText.size; i++ ) if ( isDefined( self.MenuText[i] ) ) self.MenuText[i] destroy(); if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) { if ( isDefined( self.Menu["X"]["Shader"] ) ) self.Menu["X"]["Shader"] destroy(); if ( isDefined( self.Menu["X"]["Scroller"] ) ) self.Menu["X"]["Scroller"] destroy(); } if ( isDefined( self.menuVersionHud ) ) self.menuVersionHud destroy(); for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) { self.MenuText[i] = self createfontstring( "default", 1.6 ); self.MenuText[i] setpoint( "CENTER", "CENTER", -300 + ( i * 100 ), -226 ); self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] ); if ( logOldi ) self.oldi = i; if ( self.MenuText[i].x > 300 ) { logOldi = false; x = i - self.oldi; self.MenuText[i] setpoint( "CENTER", "CENTER", ( ( ( -300 ) - ( i * 100 ) ) + ( i * 100 ) ) + ( x * 100 ), -196 ); } self.MenuText[i].alpha = 1; self.MenuText[i].sort = 999; } if ( !logOldi ) self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 90, ( 0, 0, 0 ), -2, 1, "white" ); else self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 30, ( 0, 0, 0 ), -2, 1, "white" ); self.Menu["X"]["Scroller"] = self createRectangle( "CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -225, 105, 22, ( 1, 0, 0 ), -1, 1, "white" ); self CursMove( "X" ); self.menuVersionHud = initHudElem( "Bot Warfare " + level.bw_VERSION, 0, 0 ); self.MenuOpen = true; } else { if ( isDefined( self.MenuTextY ) ) for ( i = 0 ; i < self.MenuTextY.size ; i++ ) if ( isDefined( self.MenuTextY[i] ) ) self.MenuTextY[i] destroy(); for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) { self.MenuTextY[i] = self createfontstring( "default", 1.6 ); self.MenuTextY[i] setpoint( "CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -160 + ( i * 20 ) ); self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] ); self.MenuTextY[i].alpha = 1; self.MenuTextY[i].sort = 999; } self CursMove( "Y" ); } } CursMove( direction ) { self notify( "scrolled" ); if ( self.SubMenu == "Main" ) { self.Menu["X"]["Scroller"].x = self.MenuText[self.Curs["Main"]["X"]].x; self.Menu["X"]["Scroller"].y = self.MenuText[self.Curs["Main"]["X"]].y; if ( isDefined( self.MenuText ) ) { for ( i = 0; i < self.MenuText.size; i++ ) { if ( isDefined( self.MenuText[i] ) ) { self.MenuText[i].fontscale = 1.5; self.MenuText[i].color = ( 1, 1, 1 ); self.MenuText[i].glowAlpha = 0; } } } self thread ShowOptionOn( direction ); } else { if ( isDefined( self.MenuTextY ) ) { for ( i = 0; i < self.MenuTextY.size; i++ ) { if ( isDefined( self.MenuTextY[i] ) ) { self.MenuTextY[i].fontscale = 1.5; self.MenuTextY[i].color = ( 1, 1, 1 ); self.MenuTextY[i].glowAlpha = 0; } } } if ( isDefined( self.MenuText ) ) { for ( i = 0; i < self.MenuText.size; i++ ) { if ( isDefined( self.MenuText[i] ) ) { self.MenuText[i].fontscale = 1.5; self.MenuText[i].color = ( 1, 1, 1 ); self.MenuText[i].glowAlpha = 0; } } } self thread ShowOptionOn( direction ); } } ShowOptionOn( variable ) { self endon( "scrolled" ); self endon( "disconnect" ); self endon( "exit" ); self endon( "bots_kill_menu" ); for ( time = 0;; time += 0.05 ) { if ( !self isOnGround() && isAlive( self ) && !level.inPrematchPeriod && !level.gameEnded ) self freezecontrols( false ); else self freezecontrols( true ); self setClientDvar( "r_blur", "5" ); self setClientDvar( "sc_blur", "4" ); self addOptions(); if ( self.SubMenu == "Main" ) { if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuText ) && isDefined( self.MenuText[self.Curs[self.SubMenu][variable]] ) ) { self.MenuText[self.Curs[self.SubMenu][variable]].fontscale = 2.0; //self.MenuText[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 ); if ( int( time * 4 ) % 2 ) color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 ); self.MenuText[self.Curs[self.SubMenu][variable]].color = color; } if ( isDefined( self.MenuText ) ) { for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ ) { if ( isDefined( self.MenuText[i] ) ) self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] ); } } } else { if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuTextY ) && isDefined( self.MenuTextY[self.Curs[self.SubMenu][variable]] ) ) { self.MenuTextY[self.Curs[self.SubMenu][variable]].fontscale = 2.0; //self.MenuTextY[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 ); if ( int( time * 4 ) % 2 ) color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 ); self.MenuTextY[self.Curs[self.SubMenu][variable]].color = color; } if ( isDefined( self.MenuTextY ) ) { for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ ) { if ( isDefined( self.MenuTextY[i] ) ) self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] ); } } } wait 0.05; } } AddMenu( menu, num, text, function, arg1, arg2 ) { self.Option["Name"][menu][num] = text; self.Option["Function"][menu][num] = function; self.Option["Arg1"][menu][num] = arg1; self.Option["Arg2"][menu][num] = arg2; } AddBack( menu, back ) { self.Menu["Back"][menu] = back; } ExitSub() { if ( isDefined( self.MenuTextY ) ) for ( i = 0; i < self.MenuTextY.size; i++ ) if ( isDefined( self.MenuTextY[i] ) ) self.MenuTextY[i] destroy(); self.SubMenu = self.Menu["Back"][self.Submenu]; if ( self.SubMenu == "Main" ) self CursMove( "X" ); else self CursMove( "Y" ); } ExitMenu() { if ( isDefined( self.MenuText ) ) for ( i = 0; i < self.MenuText.size; i++ ) if ( isDefined( self.MenuText[i] ) ) self.MenuText[i] destroy(); if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) { if ( isDefined( self.Menu["X"]["Shader"] ) ) self.Menu["X"]["Shader"] destroy(); if ( isDefined( self.Menu["X"]["Scroller"] ) ) self.Menu["X"]["Scroller"] destroy(); } if ( isDefined( self.menuVersionHud ) ) self.menuVersionHud destroy(); self.MenuOpen = false; self notify( "exit" ); self setClientDvar( "r_blur", "0" ); self setClientDvar( "sc_blur", "2" ); } initHudElem( txt, xl, yl ) { hud = NewClientHudElem( self ); hud setText( txt ); hud.alignX = "center"; hud.alignY = "bottom"; hud.horzAlign = "center"; hud.vertAlign = "bottom"; hud.x = xl; hud.y = yl; hud.foreground = true; hud.fontScale = 1.4; 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 ); return hud; } createRectangle( align, relative, x, y, width, height, color, sort, alpha, shader ) { barElemBG = newClientHudElem( self ); barElemBG.elemType = "bar_"; barElemBG.width = width; barElemBG.height = height; barElemBG.align = align; barElemBG.relative = relative; barElemBG.xOffset = 0; barElemBG.yOffset = 0; barElemBG.children = []; barElemBG.sort = sort; barElemBG.color = color; barElemBG.alpha = alpha; barElemBG setParent( level.uiParent ); barElemBG setShader( shader, width, height ); barElemBG.hidden = false; barElemBG setPoint( align, relative, x, y ); return barElemBG; } AddOptions() { self AddMenu( "Main", 0, "Manage bots", ::OpenSub, "man_bots", "" ); self AddBack( "man_bots", "Main" ); _temp = ""; _tempDvar = getDvarInt( "bots_manage_add" ); self AddMenu( "man_bots", 0, "Add 1 bot", ::man_bots, "add", 1 + _tempDvar ); self AddMenu( "man_bots", 1, "Add 3 bot", ::man_bots, "add", 3 + _tempDvar ); self AddMenu( "man_bots", 2, "Add 7 bot", ::man_bots, "add", 7 + _tempDvar ); self AddMenu( "man_bots", 3, "Add 11 bot", ::man_bots, "add", 11 + _tempDvar ); self AddMenu( "man_bots", 4, "Add 17 bot", ::man_bots, "add", 17 + _tempDvar ); self AddMenu( "man_bots", 5, "Kick a bot", ::man_bots, "kick", 1 ); self AddMenu( "man_bots", 6, "Kick all bots", ::man_bots, "kick", getBotArray().size ); _tempDvar = getDvarInt( "bots_manage_fill_kick" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "man_bots", 7, "Toggle auto bot kicking: " + _temp, ::man_bots, "autokick", _tempDvar ); _tempDvar = getDvarInt( "bots_manage_fill_mode" ); switch ( _tempDvar ) { case 0: _temp = "everyone"; break; case 1: _temp = "just bots"; break; case 2: _temp = "everyone, adjust to map"; break; case 3: _temp = "just bots, adjust to map"; break; case 4: _temp = "bots used as team balance"; break; default: _temp = "out of range"; break; } self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar ); _tempDvar = getDvarInt( "bots_manage_fill" ); self AddMenu( "man_bots", 9, "Increase bots to keep in-game: " + _tempDvar, ::man_bots, "fillup", _tempDvar ); self AddMenu( "man_bots", 10, "Decrease bots to keep in-game: " + _tempDvar, ::man_bots, "filldown", _tempDvar ); _tempDvar = getDvarInt( "bots_manage_fill_spec" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar ); // self AddMenu( "Main", 1, "Teams and difficulty", ::OpenSub, "man_team", "" ); self AddBack( "man_team", "Main" ); _tempDvar = getdvar( "bots_team" ); self AddMenu( "man_team", 0, "Change bot team: " + _tempDvar, ::bot_teams, "team", _tempDvar ); _tempDvar = getDvarInt( "bots_team_amount" ); self AddMenu( "man_team", 1, "Increase bots to be on axis team: " + _tempDvar, ::bot_teams, "teamup", _tempDvar ); self AddMenu( "man_team", 2, "Decrease bots to be on axis team: " + _tempDvar, ::bot_teams, "teamdown", _tempDvar ); _tempDvar = getDvarInt( "bots_team_force" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "man_team", 3, "Toggle forcing bots on team: " + _temp, ::bot_teams, "teamforce", _tempDvar ); _tempDvar = getDvarInt( "bots_team_mode" ); if ( _tempDvar ) _temp = "only bots"; else _temp = "everyone"; self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar ); _tempDvar = getdvarint( "bots_skill" ); switch ( _tempDvar ) { case 0: _temp = "random for all"; break; case 1: _temp = "too easy"; break; case 2: _temp = "easy"; break; case 3: _temp = "easy-medium"; break; case 4: _temp = "medium"; break; case 5: _temp = "hard"; break; case 6: _temp = "very hard"; break; case 7: _temp = "hardest"; break; case 8: _temp = "custom"; break; case 9: _temp = "complete random"; break; default: _temp = "out of range"; break; } self AddMenu( "man_team", 5, "Change bot difficulty: " + _temp, ::bot_teams, "skill", _tempDvar ); _tempDvar = getDvarInt( "bots_skill_axis_hard" ); self AddMenu( "man_team", 6, "Increase amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axishardup", _tempDvar ); self AddMenu( "man_team", 7, "Decrease amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axisharddown", _tempDvar ); _tempDvar = getDvarInt( "bots_skill_axis_med" ); self AddMenu( "man_team", 8, "Increase amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismedup", _tempDvar ); self AddMenu( "man_team", 9, "Decrease amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismeddown", _tempDvar ); _tempDvar = getDvarInt( "bots_skill_allies_hard" ); self AddMenu( "man_team", 10, "Increase amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "allieshardup", _tempDvar ); self AddMenu( "man_team", 11, "Decrease amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "alliesharddown", _tempDvar ); _tempDvar = getDvarInt( "bots_skill_allies_med" ); self AddMenu( "man_team", 12, "Increase amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmedup", _tempDvar ); self AddMenu( "man_team", 13, "Decrease amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmeddown", _tempDvar ); // self AddMenu( "Main", 2, "Bot settings", ::OpenSub, "set1", "" ); self AddBack( "set1", "Main" ); _tempDvar = getDvarInt( "bots_loadout_reasonable" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 0, "Bots use only good class setups: " + _temp, ::bot_func, "reasonable", _tempDvar ); _tempDvar = getDvarInt( "bots_loadout_allow_op" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 1, "Bots can use op and annoying class setups: " + _temp, ::bot_func, "op", _tempDvar ); _tempDvar = getDvarInt( "bots_play_move" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar ); _tempDvar = getDvarInt( "bots_play_knife" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 3, "Bots can knife: " + _temp, ::bot_func, "knife", _tempDvar ); _tempDvar = getDvarInt( "bots_play_fire" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar ); _tempDvar = getDvarInt( "bots_play_nade" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 5, "Bots can nade: " + _temp, ::bot_func, "nade", _tempDvar ); _tempDvar = getDvarInt( "bots_play_obj" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 6, "Bots play the objective: " + _temp, ::bot_func, "obj", _tempDvar ); _tempDvar = getDvarInt( "bots_play_camp" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 7, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar ); _tempDvar = getDvarInt( "bots_play_jumpdrop" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 8, "Bots can jump and dropshot: " + _temp, ::bot_func, "jump", _tempDvar ); _tempDvar = getDvarInt( "bots_play_target_other" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 9, "Bots can target other script objects: " + _temp, ::bot_func, "targetother", _tempDvar ); _tempDvar = getDvarInt( "bots_play_killstreak" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 10, "Bots can use killstreaks: " + _temp, ::bot_func, "killstreak", _tempDvar ); _tempDvar = getDvarInt( "bots_play_ads" ); if ( _tempDvar ) _temp = "true"; else _temp = "false"; self AddMenu( "set1", 11, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar ); } bot_func( a, b ) { switch ( a ) { case "reasonable": setDvar( "bots_loadout_reasonable", !b ); self iPrintln( "Bots using reasonable setups: " + !b ); break; case "op": setDvar( "bots_loadout_allow_op", !b ); self iPrintln( "Bots using op setups: " + !b ); break; case "move": setDvar( "bots_play_move", !b ); self iPrintln( "Bots move: " + !b ); break; case "knife": setDvar( "bots_play_knife", !b ); self iPrintln( "Bots knife: " + !b ); break; case "fire": setDvar( "bots_play_fire", !b ); self iPrintln( "Bots fire: " + !b ); break; case "nade": setDvar( "bots_play_nade", !b ); self iPrintln( "Bots nade: " + !b ); break; case "obj": setDvar( "bots_play_obj", !b ); self iPrintln( "Bots play the obj: " + !b ); break; case "camp": setDvar( "bots_play_camp", !b ); self iPrintln( "Bots camp: " + !b ); break; case "jump": setDvar( "bots_play_jumpdrop", !b ); self iPrintln( "Bots jump: " + !b ); break; case "targetother": setDvar( "bots_play_target_other", !b ); self iPrintln( "Bots target other: " + !b ); break; case "killstreak": setDvar( "bots_play_killstreak", !b ); self iPrintln( "Bots use killstreaks: " + !b ); break; case "ads": setDvar( "bots_play_ads", !b ); self iPrintln( "Bots ads: " + !b ); break; } } bot_teams( a, b ) { switch ( a ) { case "team": switch ( b ) { case "autoassign": setdvar( "bots_team", "allies" ); self iPrintlnBold( "Changed bot team to allies." ); break; case "allies": setdvar( "bots_team", "axis" ); self iPrintlnBold( "Changed bot team to axis." ); break; case "axis": setdvar( "bots_team", "custom" ); self iPrintlnBold( "Changed bot team to custom." ); break; default: setdvar( "bots_team", "autoassign" ); self iPrintlnBold( "Changed bot team to autoassign." ); break; } break; case "teamup": setdvar( "bots_team_amount", b + 1 ); self iPrintln( ( b + 1 ) + " bot(s) will try to be on axis team." ); break; case "teamdown": setdvar( "bots_team_amount", b - 1 ); self iPrintln( ( b - 1 ) + " bot(s) will try to be on axis team." ); break; case "teamforce": setDvar( "bots_team_force", !b ); self iPrintln( "Forcing bots to team: " + !b ); break; case "teammode": setDvar( "bots_team_mode", !b ); self iPrintln( "Only count bots on team: " + !b ); break; case "skill": switch ( b ) { case 0: self iPrintlnBold( "Changed bot skill to easy." ); setDvar( "bots_skill", 1 ); break; case 1: self iPrintlnBold( "Changed bot skill to easy-med." ); setDvar( "bots_skill", 2 ); break; case 2: self iPrintlnBold( "Changed bot skill to medium." ); setDvar( "bots_skill", 3 ); break; case 3: self iPrintlnBold( "Changed bot skill to med-hard." ); setDvar( "bots_skill", 4 ); break; case 4: self iPrintlnBold( "Changed bot skill to hard." ); setDvar( "bots_skill", 5 ); break; case 5: self iPrintlnBold( "Changed bot skill to very hard." ); setDvar( "bots_skill", 6 ); break; case 6: self iPrintlnBold( "Changed bot skill to hardest." ); setDvar( "bots_skill", 7 ); break; case 7: self iPrintlnBold( "Changed bot skill to custom. Base is easy." ); setDvar( "bots_skill", 8 ); break; case 8: self iPrintlnBold( "Changed bot skill to complete random. Takes effect at restart." ); setDvar( "bots_skill", 9 ); break; default: self iPrintlnBold( "Changed bot skill to random. Takes effect at restart." ); setDvar( "bots_skill", 0 ); break; } break; case "axishardup": setdvar( "bots_skill_axis_hard", ( b + 1 ) ); self iPrintln( ( ( b + 1 ) ) + " hard bots will be on axis team." ); break; case "axisharddown": setdvar( "bots_skill_axis_hard", ( b - 1 ) ); self iPrintln( ( ( b - 1 ) ) + " hard bots will be on axis team." ); break; case "axismedup": setdvar( "bots_skill_axis_med", ( b + 1 ) ); self iPrintln( ( ( b + 1 ) ) + " med bots will be on axis team." ); break; case "axismeddown": setdvar( "bots_skill_axis_med", ( b - 1 ) ); self iPrintln( ( ( b - 1 ) ) + " med bots will be on axis team." ); break; case "allieshardup": setdvar( "bots_skill_allies_hard", ( b + 1 ) ); self iPrintln( ( ( b + 1 ) ) + " hard bots will be on allies team." ); break; case "alliesharddown": setdvar( "bots_skill_allies_hard", ( b - 1 ) ); self iPrintln( ( ( b - 1 ) ) + " hard bots will be on allies team." ); break; case "alliesmedup": setdvar( "bots_skill_allies_med", ( b + 1 ) ); self iPrintln( ( ( b + 1 ) ) + " med bots will be on allies team." ); break; case "alliesmeddown": setdvar( "bots_skill_allies_med", ( b - 1 ) ); self iPrintln( ( ( b - 1 ) ) + " med bots will be on allies team." ); break; } } man_bots( a, b ) { switch ( a ) { case "add": setdvar( "bots_manage_add", b ); if ( b == 1 ) { self iPrintln( "Adding " + b + " bot." ); } else { self iPrintln( "Adding " + b + " bots." ); } break; case "kick": result = false; for ( i = 0; i < b; i++ ) { tempBot = random( getBotArray() ); if ( isDefined( tempBot ) ) { tempBot RemoveTestClient(); result = true; } wait 0.25; } if ( !result ) self iPrintln( "No bots to kick" ); break; case "autokick": setDvar( "bots_manage_fill_kick", !b ); self iPrintln( "Kicking bots when bots_fill is exceeded: " + !b ); break; case "fillmode": switch ( b ) { case 0: setdvar( "bots_manage_fill_mode", 1 ); self iPrintln( "bot_fill will now count only bots." ); break; case 1: setdvar( "bots_manage_fill_mode", 2 ); self iPrintln( "bot_fill will now count everyone, adjusting to map." ); break; case 2: setdvar( "bots_manage_fill_mode", 3 ); self iPrintln( "bot_fill will now count only bots, adjusting to map." ); break; case 3: setdvar( "bots_manage_fill_mode", 4 ); self iPrintln( "bot_fill will now use bots as team balance." ); break; default: setdvar( "bots_manage_fill_mode", 0 ); self iPrintln( "bot_fill will now count everyone." ); break; } break; case "fillup": setdvar( "bots_manage_fill", b + 1 ); self iPrintln( "Increased to maintain " + ( b + 1 ) + " bot(s)." ); break; case "filldown": setdvar( "bots_manage_fill", b - 1 ); self iPrintln( "Decreased to maintain " + ( b - 1 ) + " bot(s)." ); break; case "fillspec": setDvar( "bots_manage_fill_spec", !b ); self iPrintln( "Count players on spectator for bots_fill: " + !b ); break; } }