THIS IS ONLY FOR PEOPLE WHO UNDERSTAND MENUFILES AND KNOW HOW TO USE THEM.
I'm making this tutorial because this thing is really usefull and pretty gud looking
In the end it will look like this (little different maybe):
![[Image: 4e9ed7a07eb34-feederlist.png]](http://www.imgdumper.nl/uploads4/4e9ed7a080691/4e9ed7a07eb34-feederlist.png)
The scrollbar is now next to the buttons instead of behind them
Here is the itemDef for in a menu
You can add as much "AddToFeeder" / "AddToFeederExtended" 's as you want, same goes for the events.
Go to your menuDef and in "onOpen{}" you place the following:
this will add the buttons when the menu is opened, you also have to destroy them when you close the menu so @ onClose{} we place this:
Thats basicly it, here is an example with a mapvote menu I made .. its unfinished but i'll attach the whole thing incase someone wants to finish it.
endresult of the menu
![[Image: 9A2992078B215AA8DF1CF60573C528301E5048B0]](http://cloud.steampowered.com/ugc/578935485513985979/9A2992078B215AA8DF1CF60573C528301E5048B0/)
Old screenshot, only the most voted maps thing changed
I'm making this tutorial because this thing is really usefull and pretty gud looking
In the end it will look like this (little different maybe):
![[Image: 4e9ed7a07eb34-feederlist.png]](http://www.imgdumper.nl/uploads4/4e9ed7a080691/4e9ed7a07eb34-feederlist.png)
The scrollbar is now next to the buttons instead of behind them
Here is the itemDef for in a menu
Code:
itemDef
{
name dynamic_menu_feeder
type ITEM_TYPE_LISTBOX
feeder FEEDER_DYNAMIC_MENU // you need this feeder otherwise it wont work
origin 0 0
elementwidth (CHOICE_SIZE_X+10)
elementheight CHOICE_SIZE_Y
elementtype LISTBOX_TEXT
textstyle CHOICE_TEXTSTYLE
textfont CHOICE_TEXTFONT
textscale CHOICE_TEXTSIZE
textalignx CHOICE_TEXT_OFFSET_X
forecolor CHOICE_TEXTCOLOR
focusColor CHOICE_TEXTCOLOR
disableColor COLOR_DISABLED
selectBorder 0.8 0.95 1 0
modal
noBlinkingHighlight
visible 1
backgroundItemListbox "white"
rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 300 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN
menuItemsDef
{
maxRows 50
menuColDef // Background
{
type MENU_ITEM_TYPE_IMAGE
rect 0 1 (CHOICE_SIZE_X-18) CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Highlight
{
type MENU_ITEM_TYPE_IMAGE_ON_HOVER
rect 0 1 (CHOICE_SIZE_X-18) CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Select
{
type MENU_ITEM_TYPE_IMAGE_ON_HOVER
rect 1 1 (CHOICE_SIZE_Y-1) (CHOICE_SIZE_Y) ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Text
{
type MENU_ITEM_TYPE_LOC_TEXT
rect 0 0 CHOICE_SIZE_X CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
}
// Define events here
/*
onEvent EVENTNAME
{
close self;
open blablabla;
play whatever_sound_you_want;
// etc
}
*/
// example event
onEvent Map_Array
{
scriptMenuResponse "vote_array";
setLocalVarString map "array";
close self;
}
// these events are nessesary
onEvent Clear { execNow clearFeeder; }
onEvent Populate
{
// in here you define the buttons
// This is a default button
// AddToFeeder EVENTNAME LOCALIZED_STRING_NAME;
AddToFeeder Map_Array MPUI_ARRAY;
// This is an extended button which makes the currently selected one gray instead of white
// AddToFeederExtended EVENTMANE noop (CONDITION_UNDER_WHICH_THE_TEXT_IS_GRAY) LOCALIZED_STRING_NAME
AddToFeederExtended Map_Array noop (localVarString( map ) == "array") MPUI_ARRAY;
}
onFocus { play CHOICE_FOCUS_SOUND; }
onListboxSelectionChange { play CHOICE_FOCUS_SOUND; }
doubleClick { play CHOICE_FOCUS_SOUND; execNow raiseFeederEvent; }
}You can add as much "AddToFeeder" / "AddToFeederExtended" 's as you want, same goes for the events.
Go to your menuDef and in "onOpen{}" you place the following:
Code:
execNow raiseFeederEvent Populate;Code:
execNow raiseFeederEvent Clear;Thats basicly it, here is an example with a mapvote menu I made .. its unfinished but i'll attach the whole thing incase someone wants to finish it.
Code:
#include "ui/menudef.h"
#include "ui_mp/common_macro.inc"
#include "ui_mp/menustyle.inc"
#include "ui/choices_setup_common.menu"
#include "ui/framestyle.inc"
#include "ui/frame.inc"
#include "ui_mp/item_listbox.inc"
//#define ALLOW_MAP_VOTE( mapName ) ((GetCurrentMapName() != mapName) && dvarBool( mapName ))
#define ALLOW_MAP_VOTE( mapName ) dvarBool( mapName ) > 0
#undef CHOICE_GROUP
#define CHOICE_GROUP "mapvote"
#undef DEFAULT_SLIDE_IN_SPEED
#define DEFAULT_SLIDE_IN_SPEED 360
#undef DEFAULT_SLIDE_OUT_SPEED
#define DEFAULT_SLIDE_OUT_SPEED 360
#undef CHOICE_TEXTSIZE
#define CHOICE_TEXTSIZE TEXTSIZE_SMALL
#undef CHOICE_TEXTFONT
#define CHOICE_TEXTFONT UI_FONT_NORMAL
#undef CHOICE_TEXTSTYLE
#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL
#define COLOR_GOUD (240/255) (196/255) (65/255) 1
#define COLOR_SILVER (173/255) (171/255) (163/255) 1
#define COLOR_BRONS (156/255) (96/255) (36/255) 1
#undef CHOICE_SIZE_Y
#define CHOICE_SIZE_Y 19
#undef CHOICE_X_START
#define CHOICE_X_START (FRAME_CHOICE_X_START-1)
#undef CHOICE_Y_START
#define CHOICE_Y_START (FRAME_CHOICE_Y_START-4)
#define MAP_SELECT_DISPLAY( mapName, mapImage, visArg ) \
PREPROC_TEXT_DRAW_ALL( 20 (FRAME_CHOICE_Y_START-5) 224 30 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, mapName, TEXTSIZE_TITLE, \
0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, visArg, ; ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER_STREAMED \
type ITEM_TYPE_IMAGE \
rect 20 ((FRAME_CHOICE_Y_START-5) + 35) 224 151 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \
forecolor 1 1 1 1 \
exp material( mapImage ) \
visible visArg == true \
decoration \
}
#define MAP_TOP_THREE \
PREPROC_TEXT_DRAW_ALL( 23 (FRAME_CHOICE_Y_START+226) 224 90 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, ( "1. " + dvarString( mv_first ) ), FONTSCALE_SUBBIG, 0, 0, ITEM_ALIGN_TOP_LEFT, COLOR_GOUD, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, 1, ; ) \
PREPROC_TEXT_DRAW_ALL( 23 (FRAME_CHOICE_Y_START+246) 224 90 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, ( "2. " + dvarString( mv_second ) ), FONTSCALE_SUBBIG, 0, 0, ITEM_ALIGN_TOP_LEFT, COLOR_SILVER, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, 1, ; ) \
PREPROC_TEXT_DRAW_ALL( 23 (FRAME_CHOICE_Y_START+266) 224 90 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, ( "3. " + dvarString( mv_third ) ), FONTSCALE_SUBBIG, 0, 0, ITEM_ALIGN_TOP_LEFT, COLOR_BRONS, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, 1, ; )
#define NEW_BOTTOM_BUTTON( textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect -10 206 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \
origin 0 0 \
exp text ( textArg ) \
textfont UI_FONT_NORMAL \
textscale TEXTSIZE_DEFAULT \
textalign ITEM_ALIGN_CENTER \
visible visArg \
mouseEnter { play CHOICE_FOCUS_SOUND; } \
action { play CHOICE_FOCUS_SOUND; scriptMenuResponse "vote_map"; } \
decoration \
}
#undef ON_CLOSE
#define ON_CLOSE \
execNow raiseFeederEvent Clear; \
play uin_navigation_menu_lg_close;
#undef ON_OPEN
#define ON_OPEN \
play uin_navigation_menu_lg_open; \
execNow raiseFeederEvent Populate; \
execNow set mv_first "Nuketown"; \
execNow set mv_second "Firing Range";\
execNow set mv_third "Grid";
menuDef
{
name mapvote
rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN
focuscolor COLOR_FOCUSED
style WINDOW_STYLE_FILLED
openSlideSpeed DEFAULT_SLIDE_IN_SPEED
closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED
openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM
closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM
onOpen { ON_OPEN }
onClose { ON_CLOSE }
onESC { close self; }
FRAME_DEFAULT
FRAME_TITLE_DEFAULT( "MAP VOTING", 1 )
FRAME_SUBTITLE_DEFAULT( "Vote for the map you would like to play next!", 1 )
MAP_SELECT_DISPLAY( "@MPUI_" + dvarString( ui_chosen_map ) + "_CAPS", "menu_mp_" + dvarString( ui_chosen_map ) + "_map_select_final", when( toUpper( dvarString( ui_chosen_map ) ) != "RANDOM" ); )
MAP_SELECT_DISPLAY( "@MPUI_RANDOM_CAPS", "menu_mp_random_map_select_big", when( toUpper( dvarString( ui_chosen_map ) ) == "RANDOM" ); )
NEW_BOTTOM_BUTTON( "MPUI_VOTE", 1 )
////////////////////////////////////////////////////////////
// MOST VOTED BOX /////////////////////////////////////////
itemDef
{
type ITEM_TYPE_TEXT
rect 20 (FRAME_CHOICE_Y_START+218) 224 90 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER
forecolor 1 1 1 0.8
text "MOST VOTED MAPS"
textfont UI_FONT_EXTRABIG
textscale FONTSCALE_BIG
textstyle ITEM_TEXTSTYLE_NORMAL
textalign ITEM_ALIGN_LEFT
visible 1
decoration
}
MAP_TOP_THREE
// /////////////////////////////////////////////////////////
// MAP SELECTION BOX //////////////////////////////////////
itemDef
{
name dynamic_menu_feeder
type ITEM_TYPE_LISTBOX
feeder FEEDER_DYNAMIC_MENU
origin 0 0
elementwidth (CHOICE_SIZE_X+10)
elementheight CHOICE_SIZE_Y
elementtype LISTBOX_TEXT
textstyle CHOICE_TEXTSTYLE
textfont CHOICE_TEXTFONT
textscale CHOICE_TEXTSIZE
textalignx CHOICE_TEXT_OFFSET_X
forecolor CHOICE_TEXTCOLOR
focusColor CHOICE_TEXTCOLOR
disableColor COLOR_DISABLED
selectBorder 0.8 0.95 1 0
modal
noBlinkingHighlight
visible 1
backgroundItemListbox "white"
rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 300 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN
menuItemsDef
{
maxRows 50
menuColDef // Background
{
type MENU_ITEM_TYPE_IMAGE
rect 0 1 (CHOICE_SIZE_X-18) CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Highlight
{
type MENU_ITEM_TYPE_IMAGE_ON_HOVER
rect 0 1 (CHOICE_SIZE_X-18) CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Select
{
type MENU_ITEM_TYPE_IMAGE_ON_HOVER
rect 1 1 (CHOICE_SIZE_Y-1) (CHOICE_SIZE_Y) ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
menuColDef // Text
{
type MENU_ITEM_TYPE_LOC_TEXT
rect 0 0 CHOICE_SIZE_X CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE
maxChars 50
}
}
////////////////////////////////////////////////////////////
// MAP ACTIONS ////////////////////////////////////////////
onEvent Array
{
execNow "set ui_chosen_map ARRAY";
scriptMenuResponse "vote_mp_array";
}
onEvent Nuketown
{
execNow "set ui_chosen_map NUKED";
scriptMenuResponse "vote_mp_nuked";
}
onEvent Jungle
{
execNow "set ui_chosen_map HAVOC";
scriptMenuResponse "vote_mp_havoc";
}
onEvent Summit
{
execNow "set ui_chosen_map MOUNTAIN";
scriptMenuResponse "vote_mp_mountain";
}
onEvent Villa
{
execNow "set ui_chosen_map VILLA";
scriptMenuResponse "vote_mp_villa";
}
onEvent Radiation
{
execNow "set ui_chosen_map RADIATION";
scriptMenuResponse "vote_mp_radiation";
}
onEvent Havana
{
execNow "set ui_chosen_map CAIRO";
scriptMenuResponse "vote_mp_cairo";
}
onEvent Hanoi
{
execNow "set ui_chosen_map HANOI";
scriptMenuResponse "vote_mp_hanoi";
}
onEvent Firingrange
{
execNow "set ui_chosen_map FIRINGRANGE";
scriptMenuResponse "vote_mp_firingrange";
}
onEvent Grid
{
execNow "set ui_chosen_map DUGA";
scriptMenuResponse "vote_mp_duga";
}
onEvent Crisis
{
execNow "set ui_chosen_map CRISIS";
scriptMenuResponse "vote_mp_crisis";
}
onEvent Cracked
{
execNow "set ui_chosen_map CRACKED";
scriptMenuResponse "vote_mp_cracked";
}
onEvent WMD
{
execNow "set ui_chosen_map RUSSIANBASE";
scriptMenuResponse "vote_mp_russianbase";
}
onEvent Launch
{
execNow "set ui_chosen_map COSMODROME";
scriptMenuResponse "vote_mp_cosmodrome";
}
onEvent Kowloon
{
execNow "set ui_chosen_map KOWLOON";
scriptMenuResponse "vote_mp_kowloon";
}
onEvent Zoo
{
execNow "set ui_chosen_map ZOO";
scriptMenuResponse "vote_mp_zoo";
}
onEvent Discovery
{
execNow "set ui_chosen_map DISCOVERY";
scriptMenuResponse "vote_mp_discovery";
}
onEvent Berlinwall
{
execNow "set ui_chosen_map BERLINWALL2";
scriptMenuResponse "vote_mp_berlinwall2";
}
onEvent Hotel
{
execNow "set ui_chosen_map HOTEL";
scriptMenuResponse "vote_mp_hotel";
}
onEvent Stadium
{
execNow "set ui_chosen_map STADIUM";
scriptMenuResponse "vote_mp_stadium";
}
////////////////////////////////////////////////////////////
// CREATE AND RUN MENU /////////////////////////////////////
onEvent Random { scriptMenuResponse "vote_random"; execNow "set ui_chosen_map RANDOM"; }
onEvent Clear { execNow clearFeeder; }
onEvent Populate
{
execNow addToFeeder Random MPUI_RANDOM_CAPS;
if( dvarBool( mp_array ) ) { execNow addToFeederExtended Array noop (dvarString( ui_chosen_map ) == "ARRAY") MPUI_ARRAY_CAPS; }
if( dvarBool( mp_nuked ) ) { execNow addToFeederExtended Nuketown noop (dvarString( ui_chosen_map ) == "NUKED") MPUI_NUKED_CAPS; }
if( dvarBool( mp_mountain ) ) { execNow addToFeederExtended Summit noop (dvarString( ui_chosen_map ) == "MOUNTAIN") MPUI_MOUNTAIN_CAPS; }
if( dvarBool( mp_havoc ) ) { execNow addToFeederExtended Jungle noop (dvarString( ui_chosen_map ) == "HAVOC") MPUI_HAVOC_CAPS; }
if( dvarBool( mp_villa ) ) { execNow addToFeederExtended Villa noop (dvarString( ui_chosen_map ) == "VILLA") MPUI_VILLA_CAPS; }
if( dvarBool( mp_cairo ) ) { execNow addToFeederExtended Havana noop (dvarString( ui_chosen_map ) == "CAIRO") MPUI_CAIRO_CAPS; }
if( dvarBool( mp_radiation ) ) { execNow addToFeederExtended Radiation noop (dvarString( ui_chosen_map ) == "RADIATION") MPUI_RADIATION_CAPS; }
if( dvarBool( mp_duga ) ) { execNow addToFeederExtended Grid noop (dvarString( ui_chosen_map ) == "DUGA") MPUI_DUGA_CAPS; }
if( dvarBool( mp_firingrange ) ){ execNow addToFeederExtended Firingrange noop (dvarString( ui_chosen_map ) == "FIRINGRANGE") MPUI_FIRINGRANGE_CAPS; }
if( dvarBool( mp_cracked ) ) { execNow addToFeederExtended Cracked noop (dvarString( ui_chosen_map ) == "CRACKED") MPUI_CRACKED_CAPS; }
if( dvarBool( mp_crisis ) ) { execNow addToFeederExtended Crisis noop (dvarString( ui_chosen_map ) == "CRISIS") MPUI_CRISIS_CAPS; }
if( dvarBool( mp_russianbase ) ){ execNow addToFeederExtended WMD noop (dvarString( ui_chosen_map ) == "RUSSIANBASE") MPUI_RUSSIANBASE_CAPS; }
if( dvarBool( mp_cosmodrome ) ) { execNow addToFeederExtended Launch noop (dvarString( ui_chosen_map ) == "COSMODROME") MPUI_COSMODROME_CAPS; }
if( dvarBool( mp_hanoi ) ) { execNow addToFeederExtended Hanoi noop (dvarString( ui_chosen_map ) == "HANOI") MPUI_HANOI_CAPS; }
if( dvarBool( mp_discovery ) ) { execNow addToFeederExtended Discovery noop (dvarString( ui_chosen_map ) == "DISCOVERY") MPUI_DISCOVERY_CAPS; }
if( dvarBool( mp_berlinwall2 ) ){ execNow addToFeederExtended Berlinwall noop (dvarString( ui_chosen_map ) == "BERLINWALL2") MPUI_BERLINWALL2_CAPS; }
if( dvarBool( mp_kowloon ) ) { execNow addToFeederExtended Kowloon noop (dvarString( ui_chosen_map ) == "KOWLOON") MPUI_KOWLOON_CAPS; }
if( dvarBool( mp_zoo ) ) { execNow addToFeederExtended Zoo noop (dvarString( ui_chosen_map ) == "ZOO") MPUI_ZOO_CAPS; }
if( dvarBool( mp_hotel ) ) { execNow addToFeederExtended Hotel noop (dvarString( ui_chosen_map ) == "HOTEL") MPUI_HOTEL_CAPS; }
if( dvarBool( mp_stadium ) ) { execNow addToFeederExtended Stadium noop (dvarString( ui_chosen_map ) == "STADIUM") MPUI_STADIUM_CAPS; }
}
onFocus { play CHOICE_FOCUS_SOUND; }
onListboxSelectionChange { play CHOICE_FOCUS_SOUND; }
doubleClick { play CHOICE_FOCUS_SOUND; execNow raiseFeederEvent; }
}
}endresult of the menu
Old screenshot, only the most voted maps thing changed
(08-10-2011, 12:58)Pozzuh Wrote:Se7en Wrote:Stealed, from cod4 mod ...look who's talking
[Release] Old School Mod v2.2
[Release] Scroll menu


![[Image: lQDUjba.jpg]](http://i.imgur.com/lQDUjba.jpg)