0
Thanks to everyone who helped me with this
(Basically everyone who's active in here (You know who you are ((=D) ) ) for helping with overflows, shaders and general help along the way.
Obviously not the most advanced menu, but it looks pretty :fa: .
I have included a player menu, Admin Menu, and VIP (Obviously with verification) :smile:.
Controls :
Grenade - Open / Back / Close
Square - Choose
R1 | L1 - Scroll
You add your own functions like soPHP Code://thread from rank with: thread maps\mp\gametypes\menubs::init();
//replace menubs with whatever your gsc is called
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
init()
{
level thread onPlayerConnect();
precacheShader( "gradient_fadein" );
precacheShader( "animbg_blur_front" );
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", p );
p thread onPlayerSpawned();
}
}
onPlayerSpawned()
{
self.menuPos = 0;
self.menuOpen = false;
self.subOpen = false;
self.menuString=("");
self.menuTitles=[];
self.functions=[];
if(self.name == level.hostname)
{
self.status="Admin";
self thread monitorOpen();
}
else
{
self.status="Unverified";
}
for(;;)
{
self thread death();
self waittill( "spawned_player" );
}
}
monitorOpen()
{
self endon("disconnect");
self endon("negged");
for(;;)
{
if(self fragButtonPressed())
{
if(self.menuOpen == false)
{
self thread mainMenu();
self thread monitorbtn();
self thread openCloseMenu(true,false,0,10,0,1,true);
self thread showShaders();
}
else if(self.subOpen ==true)
{
self thread mainMenu();
}
else
{
self.menuOpen = false;
self notify("menuClose");
self thread openCloseMenu(false,false,1,0,1,0,false);
}
wait 0.3;
}
wait 0.1;
}
}
monitorbtn()
{
self endon("disconnect");
self endon("menuClose");
for(;;)
{
if(self AttackButtonPressed())
{
if(self.menuPos==self.menuThreads)
{
self.menuPos = -1;
}
self.menuPos++;
self thread shaderMove();
wait 0.3;
}
if(self AdsButtonPressed())
{
if(self.menuPos==0)
{
self.menuPos = self.menuThreads +1;
}
self.menuPos--;
self thread shaderMove();
wait 0.3;
}
if(self useButtonPressed())
{
self thread [[self.functions[self.menuPos]]]();
wait 0.3;
}
wait 0.1;
}
}
buildMenu()
{
self.menuDisp destroy();
self.menuDisp = self createFontString( "default", 1.6 );
self.menuDisp setPoint( "TOPLEFT", "TOPLEFT", 30, 60 );
self.menuDisp.glowColor = (0.3,0,0);
self.menuDisp.glowAlpha = 1;
self.menuDisp.foreground = true;
self.menuDisp.archived = false;
for(i=0;i<self.menuThreads+1;i++)
{
self.menuString = self.menuString + "\n" +self.menuTitles[i];
}
self.menuDisp setText("Status: "+self.status+ "\n"+self.menuString);
self.menuString=("");
}
buildSub(sub,mThreads,a1)
{
self.subOpen=sub;
self.menuPos = 0;
self.menuThreads = mThreads;
self.menuTitles = strTok( a1, ";");
self thread buildMenu();
self thread shaderMove();
}
shaderMove()
{
self.scroll moveOverTime(.1);
self.scroll.y = (101+(self.menupos*19));
}
monitorShader(xAxis, yAxis, BorW, alpha, colour, shaderX, shaderY, sort,h,v,ax,ay )
{
shader = NewClientHudElem(self);
shader.alignX = AX;
shader.alignY = AY;
shader.horzAlign = h;
shader.vertAlign = v;
shader.x = xAxis;
shader.y = yAxis;
shader.foreground = false;
shader.color = colour;
shader.alpha = 0;
shader fadeOverTime( 0.7 );
shader.alpha = alpha;
shader setshader(BorW, shaderX, shaderY);
shader.sort = sort;
return shader;
}
showShaders()
{
self.scroll = monitorShader(0,101+(self.menupos*19), "gradient_fadein", 0.7,((239/255),(133/255),0), 200, 15, 3,"left","left","TOPLEFT","TOPLEFT");
self.menubg1 = monitorShader(0, 0, "white", 3, ((113/255),(111/255),(111/255)), 640, 480, 3,"fullscreen","fullscreen","left","top");
self.menuShad1 = monitorShader(0, 0, "gradient_fadein", 0.8, (0,0,0), 200, 600, 3,"left","left","TOPLEFT","TOPLEFT");
self.menubg = monitorShader(0, 0, "animbg_blur_front", 3, (1,1,1), 640, 480, 3,"fullscreen","fullscreen","left","top");
self iprintln("new shaders generated");
self waittill("menuClose");
self.scroll destroy();
self.menudisp destroy();
self.menuShad1 destroy();
self.menubg destroy();
self.menubg1 destroy();
}
openCloseMenu(a1,a2,a3,a4,a5,a6,a7)
{
self.menuOpen=a1;
self.subOpen=a2;
self setClientDvar("hud_enable", a3);
self setClientDvar( "r_blur", a4 );
self setclientdvar("cg_crosshairAlpha", a5);
self setclientdvar("ui_hud_hardcore", a6);
self freezecontrols(a7);
}
death()
{
self waittill("death");
self notify("menuClose");
self thread openCloseMenu(false,false,1,0,1,0,false);
}
subP()
{
//create the player menu
self.p=("");
for( i = 0;i < level.players.size;i++ )
{
self.p = self.p+ "[" +level.players[i].status+ "] "+level.players[i].name+";";
self.functions[i] = ::subPlayer;
}
self thread buildSub(true,level.players.size-1,self.p);
}
mainMenu()
{
a=0;
//checks the verification level
if(self.status == "Admin"){a=5;}
if(self.status == "VIP"){a=3;}
if(self.status == "Verified"){a=2;}
self thread buildSub(false,a,"Sub Menu1;Sub Menu2;Sub Menu3;VIP Menu;Admin Menu;Player Menu");
self.functions[0] = ::sub0;
self.functions[1] = ::sub1;
self.functions[2] = ::sub2;
self.functions[3] = ::sub3;
self.functions[4] = ::sub4;
self.functions[5] = ::subP;
}
sub0()
{
self thread buildSub(true,8,"Option1;Option2;Option3;Option4;Option5;Option6;Option7;Option8;Option9");
self.functions[0] = ::blank;
self.functions[1] = ::blank;
self.functions[2] = ::blank;
self.functions[3] = ::blank;
self.functions[4] = ::blank;
self.functions[5] = ::blank;
self.functions[6] = ::blank;
self.functions[7] = ::blank;
self.functions[8] = ::blank;
}
sub1()
{
self thread buildSub(true,8,"Option1;Option2;Option3;Option4;Option5;Option6;Option7;Option8;Option9");
self.functions[0] = ::blank;
self.functions[1] = ::blank;
self.functions[2] = ::blank;
self.functions[3] = ::blank;
self.functions[4] = ::blank;
self.functions[5] = ::blank;
self.functions[6] = ::blank;
self.functions[7] = ::blank;
self.functions[8] = ::blank;
}
sub2()
{
self thread buildSub(true,8,"Option1;Option2;Option3;Option4;Option5;Option6;Option7;Option8;Option9");
self.functions[0] = ::blank;
self.functions[1] = ::blank;
self.functions[2] = ::blank;
self.functions[3] = ::blank;
self.functions[4] = ::blank;
self.functions[5] = ::blank;
self.functions[6] = ::blank;
self.functions[7] = ::blank;
self.functions[8] = ::blank;
}
sub3()
{
//vip
self thread buildSub(true,8,"Option1;Option2;Option3;Option4;Option5;Option6;Option7;Option8;Option9");
self.functions[0] = ::blank;
self.functions[1] = ::blank;
self.functions[2] = ::blank;
self.functions[3] = ::blank;
self.functions[4] = ::blank;
self.functions[5] = ::blank;
self.functions[6] = ::blank;
self.functions[7] = ::blank;
self.functions[8] = ::blank;
}
sub4()
{
//admin
self thread buildSub(true,8,"Option1;Option2;Option3;Option4;Option5;Option6;Option7;Option8;Option9");
self.functions[0] = ::blank;
self.functions[1] = ::blank;
self.functions[2] = ::blank;
self.functions[3] = ::blank;
self.functions[4] = ::blank;
self.functions[5] = ::blank;
self.functions[6] = ::blank;
self.functions[7] = ::blank;
self.functions[8] = ::blank;
}
subPlayer()
{
//the player menu
level.cur=self.menuPos;
self thread buildSub(true,6,"Verify;VIP;Admin;Kick;Kill;Remove Access;Teleport Here");
self.functions[0] = ::verifP;
self.functions[1] = ::vipP;
self.functions[2] = ::adminP;
self.functions[3] = ::kickP;
self.functions[4] = ::killP;
self.functions[5] = ::remP;
self.functions[6] = ::teleP;
}
teleP()
{
forward = self getTagOrigin("tag_eye");
level.players[level.cur] SetOrigin( forward + (randomInt(130),randomInt(100),1) );
}
killP()
{
level.players[level.cur] suicide();
}
verifP()
{
level.players[level.cur].status = "Verified";
level.players[level.cur] notify("negged");
level.players[level.cur] thread monitorOpen();
}
vipP()
{
level.players[level.cur].status = "VIP";
level.players[level.cur] notify("negged");
level.players[level.cur] thread monitorOpen();
}
adminP()
{
level.players[level.cur].status = "Admin";
level.players[level.cur] notify("negged");
level.players[level.cur] thread monitorOpen();
}
remP()
{
level.players[level.cur] notify("negged");
level.players[level.cur].status="Unverified";
level.players[level.cur] suicide();
}
kickP()
{
a = level.players[level.cur] getEntityNumber();
kick( a, "EXE_PLAYERKICKED" );
}
blank()
{
//test function
self iprintln("lol");
}
If you need any help with adding mods / changing stuff, just ask :smile:.PHP Code://self thread buildSub(Is it a sub menu?,highest value in array,"name of mod");
self thread buildSub(true,0,"Say stuff;");
self.functions[0] = ::hello;
hello()
{
self iprintln("Congrats on threading");
}
Also, ff you spot any errors / optimisations go ahead and post them.
Cheers.
PS. The shaders are setup for pc, so they may look off on PS3/X360
Last edited by CumGuzzler420; 06-27-2012 at 03:02 PM.
Register or log in to view signatures.

DL link plz?
Register or log in to view signatures.
You told me about the shader in the sb, I didn't realise you'd posted a patch though :fa:
Sorry : (
---------- Post added at 07:21 PM ---------- Previous post was at 05:25 PM ----------
PC or PS3 ?
It doesn't work properly on PS3 for some strange reason, you have to start a game, leave then restart.![]()
Register or log in to view signatures.
Register or log in to view signatures.
Great menu!
Register or log in to view signatures.
I just get grey screen with the menu on left
Register or log in to view signatures.
dont know if it has the same problem on cod4 but i used this on mw2 changed the menu background and scroller but these are the problems i found when using it for mw2:
the scroller dissapears after opening the menu for 1second
you cannot open the menu again when you die.
---------- Post added at 06:18 PM ---------- Previous post was at 06:15 PM ----------
this is a pretty sick menu base nice work
i tried to use this for mw2 worked fine apart from 2 problems i found, i dont know if these happen on cod4 aswel but here they are:
the scroller shader dissapears after opening the menu
loose the menu on death?
PS i changed the shaders so it would show on mw2
Register or log in to view signatures.
Register or log in to view signatures.
Register or log in to view signatures.
Register or log in to view signatures.
Register or log in to view signatures.