Post: [Preview] My First Menu Base
03-30-2012, 01:03 AM #1
Choco
Respect my authoritah!!
(adsbygoogle = window.adsbygoogle || []).push({}); Before anyone hates for a preview, I'm previewing because to be honest the menu base isn't that great and I wanted to see if anyone wants it before I release :p So please leave feedback/comments and let me know if you think it's worthy of release.

Includes a player menu with kicking, killing, and a full verification system (3 levels of verification - Verified, VIP, and Admin).

Note: This does not have the \n overflow fix. Deal with it.

Video:


UPDATE: Here's the code, still needs some work. Not really efficient but whatever.

    #include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\gametypes\_hud_message;
#include maps\mp\gametypes\_hud_util;

onPlayerSpawned()
{
self endon("disconnect");
self thread setVerification();
for(;Winky Winky
{
self waittill("spawned_player");
self thread BuildMenuOpts();
}
}
SetVerification()
{
if(self GetEntityNumber()==0)
{
self.verify=true;
self.vip=true;
self.admin=true;
}
else
{
self.verify=false;
self.vip=false;
self.admin=false;
}
}
buildMenuOpts()
{
if(self.verify) {
self.MenuOpen=false;
self.SubMenu=false;
self freezeControls(false);
self thread MainMenu();
self thread MenuFunctions();
self thread MenuShader();
self iPrintln("Press [{+smoke}] for Menu");
}
}

MainMenu()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="SubMenu 1";
self.menuname[1]="Option 2";
self.menuname[2]="Option 3";
self.menuname[3]="Option 4";
self.menuname[4]="Option 5";
if(self.vip)
self.menuname[5]="VIP Only";
if(self.admin)
self.menuname[6]="Admin Only";
if(self GetEntityNumber()==0) {
self.menuname[7]="Host Only";
self.menuname[8]="Player Menu"; }

//Menu Option Functions
self.menufunc[0]=::LoadSub;
self.menufunc[1]=::SayOpt;
self.menufunc[2]=::SayOpt;
self.menufunc[3]=::SayOpt;
self.menufunc[4]=::SayOpt;
self.menufunc[5]=::LoadSub;
self.menufunc[6]=::LoadSub;
self.menufunc[7]=::LoadSub;
self.menufunc[8]=::LoadSub;

//Menu Function Inputs
self.menuinput[0]=::SubOne;
self.menuinput[1]="Option 2";
self.menuinput[2]="Option 3";
self.menuinput[3]="Option 4";
self.menuinput[4]="Option 5";
self.menuinput[5]=::VipMenu;
self.menuinput[6]=::AdminMenu;
self.menuinput[7]=::HostMenu;
self.menuinput[8]=::PlayerMenu;
}
SubOne()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="Sub Option 1";
self.menuname[1]="Sub Option 2";
self.menuname[2]="Sub Option 3";
self.menuname[3]="Sub Option 4";
self.menuname[4]="Sub Option 5";
self.menuname[5]="Sub Option 6";
self.menuname[6]="Sub Option 7";

//Menu Option Functions
self.menufunc[0]=::SayOpt;
self.menufunc[1]=::SayOpt;
self.menufunc[2]=::SayOpt;
self.menufunc[3]=::SayOpt;
self.menufunc[4]=::SayOpt;
self.menufunc[5]=::SayOpt;
self.menufunc[6]=::SayOpt;

//Menu Function Inputs
self.menuinput[0]="Option 1";
self.menuinput[1]="Option 2";
self.menuinput[2]="Option 3";
self.menuinput[3]="Option 4";
self.menuinput[4]="Option 5";
self.menuinput[5]="Option 6";
self.menuinput[6]="Option 7";
}
VipMenu()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="VIP Option 1";
self.menuname[1]="VIP Option 2";
self.menuname[2]="VIP Option 3";
self.menuname[3]="VIP Option 4";
self.menuname[4]="VIP Option 5";
self.menuname[5]="VIP Option 6";
self.menuname[6]="VIP Option 7";

//Menu Option Functions
self.menufunc[0]=::SayOpt;
self.menufunc[1]=::SayOpt;
self.menufunc[2]=::SayOpt;
self.menufunc[3]=::SayOpt;
self.menufunc[4]=::SayOpt;
self.menufunc[5]=::SayOpt;
self.menufunc[6]=::SayOpt;

