Answered Submenu in SubMenu Glitch

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
Hey CCM
Anybody knows how to fix the text disappearing when there is a SubMenu in another one?
Thanks :smile:
 

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
can we see the part of them menu that's having this problem?
Well you know shark base?
When you add a submenu in a submenu "to make a " page 2" for example" when you enter in the "page 2 and go back the title of the first submenu does not appear
Idk if i was clear enough :sweatsmile:
 

candy

G59 Terrorist
Staff member
Donator
Messages
1,332
Reaction score
770
Points
973
Well you know shark base?
When you add a submenu in a submenu "to make a " page 2" for example" when you enter in the "page 2 and go back the title of the first submenu does not appear
Idk if i was clear enough :sweatsmile:
Show us the code, because this might not be a "glitch", just a bad code on your end.
 

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
Show us the code, because this might not be a "glitch", just a bad code on your end.
Yeah my bad i didn't know how to call this issue
Code:
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_rank;

//BO2 GSC Menu Base By Shark

init()
{
    level thread onplayerconnect();
}

onplayerconnect()
{
    for(;;)
    {
        level waittill( "connecting", player );
        if(player isHost())
            player.status = "Host";
        else
            player.status = "Unverified";
            
        player thread onplayerspawned();
    }
}

onplayerspawned()
{
    self endon( "disconnect" );
    level endon( "game_ended" );
    
    self.MenuInit = false;
    
    for(;;)
    {
        self waittill( "spawned_player" );
        self welcomeMessage();
        if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
        {
            if (!self.MenuInit)
            {
                self.MenuInit = true;
                self thread MenuInit();
                self thread closeMenuOnDeath();
            }
        }
    }
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
    hud = self createFontString(font, fontScale);
    hud setText(text);
    hud.x = x;
    hud.y = y;
    hud.color = color;
    hud.alpha = alpha;
    hud.glowColor = glowColor;
    hud.glowAlpha = glowAlpha;
    hud.sort = sort;
    hud.alpha = alpha;
    return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
    hud = newClientHudElem(self);
    hud.elemtype = "icon";
    hud.color = color;
    hud.alpha = alpha;
    hud.sort = sort;
    hud.children = [];
    hud setParent(level.uiParent);
    hud setShader(shader, width, height);
    hud.x = x;
    hud.y = y;
    return hud;
}

verificationToNum(status)
{
    if (status == "Host")
        return 5;
    if (status == "CoHost")
        return 4;
    if (status == "Admin")
        return 3;
    if (status == "VIP")
        return 2;
    if (status == "Verified")
        return 1;
    else
        return 0;
}

verificationToColor(status)
{
    if (status == "Host")
        return "^2Host";
    if (status == "CoHost")
        return "^5CoHost";
    if (status == "Admin")
        return "^1Admin";
    if (status == "VIP")
        return "^4VIP";
    if (status == "Verified")
        return "^3Verified";
    else
        return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
    if( player.status != verlevel)
    {       
        player.status = verlevel;
    
        self.menu.title destroy();
        self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
        self.menu.title FadeOverTime(0.3);
        self.menu.title.alpha = 1;
        
        if(player.status == "Unverified")
            self thread destroyMenu(player);
    
        player suicide();
        self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
        player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
    }
    else
    {
        self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
    }
}

changeVerification(player, verlevel)
{
    player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
    if(bool)
        return rTrue;
    else
        return rFalse;
}

