Uses a nice scrolling effect
Has Auto-Scrolling
Includes Verification
Updates Player Menu Fast
Very Stable
Up - Open Menu
Up - Scroll Up
Down - Scroll Down
R1 - Auto-Scroll Up
L1 - Auto-Scroll Down
X - Select an Option
Square - Go Back
addv4Page( <menu>, <title>, <parent> );
addv4Opt( <menu>, <opt>, <func>, <inp> );
CraigChrist & KBrizzle - Button Handling
EliteMossy - Verification
ITheFallenI - My Inspiration for all things Mw2
xePixTVx - Inspiration
Snipe2Kill28 - Ideas
PREMIER-GAMER - destroyOnDeath() Function
rothebeast/Master Ro - Making the Base
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader( "gradient_fadein_fadebottom" );
precacheShader( "popup_button_selection_bar" );
precacheShader( "mockup_bg_glow" );
precacheShader( "hudsoftline" );
level thread createPerkMap();
level thread onPlayerConnect();
if(!isDefined(level.pList))
{
level permsCreate();
}
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread initButtons();//Our Button Handling
if( player isHost() )
{
level.hostyis = player;
}
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self permsInit();
//Create our Menu Arrays
self.v4[ "Text" ] = [];
self.v4[ "UI" ] = [];
self.Title[ "Text" ] = [];
//Create Our Cursor Point
self.v4[ "Cursor" ] = 0;
for(;
{
self waittill( "spawned_player" );
self permsBegin();
}
}
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breathe_sprint|togglecrouch|+reload", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
loadv4( menu )
{
self endon( "death" );
self notify( "Menu_Open" );
self.v4[ "Current" ] = menu;
self.v4["Cursor"] = 0;
self thread checkCursor();
self.Title[ "Text" ] = createText( "default", 2, self.rothebeast[self.v4["Current"]].title, "LEFT", "TOP", 120, 62, 10000, true, 1, ( 1, 0, 0 ), 1, (1, 0, 0) );
self.Title[ "Text" ] thread destroyOnDeathOrUpdate( self );
self thread destroyOnAny( self.Title[ "Text" ], "Menu_Open", "Menu_Close" );
for( i = 0; i < 15; i++ )
{
string = (self.rothebeast[ self.v4[ "Current" ] ].opt[i]);
self.v4[ "Text" ][i] = createText( "default", 1.2, string, "LEFT", "TOP", 120, i * 20 + 90, 10000, true, 1, ( 1, 1, 1 ), 1, (1, 0, 0) );
self thread destroyOnAny( self.v4[ "Text" ][i], "Menu_Open", "Menu_Close" );
self.v4[ "Text" ][i] thread destroyOnDeathOrUpdate( self );
}
}
MonitorActions()
{
self endon( "death" );
self.v4[ "Active" ] = false;
for( ;; )
{
if( !self.v4[ "Active" ] )
{
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Active" ] = true;
self freezeControls( true );
self setBlurForPlayer( 7, 0 );
self thread v4UI();
self thread doGod();
self thread loadv4( "Main" );
}
}
else if( self.v4[ "Active" ] )
{
self v4Struct();
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+actionslot 2" ) )
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self attackButtonPressed() )//Auto-Scroll Up
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self adsButtonPressed() )//Auto-Scroll Down
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+gostand" ) )
{
self thread [[self.rothebeast[self.v4["Current"]].func[self.v4["Cursor"]]]](self.rothebeast[self.v4["Current"]].inp[self.v4["Cursor"]]);
}
if( self isButtonPressed( "+usereload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
waitframe();
}
}
addv4Page( menu, title, parent )
{
if( !isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].parent = parent;
}
addv4Opt( menu, opt, func, inp )
{
if(!isDefined(self.rothebeast[menu].opt)) self.rothebeast[menu].opt = [];
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].inp)) self.rothebeast[menu].inp = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].opt[i] = opt;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].inp[i] = inp;
}
destroyv4UI()
{
self _unsetPerk("_specialty_blastshield");
self setBlurForPlayer( 0, 0 );
self setClientDvar( "g_hardcore", 0 );
self.v4[ "UI" ]["Scrollbar"] destroy();
self.v4[ "UI" ]["Background"] destroy();
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] destroy();
self.v4[ "UI" ]["Line"] destroy();
self.v4[ "UI" ][ "Glow" ] destroy();
}
v4UI()
{
self maps\mp\perks\_perks::givePerk("_specialty_blastshield");
self setBlurForPlayer( 7, 0 );
self setClientDvar( "g_hardcore", 1 );
self.v4[ "UI" ]["Scrollbar"] = createRectangle( "LEFT", "TOP", 80, 90, "popup_button_selection_bar", 230, 18, (0, 0, 0), 1, 5 );
self.v4[ "UI" ]["Background"] = createRectangle( "LEFT", "CENTER", 110, 0, "white", 200, 720, (0, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][0] = createRectangle( "LEFT", "CENTER", 110, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][1] = createRectangle( "LEFT", "CENTER", 310, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][2] = createRectangle( "LEFT", "TOP", 75, 72, "hudsoftline", 300, 2, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ][ "Glow" ] = createShader( "mockup_bg_glow", 640, 480, "fullscreen", "fullscreen", undefined, undefined, 0, 0, 2, false, 1, ( 1, 0, 0 ) );
self.v4[ "UI" ]["Scrollbar"] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ]["Background"] thread destroyOnDeathOrUpdate( self );
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ][ "Glow" ] thread destroyOnDeathOrUpdate( self );
}
Test()
{
self iPrintLnBold( self.v4["Cursor"] );
}
//isAllowed(1) - Verified
//isAllowed(2) - V.I.P
//isAllowed(3) - Co-Admin
//isAllowed(4) - Admin
v4Struct()
{
self addv4Page( "Main", "Main Menu", undefined );
if( self isAllowed(1) || self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
}
if( self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
}
if( self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
}
if( self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
}
if( self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Players", ::loadv4, "player" );
}
F = "player";
self addv4Page( "player", "Players", "Main" );
for( i = 0; i < level.players.size; i++)
{
player = level.players[i];
name = player.name;
menu = "pOpt" + name;
VeriStat = "";
if(level.p[player.myName]["permission"]==4)
{
VeriStat = "^3[ADMIN]^7";
}
if(level.p[player.myName]["permission"]==3)
{
VeriStat = "^3[CO-ADMIN]^7";
}
if(level.p[player.myName]["permission"]==2)
{
VeriStat = "^3[V.I.P]^7";
}
if(level.p[player.myName]["permission"]==1)
{
VeriStat = "^3[VERIFIED]^7";
}
if(level.p[player.myName]["permission"]==0)
{
VeriStat = "^3[USER]^7";
}
if(player.name=="rothebeast" || player.name == "shieldtype8" )//Patch Maker Name Here
{
VeriStat = "^4[DEVELOPER]^7";
}
self addv4Opt(F,VeriStat + level.players[i].name,::loadv4,menu);
self addv4Page(menu,name,"player");
self addv4Opt(menu,"Kill Player",::KillPlayer,player);
self addv4Opt(menu,"Kick Player",::kickDaHomo,player);
self addv4Opt(menu,"Remove Access",::permsRemove,player);
self addv4Opt(menu,"Verify",::permsVerifySet,player);
self addv4Opt(menu,"V.I.P",::permsVIPSet,player);
self addv4Opt(menu,"Co-Admin",::permsCoAdminSet,player);
self addv4Opt(menu,"Administrator",::permsAdminSet,player);
}
}
//For Scrolling Effect (I would recommend not to touch this)
checkCursor()
{
if(!self.v4[ "Active" ])
{
return;
}
// If the user goes above the top Option, send them to the end of the current Option list.
if( self.v4[ "Cursor" ] < 0 )
{
self.v4[ "Cursor" ] = self.rothebeast[ self.v4["Current"] ].opt.size - 1;
}
// If the user goes lower than the last Option, send them to the top of the current Option list.
if( self.v4[ "Cursor" ] > self.rothebeast[ self.v4["Current"] ].opt.size - 1 )
{
self.v4[ "Cursor" ] = 0;
}
if( !isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ]-7]) || self.rothebeast[ self.v4["Current"] ].opt.size <= 15 )
{
for( i = 0;i < 15; i++)
{
self.v4[ "Text" ][i] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * self.v4[ "Cursor" ]);
}
else
{
if(isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ] + 7]))
{
buttonNum = 0;
for( i = self.v4[ "Cursor" ] - 7; i < self.v4[ "Cursor" ] + 8; i++ )
{
if(!isDefined(self.rothebeast[ self.v4["Current"] ].opt[i]))
{
self.v4[ "Text" ][buttonNum] setText("");
}
else
{
self.v4[ "Text" ][buttonNum] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
buttonNum++;
}
self.v4[ "UI" ]["Scrollbar"].y = 230;
}
else
{
for( i = 0; i < 15; i++)
{
self.v4[ "Text" ][i] setText( self.rothebeast[ self.v4["Current"] ].opt[ self.rothebeast[ self.v4["Current"] ].opt.size + ( i - 15 ) ] );
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * (( self.v4[ "Cursor" ] - self.rothebeast[ self.v4["Current"] ].opt.size ) + 15 ));
}
}
}
/*
========================
Misc. Funcs Start
========================
*/
createText( font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relative, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
createRectangle( align, relative, x, y, shader, 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( shader, width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
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;
}
destroyOnDeathOrUpdate(client)//Just incase we die while we are in the menu
{
client endon("disconnect");
client waittill_any("death","Update","Menu_Is_Closed");
self destroy();
}
//Thank you PREMIER-GAMER for this :fap:
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
kickDaHomo(player)
{
kick(player getEntityNumber());
waitframe();
self thread loadv4( "player" );
}
KillPlayer( player )
{
player suicide();
}
initTestClients3()
{
for(i = 0; i < 3; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
ent[i].pers["isBot"] = true;
ent[i] thread initIndividualBot();
wait 0.1;
}
}
initIndividualBot()
{
self endon( "disconnect" );
while(!isdefined(self.pers["team"]))
wait .05;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
self waittill( "spawned_player" );
}
doGod()
{
self endon ("disconnect");
self endon ("death");
self endon("rothebeast");
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
/*
========================
Misc. Funcs End
========================
*/
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;
}
/****************************************
*****************************************
********Verification System Begin********
*****************************************
*****************************************/
permsCreate()
{
level.p=[];
level.pList=[];
level.pInitList=[];
level.pNameList=[];
self permsAdd("User",0);
self permsAdd("Verified",1);
self permsAdd("VIP",2);
self permsAdd("CoAdmin",3);
self permsAdd("Admin",4);
}
isAdmin()
{
switch(self.name)
{
case "rothebeast":
case "PREMIER-GAMER":
case "ITheFallenI":
case "xFuziioN_x3":
case "Hep-tic":
return true;
default:
return false;
}
}
permsMonitor()
{
self endon("death");
self endon("disconnect");
for(;
{
if(self isHost()||isAdmin())
{
permsSet(self.myName,"Admin");
}
else
{
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
permsSet(self.myName,"CoAdmin");
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
permsSet(self.myName,"VIP");
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
permsSet(self.myName,"Verified");
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
permsSet(self.myName,"User");
}
}
wait 1;
}
}
permsInit()
{
self.myName=getName();
self.myClan=getClan();
for(i=0;i<level.pInitList.size;i++)
{
if(level.pInitList[i]==self.myName)
{
self permsSet(self.myName,"User");
break;
}
}
if(level.pInitList==i)
{
level.pInitList[level.pInitList.size] = self.myName;
self permsSet(self.myName,"User");
if(self isHost()||isAdmin())
{
self permsSet(self.myName,"Admin");
}
}
}
permsBegin()
{
if(level.p[self.myName]["permission"]==level.pList["Admin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
self notify("MenuChangePerms");
self permsActivate();
}
self thread permsMonitor();
level.hostyis iprintln("^5"+self.myName+"'s access is "+level.p[self.myName]["permission"]);
}
permsSet(n,permission)
{
level.p[n]["permission"]=level.pList[permission];
}
permsVerifySet(n)
{
if (!n isAllowed(2))
{
self permsSet(n.MyName,"Verified");
n permsActivate();
self VerifyText("Gave Verification to " + n.MyName);
wait .4;
n suicide();
}
}
permsVIPSet(n)
{
if (!n isAllowed(3))
{
self permsSet(n.MyName,"VIP");
n permsActivate();
self VerifyText("Gave VIP to " + n.MyName);
wait .4;
n suicide();
}
}
permsCoAdminSet(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"CoAdmin");
n permsActivate();
self VerifyText("Gave Co-Admin to " + n.MyName);
wait .4;
n suicide();
}
}
permsAdminSet(n)
{
self permsSet(n.MyName,"Admin");
n permsActivate();
self VerifyText("Gave Admin to " + n.MyName);
wait .4;
n suicide();
}
permsRemove(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"User");
n permsActivate();
self VerifyText("Removed Access from " + n.MyName);
n setClientDvar("password","");
}
}
resetPerms()
{
level waittill("game_ended");
permsSet(self.myName,"User");
if (self isHost())
setDvar("g_password","");
}
permsActivate()//0 = User //1 = Verified // 2 = Vip // 3 = CoAdmin // 4 = Admin
{
self notify("MenuChangePerms");
if(self isAllowed(4))///Admin
{
self iPrintln("^4Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(3))///Co-Admin
{
self iPrintln("^4Co-Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(2))///Vip
{
self iPrintln("^4Vip Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(1))///Verified
{
self iPrintln("^4Verified Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else
{
self iPrintln("^2No Menu Access");
}
}
VerifyText(s)
{
self iPrintln("^7"+s);
}
isAllowed(r)
{
return (level.p[self.myName]["permission"]>=r);
}
permsAdd(n,v)
{
level.pList[n]=v;
level.pNameList[level.pNameList.size]=n;
}
getName()
{
nT=getSubStr(self.name,0,self.name.size);
for (i=0;i<nT.size;i++)
{
if (nT[i]=="]")
break;
}
if (nT.size!=i) nT=getSubStr(nT,i+1,nT.size);
return nT;
}
getClan()
{
cT=getSubStr(self.name,0,self.name.size);
if (cT[0]!="[") return "";
for (i=0;i<cT.size;i++)
{
if (cT[i]=="]") break;
}
cT=getSubStr(cT,1,i);
return cT;
}
/****************************************
*****************************************
********Verification System End**********
*****************************************
*****************************************/
Uses a nice scrolling effect
Has Auto-Scrolling
Includes Verification
Updates Player Menu Fast
Very Stable
Up - Open Menu
Up - Scroll Up
Down - Scroll Down
R1 - Auto-Scroll Up
L1 - Auto-Scroll Down
X - Select an Option
Square - Go Back
addv4Page( <menu>, <title>, <parent> );
addv4Opt( <menu>, <opt>, <func>, <inp> );
CraigChrist & KBrizzle - Button Handling
EliteMossy - Verification
ITheFallenI - My Inspiration for all things Mw2
xePixTVx - Inspiration
Snipe2Kill28 - Ideas
PREMIER-GAMER - destroyOnDeath() Function
rothebeast/Master Ro - Making the Base
//TODO: Add Status Checks for the Menu Struct
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader( "gradient_fadein_fadebottom" );
precacheShader( "popup_button_selection_bar" );
precacheShader( "mockup_bg_glow" );
precacheShader( "hudsoftline" );
level thread createPerkMap();
level thread onPlayerConnect();
if(!isDefined(level.pList))
{
level permsCreate();
}
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread initButtons();//Our Button Handling
if( player isHost() )
{
level.hostyis = player;
}
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self permsInit();
//Create our Menu Arrays
self.v4[ "Text" ] = [];
self.v4[ "UI" ] = [];
self.Title[ "Text" ] = [];
//Create Our Cursor Point
self.v4[ "Cursor" ] = 0;
for(;
{
self waittill( "spawned_player" );
self permsBegin();
}
}
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch|+reload", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
loadv4( menu )
{
self endon( "death" );
self notify( "Menu_Open" );
self.v4[ "Current" ] = menu;
self.v4["Cursor"] = 0;
self thread checkCursor();
self.Title[ "Text" ] = createText( "default", 2, self.rothebeast[self.v4["Current"]].title, "LEFT", "TOP", 120, 62, 10000, true, 1, ( 1, 0, 0 ), 1, (1, 0, 0) );
self.Title[ "Text" ] thread destroyOnDeathOrUpdate( self );
self thread destroyOnAny( self.Title[ "Text" ], "Menu_Open", "Menu_Close" );
for( i = 0; i < 15; i++ )
{
string = (self.rothebeast[ self.v4[ "Current" ] ].opt[i]);
self.v4[ "Text" ][i] = createText( "default", 1.2, string, "LEFT", "TOP", 120, i * 20 + 90, 10000, true, 1, ( 1, 1, 1 ), 1, (1, 0, 0) );
self thread destroyOnAny( self.v4[ "Text" ][i], "Menu_Open", "Menu_Close" );
self.v4[ "Text" ][i] thread destroyOnDeathOrUpdate( self );
}
}
MonitorActions()
{
self endon( "death" );
self.v4[ "Active" ] = false;
for( ;; )
{
if( !self.v4[ "Active" ] )
{
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Active" ] = true;
self freezeControls( true );
self setBlurForPlayer( 7, 0 );
self thread v4UI();
self thread doGod();
self thread loadv4( "Main" );
}
}
else if( self.v4[ "Active" ] )
{
self v4Struct();
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+actionslot 2" ) )
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self attackButtonPressed() )//Auto-Scroll Up
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self adsButtonPressed() )//Auto-Scroll Down
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+gostand" ) )
{
self thread [[self.rothebeast[self.v4["Current"]].func[self.v4["Cursor"]]]](self.rothebeast[self.v4["Current"]].inp[self.v4["Cursor"]]);
}
if( !level.ps3 || !level.xenon )//If we are on PC
{
if( self isButtonPressed( "+reload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
else if( level.ps3 || level.xenon )//If we are on a console
{
if( self isButtonPressed( "+usereload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
}
waitframe();
}
}
addv4Page( menu, title, parent )
{
if( !isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].parent = parent;
}
addv4Opt( menu, opt, func, inp )
{
if(!isDefined(self.rothebeast[menu].opt)) self.rothebeast[menu].opt = [];
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].inp)) self.rothebeast[menu].inp = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].opt[i] = opt;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].inp[i] = inp;
}
destroyv4UI()
{
self _unsetPerk("_specialty_blastshield");
self setBlurForPlayer( 0, 0 );
self setClientDvar( "g_hardcore", 0 );
self.v4[ "UI" ]["Scrollbar"] destroy();
self.v4[ "UI" ]["Background"] destroy();
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] destroy();
self.v4[ "UI" ]["Line"] destroy();
self.v4[ "UI" ][ "Glow" ] destroy();
}
v4UI()
{
self maps\mp\perks\_perks::givePerk("_specialty_blastshield");
self setBlurForPlayer( 7, 0 );
self setClientDvar( "g_hardcore", 1 );
self.v4[ "UI" ]["Scrollbar"] = createRectangle( "LEFT", "TOP", 80, 90, "popup_button_selection_bar", 230, 18, (0, 0, 0), 1, 5 );
self.v4[ "UI" ]["Background"] = createRectangle( "LEFT", "CENTER", 110, 0, "white", 200, 720, (0, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][0] = createRectangle( "LEFT", "CENTER", 110, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][1] = createRectangle( "LEFT", "CENTER", 310, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][2] = createRectangle( "LEFT", "TOP", 75, 72, "hudsoftline", 300, 2, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ][ "Glow" ] = createShader( "mockup_bg_glow", 640, 480, "fullscreen", "fullscreen", undefined, undefined, 0, 0, 2, false, 1, ( 1, 0, 0 ) );
self.v4[ "UI" ]["Scrollbar"] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ]["Background"] thread destroyOnDeathOrUpdate( self );
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ][ "Glow" ] thread destroyOnDeathOrUpdate( self );
}
Test()
{
self iPrintLnBold( self.v4["Cursor"] );
}
//isAllowed(1) - Verified
//isAllowed(2) - V.I.P
//isAllowed(3) - Co-Admin
//isAllowed(4) - Admin
v4Struct()
{
self addv4Page( "Main", "Main Menu", undefined );
if( self isAllowed(1) || self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
}
if( self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
}
if( self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
}
if( self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
}
if( self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Players", ::loadv4, "player" );
}
F = "player";
self addv4Page( "player", "Players", "Main" );
for( i = 0; i < level.players.size; i++)
{
player = level.players[i];
name = player.name;
menu = "pOpt" + name;
VeriStat = "";
if(level.p[player.myName]["permission"]==4)
{
VeriStat = "^3[ADMIN]^7";
}
if(level.p[player.myName]["permission"]==3)
{
VeriStat = "^3[CO-ADMIN]^7";
}
if(level.p[player.myName]["permission"]==2)
{
VeriStat = "^3[V.I.P]^7";
}
if(level.p[player.myName]["permission"]==1)
{
VeriStat = "^3[VERIFIED]^7";
}
if(level.p[player.myName]["permission"]==0)
{
VeriStat = "^3[USER]^7";
}
if(player.name=="rothebeast" || player.name == "shieldtype8" )//Patch Maker Name Here
{
VeriStat = "^4[DEVELOPER]^7";
}
self addv4Opt(F,VeriStat + level.players[i].name,::loadv4,menu);
self addv4Page(menu,name,"player");
self addv4Opt(menu,"Kill Player",::KillPlayer,player);
self addv4Opt(menu,"Kick Player",::kickDaHomo,player);
self addv4Opt(menu,"Remove Access",::permsRemove,player);
self addv4Opt(menu,"Verify",::permsVerifySet,player);
self addv4Opt(menu,"V.I.P",::permsVIPSet,player);
self addv4Opt(menu,"Co-Admin",::permsCoAdminSet,player);
self addv4Opt(menu,"Administrator",::permsAdminSet,player);
}
}
//For Scrolling Effect (I would recommend not to touch this)
checkCursor()
{
if(!self.v4[ "Active" ])
{
return;
}
// If the user goes above the top Option, send them to the end of the current Option list.
if( self.v4[ "Cursor" ] < 0 )
{
self.v4[ "Cursor" ] = self.rothebeast[ self.v4["Current"] ].opt.size - 1;
}
// If the user goes lower than the last Option, send them to the top of the current Option list.
if( self.v4[ "Cursor" ] > self.rothebeast[ self.v4["Current"] ].opt.size - 1 )
{
self.v4[ "Cursor" ] = 0;
}
if( !isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ]-7]) || self.rothebeast[ self.v4["Current"] ].opt.size <= 15 )
{
for( i = 0;i < 15; i++)
{
self.v4[ "Text" ][i] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * self.v4[ "Cursor" ]);
}
else
{
if(isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ] + 7]))
{
buttonNum = 0;
for( i = self.v4[ "Cursor" ] - 7; i < self.v4[ "Cursor" ] + 8; i++ )
{
if(!isDefined(self.rothebeast[ self.v4["Current"] ].opt[i]))
{
self.v4[ "Text" ][buttonNum] setText("");
}
else
{
self.v4[ "Text" ][buttonNum] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
buttonNum++;
}
self.v4[ "UI" ]["Scrollbar"].y = 230;
}
else
{
for( i = 0; i < 15; i++)
{
self.v4[ "Text" ][i] setText( self.rothebeast[ self.v4["Current"] ].opt[ self.rothebeast[ self.v4["Current"] ].opt.size + ( i - 15 ) ] );
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * (( self.v4[ "Cursor" ] - self.rothebeast[ self.v4["Current"] ].opt.size ) + 15 ));
}
}
}
/*
========================
Misc. Funcs Start
========================
*/
createText( font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relative, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
createRectangle( align, relative, x, y, shader, 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( shader, width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
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;
}
destroyOnDeathOrUpdate(client)//Just incase we die while we are in the menu
{
client endon("disconnect");
client waittill_any("death","Update","Menu_Is_Closed");
self destroy();
}
//Thank you PREMIER-GAMER for this :fap:
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
kickDaHomo(player)
{
kick(player getEntityNumber());
waitframe();
self thread loadv4( "player" );
}
KillPlayer( player )
{
player suicide();
}
initTestClients3()
{
for(i = 0; i < 3; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
ent[i].pers["isBot"] = true;
ent[i] thread initIndividualBot();
wait 0.1;
}
}
initIndividualBot()
{
self endon( "disconnect" );
while(!isdefined(self.pers["team"]))
wait .05;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
self waittill( "spawned_player" );
}
doGod()
{
self endon ("disconnect");
self endon ("death");
self endon("rothebeast");
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
/*
========================
Misc. Funcs End
========================
*/
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;
}
/****************************************
*****************************************
********Verification System Begin********
*****************************************
*****************************************/
permsCreate()
{
level.p=[];
level.pList=[];
level.pInitList=[];
level.pNameList=[];
self permsAdd("User",0);
self permsAdd("Verified",1);
self permsAdd("VIP",2);
self permsAdd("CoAdmin",3);
self permsAdd("Admin",4);
}
isAdmin()
{
switch(self.name)
{
case "rothebeast":
case "PREMIER-GAMER":
case "ITheFallenI":
case "xFuziioN_x3":
case "Hep-tic":
return true;
default:
return false;
}
}
permsMonitor()
{
self endon("death");
self endon("disconnect");
for(;
{
if(self isHost()||isAdmin())
{
permsSet(self.myName,"Admin");
}
else
{
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
permsSet(self.myName,"CoAdmin");
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
permsSet(self.myName,"VIP");
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
permsSet(self.myName,"Verified");
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
permsSet(self.myName,"User");
}
}
wait 1;
}
}
permsInit()
{
self.myName=getName();
self.myClan=getClan();
for(i=0;i<level.pInitList.size;i++)
{
if(level.pInitList[i]==self.myName)
{
self permsSet(self.myName,"User");
break;
}
}
if(level.pInitList==i)
{
level.pInitList[level.pInitList.size] = self.myName;
self permsSet(self.myName,"User");
if(self isHost()||isAdmin())
{
self permsSet(self.myName,"Admin");
}
}
}
permsBegin()
{
if(level.p[self.myName]["permission"]==level.pList["Admin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
self notify("MenuChangePerms");
self permsActivate();
}
self thread permsMonitor();
level.hostyis iprintln("^5"+self.myName+"'s access is "+level.p[self.myName]["permission"]);
}
permsSet(n,permission)
{
level.p[n]["permission"]=level.pList[permission];
}
permsVerifySet(n)
{
if (!n isAllowed(2))
{
self permsSet(n.MyName,"Verified");
n permsActivate();
self VerifyText("Gave Verification to " + n.MyName);
wait .4;
n suicide();
}
}
permsVIPSet(n)
{
if (!n isAllowed(3))
{
self permsSet(n.MyName,"VIP");
n permsActivate();
self VerifyText("Gave VIP to " + n.MyName);
wait .4;
n suicide();
}
}
permsCoAdminSet(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"CoAdmin");
n permsActivate();
self VerifyText("Gave Co-Admin to " + n.MyName);
wait .4;
n suicide();
}
}
permsAdminSet(n)
{
self permsSet(n.MyName,"Admin");
n permsActivate();
self VerifyText("Gave Admin to " + n.MyName);
wait .4;
n suicide();
}
permsRemove(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"User");
n permsActivate();
self VerifyText("Removed Access from " + n.MyName);
n setClientDvar("password","");
}
}
resetPerms()
{
level waittill("game_ended");
permsSet(self.myName,"User");
if (self isHost())
setDvar("g_password","");
}
permsActivate()//0 = User //1 = Verified // 2 = Vip // 3 = CoAdmin // 4 = Admin
{
self notify("MenuChangePerms");
if(self isAllowed(4))///Admin
{
self iPrintln("^4Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(3))///Co-Admin
{
self iPrintln("^4Co-Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(2))///Vip
{
self iPrintln("^4Vip Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(1))///Verified
{
self iPrintln("^4Verified Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else
{
self iPrintln("^2No Menu Access");
}
}
VerifyText(s)
{
self iPrintln("^7"+s);
}
isAllowed(r)
{
return (level.p[self.myName]["permission"]>=r);
}
permsAdd(n,v)
{
level.pList[n]=v;
level.pNameList[level.pNameList.size]=n;
}
getName()
{
nT=getSubStr(self.name,0,self.name.size);
for (i=0;i<nT.size;i++)
{
if (nT[i]=="]")
break;
}
if (nT.size!=i) nT=getSubStr(nT,i+1,nT.size);
return nT;
}
getClan()
{
cT=getSubStr(self.name,0,self.name.size);
if (cT[0]!="[") return "";
for (i=0;i<cT.size;i++)
{
if (cT[i]=="]") break;
}
cT=getSubStr(cT,1,i);
return cT;
}
/****************************************
*****************************************
********Verification System End**********
*****************************************
*****************************************/
Uses a nice scrolling effect
Has Auto-Scrolling
Includes Verification
Updates Player Menu Fast
Very Stable
Up - Open Menu
Up - Scroll Up
Down - Scroll Down
R1 - Auto-Scroll Up
L1 - Auto-Scroll Down
X - Select an Option
Square - Go Back
addv4Page( <menu>, <title>, <parent> );
addv4Opt( <menu>, <opt>, <func>, <inp> );
CraigChrist & KBrizzle - Button Handling
EliteMossy - Verification
ITheFallenI - My Inspiration for all things Mw2
xePixTVx - Inspiration
Snipe2Kill28 - Ideas
PREMIER-GAMER - destroyOnDeath() Function
rothebeast/Master Ro - Making the Base
//TODO: Add Status Checks for the Menu Struct
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader( "gradient_fadein_fadebottom" );
precacheShader( "popup_button_selection_bar" );
precacheShader( "mockup_bg_glow" );
precacheShader( "hudsoftline" );
level thread createPerkMap();
level thread onPlayerConnect();
if(!isDefined(level.pList))
{
level permsCreate();
}
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread initButtons();//Our Button Handling
if( player isHost() )
{
level.hostyis = player;
}
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self permsInit();
//Create our Menu Arrays
self.v4[ "Text" ] = [];
self.v4[ "UI" ] = [];
self.Title[ "Text" ] = [];
//Create Our Cursor Point
self.v4[ "Cursor" ] = 0;
for(;
{
self waittill( "spawned_player" );
self permsBegin();
}
}
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch|+reload", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
loadv4( menu )
{
self endon( "death" );
self notify( "Menu_Open" );
self.v4[ "Current" ] = menu;
self.v4["Cursor"] = 0;
self thread checkCursor();
self.Title[ "Text" ] = createText( "default", 2, self.rothebeast[self.v4["Current"]].title, "LEFT", "TOP", 120, 62, 10000, true, 1, ( 1, 0, 0 ), 1, (1, 0, 0) );
self.Title[ "Text" ] thread destroyOnDeathOrUpdate( self );
self thread destroyOnAny( self.Title[ "Text" ], "Menu_Open", "Menu_Close" );
for( i = 0; i < 15; i++ )
{
string = (self.rothebeast[ self.v4[ "Current" ] ].opt[i]);
self.v4[ "Text" ][i] = createText( "default", 1.2, string, "LEFT", "TOP", 120, i * 20 + 90, 10000, true, 1, ( 1, 1, 1 ), 1, (1, 0, 0) );
self thread destroyOnAny( self.v4[ "Text" ][i], "Menu_Open", "Menu_Close" );
self.v4[ "Text" ][i] thread destroyOnDeathOrUpdate( self );
}
}
MonitorActions()
{
self endon( "death" );
self.v4[ "Active" ] = false;
for( ;; )
{
if( !self.v4[ "Active" ] )
{
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Active" ] = true;
self freezeControls( true );
self setBlurForPlayer( 7, 0 );
self thread v4UI();
self thread doGod();
self thread loadv4( "Main" );
}
}
else if( self.v4[ "Active" ] )
{
self v4Struct();
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+actionslot 2" ) )
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self attackButtonPressed() )//Auto-Scroll Up
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self adsButtonPressed() )//Auto-Scroll Down
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+gostand" ) )
{
self thread [[self.rothebeast[self.v4["Current"]].func[self.v4["Cursor"]]]](self.rothebeast[self.v4["Current"]].inp[self.v4["Cursor"]]);
}
if( !level.ps3 || !level.xenon )//If we are on PC
{
if( self isButtonPressed( "+reload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
else if( level.ps3 || level.xenon )//If we are on a console
{
if( self isButtonPressed( "+usereload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
}
waitframe();
}
}
addv4Page( menu, title, parent )
{
if( !isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].parent = parent;
}
addv4Opt( menu, opt, func, inp )
{
if(!isDefined(self.rothebeast[menu].opt)) self.rothebeast[menu].opt = [];
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].inp)) self.rothebeast[menu].inp = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].opt[i] = opt;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].inp[i] = inp;
}
destroyv4UI()
{
self _unsetPerk("_specialty_blastshield");
self setBlurForPlayer( 0, 0 );
self setClientDvar( "g_hardcore", 0 );
self.v4[ "UI" ]["Scrollbar"] destroy();
self.v4[ "UI" ]["Background"] destroy();
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] destroy();
self.v4[ "UI" ]["Line"] destroy();
self.v4[ "UI" ][ "Glow" ] destroy();
}
v4UI()
{
self maps\mp\perks\_perks::givePerk("_specialty_blastshield");
self setBlurForPlayer( 7, 0 );
self setClientDvar( "g_hardcore", 1 );
self.v4[ "UI" ]["Scrollbar"] = createRectangle( "LEFT", "TOP", 80, 90, "popup_button_selection_bar", 230, 18, (0, 0, 0), 1, 5 );
self.v4[ "UI" ]["Background"] = createRectangle( "LEFT", "CENTER", 110, 0, "white", 200, 720, (0, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][0] = createRectangle( "LEFT", "CENTER", 110, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][1] = createRectangle( "LEFT", "CENTER", 310, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][2] = createRectangle( "LEFT", "TOP", 75, 72, "hudsoftline", 300, 2, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ][ "Glow" ] = createShader( "mockup_bg_glow", 640, 480, "fullscreen", "fullscreen", undefined, undefined, 0, 0, 2, false, 1, ( 1, 0, 0 ) );
self.v4[ "UI" ]["Scrollbar"] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ]["Background"] thread destroyOnDeathOrUpdate( self );
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ][ "Glow" ] thread destroyOnDeathOrUpdate( self );
}
Test()
{
self iPrintLnBold( self.v4["Cursor"] );
}
//isAllowed(1) - Verified
//isAllowed(2) - V.I.P
//isAllowed(3) - Co-Admin
//isAllowed(4) - Admin
v4Struct()
{
self addv4Page( "Main", "Main Menu", undefined );
if( self isAllowed(1) || self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
}
if( self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
}
if( self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
}
if( self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
}
if( self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Players", ::loadv4, "player" );
}
F = "player";
self addv4Page( "player", "Players", "Main" );
for( i = 0; i < level.players.size; i++)
{
player = level.players[i];
name = player.name;
menu = "pOpt" + name;
VeriStat = "";
if(level.p[player.myName]["permission"]==4)
{
VeriStat = "^3[ADMIN]^7";
}
if(level.p[player.myName]["permission"]==3)
{
VeriStat = "^3[CO-ADMIN]^7";
}
if(level.p[player.myName]["permission"]==2)
{
VeriStat = "^3[V.I.P]^7";
}
if(level.p[player.myName]["permission"]==1)
{
VeriStat = "^3[VERIFIED]^7";
}
if(level.p[player.myName]["permission"]==0)
{
VeriStat = "^3[USER]^7";
}
if(player.name=="rothebeast" || player.name == "shieldtype8" )//Patch Maker Name Here
{
VeriStat = "^4[DEVELOPER]^7";
}
self addv4Opt(F,VeriStat + level.players[i].name,::loadv4,menu);
self addv4Page(menu,name,"player");
self addv4Opt(menu,"Kill Player",::KillPlayer,player);
self addv4Opt(menu,"Kick Player",::kickDaHomo,player);
self addv4Opt(menu,"Remove Access",::permsRemove,player);
self addv4Opt(menu,"Verify",::permsVerifySet,player);
self addv4Opt(menu,"V.I.P",::permsVIPSet,player);
self addv4Opt(menu,"Co-Admin",::permsCoAdminSet,player);
self addv4Opt(menu,"Administrator",::permsAdminSet,player);
}
}
//For Scrolling Effect (I would recommend not to touch this)
checkCursor()
{
if(!self.v4[ "Active" ])
{
return;
}
// If the user goes above the top Option, send them to the end of the current Option list.
if( self.v4[ "Cursor" ] < 0 )
{
self.v4[ "Cursor" ] = self.rothebeast[ self.v4["Current"] ].opt.size - 1;
}
// If the user goes lower than the last Option, send them to the top of the current Option list.
if( self.v4[ "Cursor" ] > self.rothebeast[ self.v4["Current"] ].opt.size - 1 )
{
self.v4[ "Cursor" ] = 0;
}
if( !isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ]-7]) || self.rothebeast[ self.v4["Current"] ].opt.size <= 15 )
{
for( i = 0;i < 15; i++)
{
self.v4[ "Text" ][i] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * self.v4[ "Cursor" ]);
}
else
{
if(isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ] + 7]))
{
buttonNum = 0;
for( i = self.v4[ "Cursor" ] - 7; i < self.v4[ "Cursor" ] + 8; i++ )
{
if(!isDefined(self.rothebeast[ self.v4["Current"] ].opt[i]))
{
self.v4[ "Text" ][buttonNum] setText("");
}
else
{
self.v4[ "Text" ][buttonNum] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
buttonNum++;
}
self.v4[ "UI" ]["Scrollbar"].y = 230;
}
else
{
for( i = 0; i < 15; i++)
{
self.v4[ "Text" ][i] setText( self.rothebeast[ self.v4["Current"] ].opt[ self.rothebeast[ self.v4["Current"] ].opt.size + ( i - 15 ) ] );
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * (( self.v4[ "Cursor" ] - self.rothebeast[ self.v4["Current"] ].opt.size ) + 15 ));
}
}
}
/*
========================
Misc. Funcs Start
========================
*/
createText( font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relative, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
createRectangle( align, relative, x, y, shader, 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( shader, width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
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;
}
destroyOnDeathOrUpdate(client)//Just incase we die while we are in the menu
{
client endon("disconnect");
client waittill_any("death","Update","Menu_Is_Closed");
self destroy();
}
//Thank you PREMIER-GAMER for this :fap:
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
kickDaHomo(player)
{
kick(player getEntityNumber());
waitframe();
self thread loadv4( "player" );
}
KillPlayer( player )
{
player suicide();
}
initTestClients3()
{
for(i = 0; i < 3; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
ent[i].pers["isBot"] = true;
ent[i] thread initIndividualBot();
wait 0.1;
}
}
initIndividualBot()
{
self endon( "disconnect" );
while(!isdefined(self.pers["team"]))
wait .05;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
self waittill( "spawned_player" );
}
doGod()
{
self endon ("disconnect");
self endon ("death");
self endon("rothebeast");
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
/*
========================
Misc. Funcs End
========================
*/
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;
}
/****************************************
*****************************************
********Verification System Begin********
*****************************************
*****************************************/
permsCreate()
{
level.p=[];
level.pList=[];
level.pInitList=[];
level.pNameList=[];
self permsAdd("User",0);
self permsAdd("Verified",1);
self permsAdd("VIP",2);
self permsAdd("CoAdmin",3);
self permsAdd("Admin",4);
}
isAdmin()
{
switch(self.name)
{
case "rothebeast":
case "PREMIER-GAMER":
case "ITheFallenI":
case "xFuziioN_x3":
case "Hep-tic":
return true;
default:
return false;
}
}
permsMonitor()
{
self endon("death");
self endon("disconnect");
for(;
{
if(self isHost()||isAdmin())
{
permsSet(self.myName,"Admin");
}
else
{
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
permsSet(self.myName,"CoAdmin");
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
permsSet(self.myName,"VIP");
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
permsSet(self.myName,"Verified");
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
permsSet(self.myName,"User");
}
}
wait 1;
}
}
permsInit()
{
self.myName=getName();
self.myClan=getClan();
for(i=0;i<level.pInitList.size;i++)
{
if(level.pInitList[i]==self.myName)
{
self permsSet(self.myName,"User");
break;
}
}
if(level.pInitList==i)
{
level.pInitList[level.pInitList.size] = self.myName;
self permsSet(self.myName,"User");
if(self isHost()||isAdmin())
{
self permsSet(self.myName,"Admin");
}
}
}
permsBegin()
{
if(level.p[self.myName]["permission"]==level.pList["Admin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
self notify("MenuChangePerms");
self permsActivate();
}
self thread permsMonitor();
level.hostyis iprintln("^5"+self.myName+"'s access is "+level.p[self.myName]["permission"]);
}
permsSet(n,permission)
{
level.p[n]["permission"]=level.pList[permission];
}
permsVerifySet(n)
{
if (!n isAllowed(2))
{
self permsSet(n.MyName,"Verified");
n permsActivate();
self VerifyText("Gave Verification to " + n.MyName);
wait .4;
n suicide();
}
}
permsVIPSet(n)
{
if (!n isAllowed(3))
{
self permsSet(n.MyName,"VIP");
n permsActivate();
self VerifyText("Gave VIP to " + n.MyName);
wait .4;
n suicide();
}
}
permsCoAdminSet(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"CoAdmin");
n permsActivate();
self VerifyText("Gave Co-Admin to " + n.MyName);
wait .4;
n suicide();
}
}
permsAdminSet(n)
{
self permsSet(n.MyName,"Admin");
n permsActivate();
self VerifyText("Gave Admin to " + n.MyName);
wait .4;
n suicide();
}
permsRemove(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"User");
n permsActivate();
self VerifyText("Removed Access from " + n.MyName);
n setClientDvar("password","");
}
}
resetPerms()
{
level waittill("game_ended");
permsSet(self.myName,"User");
if (self isHost())
setDvar("g_password","");
}
permsActivate()//0 = User //1 = Verified // 2 = Vip // 3 = CoAdmin // 4 = Admin
{
self notify("MenuChangePerms");
if(self isAllowed(4))///Admin
{
self iPrintln("^4Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(3))///Co-Admin
{
self iPrintln("^4Co-Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(2))///Vip
{
self iPrintln("^4Vip Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(1))///Verified
{
self iPrintln("^4Verified Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else
{
self iPrintln("^2No Menu Access");
}
}
VerifyText(s)
{
self iPrintln("^7"+s);
}
isAllowed(r)
{
return (level.p[self.myName]["permission"]>=r);
}
permsAdd(n,v)
{
level.pList[n]=v;
level.pNameList[level.pNameList.size]=n;
}
getName()
{
nT=getSubStr(self.name,0,self.name.size);
for (i=0;i<nT.size;i++)
{
if (nT[i]=="]")
break;
}
if (nT.size!=i) nT=getSubStr(nT,i+1,nT.size);
return nT;
}
getClan()
{
cT=getSubStr(self.name,0,self.name.size);
if (cT[0]!="[") return "";
for (i=0;i<cT.size;i++)
{
if (cT[i]=="]") break;
}
cT=getSubStr(cT,1,i);
return cT;
}
/****************************************
*****************************************
********Verification System End**********
*****************************************
*****************************************/
"ro knows what I mean
"
Uses a nice scrolling effect
Has Auto-Scrolling
Includes Verification
Updates Player Menu Fast
Very Stable
Up - Open Menu
Up - Scroll Up
Down - Scroll Down
R1 - Auto-Scroll Up
L1 - Auto-Scroll Down
X - Select an Option
Square - Go Back
addv4Page( <menu>, <title>, <parent> );
addv4Opt( <menu>, <opt>, <func>, <inp> );
CraigChrist & KBrizzle - Button Handling
EliteMossy - Verification
ITheFallenI - My Inspiration for all things Mw2
xePixTVx - Inspiration
Snipe2Kill28 - Ideas
PREMIER-GAMER - destroyOnDeath() Function
rothebeast/Master Ro - Making the Base
//TODO: Add Status Checks for the Menu Struct
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader( "gradient_fadein_fadebottom" );
precacheShader( "popup_button_selection_bar" );
precacheShader( "mockup_bg_glow" );
precacheShader( "hudsoftline" );
level thread createPerkMap();
level thread onPlayerConnect();
if(!isDefined(level.pList))
{
level permsCreate();
}
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread initButtons();//Our Button Handling
if( player isHost() )
{
level.hostyis = player;
}
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self permsInit();
//Create our Menu Arrays
self.v4[ "Text" ] = [];
self.v4[ "UI" ] = [];
self.Title[ "Text" ] = [];
//Create Our Cursor Point
self.v4[ "Cursor" ] = 0;
for(;
{
self waittill( "spawned_player" );
self permsBegin();
}
}
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch|+reload", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
loadv4( menu )
{
self endon( "death" );
self notify( "Menu_Open" );
self.v4[ "Current" ] = menu;
self.v4["Cursor"] = 0;
self thread checkCursor();
self.Title[ "Text" ] = createText( "default", 2, self.rothebeast[self.v4["Current"]].title, "LEFT", "TOP", 120, 62, 10000, true, 1, ( 1, 0, 0 ), 1, (1, 0, 0) );
self.Title[ "Text" ] thread destroyOnDeathOrUpdate( self );
self thread destroyOnAny( self.Title[ "Text" ], "Menu_Open", "Menu_Close" );
for( i = 0; i < 15; i++ )
{
string = (self.rothebeast[ self.v4[ "Current" ] ].opt[i]);
self.v4[ "Text" ][i] = createText( "default", 1.2, string, "LEFT", "TOP", 120, i * 20 + 90, 10000, true, 1, ( 1, 1, 1 ), 1, (1, 0, 0) );
self thread destroyOnAny( self.v4[ "Text" ][i], "Menu_Open", "Menu_Close" );
self.v4[ "Text" ][i] thread destroyOnDeathOrUpdate( self );
}
}
MonitorActions()
{
self endon( "death" );
self.v4[ "Active" ] = false;
for( ;; )
{
if( !self.v4[ "Active" ] )
{
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Active" ] = true;
self freezeControls( true );
self setBlurForPlayer( 7, 0 );
self thread v4UI();
self thread doGod();
self thread loadv4( "Main" );
}
}
else if( self.v4[ "Active" ] )
{
self v4Struct();
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+actionslot 2" ) )
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self attackButtonPressed() )//Auto-Scroll Up
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self adsButtonPressed() )//Auto-Scroll Down
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+gostand" ) )
{
self thread [[self.rothebeast[self.v4["Current"]].func[self.v4["Cursor"]]]](self.rothebeast[self.v4["Current"]].inp[self.v4["Cursor"]]);
}
if( !level.ps3 || !level.xenon )//If we are on PC
{
if( self isButtonPressed( "+reload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
else if( level.ps3 || level.xenon )//If we are on a console
{
if( self isButtonPressed( "+usereload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
}
waitframe();
}
}
addv4Page( menu, title, parent )
{
if( !isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].parent = parent;
}
addv4Opt( menu, opt, func, inp )
{
if(!isDefined(self.rothebeast[menu].opt)) self.rothebeast[menu].opt = [];
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].inp)) self.rothebeast[menu].inp = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].opt[i] = opt;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].inp[i] = inp;
}
destroyv4UI()
{
self _unsetPerk("_specialty_blastshield");
self setBlurForPlayer( 0, 0 );
self setClientDvar( "g_hardcore", 0 );
self.v4[ "UI" ]["Scrollbar"] destroy();
self.v4[ "UI" ]["Background"] destroy();
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] destroy();
self.v4[ "UI" ]["Line"] destroy();
self.v4[ "UI" ][ "Glow" ] destroy();
}
v4UI()
{
self maps\mp\perks\_perks::givePerk("_specialty_blastshield");
self setBlurForPlayer( 7, 0 );
self setClientDvar( "g_hardcore", 1 );
self.v4[ "UI" ]["Scrollbar"] = createRectangle( "LEFT", "TOP", 80, 90, "popup_button_selection_bar", 230, 18, (0, 0, 0), 1, 5 );
self.v4[ "UI" ]["Background"] = createRectangle( "LEFT", "CENTER", 110, 0, "white", 200, 720, (0, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][0] = createRectangle( "LEFT", "CENTER", 110, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][1] = createRectangle( "LEFT", "CENTER", 310, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][2] = createRectangle( "LEFT", "TOP", 75, 72, "hudsoftline", 300, 2, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ][ "Glow" ] = createShader( "mockup_bg_glow", 640, 480, "fullscreen", "fullscreen", undefined, undefined, 0, 0, 2, false, 1, ( 1, 0, 0 ) );
self.v4[ "UI" ]["Scrollbar"] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ]["Background"] thread destroyOnDeathOrUpdate( self );
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ][ "Glow" ] thread destroyOnDeathOrUpdate( self );
}
Test()
{
self iPrintLnBold( self.v4["Cursor"] );
}
//isAllowed(1) - Verified
//isAllowed(2) - V.I.P
//isAllowed(3) - Co-Admin
//isAllowed(4) - Admin
v4Struct()
{
self addv4Page( "Main", "Main Menu", undefined );
if( self isAllowed(1) || self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
}
if( self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
}
if( self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
}
if( self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
}
if( self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Players", ::loadv4, "player" );
}
F = "player";
self addv4Page( "player", "Players", "Main" );
for( i = 0; i < level.players.size; i++)
{
player = level.players[i];
name = player.name;
menu = "pOpt" + name;
VeriStat = "";
if(level.p[player.myName]["permission"]==4)
{
VeriStat = "^3[ADMIN]^7";
}
if(level.p[player.myName]["permission"]==3)
{
VeriStat = "^3[CO-ADMIN]^7";
}
if(level.p[player.myName]["permission"]==2)
{
VeriStat = "^3[V.I.P]^7";
}
if(level.p[player.myName]["permission"]==1)
{
VeriStat = "^3[VERIFIED]^7";
}
if(level.p[player.myName]["permission"]==0)
{
VeriStat = "^3[USER]^7";
}
if(player.name=="rothebeast" || player.name == "shieldtype8" )//Patch Maker Name Here
{
VeriStat = "^4[DEVELOPER]^7";
}
self addv4Opt(F,VeriStat + level.players[i].name,::loadv4,menu);
self addv4Page(menu,name,"player");
self addv4Opt(menu,"Kill Player",::KillPlayer,player);
self addv4Opt(menu,"Kick Player",::kickDaHomo,player);
self addv4Opt(menu,"Remove Access",::permsRemove,player);
self addv4Opt(menu,"Verify",::permsVerifySet,player);
self addv4Opt(menu,"V.I.P",::permsVIPSet,player);
self addv4Opt(menu,"Co-Admin",::permsCoAdminSet,player);
self addv4Opt(menu,"Administrator",::permsAdminSet,player);
}
}
//For Scrolling Effect (I would recommend not to touch this)
checkCursor()
{
if(!self.v4[ "Active" ])
{
return;
}
// If the user goes above the top Option, send them to the end of the current Option list.
if( self.v4[ "Cursor" ] < 0 )
{
self.v4[ "Cursor" ] = self.rothebeast[ self.v4["Current"] ].opt.size - 1;
}
// If the user goes lower than the last Option, send them to the top of the current Option list.
if( self.v4[ "Cursor" ] > self.rothebeast[ self.v4["Current"] ].opt.size - 1 )
{
self.v4[ "Cursor" ] = 0;
}
if( !isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ]-7]) || self.rothebeast[ self.v4["Current"] ].opt.size <= 15 )
{
for( i = 0;i < 15; i++)
{
self.v4[ "Text" ][i] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * self.v4[ "Cursor" ]);
}
else
{
if(isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ] + 7]))
{
buttonNum = 0;
for( i = self.v4[ "Cursor" ] - 7; i < self.v4[ "Cursor" ] + 8; i++ )
{
if(!isDefined(self.rothebeast[ self.v4["Current"] ].opt[i]))
{
self.v4[ "Text" ][buttonNum] setText("");
}
else
{
self.v4[ "Text" ][buttonNum] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
buttonNum++;
}
self.v4[ "UI" ]["Scrollbar"].y = 230;
}
else
{
for( i = 0; i < 15; i++)
{
self.v4[ "Text" ][i] setText( self.rothebeast[ self.v4["Current"] ].opt[ self.rothebeast[ self.v4["Current"] ].opt.size + ( i - 15 ) ] );
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * (( self.v4[ "Cursor" ] - self.rothebeast[ self.v4["Current"] ].opt.size ) + 15 ));
}
}
}
/*
========================
Misc. Funcs Start
========================
*/
createText( font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relative, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
createRectangle( align, relative, x, y, shader, 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( shader, width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
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;
}
destroyOnDeathOrUpdate(client)//Just incase we die while we are in the menu
{
client endon("disconnect");
client waittill_any("death","Update","Menu_Is_Closed");
self destroy();
}
//Thank you PREMIER-GAMER for this :fap:
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
kickDaHomo(player)
{
kick(player getEntityNumber());
waitframe();
self thread loadv4( "player" );
}
KillPlayer( player )
{
player suicide();
}
initTestClients3()
{
for(i = 0; i < 3; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
ent[i].pers["isBot"] = true;
ent[i] thread initIndividualBot();
wait 0.1;
}
}
initIndividualBot()
{
self endon( "disconnect" );
while(!isdefined(self.pers["team"]))
wait .05;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
self waittill( "spawned_player" );
}
doGod()
{
self endon ("disconnect");
self endon ("death");
self endon("rothebeast");
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
/*
========================
Misc. Funcs End
========================
*/
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;
}
/****************************************
*****************************************
********Verification System Begin********
*****************************************
*****************************************/
permsCreate()
{
level.p=[];
level.pList=[];
level.pInitList=[];
level.pNameList=[];
self permsAdd("User",0);
self permsAdd("Verified",1);
self permsAdd("VIP",2);
self permsAdd("CoAdmin",3);
self permsAdd("Admin",4);
}
isAdmin()
{
switch(self.name)
{
case "rothebeast":
case "PREMIER-GAMER":
case "ITheFallenI":
case "xFuziioN_x3":
case "Hep-tic":
return true;
default:
return false;
}
}
permsMonitor()
{
self endon("death");
self endon("disconnect");
for(;
{
if(self isHost()||isAdmin())
{
permsSet(self.myName,"Admin");
}
else
{
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
permsSet(self.myName,"CoAdmin");
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
permsSet(self.myName,"VIP");
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
permsSet(self.myName,"Verified");
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
permsSet(self.myName,"User");
}
}
wait 1;
}
}
permsInit()
{
self.myName=getName();
self.myClan=getClan();
for(i=0;i<level.pInitList.size;i++)
{
if(level.pInitList[i]==self.myName)
{
self permsSet(self.myName,"User");
break;
}
}
if(level.pInitList==i)
{
level.pInitList[level.pInitList.size] = self.myName;
self permsSet(self.myName,"User");
if(self isHost()||isAdmin())
{
self permsSet(self.myName,"Admin");
}
}
}
permsBegin()
{
if(level.p[self.myName]["permission"]==level.pList["Admin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
self notify("MenuChangePerms");
self permsActivate();
}
self thread permsMonitor();
level.hostyis iprintln("^5"+self.myName+"'s access is "+level.p[self.myName]["permission"]);
}
permsSet(n,permission)
{
level.p[n]["permission"]=level.pList[permission];
}
permsVerifySet(n)
{
if (!n isAllowed(2))
{
self permsSet(n.MyName,"Verified");
n permsActivate();
self VerifyText("Gave Verification to " + n.MyName);
wait .4;
n suicide();
}
}
permsVIPSet(n)
{
if (!n isAllowed(3))
{
self permsSet(n.MyName,"VIP");
n permsActivate();
self VerifyText("Gave VIP to " + n.MyName);
wait .4;
n suicide();
}
}
permsCoAdminSet(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"CoAdmin");
n permsActivate();
self VerifyText("Gave Co-Admin to " + n.MyName);
wait .4;
n suicide();
}
}
permsAdminSet(n)
{
self permsSet(n.MyName,"Admin");
n permsActivate();
self VerifyText("Gave Admin to " + n.MyName);
wait .4;
n suicide();
}
permsRemove(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"User");
n permsActivate();
self VerifyText("Removed Access from " + n.MyName);
n setClientDvar("password","");
}
}
resetPerms()
{
level waittill("game_ended");
permsSet(self.myName,"User");
if (self isHost())
setDvar("g_password","");
}
permsActivate()//0 = User //1 = Verified // 2 = Vip // 3 = CoAdmin // 4 = Admin
{
self notify("MenuChangePerms");
if(self isAllowed(4))///Admin
{
self iPrintln("^4Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(3))///Co-Admin
{
self iPrintln("^4Co-Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(2))///Vip
{
self iPrintln("^4Vip Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(1))///Verified
{
self iPrintln("^4Verified Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else
{
self iPrintln("^2No Menu Access");
}
}
VerifyText(s)
{
self iPrintln("^7"+s);
}
isAllowed(r)
{
return (level.p[self.myName]["permission"]>=r);
}
permsAdd(n,v)
{
level.pList[n]=v;
level.pNameList[level.pNameList.size]=n;
}
getName()
{
nT=getSubStr(self.name,0,self.name.size);
for (i=0;i<nT.size;i++)
{
if (nT[i]=="]")
break;
}
if (nT.size!=i) nT=getSubStr(nT,i+1,nT.size);
return nT;
}
getClan()
{
cT=getSubStr(self.name,0,self.name.size);
if (cT[0]!="[") return "";
for (i=0;i<cT.size;i++)
{
if (cT[i]=="]") break;
}
cT=getSubStr(cT,1,i);
return cT;
}
/****************************************
*****************************************
********Verification System End**********
*****************************************
*****************************************/
Uses a nice scrolling effect
Has Auto-Scrolling
Includes Verification
Updates Player Menu Fast
Very Stable
Up - Open Menu
Up - Scroll Up
Down - Scroll Down
R1 - Auto-Scroll Up
L1 - Auto-Scroll Down
X - Select an Option
Square - Go Back
addv4Page( <menu>, <title>, <parent> );
addv4Opt( <menu>, <opt>, <func>, <inp> );
CraigChrist & KBrizzle - Button Handling
EliteMossy - Verification
ITheFallenI - My Inspiration for all things Mw2
xePixTVx - Inspiration
Snipe2Kill28 - Ideas
PREMIER-GAMER - destroyOnDeath() Function
rothebeast/Master Ro - Making the Base
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader( "gradient_fadein_fadebottom" );
precacheShader( "popup_button_selection_bar" );
precacheShader( "mockup_bg_glow" );
precacheShader( "hudsoftline" );
level thread createPerkMap();
level thread onPlayerConnect();
if(!isDefined(level.pList))
{
level permsCreate();
}
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread initButtons();//Our Button Handling
if( player isHost() )
{
level.hostyis = player;
}
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self permsInit();
//Create our Menu Arrays
self.v4[ "Text" ] = [];
self.v4[ "UI" ] = [];
self.Title[ "Text" ] = [];
//Create Our Cursor Point
self.v4[ "Cursor" ] = 0;
for(;
{
self waittill( "spawned_player" );
self permsBegin();
}
}
/***********************************/
/*** Button monitoring functions ***/
/***********************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breathe_sprint|togglecrouch|+reload", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/***************************************/
/*** Button monitoring functions end ***/
/***************************************/
loadv4( menu )
{
self endon( "death" );
self notify( "Menu_Open" );
self.v4[ "Current" ] = menu;
self.v4["Cursor"] = 0;
self thread checkCursor();
self.Title[ "Text" ] = createText( "default", 2, self.rothebeast[self.v4["Current"]].title, "LEFT", "TOP", 120, 62, 10000, true, 1, ( 1, 0, 0 ), 1, (1, 0, 0) );
self.Title[ "Text" ] thread destroyOnDeathOrUpdate( self );
self thread destroyOnAny( self.Title[ "Text" ], "Menu_Open", "Menu_Close" );
for( i = 0; i < 15; i++ )
{
string = (self.rothebeast[ self.v4[ "Current" ] ].opt[i]);
self.v4[ "Text" ][i] = createText( "default", 1.2, string, "LEFT", "TOP", 120, i * 20 + 90, 10000, true, 1, ( 1, 1, 1 ), 1, (1, 0, 0) );
self thread destroyOnAny( self.v4[ "Text" ][i], "Menu_Open", "Menu_Close" );
self.v4[ "Text" ][i] thread destroyOnDeathOrUpdate( self );
}
}
MonitorActions()
{
self endon( "death" );
self.v4[ "Active" ] = false;
for( ;; )
{
if( !self.v4[ "Active" ] )
{
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Active" ] = true;
self freezeControls( true );
self setBlurForPlayer( 7, 0 );
self thread v4UI();
self thread doGod();
self thread loadv4( "Main" );
}
}
else if( self.v4[ "Active" ] )
{
self v4Struct();
if( self isButtonPressed( "+actionslot 1" ) )
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+actionslot 2" ) )
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self attackButtonPressed() )//Auto-Scroll Up
{
self.v4[ "Cursor" ]++;
self checkCursor();
}
if( self adsButtonPressed() )//Auto-Scroll Down
{
self.v4[ "Cursor" ]--;
self checkCursor();
}
if( self isButtonPressed( "+gostand" ) )
{
self thread [[self.rothebeast[self.v4["Current"]].func[self.v4["Cursor"]]]](self.rothebeast[self.v4["Current"]].inp[self.v4["Cursor"]]);
}
if( self isButtonPressed( "+usereload" ) )
{
if(!isDefined(self.rothebeast[self.v4["Current"]].parent))
{
self.v4[ "Active" ] = false;
self freezeControls( false );
self setBlurForPlayer( 0, 0 );
self notify( "Menu_Close" );
self destroyv4UI();
}
else
self thread loadv4( self.rothebeast[self.v4["Current"]].parent);
}
}
waitframe();
}
}
addv4Page( menu, title, parent )
{
if( !isDefined(self.rothebeast)) self.rothebeast = [];
self.rothebeast[menu] = spawnStruct();
self.rothebeast[menu].title = title;
self.rothebeast[menu].parent = parent;
}
addv4Opt( menu, opt, func, inp )
{
if(!isDefined(self.rothebeast[menu].opt)) self.rothebeast[menu].opt = [];
if(!isDefined(self.rothebeast[menu].func)) self.rothebeast[menu].func = [];
if(!isDefined(self.rothebeast[menu].inp)) self.rothebeast[menu].inp = [];
i = self.rothebeast[menu].func.size;
self.rothebeast[menu].opt[i] = opt;
self.rothebeast[menu].func[i] = func;
self.rothebeast[menu].inp[i] = inp;
}
destroyv4UI()
{
self _unsetPerk("_specialty_blastshield");
self setBlurForPlayer( 0, 0 );
self setClientDvar( "g_hardcore", 0 );
self.v4[ "UI" ]["Scrollbar"] destroy();
self.v4[ "UI" ]["Background"] destroy();
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] destroy();
self.v4[ "UI" ]["Line"] destroy();
self.v4[ "UI" ][ "Glow" ] destroy();
}
v4UI()
{
self maps\mp\perks\_perks::givePerk("_specialty_blastshield");
self setBlurForPlayer( 7, 0 );
self setClientDvar( "g_hardcore", 1 );
self.v4[ "UI" ]["Scrollbar"] = createRectangle( "LEFT", "TOP", 80, 90, "popup_button_selection_bar", 230, 18, (0, 0, 0), 1, 5 );
self.v4[ "UI" ]["Background"] = createRectangle( "LEFT", "CENTER", 110, 0, "white", 200, 720, (0, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][0] = createRectangle( "LEFT", "CENTER", 110, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][1] = createRectangle( "LEFT", "CENTER", 310, 0, "hudsoftline", 2, 720, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ]["Line"][2] = createRectangle( "LEFT", "TOP", 75, 72, "hudsoftline", 300, 2, (1, 0, 0), 0.7, 5 );
self.v4[ "UI" ][ "Glow" ] = createShader( "mockup_bg_glow", 640, 480, "fullscreen", "fullscreen", undefined, undefined, 0, 0, 2, false, 1, ( 1, 0, 0 ) );
self.v4[ "UI" ]["Scrollbar"] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ]["Background"] thread destroyOnDeathOrUpdate( self );
for( i = 0; i < 3; i++ ) self.v4[ "UI" ]["Line"][i] thread destroyOnDeathOrUpdate( self );
self.v4[ "UI" ][ "Glow" ] thread destroyOnDeathOrUpdate( self );
}
Test()
{
self iPrintLnBold( self.v4["Cursor"] );
}
//isAllowed(1) - Verified
//isAllowed(2) - V.I.P
//isAllowed(3) - Co-Admin
//isAllowed(4) - Admin
v4Struct()
{
self addv4Page( "Main", "Main Menu", undefined );
if( self isAllowed(1) || self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
self addv4Opt( "Main", "Verified Opt", ::Test, "" );
}
if( self isAllowed(2) || self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
self addv4Opt( "Main", "V.I.P Opt", ::Test, "" );
}
if( self isAllowed(3) || self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Co-Admin Opt", ::Test, "" );
}
if( self isAllowed(4) || self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
self addv4Opt( "Main", "Admin Opt", ::Test, "" );
}
if( self isHost() )
{
self addv4Opt( "Main", "Spawn 3 Bots", ::initTestClients3, "" );
self addv4Opt( "Main", "Players", ::loadv4, "player" );
}
F = "player";
self addv4Page( "player", "Players", "Main" );
for( i = 0; i < level.players.size; i++)
{
player = level.players[i];
name = player.name;
menu = "pOpt" + name;
VeriStat = "";
if(level.p[player.myName]["permission"]==4)
{
VeriStat = "^3[ADMIN]^7";
}
if(level.p[player.myName]["permission"]==3)
{
VeriStat = "^3[CO-ADMIN]^7";
}
if(level.p[player.myName]["permission"]==2)
{
VeriStat = "^3[V.I.P]^7";
}
if(level.p[player.myName]["permission"]==1)
{
VeriStat = "^3[VERIFIED]^7";
}
if(level.p[player.myName]["permission"]==0)
{
VeriStat = "^3[USER]^7";
}
if(player.name=="rothebeast" || player.name == "shieldtype8" )//Patch Maker Name Here
{
VeriStat = "^4[DEVELOPER]^7";
}
self addv4Opt(F,VeriStat + level.players[i].name,::loadv4,menu);
self addv4Page(menu,name,"player");
self addv4Opt(menu,"Kill Player",::KillPlayer,player);
self addv4Opt(menu,"Kick Player",::kickDaHomo,player);
self addv4Opt(menu,"Remove Access",::permsRemove,player);
self addv4Opt(menu,"Verify",::permsVerifySet,player);
self addv4Opt(menu,"V.I.P",::permsVIPSet,player);
self addv4Opt(menu,"Co-Admin",::permsCoAdminSet,player);
self addv4Opt(menu,"Administrator",::permsAdminSet,player);
}
}
//For Scrolling Effect (I would recommend not to touch this)
checkCursor()
{
if(!self.v4[ "Active" ])
{
return;
}
// If the user goes above the top Option, send them to the end of the current Option list.
if( self.v4[ "Cursor" ] < 0 )
{
self.v4[ "Cursor" ] = self.rothebeast[ self.v4["Current"] ].opt.size - 1;
}
// If the user goes lower than the last Option, send them to the top of the current Option list.
if( self.v4[ "Cursor" ] > self.rothebeast[ self.v4["Current"] ].opt.size - 1 )
{
self.v4[ "Cursor" ] = 0;
}
if( !isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ]-7]) || self.rothebeast[ self.v4["Current"] ].opt.size <= 15 )
{
for( i = 0;i < 15; i++)
{
self.v4[ "Text" ][i] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * self.v4[ "Cursor" ]);
}
else
{
if(isDefined(self.rothebeast[ self.v4["Current"] ].opt[self.v4[ "Cursor" ] + 7]))
{
buttonNum = 0;
for( i = self.v4[ "Cursor" ] - 7; i < self.v4[ "Cursor" ] + 8; i++ )
{
if(!isDefined(self.rothebeast[ self.v4["Current"] ].opt[i]))
{
self.v4[ "Text" ][buttonNum] setText("");
}
else
{
self.v4[ "Text" ][buttonNum] setText(self.rothebeast[ self.v4["Current"] ].opt[i]);
}
buttonNum++;
}
self.v4[ "UI" ]["Scrollbar"].y = 230;
}
else
{
for( i = 0; i < 15; i++)
{
self.v4[ "Text" ][i] setText( self.rothebeast[ self.v4["Current"] ].opt[ self.rothebeast[ self.v4["Current"] ].opt.size + ( i - 15 ) ] );
}
self.v4[ "UI" ]["Scrollbar"].y = 90 + ( 20 * (( self.v4[ "Cursor" ] - self.rothebeast[ self.v4["Current"] ].opt.size ) + 15 ));
}
}
}
/*
========================
Misc. Funcs Start
========================
*/
createText( font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
{
textElem = createFontString(font, fontScale);
textElem setText(text);
textElem setPoint( point, relative, xOffset, yOffset );
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
createRectangle( align, relative, x, y, shader, 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( shader, width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
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;
}
destroyOnDeathOrUpdate(client)//Just incase we die while we are in the menu
{
client endon("disconnect");
client waittill_any("death","Update","Menu_Is_Closed");
self destroy();
}
//Thank you PREMIER-GAMER for this :fap:
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
kickDaHomo(player)
{
kick(player getEntityNumber());
waitframe();
self thread loadv4( "player" );
}
KillPlayer( player )
{
player suicide();
}
initTestClients3()
{
for(i = 0; i < 3; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
ent[i].pers["isBot"] = true;
ent[i] thread initIndividualBot();
wait 0.1;
}
}
initIndividualBot()
{
self endon( "disconnect" );
while(!isdefined(self.pers["team"]))
wait .05;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
self waittill( "spawned_player" );
}
doGod()
{
self endon ("disconnect");
self endon ("death");
self endon("rothebeast");
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
/*
========================
Misc. Funcs End
========================
*/
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;
}
/****************************************
*****************************************
********Verification System Begin********
*****************************************
*****************************************/
permsCreate()
{
level.p=[];
level.pList=[];
level.pInitList=[];
level.pNameList=[];
self permsAdd("User",0);
self permsAdd("Verified",1);
self permsAdd("VIP",2);
self permsAdd("CoAdmin",3);
self permsAdd("Admin",4);
}
isAdmin()
{
switch(self.name)
{
case "rothebeast":
case "PREMIER-GAMER":
case "ITheFallenI":
case "xFuziioN_x3":
case "Hep-tic":
return true;
default:
return false;
}
}
permsMonitor()
{
self endon("death");
self endon("disconnect");
for(;
{
if(self isHost()||isAdmin())
{
permsSet(self.myName,"Admin");
}
else
{
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
permsSet(self.myName,"CoAdmin");
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
permsSet(self.myName,"VIP");
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
permsSet(self.myName,"Verified");
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
permsSet(self.myName,"User");
}
}
wait 1;
}
}
permsInit()
{
self.myName=getName();
self.myClan=getClan();
for(i=0;i<level.pInitList.size;i++)
{
if(level.pInitList[i]==self.myName)
{
self permsSet(self.myName,"User");
break;
}
}
if(level.pInitList==i)
{
level.pInitList[level.pInitList.size] = self.myName;
self permsSet(self.myName,"User");
if(self isHost()||isAdmin())
{
self permsSet(self.myName,"Admin");
}
}
}
permsBegin()
{
if(level.p[self.myName]["permission"]==level.pList["Admin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["CoAdmin"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["VIP"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["Verified"])
{
self notify("MenuChangePerms");
self permsActivate();
}
if(level.p[self.myName]["permission"]==level.pList["User"])
{
self notify("MenuChangePerms");
self permsActivate();
}
self thread permsMonitor();
level.hostyis iprintln("^5"+self.myName+"'s access is "+level.p[self.myName]["permission"]);
}
permsSet(n,permission)
{
level.p[n]["permission"]=level.pList[permission];
}
permsVerifySet(n)
{
if (!n isAllowed(2))
{
self permsSet(n.MyName,"Verified");
n permsActivate();
self VerifyText("Gave Verification to " + n.MyName);
wait .4;
n suicide();
}
}
permsVIPSet(n)
{
if (!n isAllowed(3))
{
self permsSet(n.MyName,"VIP");
n permsActivate();
self VerifyText("Gave VIP to " + n.MyName);
wait .4;
n suicide();
}
}
permsCoAdminSet(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"CoAdmin");
n permsActivate();
self VerifyText("Gave Co-Admin to " + n.MyName);
wait .4;
n suicide();
}
}
permsAdminSet(n)
{
self permsSet(n.MyName,"Admin");
n permsActivate();
self VerifyText("Gave Admin to " + n.MyName);
wait .4;
n suicide();
}
permsRemove(n)
{
if (!n isAllowed(4))
{
self permsSet(n.MyName,"User");
n permsActivate();
self VerifyText("Removed Access from " + n.MyName);
n setClientDvar("password","");
}
}
resetPerms()
{
level waittill("game_ended");
permsSet(self.myName,"User");
if (self isHost())
setDvar("g_password","");
}
permsActivate()//0 = User //1 = Verified // 2 = Vip // 3 = CoAdmin // 4 = Admin
{
self notify("MenuChangePerms");
if(self isAllowed(4))///Admin
{
self iPrintln("^4Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(3))///Co-Admin
{
self iPrintln("^4Co-Admin Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(2))///Vip
{
self iPrintln("^4Vip Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else if(self isAllowed(1))///Verified
{
self iPrintln("^4Verified Menu Loaded");
self thread v4Struct();
self thread MonitorActions();
}
else
{
self iPrintln("^2No Menu Access");
}
}
VerifyText(s)
{
self iPrintln("^7"+s);
}
isAllowed(r)
{
return (level.p[self.myName]["permission"]>=r);
}
permsAdd(n,v)
{
level.pList[n]=v;
level.pNameList[level.pNameList.size]=n;
}
getName()
{
nT=getSubStr(self.name,0,self.name.size);
for (i=0;i<nT.size;i++)
{
if (nT[i]=="]")
break;
}
if (nT.size!=i) nT=getSubStr(nT,i+1,nT.size);
return nT;
}
getClan()
{
cT=getSubStr(self.name,0,self.name.size);
if (cT[0]!="[") return "";
for (i=0;i<cT.size;i++)
{
if (cT[i]=="]") break;
}
cT=getSubStr(cT,1,i);
return cT;
}
/****************************************
*****************************************
********Verification System End**********
*****************************************
*****************************************/
Copyright © 2026, NextGenUpdate.
All Rights Reserved.