menu()
{
self endon( "disconnect" );
self endon( "death" );
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getMenu;
self thread MonitorButtons();
self thread listen
:iniMenu, "Pressed_L2" );
}
MonitorButtons()
{
self endon("disconnect");
for(;
{
if(self UseButtonPressed())
{
self notify("Pressed_Square");
wait .1;
}
if(self AttackButtonPressed())
{
self notify("Pressed_R1");
wait .1;
}
if(self AdsButtonPressed())
{
self notify("Pressed_L1");
wait .1;
}
if(self SecondaryOffhandButtonPressed())
{
self notify("Pressed_L2");
wait .3;
}
if(self FragButtonPressed())
{
self notify("Pressed_R2");
wait .3;
}
if(self MeleeButtonPressed())
{
self notify("Pressed_Melee");
wait .2;
}
wait .05;
}
}
iniMenu()
{
if( self.MenuIsOpen == false )
{
_openMenu();
self thread drawMenu( self.cycle, self.scroll);
self thread listenMenuEvent( ::cycleRight, "Pressed_R2" );
self thread listenMenuEvent( ::cycleLeft, "Pressed_L2" );
self thread listenMenuEvent( ::scrollUp, "Pressed_L1" );
self thread listenMenuEvent( ::scrollDown, "Pressed_R1" );
self thread listenMenuEvent( ::select, "Pressed_Square" );
self thread runOnEvent( ::exitMenu, "Pressed_Melee" );
level thread listenMenuEvent( ::updateMenu, "connected" );
}
}
select()
{
menu = [[self.getMenu]]();
self thread [[ menu[self.cycle].function[self.scroll] ]]( menu[self.cycle].input[self.scroll] );
}
cycleRight()
{
self.cycle++;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll);
}
cycleLeft()
{
self.cycle--;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll);
}
scrollUp()
{
self.scroll--;
checkScroll();
drawMenu( self.cycle, self.scroll);
}
scrollDown()
{
self.scroll++;
checkScroll();
drawMenu( self.cycle, self.scroll);
}
exitMenu()
{
self.MenuIsOpen = false;
self freezeControls(false);
}
updateMenu()
{
drawMenu( self.cycle, self.scroll );
}
_openMenu()
{
self.MenuIsOpen = true;
self freezeControls(true);
menu = [[self.getMenu]]();
self.numMenus = menu.size;
self.menuSize = [];
for(i = 0;i < self.numMenus;i++) self.menuSize[i] = menu[i].name.size;
}
checkCycle()
{
if(self.cycle > self.numMenus - 1)
{
self.cycle = self.cycle - self.numMenus;
}
else if(self.cycle < 0)
{
self.cycle = self.cycle + self.numMenus;
}
}
checkScroll()
{
if(self.scroll < 1)
{
self.scroll = 1;
}
else if(self.scroll > self.menuSize[self.cycle] - 1)
{
self.scroll = self.menuSize[self.cycle] - 1;
}
}
drawMenu( cycle, scroll )
{
menu = [[self.getMenu]]();
display = [];
if( menu.size > 2 )
{
leftTitle = self createFontString( "objective", 2.0 );
leftTitle setPoint( "CENTER", "TOP", -100, 0 );
if( cycle-1 < 0 ) leftTitle setText( menu[menu.size - 1].name[0] );
else leftTitle setText( menu[cycle - 1].name[0] );
self thread destroyOnAny( leftTitle, "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
level thread destroyOn( leftTitle, "connected" );
rightTitle = self createFontString( "objective", 2.0 );
rightTitle setPoint( "CENTER", "TOP", 100, 0 );
if( cycle > menu.size - 2 ) rightTitle setText( menu[0].name[0] );
else rightTitle setText( menu[cycle + 1].name[0] );
self thread destroyOnAny( rightTitle, "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
level thread destroyOn( rightTitle, "connected" );
}
for( i = 0;i < menu[cycle].name.size;i++ )
{
if(i < 1) display[i] = self createFontString( "objective", 2.0 );
else display[i] = self createFontString( "objective", 1.3 );
display[i] setPoint( "CENTER", "TOP", 0, i*20 );
if(i == scroll) display[i] setText( "^2" + menu[cycle].name[i] );
else display[i] setText( menu[cycle].name[i] );
self thread destroyOnAny( display[i], "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
level thread destroyOn( display[i], "connected" );
}
}
listen( function, event )
{
self endon ( "disconnect" );
self endon ( "death" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
listenMenuEvent( function, event )
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "Pressed_Melee" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
runOnEvent( function, event )
{
self endon ( "disconnect" );
self endon ( "death" );
self waittill( event );
self thread [[function]]();
}
destroyOn( element, event )
{
self waittill( event );
element destroy();
}
destroyOnAny( element, event1, event2, event3, event4, event5, event6, event7, event8 )
{
self waittill_any( event1, event2, event3, event4, event5, event6, event7, event8 );
element destroy();
}
openSubMenu()
{
self notify( "Pressed_Melee" );
wait .01;
oldMenu = [[self.getMenu]]();
self.input = oldMenu[self.cycle].input[self.scroll];
self.oldCycle = self.cycle;
self.oldScroll = self.scroll;
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getSubMenu_Menu;
_openMenu();
self thread drawMenu( self.cycle, self.scroll );
self thread listenMenuEvent( ::cycleRight, "Pressed_R2" );
self thread listenMenuEvent( ::cycleLeft, "Pressed_L2" );
self thread listenMenuEvent( ::scrollUp, "Pressed_L1" );
self thread listenMenuEvent( ::scrollDown, "Pressed_R1" );
self thread listenMenuEvent( ::select, "Pressed_Square" );
self thread runOnEvent( ::exitSubMenu, "Pressed_Melee" );
}
exitSubMenu()
{
self.getMenu = ::getMenu;
self.cycle = self.oldCycle;
self.scroll = self.oldScroll;
self.menuIsOpen = false;
wait .01;
self notify( "Pressed_R1" );
}
getSubMenu_Menu()
{
menu = [];
menu[0] = getSubMenu_SubMenu1();
return menu;
}
getSubMenu_SubMenu1()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "SubMenu Options";
menu.name[1] = "2nd level menu option";
menu.name[2] = "2nd level menu option";
menu.name[3] = "2nd level menu option";
menu.name[4] = "2nd level menu option";
menu.name[5] = "2nd level menu option";
//menu.function[1] = ;
//menu.function[2] = ;
//menu.function[3] = ;
//menu.function[4] = ;
//menu.function[5] = ;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getMenu()
{
menu = [];
menu[0] = getSubMenu1();
menu[1] = getSubMenu2();
menu[2] = getSubMenu3();
menu[3] = getSubMenu4();
menu[4] = getSubMenu5();
if(self GetEntityNumber() == 0)
{
menu[menu.size] = getPlayerMenu();
menu[menu.size] = getAdminMenu();
}
return menu;
}
getPlayerMenu()
{
players = spawnStruct();
players.name = [];
players.function = [];
players.input = [];
players.name[0] = "Players";
for( i = 0; i < level.players.size; i++ )
{
players.name[i+1] = level.players[i].name;
players.function[i+1] = :: openSubMenu;
players.input[i+1] = level.players[i];
}
return players;
}
getAdminMenu()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Admin";
menu.name[1] = "admin option";
menu.name[2] = "admin option";
menu.name[3] = "admin option";
menu.name[4] = "admin option";
menu.name[5] = "admin option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getSubMenu1()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Title 1";
menu.name[1] = "option";
menu.name[2] = "option";
menu.name[3] = "option";
menu.name[4] = "option";
menu.name[5] = "option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getSubMenu2()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Title 2";
menu.name[1] = "option";
menu.name[2] = "option";
menu.name[3] = "option";
menu.name[4] = "option";
menu.name[5] = "option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getSubMenu3()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Title 3";
menu.name[1] = "option";
menu.name[2] = "option";
menu.name[3] = "option";
menu.name[4] = "option";
menu.name[5] = "option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getSubMenu4()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Title 4";
menu.name[1] = "option";
menu.name[2] = "option";
menu.name[3] = "option";
menu.name[4] = "option";
menu.name[5] = "option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
getSubMenu5()
{
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "Title 5";
menu.name[1] = "option";
menu.name[2] = "option";
menu.name[3] = "option";
menu.name[4] = "option";
menu.name[5] = "option";
//menu.function[1] = ::;
//menu.function[2] = ::;
//menu.function[3] = ::;
//menu.function[4] = ::;
//menu.function[5] = ::;
menu.input[1] = "";
menu.input[2] = "";
menu.input[3] = "";
menu.input[4] = "";
menu.input[5] = "";
return menu;
}
self thread menu();
self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+smoke}] for Menu" );
* DConnor - For the original menu base.
* Me - For converting it.
level.BunkerOrigin=(2259, 5133, 155);
is the origin in which the person set the position of the bunker to be spawned at, so you have to change the co0ordinates to fit where you want the bunker to be
.
level.BunkerOrigin = self.origin+(0,0,0);
.
Copyright © 2026, NextGenUpdate.
All Rights Reserved.