welcomeMessage()
{
    notifyData = spawnstruct();
    notifyData.titleText = "Welcome " + self.name + " To Menu"; //Line 1
    notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
    notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
    notifyData.duration = 5; //Change Duration
    notifyData.font = "objective"; //font
    notifyData.hideWhenInMenu = false;
    self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

CreateMenu()
{
    self add_menu("Main Menu", undefined, "Unverified");
    self add_option("Main Menu", "Sub Menu 1", ::submenu, "SubMenu1", "Sub Menu 1");
    self add_option("Main Menu", "Sub Menu 2", ::submenu, "SubMenu2", "Sub Menu 2");
    self add_option("Main Menu", "Sub Menu 3", ::submenu, "SubMenu3", "Sub Menu 3");
    self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");
      
    self add_menu("SubMenu1", "Main Menu", "Admin");
    self add_option("SubMenu1", "Option 1");
    self add_option("SubMenu1", "Option 2");
    self add_option("SubMenu1", "Option 3");
    self add_option("SubMenu1", "Option 4");
    self add_option("SubMenu1", "Option 5");
    self add_option("SubMenu1", "Option 6");
    self add_option("SubMenu1", "Option 7");
    self add_option("SubMenu1", "Option 8");
    self add_option("SubMenu1", "Option 9");
    self add_option("SubMenu1", "Option 10");
    self add_option("SubMenu1", "Option 11");
    self add_option("SubMenu1", "Option 12");
    self add_option("SubMenu1", "Option 13");
    self add_option("SubMenu1", "Option 14");
    self add_option("SubMenu1", "Option 15");
    self add_option("SubMenu1", "Option 16");
    self add_option("SubMenu1", "Option 17");
    self add_option("SubMenu1", "Option 18");
    self add_option("SubMenu1", "Option 19");
    self add_option("SubMenu1", "Page 2", ::submenu, "Page2", "Page 2");//Here & Thanks to help ;)
        
    self add_menu("SubMenu2", "Main Menu", "VIP");
    self add_option("SubMenu2", "Option 1");
    self add_option("SubMenu2", "Option 2");
    self add_option("SubMenu2", "Option 3");
        
    self add_menu("SubMenu3", "Main Menu", "Verified");
    self add_option("SubMenu3", "Option 1");
    self add_option("SubMenu3", "Option 2");
    self add_option("SubMenu3", "Option 3");
        
    self add_menu("PlayersMenu", "Main Menu", "CoHost");
    for (i = 0; i < 12; i++)
    { self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
    self.menu.menucount["PlayersMenu"] = 0;
    for (i = 0; i < 12; i++)
    {
        player = level.players[i];
        name = player.name;
        
        playersizefixed = level.players.size - 1;
        if(self.menu.curs["PlayersMenu"] > playersizefixed)
        {
            self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
            self.menu.curs["PlayersMenu"] = playersizefixed;
        }
        
        self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);
    
        self add_menu_alt("pOpt " + i, "PlayersMenu");
        self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
        self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
        self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
        self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
        self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
    }
}

add_menu_alt(Menu, prevmenu)
{
    self.menu.getmenu[Menu] = Menu;
    self.menu.menucount[Menu] = 0;
    self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
    self.menu.status[Menu] = status;
    self.menu.getmenu[Menu] = Menu;
    self.menu.scrollerpos[Menu] = 0;
    self.menu.curs[Menu] = 0;
    self.menu.menucount[Menu] = 0;
    self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
    Menu = self.menu.getmenu[Menu];
    Num = self.menu.menucount[Menu];
    self.menu.menuopt[Menu][Num] = Text;
    self.menu.menufunc[Menu][Num] = Func;
    self.menu.menuinput[Menu][Num] = arg1;
    self.menu.menuinput1[Menu][Num] = arg2;
    self.menu.menucount[Menu] += 1;
}

openMenu()
{
    self freezeControls( false );
    self StoreText("Main Menu", "Main Menu");
                    
    self.menu.background FadeOverTime(0.3);
    self.menu.background.alpha = 0.65;

    self.menu.line MoveOverTime(0.15);
    self.menu.line.y = -50;
    
    self.menu.scroller MoveOverTime(0.15);
    self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
    self.menu.open = true;
}

closeMenu()
{
    for(i = 0; i < self.menu.opt.size; i++)
    {
        self.menu.opt[i] FadeOverTime(0.3);
        self.menu.opt[i].alpha = 0;
    }
    
    self.menu.background FadeOverTime(0.3);
    self.menu.background.alpha = 0;
    
    self.menu.title FadeOverTime(0.3);
    self.menu.title.alpha = 0;
    
    self.menu.line MoveOverTime(0.15);
    self.menu.line.y = -550;
    
    self.menu.scroller MoveOverTime(0.15);
    self.menu.scroller.y = -500;   
    self.menu.open = false;
}

destroyMenu(player)
{
    player.MenuInit = false;
    closeMenu();
    
    wait 0.3;
    
    for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
    { player.menu.opt[i] destroy(); }
        
    player.menu.background destroy();
    player.menu.scroller destroy();
    player.menu.line destroy();
    player.menu.title destroy();
    player notify( "destroyMenu" );
}

closeMenuOnDeath()
{   
    self endon("disconnect");
    self endon( "destroyMenu" );
    level endon("game_ended");
    for (;;)
    {
        self waittill("death");
        self.menu.closeondeath = true;
        self submenu("Main Menu", "Main Menu");
        closeMenu();
        self.menu.closeondeath = false;
    }
}

StoreShaders()
{
    self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
    self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
    self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
    self.menu.currentmenu = menu;
    self.menu.title destroy();
    self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
    self.menu.title FadeOverTime(0.3);
    self.menu.title.alpha = 1;
    
    for(i=0; i < self.menu.menuopt[menu].size; i++)
    {
        self.menu.opt[i] destroy();
        self.menu.opt[i] = drawText(self.menu.menuopt[menu][i], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
        self.menu.opt[i] FadeOverTime(0.3);
        self.menu.opt[i].alpha = 1;
    }
}

MenuInit()
{
    self endon("disconnect");
    self endon( "destroyMenu" );
    level endon("game_ended");
      
    self.menu = spawnstruct();
    self.toggles = spawnstruct();
    
    self.menu.open = false;
    
    self StoreShaders();
    self CreateMenu();
    
    for(;;)
    { 
        if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
        {
            openMenu();
        }
        if(self.menu.open)
        {
            if(self usebuttonpressed())
            {
                if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
                {
                    self submenu(self.menu.previousmenu[self.menu.currentmenu]);
                }
                else
                {
                    closeMenu();
                }
                wait 0.2;
            }
            if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
            {   
                self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
                self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));
                
                self.menu.scroller MoveOverTime(0.15);
                self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
            }
            if(self jumpbuttonpressed())
            {
                self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
                wait 0.2;
            }
        }
        wait 0.05;
    }
}
 