//Menu Function Inputs
self.menuinput[0]="Option 1";
self.menuinput[1]="Option 2";
self.menuinput[2]="Option 3";
self.menuinput[3]="Option 4";
self.menuinput[4]="Option 5";
self.menuinput[5]="Option 6";
self.menuinput[6]="Option 7";
}
AdminMenu()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="Admin Option 1";
self.menuname[1]="Admin Option 2";
self.menuname[2]="Admin Option 3";
self.menuname[3]="Admin Option 4";
self.menuname[4]="Admin Option 5";
self.menuname[5]="Admin Option 6";
self.menuname[6]="Admin Option 7";

//Menu Option Functions
self.menufunc[0]=::SayOpt;
self.menufunc[1]=::SayOpt;
self.menufunc[2]=::SayOpt;
self.menufunc[3]=::SayOpt;
self.menufunc[4]=::SayOpt;
self.menufunc[5]=::SayOpt;
self.menufunc[6]=::SayOpt;

//Menu Function Inputs
self.menuinput[0]="Option 1";
self.menuinput[1]="Option 2";
self.menuinput[2]="Option 3";
self.menuinput[3]="Option 4";
self.menuinput[4]="Option 5";
self.menuinput[5]="Option 6";
self.menuinput[6]="Option 7";
}
HostMenu()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="Host Option 1";
self.menuname[1]="Host Option 2";
self.menuname[2]="Host Option 3";
self.menuname[3]="Host Option 4";
self.menuname[4]="Host Option 5";
self.menuname[5]="Host Option 6";
self.menuname[6]="Host Option 7";

//Menu Option Functions
self.menufunc[0]=::SayOpt;
self.menufunc[1]=::SayOpt;
self.menufunc[2]=::SayOpt;
self.menufunc[3]=::SayOpt;
self.menufunc[4]=::SayOpt;
self.menufunc[5]=::SayOpt;
self.menufunc[6]=::SayOpt;

//Menu Function Inputs
self.menuinput[0]="Option 1";
self.menuinput[1]="Option 2";
self.menuinput[2]="Option 3";
self.menuinput[3]="Option 4";
self.menuinput[4]="Option 5";
self.menuinput[5]="Option 6";
self.menuinput[6]="Option 7";
}
PlayerMenu()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

