vampytwist

"Don't you trust me?"
Messages
645
Reaction score
625
Points
758
Sharks edit of Deathy's menu from Black ops 2.


Code:
#using scripts\codescripts\struct;

#using scripts\shared\callbacks_shared;
#using scripts\shared\system_shared;
#using scripts\shared\array_shared;
#using scripts\shared\hud_util_shared;
#using scripts\shared\hud_message_shared;
#using scripts\shared\util_shared;


#insert scripts\shared\shared.gsh;

#namespace clientids;

REGISTER_SYSTEM("clientids", & __init__, undefined)

function __init__() {
    callback::on_start_gametype( & init);
    callback::on_connect( & on_player_connect);
    callback::on_spawned( & on_player_spawned);
}

function init() {
    level.clientid = 0;

}

function on_player_connect() {
    self.clientid = matchRecordNewPlayer(self);

    if (!isdefined(self.clientid) || self.clientid == -1) {
        self.clientid = level.clientid;
        level.clientid++;
    }

    if(self isHost())
            self.status = "Host";
        else
            self.status = "Unverified";

}

function on_player_spawned() {
   self.MenuInit = false;
        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();
            }
        }
}

function drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
    hud =  hud::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;
}

function 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 hud::setParent(level.uiParent);
    hud setShader(shader, width, height);
    hud.x = x;
    hud.y = y;
    return hud;
}

function 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;
}

function 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";
}

function 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));
    }
}

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

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

function 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 hud_message::notifyMessage(notifyData);
}

function 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", &test, "Input 1 working", "Input 2 Working");
    self add_option("SubMenu1", "Option 2");
    self add_option("SubMenu1", "Option 3");
       
    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"); }
}

function 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");
    }
}

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

function 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;
}

function 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;
}

function 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;
}

function 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;
}

function 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" );
}

function 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;
    }
}

function 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);
}

function 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;
    }
}

function 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())
            {
               if(!self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]])
               {
               func = self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]];
               input = self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]];
               input1 = self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]];
               
               if (isDefined(input1)) {
                   self thread [[func]](input,input1);
                   wait 0.2;
               } else if (isDefined(self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]])) {
                   self thread [[func]](input);
                   wait 0.2;
               } else
                   self thread [[func]](input);
                   wait 0.2;
               }
               
            }
        }
        wait 0.05;
    }
}
function 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!");
    }
}


function test(inp, inp1)
{
   self IPrintLn("^2"+inp);
   wait 2;
   self IPrintLn("^4"+inp1);
}

Features
Code:
All Client Support
Scroller Remembrance
Verification
Easy To Customize & Understand
Verification Options
Code:
Host
CoHost
Admin
VIP
Verified
Unverified

Credits:
Code:
Shark - For the bo2 version and what ever edits/modifications he made to Deathy's menu base
RoTheBeast - Ideas From His MW2 Menu Base
Deathy0909 - The Original Base
 
Top