submenu(input, title)
{
    if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
    {
        for(i=0; i < self.menu.opt.size; i++)
        { self.menu.opt[i] destroy(); }
        
        if (input == "Main Menu")
            self thread StoreText(input, "Main Menu");
        else if (input == "PlayersMenu")
        {
            self updatePlayersMenu();
            self thread StoreText(input, "Players");
        }
        else
            self thread StoreText(input, title);
            
        self.CurMenu = input;
        
        self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
        self.menu.curs[input] = self.menu.scrollerpos[input];
        
        if (!self.menu.closeondeath)
        {
            self.menu.scroller MoveOverTime(0.15);
            self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
           }
    }
    else
    {
        self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
    }
}
 

candy

G59 Terrorist
Staff member
Donator
Messages
1,332
Reaction score
770
Points
973
Code:
self add_option("SubMenu1", "Page 2", ::submenu, "SubMenu2", "Page 2");
        
    self add_menu("SubMenu2", "Main Menu", "VIP");
    self add_option("SubMenu2", "Option 1");
 

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
Code:
self add_option("SubMenu1", "Page 2", ::submenu, "SubMenu2", "Page 2");
       
    self add_menu("SubMenu2", "Main Menu", "VIP");
    self add_option("SubMenu2", "Option 1");
Okay I'll try it
Thank you :wink:
 

The Dark Side

Former Staff Member
Messages
1,012
Reaction score
786
Points
993
So many menus that use Shark's base have this bug. Lmao.

EDIT: Make sure when you change the submenus you add a new argument to add_menu. Or the game may crash. Do what Candy said, but add this too. xD
Code:
add_menu(Menu, prevmenu, menutitle, status)
{
    self.menu.status[Menu] = status;
    self.menu.getmenu[Menu] = Menu;
    self.menu.scrollerpos[Menu] = 0;
    self.menu.curs[Menu] = 0;
    self.menu.menucount[Menu] = 0;
    self.menu.subtitle[Menu] = menutitle;
    self.menu.previousmenu[Menu] = prevmenu;
}
 
Last edited:

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
So many menus that use Shark's base have this bug. Lmao.

EDIT: Make sure when you change the submenus you add a new argument to add_menu. Or the game may crash. Do what Candy said, but add this too. xD
Code:
add_menu(Menu, prevmenu, menutitle, status)
{
    self.menu.status[Menu] = status;
    self.menu.getmenu[Menu] = Menu;
    self.menu.scrollerpos[Menu] = 0;
    self.menu.curs[Menu] = 0;
    self.menu.menucount[Menu] = 0;
    self.menu.subtitle[Menu] = menutitle;
    self.menu.previousmenu[Menu] = prevmenu;
}
Okay thanks it works but when i go back of the second submenu it brings me at the main page of the menu could it be fixed?
 

The Dark Side

Former Staff Member
Messages
1,012
Reaction score
786
Points
993
Okay thanks it works but when i go back of the second submenu it brings me at the main page of the menu could it be fixed?
Fix your function calling...
self add_menu("SubMenu2", "Main Menu", "SubMenu2", "VIP"); //should look something like this.

submenu2 is current menu, where "Main Menu" is the previous menu. So when you back out of the submenu it will go back to whatever menu you have in place of "Main Menu"
 

Richi987

Veteran
Messages
77
Reaction score
42
Points
793
Fix your function calling...
self add_menu("SubMenu2", "Main Menu", "SubMenu2", "VIP"); //should look something like this.

submenu2 is current menu, where "Main Menu" is the previous menu. So when you back out of the submenu it will go back to whatever menu you have in place of "Main Menu"
Bug is still here^^
Anyway it doesn't matter thank you for your help :wink:
 
Top