onPlayerSpawned(){
self endon( "disconnect" );
if(self isHost()){
}
for(;
{
self waittill( "spawned_player" );
self thread menu();
self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+actionslot 2}] for Menu" );
}
}
notifyAllCommands(){
self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" ); //Menu
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" ); //Scroll Down
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" ); //scroll left
self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" ); //scroll right
self notifyOnPlayerCommand( "button_ltrig", "+toggleads_throw" );
self notifyOnPlayerCommand( "button_rtrig", "attack" );
self notifyOnPlayerCommand( "button_rshldr", "+frag");
self notifyOnPlayerCommand( "button_lshldr", "+smoke");
self notifyOnPlayerCommand( "button_rstick", "+melee");
self notifyOnPlayerCommand( "button_lstick", "+breath_sprint");
self notifyOnPlayerCommand( "button_a", "+gostand" ); //Select
self notifyOnPlayerCommand( "button_b", "+stance" ); //Go Back
self notifyOnPlayerCommand( "button_x", "+usereload " );
self notifyOnPlayerCommand( "button_y", "weapnext" );
self notifyOnPlayerCommand( "button_back", "togglescores" );
}
//on death set self.menuIsOpen to false;
menu(){
self endon( "disconnect" );
self endon( "death" );
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getMenu;
notifyAllCommands();
self thread listen
:iniMenu, "button_x" );
}
iniMenu(){
if( self.MenuIsOpen == false ){
_openMenu();
self thread drawMenu( self.cycle, self.scroll);
self thread listenMenuEvent( ::cycleRight, "dpad_right" );
self thread listenMenuEvent( ::cycleLeft, "dpad_left" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitMenu, "button_b" );
}
}
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);
}
updateMenuTimer()
{
wait 2;
self thread updateMenu();
}
updateMenu(){
drawMenu( self.cycle, self.scroll );
}
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.cycle < 0){
self.scroll = self.menuSize[self.cycle] - 1;
}
}
drawMenu( cycle, scroll ){
menu = [[self.getMenu]]();
display = [];
//display other menu options left/right
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, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "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, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
level thread destroyOn( rightTitle, "connected" );
}
//draw column
for( i = 0; i < menu[cycle].name.size; i++ ){
if(i < 1)
display[i] = self createFontString( "objective", 2.0 );//The menu title
else
display[i] = self createFontString( "objective", 1.3 );
display[i] setPoint( "CENTER", "TOP", 0, i*20 );
if(i == scroll)
display[i] setText( "^1" + menu[cycle].name[i] );//Colour option
else
display[i] setText( menu[cycle].name[i] );
self thread destroyOnAny( display[i], "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
level thread destroyOn( display[i], "connected" );
}
}
listenMenuEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "button_b" );
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( "button_b" );
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, "button_rshldr" );
self thread listenMenuEvent( ::cycleLeft, "button_lshldr" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitSubMenu, "button_b" );
}
exitSubMenu(){
self.getMenu = ::getMenu;
self.cycle = self.oldCycle;
self.scroll = self.oldScroll;
self.menuIsOpen = false;
wait .01;
self notify( "button_b" );
}
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] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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 isHost()){
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;
}
//^0 = Black Be Sure To Change 
getAdminMenu(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^0Admin";
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;
}
//^5 = Cyan Be Sure To Change 
getSubMenu1(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^5Title Here";
menu.name[1] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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;
}
//^6 = Pink Be Sure To Change 
getSubMenu2(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^6Title Here";
menu.name[1] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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;
}
//^5 = Cyan Be Sure To Change 
getSubMenu3(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^5Title Here";
menu.name[1] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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;
}
//^6 = Pink Be Sure To Change 
getSubMenu4(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^6Title Here";
menu.name[1] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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;
}
//^0 = Black Be Sure To Change 
getSubMenu5(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[0] = "^0Title Here";
menu.name[1] = "Menu Option Here";
menu.name[2] = "Menu Option Here";
menu.name[3] = "Menu Option Here";
menu.name[4] = "Menu Option Here";
menu.name[5] = "Menu Option Here";
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 notifyOnPlayerCommand( "dpad_up", "+actionslot 1" ); //Scroll Up
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" ); //Scroll Down
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" ); //scroll left
self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" ); //scroll right
self notifyOnPlayerCommand( "button_a", "+gostand" ); //Select
self notifyOnPlayerCommand( "button_b", "+stance" ); //Go Back

But thanks for the help Gin :love: But I'm still gonna look through his coding etc to see if there are any scripting errors.
But thanks for the help Gin :love: But I'm still gonna look through his coding etc to see if there are any scripting errors.
Copyright © 2026, NextGenUpdate.
All Rights Reserved.