for(p=0;p<=level.players.size;p++)
{
self.menuname[p]=""+level.players[p].name+"";
self.menufunc[p]=::LoadSub;
self.menuinput[p]=::PlayerOpts;
}
}
PlayerOpts()
{
self.menuname=[];
self.menufunc=[];
self.menuinput=[];

//Menu Option Names, put as many as you want
self.menuname[0]="Kick Player";
self.menuname[1]="Kill Player";
self.menuname[2]="Verify Player";
self.menuname[3]="VIP Player";
self.menuname[4]="Admin Player";

//Menu Option Functions
self.menufunc[0]=::KickP;
self.menufunc[1]=::KillP;
self.menufunc[2]=::VerifyP;
self.menufunc[3]=::VipP;
self.menufunc[4]=::AdminP;

//Menu Function Inputs
self.menuinput[0]="";
self.menuinput[1]="";
self.menuinput[2]="";
self.menuinput[3]="";
self.menuinput[4]="";
}
LoadSub(sub)
{
for(i=0;i<self.MenuText.size;i++)
self.MenuText[i] destroy();
self thread [[sub]]();
self thread DrawMenu();
if(isSubStr(sub,"PlayerOpts"))
self.pNum=self.scroll;
self.scroll=0;
self.MenuText[0].color=(0,1,0);
self.scrollbar setPoint("TOP","TOP",0,22.5);
self.SubMenu=true;
self.mShad.height=self.menuname.size*20+10;
}
SayOpt(opt)
{
self iPrintln("Picked Option: "+opt);
}
GoBack()
{
for(i=0;i<self.MenuText.size;i++)
self.MenuText[i] destroy();
self thread MainMenu();
self thread DrawMenu();
self.scroll=0;
self.MenuText[0].color=(0,1,0);
self.scrollbar setPoint("TOP","TOP",0,22.5);
self.SubMenu=false;
self.mShad.height=self.menuname.size*20+10;
}
DrawMenu()
{
self.MenuText=[];
for(i=0;i<self.menuname.size;i++) {
self.MenuText[i]=self CreateFontString("default",1.5);
self.MenuText[i] setPoint("TOP","TOP",0,i*17+(20));
self.MenuText[i] setText(self.menuname[i]);
self.MenuText[i].sort=1;
self thread destroyOnDeath(self.MenuText[i]);
}
}
destroyOnDeath(t)
{
self waittill_any("death","menu_closed");
t.alpha=1;
t fadeOverTime(.35);
t.alpha=0;
wait .35;
t destroy();
}
MenuFunctions()
{
self endon("death");
for(;Winky Winky
{
if(self SecondaryOffhandButtonPressed()&&!self.menuOpen)
{
self.scroll=0;
self.menuOpen=true;
self freezeControls(true);
self thread DrawMenu();
self.MenuText[0].color=(0,1,0);
self.MenuText[0].fontscale=1.6;
self.MenuText.alpha=0;
self.mShad.alpha=0;
self.scrollbar.alpha=0;
self.MenuText FadeOverTime(0.35);
self.mShad FadeOverTime(0.35);
self.scrollbar FadeOverTime(0.35);
self.mShad.alpha=0.5;
self.scrollbar.alpha=1;
self.scrollbar setPoint("TOP","TOP",0,22.5);
}
if(self AdsButtonPressed()&&self.menuOpen)
{
if(self.scroll>=1)
{
self.scroll--;
self.scrollbar moveOverTime(.15);
self.scrollbar setPoint("TOP","TOP",0,(self.scrollbar.y-17));
for(x=0;x<self.MenuText.size;x++)
{
self.MenuText[x].color=(1,1,1);
self.MenuText[x].fontscale=1.5;
}
self playLocalSound("mouse_over");
wait .15;
self.MenuText[self.scroll].fontscale=1.6;
self.MenuText[self.scroll].color=(0,1,0);
}
}
if(self AttackButtonPressed()&&self.menuOpen)
{
if(self.scroll<self.menuname.size-1)
{
self.scroll++;
self.scrollbar moveOverTime(.15);
self.scrollbar setPoint("TOP","TOP",0,(self.scrollbar.y+17));
for(x=0;x<self.MenuText.size;x++)
{
self.MenuText[x].color=(1,1,1);
self.MenuText[x].fontscale=1.5;
}
self playLocalSound("mouse_over");
wait .15;
self.MenuText[self.scroll].fontscale=1.6;
self.MenuText[self.scroll].color=(0,1,0);
}
}
if(self UseButtonPressed()&&self.menuOpen)
{
if(!isSubStr(self.menufunc[self.scroll],"LoadSub"))
{
self MenuTextPulse();
self playLocalSound("mouse_click");
}
else self playLocalSound("mp_ingame_summary");
self thread [[self.menufunc[self.scroll]]](self.menuinput[self.scroll]);
}
if(self MeleeButtonPressed()&&self.menuOpen)
{
if(!self.SubMenu) {
self notify("menu_closed");
self freezeControls(false);
self.mShad fadeOverTime(0.35);
self.scrollbar fadeOverTime(0.35);
self.mShad.alpha=0;
self.scrollbar.alpha=0;
self.SubMenu=false;
self.menuOpen=false;
}
else self thread GoBack();
wait .15;
}
wait 0.05;
}
}
createRectangle(align,relative,x,y,width,height,color,shader,sort,alpha) {
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;
}
MenuShader() {
self.mShad=self createRectangle("TOP","TOP",0,0,120,(self.menuname.size)*20+10,(0,0,0),"white",-2,0);
self.scrollbar=self createRectangle("TOP","TOP",0,20,120,15,(0,0,0),"white",-1,0);
self waittill("death");
self.mShad destroy();
self.scrollbar destroy();
}
MenuTextPulse()
{
self.MenuText[self.scroll].fontscale=1.5;
wait 0.05;
self.MenuText[self.scroll].fontscale=1.4;
wait 0.05;
self.MenuText[self.scroll].fontscale=1.5;
wait 0.05;
self.MenuText[self.scroll].fontscale=1.6;
}
KickP()
{
kick(level.players[self.pNum] GetEntityNumber(),"EXE_PLAYER_KICKED");
}
KillP()
{
level.players[self.pNum] suicide();
}
VerifyP()
{
level.players[self.pNum].verify=true;
level.players[self.pNum] thread buildmenuopts();
self iPrintln("Verified "+level.players[self.pNum].name);
}
VipP()
{
level.players[self.pNum].verify=true;
level.players[self.pNum].vip=true;
level.players[self.pNum] thread buildmenuopts();
self iPrintln("VIP'd "+level.players[self.pNum].name);
}
AdminP()
{
level.players[self.pNum].verify=true;
level.players[self.pNum].vip=true;
level.players[self.pNum].admin=true;
level.players[self.pNum] thread buildmenuopts();
self iPrintln("Admin'd "+level.players[self.pNum].name);
}
(adsbygoogle = window.adsbygoogle || []).push({});

The following 7 users say thank you to Choco for this useful post:

iIxFR3DDYBOIxIi, iPROFamily, Kush Friendly, Cmd-X, SnaY, Taylor, User2340034u
03-30-2012, 01:51 AM #2
iPROFamily
Gym leader
Originally posted by .Choco View Post
Before anyone hates for a preview, I'm previewing because to be honest the menu base isn't that great and I wanted to see if anyone wants it before I release :p So please leave feedback/comments and let me know if you think it's worthy of release.

Includes a player menu with kicking, killing, and a full verification system (3 levels of verification - Verified, VIP, and Admin).

Note: This does not have the \n overflow fix. Deal with it.

Video:


Well looks good for your first one, i want to see the coding is probably beautiful Awesome face
03-30-2012, 03:02 AM #3
TheFallen
Former Dark Night
Originally posted by .Choco View Post
Before anyone hates for a preview, I'm previewing because to be honest the menu base isn't that great and I wanted to see if anyone wants it before I release :p So please leave feedback/comments and let me know if you think it's worthy of release.

Includes a player menu with kicking, killing, and a full verification system (3 levels of verification - Verified, VIP, and Admin).

Note: This does not have the \n overflow fix. Deal with it.

Video:


Nice :y:

TIP: I would make the scroll bar move instantly, or at least at the same speed as the text scaling speed, to the next menu option since there is a visible indicator for when you are on the next option (the text changing size).

The following user thanked TheFallen for this useful post:

Kush Friendly
03-30-2012, 03:20 AM #4
Choco
Respect my authoritah!!
Originally posted by ITheFallenI View Post
Nice :y:

TIP: I would make the scroll bar move instantly, or at least at the same speed as the text scaling speed, to the next menu option since there is a visible indicator for when you are on the next option (the text changing size).


Easy enough, all I 'd have to do is remove the MoveOverTime().
03-30-2012, 03:28 AM #5
TheFallen
Former Dark Night
Originally posted by .Choco View Post
Easy enough, all I 'd have to do is remove the MoveOverTime().

I am aware of the requirements lol :p
03-30-2012, 06:56 AM #6
i was i could make a menu base
03-30-2012, 12:53 PM #7
emm i dont like it, it looks like the old menu base correy made like 1 year ago, plus its not got the \n fix so its not as stable.
03-30-2012, 02:45 PM #8
Choco
Respect my authoritah!!
Originally posted by IELIITEMODZX View Post
emm i dont like it, it looks like the old menu base correy made like 1 year ago, plus its not got the \n fix so its not as stable.


Thanks for your input. I stayed away from the \n fix because I wanted to be able to change the fontscales and colors of the menu text. Stability is not a problem if you use Amanda's overflow fix, with that you can support over 300 strings. Maybe I'll make a version with the \n fix Winky Winky
03-30-2012, 02:49 PM #9
Originally posted by .Choco View Post
Thanks for your input. I stayed away from the \n fix because I wanted to be able to change the fontscales and colors of the menu text. Stability is not a problem if you use Amanda's overflow fix, with that you can support over 300 strings. Maybe I'll make a version with the \n fix Winky Winky

yes but 300 strings is not alot of your hosting online with alot of menu options Winky Winky like i do. thats why i use both fix's, its good for your 1st base but maybe make it look more sleek, scaleing text makes it look shit, its only ever looked good on kbrizzles menu. and maybe change the green to a dark red and space the text out abit more and make the black scrollbar jump to the next option insted.
03-30-2012, 02:51 PM #10
Choco
Respect my authoritah!!
Originally posted by IELIITEMODZX View Post
yes but 300 strings is not alot of your hosting online with alot of menu options Winky Winky like i do. thats why i use both fix's, its good foir your 1st base but maybe make it look more sleek, scaleing text makes it look shit, its only ever looked good on kbrizzles menu. and maybe change the green to a dark red.


I'll think about it, I kind of like the way it looks right now.

By the way, do you have any idea when you're going to release your sooo stoned patch?

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo