INeedBots d9b2cca7f5 doc
2020-12-04 00:29:50 -06:00

549 lines
12 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;
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()
{
}