Post: [RELEASE] Blackstorm's 2Fresshh Menu Base v1
10-28-2011, 06:04 AM #1
Blackstorm
Veni. Vidi. Vici.
(adsbygoogle = window.adsbygoogle || []).push({}); -- UPDATED --

Here is my menu I made a while back for cod4. I made a new, nicer, sleeker, more stable one, once it's bug free I'll be releasing that too Hopee you enjoy. I'm tired right now, so I'll edit and write all the features and how to use it tomoz.

Hopefully the more experienced ones will know how to use it. Also, this is a pretty stable menu, but uses two font strings in every menu so adding more than 13 menus will crash it according to Amanda.

Add to OnPlayerSpawned():


    
self thread iniMenu();



Menu Code:


    iniMenu()
{
self endon("death");
self endon("disconnect");
self thread monitorButtons();
self.m["open"] = 0;
self.m["main"] = "Main";
time = 0;
for (;Winky Winky
{
if (self fragButtonPressed() && self secondaryOffhandButtonPressed())
{
time++;
if (time > 39 && !self.m["open"])
{
self thread runMenu("Main");
time = 0;
}
}
else time = 0;
w(0.05);
}
}


runMenu(menu)
{
self endon("disconnect");
self refreshMenu();
self.m[menu]["display"] = [];
if (!isDefined(self.m["current"])) self.m["current"] = menu;
if (!isDefined(self.m[menu]["parent"])) self.m[menu]["parent"] = self.m["current"];
self.m["temp"] = self.m["current"];
self.m["current"] = menu;
if (self.m["current"] != self.m["main"] || self.m["temp"] != self.m["main"])
{
self waittill("refresh");
self _closeMenu(self.m["temp"]);
w(0.05);
}
self endon("closeMenu");
self thread monitorDeath();
if (!isDefined(self.m[menu]["cursor"])) self.m[menu]["cursor"] = 0;
curs = self.m[menu]["cursor"];
self.m[menu]["display"]["back"] = self createShader("left", "center", -100, -200, 200, 800, "progress_bar_bg", (0, 0, 0), 0, 1);
self.m[menu]["display"]["title"] = self createText("default", 1.8, "LEFT", "", -390, -190, self.m[menu]["title"], 0);
self.m[menu]["display"]["list"] = self createText("default", 1.4, "LEFT", "", -390, -150, buildString(self.m[menu]["options"]), 0);
self.m[menu]["display"]["back"].sort = -1000;
self.m[menu]["display"]["title"].sort = 1000;
self.m[menu]["display"]["list"].sort = 1000;
if (!isDefined(self.m["shader"])) self.m["shader"] = self createShader("left", "center", -100, 40, 200, 18, "progress_bar_bg", (0, 0, 1), 0.5, 2);
self thread elemFade(self.m["shader"], .3, 1, false);
hudElem = getArrayKeys(self.m[menu]["display"]);
for (i = 0; i < hudElem.size; i++)
self thread elemFade(self.m[menu]["display"][hudElem[i]], .3, 1, false);
self.m["shader"].sort = -1000;
self.m["open"] = 1;
self freezeControls(true);
self setClientDvar("hud_enable", 0);
self setClientDvar("compassSize", .01);
while (self.m["open"])
{
if (curs < 0) curs = self.m[menu]["options"].size - 1;
else curs *= (curs > 0) * (curs < self.m[menu]["options"].size);
self.m["shader"] elemMove("y", (curs * 16.Cool Man (aka Tustin) + 83, 0.25);
self.m[menu]["cursor"] = curs;
self notify("refresh");
self waittill("buttonPress", action);
if (action == "Up") curs++;
else if (action == "Down") curs--;
else if (action == "A")
{
self refreshMenu();
self thread[[self.m[menu]["functions"][curs]]](self.m[menu]["input"][curs]);
}
else if (action == "X")
{
if (menu == self.m["main"]) self thread _closeMenu(menu);
else self thread runMenu(self.m[menu]["parent"]);
}
else if (action == "close") self _closeMenu(menu);
}
}


_closeMenu(menu)
{
if (menu == self.m["main"] && self.m["current"] == self.m["main"] || !isAlive(self))
{
self elemFade(self.m["shader"], .3, 0, true);
self setClientDvar("hud_enable", 1);
}
hudElem = getArrayKeys(self.m[menu]["display"]);
for (i = 0; i < hudElem.size; i++)
self elemFade(self.m[menu]["display"][hudElem[i]], .3, 0, true);
self freezeControls(false);
self notify("closeMenu");
self.m["open"] = 0;
if (!isAlive(self)) self.m["current"] = "Main";
}


refreshMenu()
{
// Add menu stuff here... e.g. self createMenu, self setFunc, etc.
}


createMenu(menu, title, options)
{
if (!isDefined(self.m[menu]["options"])) self.m[menu]["options"] = [];
self.m[menu]["title"] = title;
if (isDefined(options))
{
menuItems = strTok(options, "|");
for (i = 0; i < menuItems.size; i++)
self.m[menu]["options"][i] = menuItems[i];
}
}


setFuncForMenu(menu, func, input)
{
if (!isDefined(self.m[menu]["functions"])) self.m[menu]["functions"] = [];
if (!isDefined(self.m[menu]["input"])) self.m[menu]["input"] = [];
for (i = 0; i < self.m[menu]["options"].size; i++)
{
self.m[menu]["functions"][i] = func;
self.m[menu]["input"][i] = input;
}
}


setFunc(menu, option, func, input)
{
if (!isDefined(self.m[menu]["functions"])) self.m[menu]["functions"] = [];
if (!isDefined(self.m[menu]["input"])) self.m[menu]["input"] = [];
for (i = 0; i < self.m[menu]["options"].size; i++)
if (self.m[menu]["options"][i] == option) break;
self.m[menu]["functions"][i] = func;
self.m[menu]["input"][i] = input;
}


monitorDeath()
{
self endon("closeMenu");
self waittill("death");
self notify("close");
}


createText(font, fontScale, point, rPoint, x, y, text, alpha)
{
txt = createFontString(font, fontScale, self);
txt setPoint(point, rPoint, x, y);
txt setText(text);
txt.alpha = alpha;
return txt;
}


createShader(point, rPoint, x, y, width, height, elem, colour, mAlpha, sort)
{
shader = newClientHudElem(self);
shader.align = point;
shader.relative = rPoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = 0;
shader.maxAlpha = mAlpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}


elemFade(elem, time, value, destroy)
{
elem fadeOverTime(time);
elem.alpha = value;
if (destroy)
{
w(time);
elem destroy();
elem = undefined;
}
}


elemMove(axis, offset, time)
{
self moveOverTime(time);
if (toLower(axis) == "x") self.x = offset;
else self.y = offset;
}


colorFade(color, time)
{
self fadeOverTime(time);
self.color = color;
}




buildString(array)
{
str = "";
for (i = 0; i < array.size; i++)
str += array[i] + "\n";
return str;
}


monitorButtons()
{
self endon("disconnect");
self endon("death");
btn = 0;
bPress = "buttonPress";
for (;Winky Winky
{
btn = "";
if (self attackButtonPressed()) btn = "Up";
else if (self adsButtonPressed()) btn = "Down";
else if (self meleeButtonPressed()) btn = "A";
else if (self useButtonPressed()) btn = "X";
if (btn.size > 0)
{
self notify(bPress, btn);
w(0.15);
}
w(0.01);
}
}


w(t)
{
wait t;
}




Features:

    
- Fairly Small
- Bug Free
- Dynamic
- Has the "overflow fix"
- Sleek design
- Scroll-able Shader
- Scroll Memory
- Automatic Parent Menu Recognization
- Death Monitoring
- Easy To Use
- Transitions



How to use:

Adding a menu

    
self createMenu( < menu >, < title >, < options > );

menu: The menu ID
title: The title that shows up in the menu
option: Options in the menu seperated by a '|' symbol.

EXAMPLE:

self createMenu( "Menu 1", "Main Menu", "Option 1|Option 2|Option 3" );



Setting Functions For Options

    
self setFunc( < menu >, < option >, < function >, < extra argument > );

menu: The menu the option is in
option: the option
function: the function called when you select the option
extra argument: extra input

EXAMPLE:

self setFunc( "Account Menu", "Go Invisible", ::toggleInvisible, "off" );

toggleInvisible( s )
{
switch ( s )
{
case "off": self show();
break;
case "on": self hide();
}
}




Setting a function for the whole menu

    
This is a useful function since the menu is dynamic.

setFuncForMenu( < menu >, < function >, < extra argument > );

menu: Menu you want to set the function to
function: function you want called every time you select an option in that menu
extra argument: useful parameter. made to be used dynamically.

EXAMPLE

self setFuncForMenu( "Random Menu", ::printOrigin, self getOrigin() );

printOrigin ( x )
{
self iPrintlnBold( x );
}




How to add a sub-menu:

    
First, create your sub-menu. I'm going to use Random Menu as an example, it's going to be selected from the Main Menu.

refreshMenu()
{
self createMenu( "Menu Main", "Main Menu", "Option 1|Option 2|Random Menu" ); // Creating the main menu, and assigning it's id "Menu Main".

self createMenu( "Menu Random", "Random Menu", "Whatever 1|Whatever 2|Whatever 3|Whatever 4|etc." ); // Creating the random menu and assigning it's id "Menu Random".

self setFunc( "Menu Main", "Random Menu", ::runMenu, "Menu Random" ); // Setting the function for the option, 'Random Menu' in the menu, 'Menu Main' then, assigning the function runMenu to open the menu whenever the option is selected and setting the extra argument as 'Menu Random' so it opens the 'Menu Random' menu.
}



Enjoy;

Credits:

K Brizzle - Concepts
Zy0n - Concepts
Me - Creating the menu
(adsbygoogle = window.adsbygoogle || []).push({});

The following 4 users say thank you to Blackstorm for this useful post:

AMNE, Jeremy, SuperActionX2, x-Roniie-x.
10-28-2011, 01:09 PM #11
IVI40A3Fusionz
Former Gaming Squad Member
Originally posted by Newelly2Fresshh View Post
Old it down for 39 seconds if you want to remove the time

find:
    
if( time > 39 && !self.m["open"] )


and change '39' to 0 if you dont want any time while opening.


ohhhhh ^^ my bad lol.

EDIT: Does this menu have the overflow fix?
10-28-2011, 01:11 PM #12
Default Avatar
Newelly
Guest
Originally posted by IVI40A3Fusionz View Post
ohhhhh ^^ my bad lol.

EDIT: Does this menu have the overflow fix?


Yes it does blackstorm has is own overflow fix i think so Smile
but yes its fixed.
10-28-2011, 03:01 PM #13
it was not there when he made that post (this post had no code in it)

The following 3 users groaned at IELIITEMODZX for this awful post:

247Yamato, Blackstorm, x-Roniie-x.
10-29-2011, 05:30 PM #14
Blackstorm
Veni. Vidi. Vici.
Originally posted by IELIITEMODZX View Post
it was not there when he made that post (this post had no code in it)


Dude yes it did you guys are on crack...
10-29-2011, 05:50 PM #15
Originally posted by 2Fresshh View Post
Here is my menu I made a while back for cod4. I made a new, nicer, sleeker, more stable one, once it's bug free I'll be releasing that too Hopee you enjoy. I'm tired right now, so I'll edit and write all the features and how to use it tomoz.

Hopefully the more experienced ones will know how to use it. Also, this is a pretty stable menu, but uses two font strings in every menu so adding more than 13 menus will crash it according to Amanda.

Code:

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


init()
{
level thread iniConnect();
}


iniConnect()
{
for(;Winky Winky
{
level waittill( "connected", p );
p thread iniSpawn();
}
}


iniSpawn()
{
self endon( "disconnect" );
self thread monitorButtons();
for( ;; )
{
self waittill("spawned_player");
self thread iniMenu();
}
}


iniMenu()
{
self endon( "death" );
self endon( "disconnect" );
self.m["open"] = 0;
self.m["main"] = "Main";
time = 0;
for(;Winky Winky
{
if(self fragButtonPressed() && self secondaryOffhandButtonPressed())
{
time++;
if( time > 39 && !self.m["open"] )
{
self thread runMenu( "Main" );
time = 0;
}
}
else
time = 0;
w( 0.05 );
}
}


runMenu( menu )
{
self endon("disconnect");
self refreshMenu();
self.m[menu]["display"] = [];
if( !isDefined( self.m["current"] ) )
self.m["current"] = menu;
if( !isDefined( self.m[menu]["parent"] ) )
self.m[menu]["parent"] = self.m["current"];
self.m["temp"] = self.m["current"];
self.m["current"] = menu;
if( self.m["current"] != self.m["main"] || self.m["temp"] != self.m["main"] )
{
self waittill("refresh");
self _closeMenu( self.m["temp"] );
w( 0.05 );
}
self endon( "closeMenu" );
self thread monitorDeath();
if( !isDefined( self.m[menu]["cursor"] ) )
self.m[menu]["cursor"] = 0;
curs = self.m[menu]["cursor"];
self.m[menu]["display"]["back"] = self createShader( "left", "center", -100, -200, 200, 800, "progress_bar_bg", (0,0,0), 0, 1 );
self.m[menu]["display"]["title"] = self createText( "default", 1.8, "LEFT", "", -390, -190, self.m[menu]["title"], 0 );
self.m[menu]["display"]["list"] = self createText( "default", 1.4, "LEFT", "", -390, -150, buildString( self.m[menu]["options"] ), 0 );
self.m[menu]["display"]["back"].sort = -1000;
self.m[menu]["display"]["title"].sort = 1000;
self.m[menu]["display"]["list"].sort = 1000;
if( !isDefined( self.m["shader"] ) )
self.m["shader"] = self createShader( "left", "center", -100, 40, 200, 18, "progress_bar_bg", (0,0,1), 0.5, 2 );
self thread elemFade( self.m["shader"], .3, 1, false );
hudElem = getArrayKeys( self.m[menu]["display"] );
for ( i = 0; i < hudElem.size; i++ )
self thread elemFade( self.m[menu]["display"][hudElem[i]], .3, 1, false );
self.m["shader"].sort = -1000;
self.m["open"] = 1;
self freezeControls( true );
self setClientDvar("hud_enable", 0);
self setClientDvar("compassSize", .01);
while( self.m["open"] )
{
if( curs < 0 )
curs = self.m[menu]["options"].size - 1;
else
curs *= ( curs > 0 ) * ( curs < self.m[menu]["options"].size );
self.m["shader"] elemMove( "y", ( curs * 16.8 ) + 83, 0.25 );
self.m[menu]["cursor"] = curs;
self notify("refresh");
self waittill( "buttonPress", action );
if( action == "Up" )
curs++;
else if( action == "Down" )
curs--;
else if( action == "A" )
{
self refreshMenu();
self thread [[self.m[menu]["functions"][curs]]](self.m[menu]["input"][curs]);
}
else if( action == "X" )
{
if( menu == self.m["main"] )
self thread _closeMenu( menu );
else
self thread runMenu( self.m[menu]["parent"] );
}
else if( action == "close" )
self _closeMenu( menu );
}
}


_closeMenu( menu )
{
if( menu == self.m["main"] && self.m["current"] == self.m["main"] || !isAlive( self ) )
{
self elemFade( self.m["shader"], .3, 0, true );
self setClientDvar("hud_enable", 1);
}
hudElem = getArrayKeys( self.m[menu]["display"] );
for ( i = 0; i < hudElem.size; i++ )
self elemFade( self.m[menu]["display"][hudElem[i]], .3, 0, true );
self freezeControls( false );
self notify( "closeMenu" );
self.m["open"] = 0;
if(!isAlive(self))
self.m["current"] = "Main";
}


refreshMenu()
{
self createMenu( "Main", "Main Menu", "Print Origin|Print Angles|Sub-Menu 1|Sub-Menu 2|Sub-Menu 3" );
self setFuncForMenu( "Main", ::test );
self setFunc( "Main", "Print Origin", ::pl, self getOrigin() );
self setFunc( "Main", "Print Angles", ::pl, self getPlayerAngles() );
for ( i = 1; i <= 3; i++ )
{
self setFunc( "Main", "Sub-Menu " + i, ::runMenu, "M" + i );
self createMenu( "M" + i, "Sub-Menu " + i, "Option 1|Option 2|Option 3|Option 4|Option 5" );
self setFuncForMenu( "M" + i, ::test );
}
}


pl( txt )
{
self iPrintlnBold( txt );
}


createMenu( menu, title, options )
{
if( !isDefined( self.m[menu]["options"] ) )
self.m[menu]["options"] = [];
self.m[menu]["title"] = title;
if( isDefined( options ) )
{
menuItems = strTok( options, "|" );
for( i = 0; i < menuItems.size; i++ )
self.m[menu]["options"][i] = menuItems[i];
}
}


setFuncForMenu( menu, func, input )
{
if( !isDefined( self.m[menu]["functions"] ) )
self.m[menu]["functions"] = [];
if( !isDefined(self.m[menu]["input"] ) )
self.m[menu]["input"] = [];
for( i = 0; i < self.m[menu]["options"].size; i++ )
{
self.m[menu]["functions"][i] = func;
self.m[menu]["input"][i] = input;
}
}


setFunc( menu, option, func, input )
{
if( !isDefined( self.m[menu]["functions"] ) )
self.m[menu]["functions"] = [];
if( !isDefined( self.m[menu]["input"] ) )
self.m[menu]["input"] = [];
for( i = 0; i < self.m[menu]["options"].size; i++)
if( self.m[menu]["options"][i] == option )
break;
self.m[menu]["functions"][i] = func;
self.m[menu]["input"][i] = input;
}


monitorDeath()
{
self endon("closeMenu");
self waittill("death");
self notify("close");
}


createText( font, fontScale, point, rPoint, x, y, text, alpha )
{
txt = createFontString( font, fontScale, self );
txt setPoint( point, rPoint, x, y );
txt setText( text );
txt.alpha = alpha;
return txt;
}


createShader( point, rPoint, x, y, width, height, elem, colour, mAlpha, sort )
{
shader = newClientHudElem( self );
shader.align = point;
shader.relative = rPoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = 0;
shader.maxAlpha = mAlpha;
shader.color = colour;
shader setShader( elem, width, height );
return shader;
}


elemFade( elem, time, value, destroy )
{
elem fadeOverTime( time );
elem.alpha = value;
if( destroy )
{
w( time );
elem destroy();
elem = undefined;
}
}


elemMove(axis, offset, time)
{
self moveOverTime( time );
if( toLower( axis ) == "x" )
self.x = offset;
else
self.y = offset;
}


colorFade(color, time)
{
self fadeOverTime( time );
self.color = color;
}


buildString( array )
{
str = "";
for ( i = 0; i < array.size; i++ )
str += array[i] + "\n";
return str;
}


monitorButtons()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
btn = 0;
bPress = "buttonPress";
for ( ;; )
{
btn = "";
if(self attackButtonPressed())
btn = "Up";
else if(self adsButtonPressed())
btn = "Down";
else if(self meleeButtonPressed())
btn = "A";
else if(self useButtonPressed())
btn = "X";
if( btn.size > 0 )
{
self notify( bPress, btn );
w( 0.15 );
}
w( 0.01 );
}
}


w( t )
{
wait t;
}


test()
{
self iPrintlnBold("^4Scroll: " + (self.m[self.m["current"]]["cursor"] + 1));
}


Enjoy;

Credits:

K Brizzle - Concepts
Zy0n - Concepts
Me - Creating the menu


thnks Blackstorm :love: Awesome face
10-30-2011, 11:03 AM #16
Default Avatar
Newelly
Guest
Edit sorry i have fixed the clean menu i have released for this menu (refreshMenu)

    
refreshMenu()
{
self createMenu( "Main", "Main Menu", "Menu 1|Menu 2" );
for ( i = 1; i <= 3; i++ )
{
//MainMenu
self setFunc( "Main", "Main Menu", ::runMenu, "Main");
self createMenu( "Main", "Main Menu", "Menu 1|Menu 2" );
self setFuncForMenu( "Main", ::runMenu );
self setFunc( "Main", "Menu 1", ::runMenu, "Menu" );
self setFunc( "Main", "Menu 2", ::runMenu, "Menu" );
//Menu 1
self setFunc( "Menu", "Main Menu", ::runMenu, "Menu");
self createMenu( "Menu", "Main Menu", "Option 1|Option 2|Option 3|Option 4|Option 5" );
self setFuncForMenu( "Menu", ::runMenu );
self setFunc( "Menu", "Option 1", ::test, "Menu" );
self setFunc( "Menu", "Option 2", ::test, "Menu" );
self setFunc( "Menu", "Option 3", ::test, "Menu" );
self setFunc( "Menu", "Option 4", ::test, "Menu" );
self setFunc( "Menu", "Option 5", ::test, "Menu" );
//Menu 2
self setFunc( "Menu", "Main Menu", ::runMenu, "Menu");
self createMenu( "Menu", "Main Menu", "Option 1|Option 2|Option 3|Option 4|Option 5" );
self setFuncForMenu( "Menu", ::runMenu );
self setFunc( "Menu", "Option 1", ::test, "Menu" );
self setFunc( "Menu", "Option 2", ::test, "Menu" );
self setFunc( "Menu", "Option 3", ::test, "Menu" );
self setFunc( "Menu", "Option 4", ::test, "Menu" );
self setFunc( "Menu", "Option 5", ::test, "Menu" );
}
}
10-31-2011, 04:56 AM #17
Blackstorm
Veni. Vidi. Vici.
OP Updated with menu features and how to use section. Enjoy Awesome face

---------- Post added at 10:56 PM ---------- Previous post was at 10:55 PM ----------

Also to the people who groaned me and are making useless posts, this is why I never release anything. -___-
10-31-2011, 02:06 PM #18
2 Post.....
10-31-2011, 02:07 PM #19
Originally posted by IELIITEMODZX View Post
its a good base but its abit complicated for the noobs Happy (still good release) <3

Why You Groaned His Thread So.... - _-

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo