Right - Open Quick Menu
R2 - Close Quick Menu
Up/Down - Scroll Up and Down in Quick Menu
X - Select an Option
Up - Open Main Menu
R2 - Close Main Menu
Up/Down - Scroll Up and Down in Quick Menu
X - Select an Option/ Go into a Sub Menu
//New Menu Base by: rothebeast, If you use this please leave credits to me!
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
level thread createPerkMap();
level thread onPlayerConnect();
precacheShader("hudsoftline");
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
for(;
{
self waittill( "spawned_player" );
self.menuOpen = false;
self.miniMenuOpen = false;
self thread Actions();
self thread miniMenuActions();
self thread rosMenu();
self thread MiniMenu();
self iPrintlnBold("Game Has Started");
}
}
createPerkMap()
{
level.perkMap = [];
level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}
ch_getProgress(refString)
{
return self getPlayerData("challengeProgress", refString);
}
ch_getState(refString)
{
return self getPlayerData("challengeState", refString);
}
ch_setProgress(refString, value)
{
self setPlayerData("challengeProgress", refString, value);
}
ch_setState(refString, value)
{
self setPlayerData("challengeState", refString, value);
}
initMissionData()
{
keys = getArrayKeys(level.killstreakFuncs);
foreach(key in keys) self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc)
{
}
playerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers)
{
}
vehicleKilled(owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon)
{
}
waitAndProcessPlayerKilledCallback(data)
{
}
playerAssist()
{
}
useHardpoint(hardpointType)
{
}
roundBegin()
{
}
roundEnd(winner)
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge(baseName, progressInc, forceSetProgress)
{
}
giveRankXpAfterWait(baseName,missionStatus)
{
}
getMarksmanUnlockAttachment(baseName, index)
{
return(tableLookup("mp/unlockTable.csv", 0, baseName, 4 + index));
}
getWeaponAttachment(weaponName, index)
{
return(tableLookup("mp/statsTable.csv", 4, weaponName, 11 + index));
}
masteryChallengeProcess(baseName, progressInc)
{
}
updateChallenges()
{
}
challenge_targetVal(refString, tierId)
{
value = tableLookup("mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2));
return int(value);
}
challenge_rewardVal(refString, tierId)
{
value = tableLookup("mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2));
return int(value);
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow(tableName, 0, 0);
assertEx(isSubStr(refString, "ch_") || isSubStr(refString, "pr_"), "Invalid challenge name: " + refString + " found in " + tableName);
for(index=1; refString != ""; index++)
{
assertEx(isSubStr(refString, "ch_") || isSubStr(refString, "pr_"), "Invalid challenge name: " + refString + " found in " + tableName);
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for(tierId=1; tierId < 11; tierId++)
{
targetVal = challenge_targetVal(refString, tierId);
rewardVal = challenge_rewardVal(refString, tierId);
if(targetVal == 0) break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
} assert(isDefined(level.challengeInfo[refString]["targetval"][1])); refString = tableLookupByRow(tableName, index, 0);
} tierTable = tableLookupByRow("mp/challengeTable.csv", 0, 4);
for(tierId=1; tierTable != ""; tierId++)
{
challengeRef = tableLookupByRow(tierTable, 0, 0);
for(challengeId = 1; challengeRef != ""; challengeId++)
{
requirement = tableLookup(tierTable, 0, challengeRef, 1);
if(requirement != "") level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
} tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge(challengeType, value)
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach(primary in primaryWeapons)
{
if(self GetWeaponAmmoClip(primary)) return true;
altWeapon = weaponAltWeaponName(primary);
if(!isDefined(altWeapon) || (altWeapon == "none")) continue;
if(self GetWeaponAmmoClip(altWeapon)) return true;
} return false;
}
//Mini Menu Structure
MiniMenu()
{
self AddMiniMenu( "Mini", "", "Unlimited Ammo;Option;Option;Option", "" );
self AddMiniFunction( "Mini", ::doAmmo, "Mini");
self AddMiniFunction( "Mini", ::Test, "Mini");
self AddMiniFunction( "Mini", ::Test, "Mini");
self AddMiniFunction( "Mini", ::Test, "Mini");
}
//Test Function
Test()
{
self iPrintlnBold("Test");
}
doAmmo()
{
self endon ( "disconnect" );
self endon ( "death" );
while ( 1 )
{
currentWeapon = self getCurrentWeapon();
if ( currentWeapon != "none" )
{
self setWeaponAmmoClip( currentWeapon, 9999 );
self GiveMaxAmmo( currentWeapon );
}
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 0.05;
}
}
//The Main Menu Structure
rosMenu()
{
self AddMenu( "Main", "", "SubMenu1;SubMenu2;SubMenu3;SubMenu4;SubMenu5;SubMe nu6;SubMenu7;SubMenu8;SubMenu9;SubMenu10", "" );
self AddFunction( "Main", ::runSub, "Sub1");
self AddFunction( "Main", ::runSub, "Sub2");
self AddFunction( "Main", ::runSub, "Sub3");
self AddFunction( "Main", ::runSub, "Sub4");
self AddFunction( "Main", ::runSub, "Sub5");
self AddFunction( "Main", ::runSub, "Sub6");
self AddFunction( "Main", ::runSub, "Sub7");
self AddFunction( "Main", ::runSub, "Sub8");
self AddFunction( "Main", ::runSub, "Sub9");
self AddFunction( "Main", ::runSub, "Sub10");
self AddMenu( "Sub1", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub2", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub3", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub4", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub5", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub6", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub7", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub8", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub9", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
self AddMenu( "Sub10", "", "Option;Option;Option;Option;Option;Option;Option;O ption;Option;Option", "Main" );
}
//Thank you CraigChrist and Kbrizzle for this awesome button handling
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
buttons()
{
buttons = strTok("Up|+actionslot 1,Down|+actionslot 2,Left|+actionslot 3,Right|+actionslot 4,X|+reload,B|+stance,Y|weapnext,A|+gostand,LS|+br eath_sprint,RS|+melee,LB|+smoke,RB|+frag", ",");
foreach ( button in buttons )
{
btn = strTok(button, "|");
self thread monitorActions(btn[0], btn[1]);
}
}
monitorActions( button, action )
{
self endon( "disconnect" );
self endon( "death" );
self notifyOnPlayerCommand( button, action );
for(;
{
self waittillmatch( button );
self notify( "buttonPress", button );
}
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
//The Main Menu Actions
Actions()
{
self endon("disconnect");
self thread buttons();
self.cursor = 0;
if(!isDefined(self.cursor)) self.cursor = 0;
for(;
{
self waittill( "buttonPress", button );
if( button == "Up" && !self.menuOpen && !self.miniMenuOpen )
{
self.menuOpen = true;
self freezeControls( true );
self setClientDvar("g_hardcore", 1);
self setClientDvar("cg_crosshairAlpha", 0);
self.Background = self createRectangle( "RIGHT", "CENTER", -120, 0, 200, 900, (0.44, 0.43, 0.43), 0.9, 2 );
self.Scroller = self createRectangle( "RIGHT", "TOP", -120, 40, 200, 22, ( 0, 0, 1 ), 1, 3);
self.Background2 = self createRectangle( "CENTER", "CENTER", -70, 0, 1000, 1000, (0, 0, 0), 1, 1);
self.linevertical1 = self createShader("hudsoftline", 8, 720, "CENTER", "", undefined, undefined, -125, 0, 4, true, 1, ( 0,0,1 ) );
self.linevertical2 = self createShader("hudsoftline", 8, 720, "CENTER", "", undefined, undefined, -325, 0, 4, true, 1, ( 0,0,1 ) );
self thread runMenu( "Main" );
wait .2;
}
//Scroll Up and Down Functions
while( self.menuOpen )
{
self.menuText[self.cursor].color = (0, 0, 0);
self.menuText[self.cursor].fontscale = 1.7;
self.Scroller Move( "y", (self.cursor * 1
+ 40, 0.2);
self waittill( "buttonPress", button );
switch( button )
{
case "Down":
self.cursor++;
//if( self.cursor > self.rothebeast[self.menu].opt.size - 1 ) self.cursor = 0;
wait .1;
break;
case "Up":
self.cursor--;
//if(self.cursor < 0) self.cursor = self.rothebeast[self.menu].opt.size - 1;
wait .1;
break;
}
}
wait .4;
}
}
//The Quick Menu Actions
miniMenuActions()
{
self endon("disconnect");
if(!isDefined(self.miniCurs)) self.miniCurs = 0;
self thread buttons();
for(;
{
self waittill("buttonPress", button);
if( button == "Right" && !self.miniMenuOpen && !self.menuOpen )
{
self freezeControls( true );
self thread miniRunMenu( "Mini" );
self.miniMenuBG = self createRectangle("CENTER", "CENTER", -20, 60, 250, 250, (0, 0, 0), 1, 1);
self.miniMenuScroller = self createRectangle("CENTER", "CENTER", -20, 40, 250, 22, (0, 0, 1), 1, 2);
self.miniMenuOpen = true;
wait .2;
}
wait .4;
}
}
//The Quick Menu runMenu
miniRunMenu( menu )
{
self endon("disconnect");
self endon("death");
self.miniMenuOpen = true;
self.menuOpen = false;
if(!isDefined(self.miniCurs)) self.miniCurs = 0;
if(!isDefined(self.miniText)) self.miniText = [];
for( i = 0; i < self.mini[menu].opt.size; i++ )
{
self.miniText[i] = createFontString("default", 1.2 );
self.miniText[i] setPoint("CENTER", "CENTER", -20, i * 18 + 40 );
self.miniText[i] setText( self.mini[menu].opt[i] );
self.miniText[i].alpha = 1;
self.miniText[i].sort = 3;
}
while( self.miniMenuOpen )
{
for( i = 0; i < self.mini[menu].opt.size; i++ )
{
self.miniText[i].color = (1, 1, 1);
self.miniText[i].fontscale = 1.4;
}
self.miniText[self.miniCurs].color = (1, 1, 1);
self.miniText[self.miniCurs].fontscale = 1.4;
self.miniMenuScroller Move( "y", (self.miniCurs * 1
+ 40, 0.2);
self waittill("buttonPress", button);
switch( button )
{
case "Up":
self.miniCurs--;
wait .1;
break;
case "Down":
self.miniCurs++;
wait .1;
break;
case "A":
self thread [[self.mini[menu].func[self.miniCurs]]](self.mini[menu].arg[self.miniCurs]);
break;
case "RB":
if( self.mini[menu].parent == "" )
{
self.miniMenuOpen = false;
self freezeControls( false );
for( i = 0; i < self.mini[menu].opt.size; i++)
{
self.miniText[i] destroy();
}
self.MiniMenuBG.alpha = 0;
self.MiniMenuScroller.alpha = 0;
wait .3;
}
else
self.miniMenuOpen = false;
self freezeControls( false );
for( i = 0; i < self.mini[menu].opt.size; i++)
{
self.miniText[i] destroy();
}
self.MiniMenuBG.alpha = 0;
self.MiniMenuScroller.alpha = 0;
wait .3;
break;
}
if(self.miniCurs < 0) self.miniCurs = self.mini[menu].opt.size - 1;
if( self.miniCurs > self.mini[menu].opt.size - 1 ) self.miniCurs = 0;
}
}
//The Main Menu runMenu
runMenu( menu )
{
self endon("disconnect");
self endon("death");
self.menuOpen = true;
if(!isDefined(self.menuText)) self.menuText = [];
for( i = 0; i < self.rothebeast[menu].opt.size; i++ )
{
self.menuText[i] = createFontString("default", 1.7);
self.menuText[i] setPoint("LEFT", "TOP", -260, i * 18 + 40 );
self.menuText[i] setText( self.rothebeast[menu].opt[i] );
self.menuText[i].alpha = 1;
self.menuText[i].sort = 2;
}
while( self.menuOpen )
{
for( i = 0; i < self.rothebeast[menu].opt.size; i++)
{
self.menuText[i].color = (1, 1, 1);
self.menuText[i].fontscale = 1.4;
}
self waittill("buttonPress", button);
switch( button )
{
case "A":
self thread [[self.rothebeast[menu].func[self.cursor]]](self.rothebeast[menu].arg[self.cursor]);
break;
case "RB":
if( self.rothebeast[menu].parent == "" )
{
self thread DestroyMenu();
wait .3;
}
else
self thread runSub( self.rothebeast[menu].parent );
break;
}
if(self.cursor < 0) self.cursor = self.rothebeast[menu].opt.size - 1;
if( self.cursor > self.rothebeast[menu].opt.size - 1 ) self.cursor = 0;
}
for( i = 0;i < self.rothebeast[menu].opt.size;i++ ) self.menuText[i] destroy();
}
//Create Shader Definition
createShader( shader, width, height, horzAlign, vertAlign, point, relativePoint, x, y, sort, hideWhenInMenu, alpha, color )
{
shaderElem = newClientHudElem(self);
shaderElem setShader( shader, width, height );
shaderElem.horzAlign = horzAlign;
shaderElem.vertAlign = vertAlign;
shaderElem.alignY = point;
shaderElem.alignX = relativePoint;
shaderElem.x = x;
shaderElem.y = y;
shaderElem.sort = sort;
shaderElem.hideWhenInMenu = hideWhenInMenu;
if(isDefined(alpha))
shaderElem.alpha = alpha;
else
shaderElem.alpha = 1;
shaderElem.color = color;
return shaderElem;
}
//The Main Menu destroyMenu
DestroyMenu()
{
self freezeControls( false );
self.Scroller.alpha = 0;
self.Background.alpha = 0;
self.Background2.alpha = 0;
self.linevertical1.alpha = 0;
self.linevertical2.alpha = 0;
self.menuOpen = false;
}
//runSub
runSub( menu )
{
self.menuOpen = false;
wait .2;
self thread runMenu( menu );
}
//For Main menu
AddMenu( menu, title, opts, parent )
{
if(!isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].opt = strTok( opts, ";" );
self.rothebeast[menu].parent = parent;
}
//For Main Menu
AddFunction( menu, func, arg )
{
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].arg)) self.rothebeast[menu].arg = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].arg[i] = arg;
}
//For Quick Menu
AddMiniMenu( menu, title, opts, parent )
{
if(!isDefined(self.mini)) self.mini = [];
self.mini[menu] = spawnStruct();
self.mini[menu].title = title;
self.mini[menu].opt = strTok( opts, ";" );
self.mini[menu].parent = parent;
}
//For Quick Menu
AddMiniFunction( menu, func, arg )
{
if(!isDefined(self.mini[menu].func)) self.mini[menu].func = [];
if(!isDefined(self.mini[menu].arg)) self.mini[menu].arg = [];
i = self.mini[menu].func.size;
self.mini[menu].func[i] = func;
self.mini[menu].arg[i] = arg;
}
//Move Code
Move(axis, calc, time)
{
if(axis=="x") self.x = calc;
else self.y = calc;
}
//create Rectangle
createRectangle( align, relative, x, y, width, height, color, alpha, sort )
{
barElemBG = newClientHudElem( self );
barElemBG.elemType = "bar";
if ( !level.splitScreen )
{
barElemBG.x = -2;
barElemBG.y = -2;
}
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( "progress_bar_bg", width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
//create Text Code
createText( font, fontScale, text, point, relativePoint, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relativePoint, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
self AddMenu( <menu>, <title>, <options>, <parent> );
self AddFunction( <menu>, <function>, <parent> );
self AddMiniMenu( <menu>, <title>, <options>, <parent> );
self AddMiniFunction( <menu>, <function>, <parent> );
Copyright © 2026, NextGenUpdate.
All Rights Reserved.