mirror of
https://github.com/ineedbots/iw3_bot_warfare.git
synced 2025-04-22 10:15:44 +00:00
1016 lines
25 KiB
Plaintext
1016 lines
25 KiB
Plaintext
/*
|
|
_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;
|
|
|
|
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":
|
|
for (i = 0; i < b; i++)
|
|
{
|
|
RemoveTestClient();
|
|
|
|
wait 0.25;
|
|
}
|
|
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;
|
|
}
|
|
}
|