From 55cebdb9ad70fb67663478a60c3dfc427096b5b3 Mon Sep 17 00:00:00 2001 From: ineedbots Date: Tue, 11 May 2021 12:55:30 -0600 Subject: [PATCH] Added menu --- maps/mp/bots/_bot_utility.gsc | 4 +- maps/mp/bots/_menu.gsc | 1043 +++++++++++++++++++++++++++++++++ scripts/bots_menu.gsc | 4 + 3 files changed, 1049 insertions(+), 2 deletions(-) create mode 100644 maps/mp/bots/_menu.gsc create mode 100644 scripts/bots_menu.gsc diff --git a/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc index 2312c85..2e7a377 100644 --- a/maps/mp/bots/_bot_utility.gsc +++ b/maps/mp/bots/_bot_utility.gsc @@ -473,7 +473,7 @@ getValidGrenade() */ isWeaponPrimary(weap) { - //return (maps\mp\gametypes\_weapons::isPrimaryWeapon(weap) || maps\mp\gametypes\_weapons::isAltModeWeapon(weap)); + return (maps\mp\gametypes\_weapons::isPrimaryWeapon(weap) || maps\mp\gametypes\_weapons::isAltModeWeapon(weap)); } /* @@ -510,7 +510,7 @@ isSecondaryGrenade(gnade) */ isWeaponDroppable(weap) { - //return (maps\mp\gametypes\_weapons::mayDropWeapon(weap)); + return (maps\mp\gametypes\_weapons::mayDropWeapon(weap)); } /* diff --git a/maps/mp/bots/_menu.gsc b/maps/mp/bots/_menu.gsc new file mode 100644 index 0000000..5102aec --- /dev/null +++ b/maps/mp/bots/_menu.gsc @@ -0,0 +1,1043 @@ +/* + _menu + Author: INeedGames + Date: 05/11/2021 + 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(); + } + } +} + +kill_menu() +{ + self notify("bots_kill_menu"); + self.menuInit = undefined; +} + +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 UpMenu(); + self thread DownMenu(); + + self thread watchDisconnect(); + + self thread doGreetings(); +} + +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 [{+actionslot 5}] to open menu!"); +} + +watchPlayerOpenMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand( "bots_open_menu", "+actionslot 5" ); + for(;;) + { + self waittill( "bots_open_menu" ); + 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(!gameFlag( "prematch_done" ) || level.gameEnded) + self freezeControls(true); + else + self freezecontrols(false); + } + } + } +} + +MenuSelect() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand("bots_select", "+gostand"); + for(;;) + { + self waittill( "bots_select" ); + 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"]]); + } + } +} + +LeftMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand( "bots_left", "+moveleft" ); + for(;;) + { + self waittill( "bots_left" ); + if(self.MenuOpen && self.SubMenu == "Main") + { + self playLocalSound("mouse_over"); + self.Curs["Main"]["X"]--; + + if(self.Curs["Main"]["X"] < 0) + self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size -1; + + self CursMove("X"); + } + } +} + +RightMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand("bots_right", "+moveright"); + for(;;) + { + self waittill( "bots_right" ); + if(self.MenuOpen && self.SubMenu == "Main") + { + self playLocalSound("mouse_over"); + self.Curs["Main"]["X"]++; + + if(self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size -1) + self.Curs["Main"]["X"] = 0; + + self CursMove("X"); + } + } +} + +UpMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand( "bots_up", "+forward" ); + for(;;) + { + self waittill( "bots_up" ); + if(self.MenuOpen && self.SubMenu != "Main") + { + self playLocalSound("mouse_over"); + 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"); + } + } +} + +DownMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + self notifyOnPlayerCommand( "bots_down", "+back" ); + for(;;) + { + self waittill( "bots_down" ); + if(self.MenuOpen && self.SubMenu != "Main") + { + self playLocalSound("mouse_over"); + 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"); + } + } +} + +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) && gameFlag( "prematch_done" ) && !level.gameEnded) + self freezecontrols(false); + else + self freezecontrols(true); + + self setClientDvar( "r_blur", "5" ); + self setClientDvar( "sc_blur", "15" ); + 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; + 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_take_carepackages"); + if(_tempDvar) + _temp = "true"; + else + _temp = "false"; + self AddMenu("set1", 6, "Bots can take carepackages: "+_temp, ::bot_func, "care", _tempDvar); + + _tempDvar = getDvarInt("bots_play_obj"); + if(_tempDvar) + _temp = "true"; + else + _temp = "false"; + self AddMenu("set1", 7, "Bots play the objective: "+_temp, ::bot_func, "obj", _tempDvar); + + _tempDvar = getDvarInt("bots_play_camp"); + if(_tempDvar) + _temp = "true"; + else + _temp = "false"; + self AddMenu("set1", 8, "Bots can camp: "+_temp, ::bot_func, "camp", _tempDvar); + + _tempDvar = getDvarInt("bots_play_jumpdrop"); + if(_tempDvar) + _temp = "true"; + else + _temp = "false"; + self AddMenu("set1", 9, "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", 10, "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", 11, "Bots can use killstreaks: "+_temp, ::bot_func, "killstreak", _tempDvar); + + _tempDvar = getDvarInt("bots_play_ads"); + if(_tempDvar) + _temp = "true"; + else + _temp = "false"; + self AddMenu("set1", 12, "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 "care": + setDvar("bots_play_take_carepackages", !b); + self iPrintln("Bots take carepackages: " + !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)) + { + kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" ); + 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; + } +} diff --git a/scripts/bots_menu.gsc b/scripts/bots_menu.gsc new file mode 100644 index 0000000..0ae1805 --- /dev/null +++ b/scripts/bots_menu.gsc @@ -0,0 +1,4 @@ +init() +{ + level thread maps\mp\bots\_menu::init(); +}