Welcome Soldier.



MW2-MP Simply Perfect Menu Base

ISOCheated Offline
Administrator
#1
PHP Code: 
init()
{
level thread onPlayerConnect();

level.result = 0;
level.Verified = [];
}

onPlayerConnect()
{
for(;;)
{
level waittill("connected", player);
player thread onPlayerSpawned();
}
}

onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");

if (
self isHost())
thread overflowfix();

isFirstSpawn = true;

for(;;)
{
self waittill("spawned_player");

if (
isFirstSpawn)
{
isFirstSpawn = false;
self thread InitializeMenu();
}

// Will appear each time when the player spawn, that's just an exemple.
self iprintln("Welcome to the Simply Perfect Project Remake!");
self iprintln("AoKMiKeY and YouViolateMe <3");
}
}

InitializeMenu()
{
self.SimplyPerfect = spawnStruct();
self.SimplyPerfect.options = [];
self.SimplyPerfect.allmenus = [];
self.SimplyPerfect.menus = [];
self.SimplyPerfect.MenuOpen = false;
self.SimplyPerfect.DoingAnim = false;
self.SimplyPerfect.currentmenu = "";
self.SimplyPerfect.cursorspacing = 36;
self.SimplyPerfect.curs = 0;
self.SimplyPerfect.scrollerpos = 0;
self.SimplyPerfect.optionstoshow = 10;
self.SimplyPerfect.optionstoshow_constant = self.SimplyPerfect.optionstoshow; //do not change this
self.SimplyPerfect.cursorStartingYPos = -170;
self.SimplyPerfect.SelectedPlayer = self;

self.MenuAccess = "Unverified";

if (
self isHost())
self.MenuAccess = "Host";

self freezecontrols(false);

self checkIfVerified();
self SpawnBooleans();
self CreateOptions();
self DrawHUD();
self thread MonitorControls();
self thread WaitForDeath();
self thread WaitForGameEnd();
}

openMenux()
{
self.SimplyPerfect.background scaleOverTime(0.55, 300, 30); //width
self.SimplyPerfect.background affectElement("x", 0.55, 200);
self.SimplyPerfect.cursor scaleOverTime(0.65, 300, 30);
self.SimplyPerfect.cursor affectElement("x", 0.65, 50);

wait 0.65;

self.SimplyPerfect.cursor scaleOverTime(0.55, 2, 30);
self.SimplyPerfect.background scaleOverTime(0.55, 300, 400);

wait 0.55;

self.SimplyPerfect.MenuOpen = true;

self callMenu(self.SimplyPerfect.allmenus[0]);

self.SimplyPerfect.cursor affectElement("y", 0.55, self.SimplyPerfect.cursorStartingYPos);

self updateTextEffects(3);

self doOpeningAnim();

self updateTextEffects(1);
}

closeMenux()
{
self thread doClosingAnim();

self.SimplyPerfect.cursor affectElement("y", 0.2, 0);

wait 0.2;

self.SimplyPerfect.background scaleOverTime(0.6, 300, 30);

wait .6;

self.SimplyPerfect.cursor scaleOverTime(0.3, 300, 30);

wait .3;

self.SimplyPerfect.cursor affectElement("x", 0.2, 600);
self.SimplyPerfect.background affectElement("x", 0.25, 600);

wait .25;



self.SimplyPerfect.MenuOpen = false;
}

WaitForDeath()
{
self endon("disconnect");
level endon("game_ended");

for(;;)
{
self waittill("death");

if (
self.SimplyPerfect.MenuOpen)
{
if (!
self.SimplyPerfect.DoingAnim)
closeMenux();
}
}
}

WaitForGameEnd()
{
self endon("disconnect");

for(;;)
{
level waittill("game_ended");

if (
self.SimplyPerfect.MenuOpen)
{
if (!
self.SimplyPerfect.DoingAnim)
closeMenux();
}
}
}
//Options.gsc
/*
^1 - RED
^2 - GREEN
^3 - YELLOW
^4 - BLUE
^5 - CYAN
^6 - PINK
^7 - WHITE
^8 - DEFAULT MAP COLOR
^9 - GREY OR DEFAULT MAP COLOR
^0 - BLACK
^; - YALE BLUE
^: - LIGHT YELLOW
*/


getOptions()
{
self endon("disconnect");

options = [];

m = "Main";
options[m] = [];

options[m][options[m].size] = AddOption(m, "Sub Menu 1", ::callMenu, "Sub Menu 1");
options[m][options[m].size] = AddOption(m, "Players Menu", ::callMenu, "Players Menu");
options[m][options[m].size] = AddOption(m, "Test Var " + getBooleanStatus(self.testvar), ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);

m = "Sub Menu 1";
options[m] = [];

options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);

m = "Players Menu";
options[m] = [];

for(
i = 0; i < level.players.size; i++)
{
//no need to edit this part
player = level.players[i];

options[m][i] = AddOption(m, "[" + player.MenuAccess + "] " + getName(player), ::callMenu, "Player Options 1");

//no need to edit this part
//do not add options here! all player options should be added in Player Options 1 or whatever you have defined to hold your player options!
}

pName = getName(self.SimplyPerfect.SelectedPlayer);

m = "Player Options 1";
options[m] = [];

options[m][options[m].size] = AddOption(m, "Change Verification of " + pName, ::callMenu, "Verification Options");
options[m][options[m].size] = AddOption(m, "Kill " + pName, ::test);
options[m][options[m].size] = AddOption(m, "Kick " + pName, ::test);
options[m][options[m].size] = AddOption(m, "Print " + pName + "'s Name", ::printplayername);

m = "Verification Options";
options[m] = [];

options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^1Unverified", ::test, "Unverified");
options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2Verified", ::test, "Verified");
options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2VIP", ::test, "VIP");
options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2Admin", ::test, "Admin");
options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2CoHost", ::test, "CoHost");

return
options;
}
/*
clearMenu(m)
{
if (isDefined(self.SimplyPerfect.menus[m]))
{
for(i = 0; i < self.SimplyPerfect.menus[m].options.size; i++)
{
arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].text);
arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].func);
arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input1);
arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input2);
arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input3);
}
}
}
*/
CreateOptions()
{
options = getOptions();

self AddMenu("Main", "Verified", undefined, options["Main"]);

self AddMenu("Sub Menu 1", "Verified", "Main", options["Sub Menu 1"]);
self AddMenu("Players Menu", "CoHost", "Main", options["Players Menu"]);

self AddMenu("Player Options 1", "CoHost", "Players Menu", options["Player Options 1"]);
self AddMenu("Verification Options", "CoHost", "Player Options 1", options["Verification Options"]);

self thread waitForMenuClick();
self thread updateMenuOptionsLoop();
}

updateMenuOptionsLoop()
{
self endon("disconnect");
level endon("game_ended");
for(;;)
{
options = getOptions();
foreach(
menu in self.SimplyPerfect.allmenus)
{
self updateOptions(options[menu]);
}

wait .1;
}
}

waitForMenuClick()
{
self endon("disconnect");
level endon("game_ended");

for(;;)
{
self waittill("clicked_option");
options = getOptions();

self updateOptions(options[self.SimplyPerfect.currentmenu]);

self updateText();
}
}

updateOptions(_options)
{
if (
isDefined(_options))
{
for(
i = 0; i < _options.size; i++)
{
menutitle = _options[i].parent;

if (
menutitle == "Players Menu")
self.SimplyPerfect.menus[menutitle].options[i] = spawnStruct();

self.SimplyPerfect.menus[menutitle].options[i].text = _options[i].text;
self.SimplyPerfect.menus[menutitle].options[i].func = _options[i].func;
if (
isDefined(_options[i].input1))
self.SimplyPerfect.menus[menutitle].options[i].input1 = _options[i].input1;
if (
isDefined(_options[i].input2))
self.SimplyPerfect.menus[menutitle].options[i].input2 = _options[i].input2;
if (
isDefined(_options[i].input3))
self.SimplyPerfect.menus[menutitle].options[i].input3 = _options[i].input3;
}
}
}

updateText() //updates current text that's on screen
{
menutitle = self.SimplyPerfect.currentmenu;

optionnum = 0;
optionnum2 = 0;

cur = self.SimplyPerfect.curs;
scrollerpos = self.SimplyPerfect.scrollerpos;

for(
i = cur; i < cur + self.SimplyPerfect.optionstoshow; i++)
{

if (
isDefined(self.SimplyPerfect.menus[menutitle].options[i]))
{
option = getOptionText(menutitle, i);
self.SimplyPerfect.options[optionnum] setSafeText(option);
}
else
{
if (
isDefined(self.SimplyPerfect.menus[menutitle].options[0 + optionnum2]))
{
option = getOptionText(menutitle, 0 + optionnum2);
self.SimplyPerfect.options[optionnum] setSafeText(option);
}
else
{
optionnum2 = 0;

option = getOptionText(menutitle, 0 + optionnum2);
self.SimplyPerfect.options[optionnum] setSafeText(option);
}

optionnum2++;
}
optionnum++;
}
}

getOptionText(menutitle, num)
{
if (
isDefined(self.SimplyPerfect.menus[menutitle].options[num]))
return
self.SimplyPerfect.menus[menutitle].options[num].text;
else
return
"";
}

isSelected(num)
{
return
self.SimplyPerfect.scrollerpos == num;
}
//overflow.gsc
//credits to YouViolateMe
recreateText()
{
self endon("disconnect");
self endon("death");

self StoreText(self.SimplyPerfect.currentmenu);

if (!
self.SimplyPerfect.DoingAnim)
self updateTextEffects(1);
else
self updateTextEffects(3);
}

//Credits to dtx12, jwm614, and xTurntUpLobbies
overflowfix()
{
level endon("game_ended");

level.test = createServerFontString("default",1.5);
level.test setText("xTUL");
level.test.alpha = 0;

for(;;)
{
level waittill("textset");
if(
level.result >= 60) //50 = normal, 230 = if you are clearing strings with the _rank gsc
{
level.test ClearAllTextAfterHudElem();
level.result = 0;

foreach(
player in level.players)
{
if (
isDefined(player.SimplyPerfect))
{
if(
player.SimplyPerfect.MenuOpen)
{
player recreateText();
}
}
}
}
wait 0.01;
}
}
//Utilities.gsc
getBooleanStatus(bool)
{
if (!
isDefined(bool))
return
"^1Disabled";

if (bool)
return
"^2Enabled";
else
return
"^1Disabled";
}

SpawnBooleans()
{
self.testvar = false;
}

printplayername()
{
player = self.SimplyPerfect.SelectedPlayer;

self iprintln(player.name);
}

getName(player)
{
name = getSubStr(player.name, 0, player.name.size);
for(
i = 0; i < name.size; i++)
{
if(
name[i]=="]")
break;
}
if(
name.size != i)
name = getSubStr(name, i + 1, name.size);

return
name;
}

checkIfVerified()
{
self endon("disconnect");

foundValue = false;

foreach(
arrayvalue in level.Verified)
{
if (
arrayvalue == getName(self) + "_Unverified" || arrayvalue == getName(self) + "_Verified" || arrayvalue == getName(self) + "_VIP" || arrayvalue == getName(self) + "_Admin" || arrayvalue == getName(self) + "_CoHost")
{
string_name = getName(self);
MenuAccess = getSubStr(arrayvalue, string_name.size, arrayvalue.size);
foundValue = true;

if (
MenuAccess == "_Verified")
self.MenuAccess = "Verified";
if (
MenuAccess == "_VIP")
self.MenuAccess = "VIP";
if (
MenuAccess == "_Admin")
self.MenuAccess = "Admin";
if (
MenuAccess == "_CoHost")
self.MenuAccess = "CoHost";
}
}
}

isVerified()
{
if (
self isHost() || self.MenuAccess == "Verified" || self.MenuAccess == "VIP" || self.MenuAccess == "Admin" || self.MenuAccess == "CoHost")
return
true;
else
return
false;
}

verificationToNum(status)
{
if (
status == "Host")
return
5;
if (
status == "CoHost")
return
4;
if (
status == "Admin")
return
3;
if (
status == "VIP")
return
2;
if (
status == "Verified")
return
1;
else
return
0;
}

verificationToColor(status)
{
if (
status == "Host")
return
"^2Host";
if (
status == "CoHost")
return
"^5Co-Host";
if (
status == "Admin")
return
"^1Admin";
if (
status == "VIP")
return
"^4VIP";
if (
status == "Verified")
return
"^3Verified";
else
return
"^1Unverified";
}

//Menu_Controller.gsc
MonitorControls()
{
self endon("disconnect");
level endon("game_ended");

for(;;)
{
if (
self.SimplyPerfect.MenuOpen)
{
if (
self MeleeButtonPressed())
{
closeMenux();
}
if (
self AdsButtonPressed())
{
optiontotal = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;

if (
self.SimplyPerfect.cursor.y == self.SimplyPerfect.cursorStartingYPos)
{
if (
self.SimplyPerfect.curs == 0)
self.SimplyPerfect.curs = optiontotal;
else
self.SimplyPerfect.curs--;

self thread updateText();
}

self thread updateScroll(0 - self.SimplyPerfect.cursorspacing, -1);

wait .14;


}
if (
self AttackButtonPressed())
{
optiontotal = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;
YPos = self.SimplyPerfect.cursorStartingYPos + (self.SimplyPerfect.cursorspacing * (self.SimplyPerfect.optionstoshow - 1));

if (
self.SimplyPerfect.cursor.y == YPos)
{
if (
self.SimplyPerfect.curs == optiontotal)
self.SimplyPerfect.curs = 0;
else
self.SimplyPerfect.curs++;

self thread updateText();
}

self thread updateScroll(self.SimplyPerfect.cursorspacing, 1);

wait .14;

}
if (
self MeleeButtonPressed())
{
if (
isDefined(self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].prevmenu))
{
self.SimplyPerfect.curs = 0;
self.SimplyPerfect.scrollerpos = 0;

self.SimplyPerfect.cursor scaleOverTime(0.3, 250, 30);

foreach(
option in self.SimplyPerfect.options)
option affectElement("alpha", 0.3, 0);

wait .3;

self.SimplyPerfect.cursor scaleOverTime(0.3, 2, 30);

self callMenu(self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].prevmenu);

wait 0.2;

foreach(
option in self.SimplyPerfect.options)
option affectElement("alpha", 0.3, 0.6);

self updateTextEffects(1);

wait 0.15;

self.SimplyPerfect.cursor affectElement("y", 0.15, self.SimplyPerfect.cursorStartingYPos);

wait 0.15;

self updateTextEffects(2);

}
else
closeMenux();

wait .14;
}
if (
self UseButtonPressed())
{
menu = self.SimplyPerfect.currentmenu;

foreach(
option in self.SimplyPerfect.options)
option affectElement("alpha", 0.3, 0);

self.SimplyPerfect.cursor scaleOverTime(0.3, 250, 30);

wait .3;

if (
menu == "Players Menu")
{
if (
isDefined(level.players[self.SimplyPerfect.scrollerpos]))
self.SimplyPerfect.SelectedPlayer = level.players[self.SimplyPerfect.scrollerpos];
}

self thread [[self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].func]](self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input1, self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input2, self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input3);

self notify("clicked_option");

foreach(
option in self.SimplyPerfect.options)
option affectElement("alpha", 0.3, 0.6);

self updateTextEffects(1);

self.SimplyPerfect.cursor scaleOverTime(0.3, 2, 30);

wait .3;

if (
menu != self.SimplyPerfect.currentmenu) //callMenu was called, update cursor
{
self.SimplyPerfect.cursor affectElement("y", 0.2, self.SimplyPerfect.cursorStartingYPos);

wait 0.2;

self updateTextEffects(2);
}

}
}
else
{
if (
self isVerified())
{
if (
self ADSButtonPressed() && self MeleeButtonPressed())
{
openMenux();
}
}
}
wait .05;
}
}

updateScroll(val, newscroll)
{
cur = self.SimplyPerfect.scrollerpos;
last = self.SimplyPerfect.optionstoshow - 1;
totaloptions = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;
YPos = self.SimplyPerfect.cursorStartingYPos + (self.SimplyPerfect.cursorspacing * (self.SimplyPerfect.optionstoshow - 1));

if (
newscroll == 1)
{
if (
self.SimplyPerfect.cursor.y != YPos)
self.SimplyPerfect.cursor affectElement("y", .25, self.SimplyPerfect.cursor.y + val);

if (
cur < totaloptions)
self.SimplyPerfect.scrollerpos += 1;
else
self.SimplyPerfect.scrollerpos = 0;
}
else if (
newscroll == -1)
{
if (
self.SimplyPerfect.cursor.y != self.SimplyPerfect.cursorStartingYPos)
self.SimplyPerfect.cursor affectElement("y", .25, self.SimplyPerfect.cursor.y + val);

if (
cur != 0)
self.SimplyPerfect.scrollerpos += -1;
else
self.SimplyPerfect.scrollerpos = totaloptions;
}

//self iprintln("Scroller Pos: " + self.SimplyPerfect.scrollerpos + " | Total Options: " + totaloptions + " | Curs: " + self.SimplyPerfect.curs);

self updateTextEffects(2);
}
//Menu.gsc
AddMenu(menutitle, status, prevmenu, _options)
{

self.SimplyPerfect.menus[menutitle] = spawnStruct();
self.SimplyPerfect.menus[menutitle].options = [];

self.SimplyPerfect.menus[menutitle].menuname = menutitle;
self.SimplyPerfect.menus[menutitle].status = status;

self.SimplyPerfect.allmenus[self.SimplyPerfect.allmenus.size] = menutitle;

if (
isDefined(prevmenu))
self.SimplyPerfect.menus[menutitle].prevmenu = prevmenu;

self.SimplyPerfect.menus[menutitle].curs = 0;

if (
isDefined(_options))
{
for(
i = 0; i < _options.size; i++)
{
self.SimplyPerfect.menus[menutitle].options[i] = spawnStruct();

self.SimplyPerfect.menus[menutitle].options[i].text = _options[i].text;
self.SimplyPerfect.menus[menutitle].options[i].func = _options[i].func;
if (
isDefined(_options[i].input1))
self.SimplyPerfect.menus[menutitle].options[i].input1 = _options[i].input1;
if (
isDefined(_options[i].input2))
self.SimplyPerfect.menus[menutitle].options[i].input2 = _options[i].input2;
if (
isDefined(_options[i].input3))
self.SimplyPerfect.menus[menutitle].options[i].input3 = _options[i].input3;
}
}
}

AddOption(menutitle, text, func, input1, input2, input3)
{

option = spawnStruct();

option.parent = menutitle;
option.text = text;
option.func = func;
if(
isDefined(input1))
option.input1 = input1;
if(
isDefined(input2))
option.input2 = input2;
if(
isDefined(input3))
option.input3 = input3;

return
option;
}
callMenu(menu)
{
if (
verificationToNum(self.MenuAccess) >= verificationToNum(self.SimplyPerfect.menus[menu].status))
{
if (
isDefined(self.SimplyPerfect.menus[menu]))
{
self.SimplyPerfect.currentmenu = menu;

self.SimplyPerfect.curs = 0;
self.SimplyPerfect.scrollerpos = 0;

if (
menu == "Players Menu")
{
//self clearMenu(menu);

options = getOptions();
self updateOptions(options[menu]);
}

if (
self.SimplyPerfect.menus[menu].options.size >= self.SimplyPerfect.optionstoshow_constant)
self.SimplyPerfect.optionstoshow = self.SimplyPerfect.optionstoshow_constant;
else
self.SimplyPerfect.optionstoshow = self.SimplyPerfect.menus[menu].options.size;

self StoreText(menu);
}
else
self iprintln("Menu error! Unknown menu!");
}
else
self iprintln("You are not allowed to enter this menu! Insufficient Privileges!");
}

StoreText(menutitle)
{

optionnum = 0;
optionnum2 = 0;

cur = self.SimplyPerfect.curs;
scrollerpos = self.SimplyPerfect.scrollerpos;


foreach(
option in self.SimplyPerfect.options)
{
if (
isDefined(self.SimplyPerfect.options) && isDefined(option))
option destroy();
}

for(
i = 0; i < self.SimplyPerfect.optionstoshow; i++)
{
self.SimplyPerfect.options[i] = createText("default", 1.5, "LEFT", "CENTER", 70, -170 + (i * self.SimplyPerfect.cursorspacing), 1, 0.6, (128, 128, 128), "");
}

self updateText();
}
//HUD_Utilities
DrawHUD()
{
self.SimplyPerfect.background = createRectangle("CENTER", "CENTER", 600, 0, 5, 30, (0, 0, 0), "white", 0, 0.95);
self.SimplyPerfect.cursor = createRectangle("LEFT", "CENTER", 600, 0, 5, 30, (0, 168, 255), "white", 2, 1);
}

rgb( r, g , b)
{
return ((
r/255), (g/255), (b/255));
}

createText(font, fontscale, align, relative, x, y, sort, alpha, color, text)
{
textElem = CreateFontString( font, fontscale );
textElem setPoint( align, relative, x, y );
textElem.sort = sort;
textElem.color = color;
textElem.alpha = alpha;
textElem.hideWhenInMenu = true;
textElem.archived = true;

textElem setSafeText(text);

return
textElem;
}

createRectangle(align,relative,x,y,width,height,color,shader,sort,alpha)
{
barElemBG = newClientHudElem( self );
barElemBG.elemType = "bar";
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;
}

setSafeText(text)
{
level.result += 1;
self setText(text);
level notify("textset");
}


affectElement(type, time, value)
{
if(
type == "x" || type == "y" )
self moveOverTime( time );
else if (
type == "alpha" || type == "color")
self fadeOverTime( time );

if(
type == "x" )
self.x = value;
if(
type == "y" )
self.y = value;
if(
type == "alpha" )
self.alpha = value;
if(
type == "color" )
self.color = value;
}

updateTextEffects(type) //1 = instant, 2 = over time, 3 = instant grey color
{
if (
type == 1)
{
for(
i = 0; i < self.SimplyPerfect.options.size; i ++)
{
self.SimplyPerfect.options[i].alpha = 0.5;
self.SimplyPerfect.options[i].color = (128, 128, 128);

YPos = self.SimplyPerfect.cursorStartingYPos + (i * self.SimplyPerfect.cursorspacing);

if (
self.SimplyPerfect.cursor.y == YPos)
{
self.SimplyPerfect.options[i].alpha = 1;
self.SimplyPerfect.options[i].color = (0, 168, 255);
}
}
}
else if (
type == 2)
{
for(
i = 0; i < self.SimplyPerfect.options.size; i ++)
{
self.SimplyPerfect.options[i] stopPulse();

YPos = self.SimplyPerfect.cursorStartingYPos + (i * self.SimplyPerfect.cursorspacing);

if (
self.SimplyPerfect.cursor.y == YPos)
self.SimplyPerfect.options[i] pulseElement();
}
}
else
{
for(
i = 0; i < self.SimplyPerfect.options.size; i ++)
{
self.SimplyPerfect.options[i].alpha = 0.5;
self.SimplyPerfect.options[i].color = (128, 128, 128);
}
}
}

doOpeningAnim()
{
self.SimplyPerfect.DoingAnim = true;
x = int(self.SimplyPerfect.optionstoshow / 2);
for(
i = int(self.SimplyPerfect.optionstoshow / 2); i >= 0; i--)
{

self.SimplyPerfect.options[i].alpha = 1;
self.SimplyPerfect.options[i].color = (0, 168, 255);
self.SimplyPerfect.options[x].alpha = 1;
self.SimplyPerfect.options[x].color = (0, 168, 255);

wait .1;

self.SimplyPerfect.options[i].alpha = 0.5;
self.SimplyPerfect.options[i].color = (128, 128, 128);
self.SimplyPerfect.options[x].alpha = 0.5;
self.SimplyPerfect.options[x].color = (128, 128, 128);

//wait .1;
x++;
}
self.SimplyPerfect.DoingAnim = false;
}

doClosingAnim()
{
self.SimplyPerfect.DoingAnim = true;
x = self.SimplyPerfect.optionstoshow - 1;
for(
i = 0; i <= int(x / 2) + 2; i++)
{
self.SimplyPerfect.options[i] affectElement("alpha", 0.1, 1);
self.SimplyPerfect.options[x] affectElement("alpha", 0.1, 1);
self.SimplyPerfect.options[i].color = (0, 168, 255);
self.SimplyPerfect.options[x].color = (0, 168, 255);

wait .065;

self.SimplyPerfect.options[i] affectElement("alpha", 0.1, 0);
self.SimplyPerfect.options[x] affectElement("alpha", 0.1, 0);
self.SimplyPerfect.options[i].color = (128, 128, 128);
self.SimplyPerfect.options[x].color = (128, 128, 128);

wait .065;
x--;
}
self.SimplyPerfect.DoingAnim = false;
}

pulseElement()
{
self affectElement("alpha", 0.2, 1);
self affectElement("color", 0.2, (0, 168, 255));
}

stopPulse()
{
self affectElement("alpha", 0.2, 0.6);
self affectElement("color", 0.2, (128, 128, 128));
}
//Functions
test()
{
self iprintln("Test");
self.testvar = !self.testvar;
}

Load with BravSoldat's Tool
Reply

ISOCheated Offline
Administrator
#2
Code: 
init()
{
    level thread onPlayerConnect();
    
    level.result = 0;
    level.Verified = [];
}

onPlayerConnect()
{
    for(;;)
    {
        level waittill("connected", player);
        player thread onPlayerSpawned();
    }
}

onPlayerSpawned()
{
    self endon("disconnect");
    level endon("game_ended");
    
    if (self isHost())
        thread overflowfix();
        
    isFirstSpawn = true;
        
    for(;;)
    {
        self waittill("spawned_player");
        
        if (isFirstSpawn)
        {
            isFirstSpawn = false;
            self thread InitializeMenu();
        }
        
        // Will appear each time when the player spawn, that's just an exemple.
        self iprintln("Welcome to the Simply Perfect Project Remake!");
        self iprintln("AoKMiKeY and YouViolateMe <3");
    }
}

InitializeMenu()
{
    self.SimplyPerfect = spawnStruct();
    self.SimplyPerfect.options = [];
    self.SimplyPerfect.allmenus = [];
    self.SimplyPerfect.menus = [];
    self.SimplyPerfect.MenuOpen = false;
    self.SimplyPerfect.DoingAnim = false;
    self.SimplyPerfect.currentmenu = "";
    self.SimplyPerfect.cursorspacing = 36;
    self.SimplyPerfect.curs = 0;
    self.SimplyPerfect.scrollerpos = 0;
    self.SimplyPerfect.optionstoshow = 10;
    self.SimplyPerfect.optionstoshow_constant = self.SimplyPerfect.optionstoshow; //do not change this
    self.SimplyPerfect.cursorStartingYPos = -170;
    self.SimplyPerfect.SelectedPlayer = self;
    
    self.MenuAccess = "Unverified";
    
    if (self isHost())
        self.MenuAccess = "Host";
    
    self freezecontrols(false);
    
    self checkIfVerified();
    self SpawnBooleans();
    self CreateOptions();
    self DrawHUD();
    self thread MonitorControls();
    self thread WaitForDeath();
    self thread WaitForGameEnd();
}

openMenux()
{
    self.SimplyPerfect.background scaleOverTime(0.55, 300, 30); //width
    self.SimplyPerfect.background affectElement("x", 0.55, 200);
    self.SimplyPerfect.cursor scaleOverTime(0.65, 300, 30);
    self.SimplyPerfect.cursor affectElement("x", 0.65, 50);
    
    wait 0.65;
    
    self.SimplyPerfect.cursor scaleOverTime(0.55, 2, 30);
    self.SimplyPerfect.background scaleOverTime(0.55, 300, 400);
    
    wait 0.55;
    
    self.SimplyPerfect.MenuOpen = true;
    
    self callMenu(self.SimplyPerfect.allmenus[0]);
    
    self.SimplyPerfect.cursor affectElement("y", 0.55, self.SimplyPerfect.cursorStartingYPos);
    
    self updateTextEffects(3);
    
    self doOpeningAnim();
    
    self updateTextEffects(1);
}

closeMenux()
{
    self thread doClosingAnim();
    
    self.SimplyPerfect.cursor affectElement("y", 0.2, 0);
    
    wait 0.2;
    
    self.SimplyPerfect.background scaleOverTime(0.6, 300, 30);
    
    wait .6;
    
    self.SimplyPerfect.cursor scaleOverTime(0.3, 300, 30);
    
    wait .3;
    
    self.SimplyPerfect.cursor affectElement("x", 0.2, 600);
    self.SimplyPerfect.background affectElement("x", 0.25, 600);
    
    wait .25;
    
    
    
    self.SimplyPerfect.MenuOpen = false;
}

WaitForDeath()
{
    self endon("disconnect");
    level endon("game_ended");
    
    for(;;)
    {
        self waittill("death");
        
        if (self.SimplyPerfect.MenuOpen)
        {
            if (!self.SimplyPerfect.DoingAnim)
                closeMenux();
        }
    }
}

WaitForGameEnd()
{
    self endon("disconnect");
    
    for(;;)
    {
        level waittill("game_ended");
        
        if (self.SimplyPerfect.MenuOpen)
        {
            if (!self.SimplyPerfect.DoingAnim)
                closeMenux();
        }
    }
}
//Options.gsc
/*
^1 - RED
^2 - GREEN
^3 - YELLOW
^4 - BLUE
^5 - CYAN
^6 - PINK
^7 - WHITE
^8 - DEFAULT MAP COLOR
^9 - GREY OR DEFAULT MAP COLOR
^0 - BLACK
^; - YALE BLUE
^: - LIGHT YELLOW
*/


getOptions()
{
    self endon("disconnect");
    
    options = [];
    
    m = "Main";
    options[m] = [];
    
    options[m][options[m].size] = AddOption(m, "Sub Menu 1", ::callMenu, "Sub Menu 1");
    options[m][options[m].size] = AddOption(m, "Players Menu", ::callMenu, "Players Menu");
    options[m][options[m].size] = AddOption(m, "Test Var " + getBooleanStatus(self.testvar), ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    
    m = "Sub Menu 1";
    options[m] = [];
    
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    options[m][options[m].size] = AddOption(m, "Test Opt " + options[m].size + 1, ::test);
    
    m = "Players Menu";
    options[m] = [];
    
    for(i = 0; i < level.players.size; i++)
    {
        //no need to edit this part
        player = level.players[i];
        
        options[m][i] = AddOption(m, "[" + player.MenuAccess + "] " + getName(player), ::callMenu, "Player Options 1");
        
        //no need to edit this part
        //do not add options here! all player options should be added in Player Options 1 or whatever you have defined to hold your player options!
    }
    
    pName = getName(self.SimplyPerfect.SelectedPlayer);
    
    m = "Player Options 1";
    options[m] = [];
    
    options[m][options[m].size] = AddOption(m, "Change Verification of " + pName, ::callMenu, "Verification Options");
    options[m][options[m].size] = AddOption(m, "Kill " + pName, ::test);
    options[m][options[m].size] = AddOption(m, "Kick " + pName, ::test);
    options[m][options[m].size] = AddOption(m, "Print " + pName + "'s Name", ::printplayername);
    
    m = "Verification Options";
    options[m] = [];
    
    options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^1Unverified", ::test, "Unverified");
    options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2Verified", ::test, "Verified");
    options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2VIP", ::test, "VIP");
    options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2Admin", ::test, "Admin");
    options[m][options[m].size] = AddOption(m, "Set " + pName + "'s status as ^2CoHost", ::test, "CoHost");
    
    return options;
}
/*
clearMenu(m)
{
    if (isDefined(self.SimplyPerfect.menus[m]))
    {
        for(i = 0; i < self.SimplyPerfect.menus[m].options.size; i++)
        {
            arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].text);
            arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].func);
            arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input1);
            arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input2);
            arrayremovevalue(self.SimplyPerfect.menus[m].options[i], self.SimplyPerfect.menus[m].options[i].input3);
        }
    }
}
*/
CreateOptions()
{
    options = getOptions();
    
    self AddMenu("Main", "Verified", undefined, options["Main"]);
    
    self AddMenu("Sub Menu 1", "Verified", "Main", options["Sub Menu 1"]);
    self AddMenu("Players Menu", "CoHost", "Main", options["Players Menu"]);
    
    self AddMenu("Player Options 1", "CoHost", "Players Menu", options["Player Options 1"]);
    self AddMenu("Verification Options", "CoHost", "Player Options 1", options["Verification Options"]);
    
    self thread waitForMenuClick();
    self thread updateMenuOptionsLoop();
}

updateMenuOptionsLoop()
{
    self endon("disconnect");
    level endon("game_ended");
    for(;;)
    {
        options = getOptions();
        foreach(menu in self.SimplyPerfect.allmenus)
        {
            self updateOptions(options[menu]);
        }
        
        wait .1;
    }
}

waitForMenuClick()
{
    self endon("disconnect");
    level endon("game_ended");
    
    for(;;)
    {
        self waittill("clicked_option");
        options = getOptions();
        
        self updateOptions(options[self.SimplyPerfect.currentmenu]);
        
        self updateText();
    }
}

updateOptions(_options)
{
    if (isDefined(_options))
    {
        for(i = 0; i < _options.size; i++)
        {
            menutitle = _options[i].parent;
            
            if (menutitle == "Players Menu")
                self.SimplyPerfect.menus[menutitle].options[i] = spawnStruct();
                
            self.SimplyPerfect.menus[menutitle].options[i].text = _options[i].text;
            self.SimplyPerfect.menus[menutitle].options[i].func = _options[i].func;
            if (isDefined(_options[i].input1))
                self.SimplyPerfect.menus[menutitle].options[i].input1 = _options[i].input1;
            if (isDefined(_options[i].input2))
                self.SimplyPerfect.menus[menutitle].options[i].input2 = _options[i].input2;
            if (isDefined(_options[i].input3))
                self.SimplyPerfect.menus[menutitle].options[i].input3 = _options[i].input3;
        }
    }
}

updateText() //updates current text that's on screen
{
    menutitle = self.SimplyPerfect.currentmenu;
    
    optionnum = 0;
    optionnum2 = 0;
    
    cur = self.SimplyPerfect.curs;
    scrollerpos = self.SimplyPerfect.scrollerpos;
    
    for(i = cur; i < cur + self.SimplyPerfect.optionstoshow; i++)
    {
            
        if (isDefined(self.SimplyPerfect.menus[menutitle].options[i]))
        {
            option = getOptionText(menutitle, i);
            self.SimplyPerfect.options[optionnum] setSafeText(option);
        }
        else
        {
            if (isDefined(self.SimplyPerfect.menus[menutitle].options[0 + optionnum2]))
            {
                option = getOptionText(menutitle, 0 + optionnum2);
                self.SimplyPerfect.options[optionnum] setSafeText(option);
            }
            else
            {
                optionnum2 = 0;
                
                option = getOptionText(menutitle, 0 + optionnum2);
                self.SimplyPerfect.options[optionnum] setSafeText(option);
            }
            
            optionnum2++;
        }
        optionnum++;
    }
}

getOptionText(menutitle, num)
{
    if (isDefined(self.SimplyPerfect.menus[menutitle].options[num]))
        return self.SimplyPerfect.menus[menutitle].options[num].text;
    else
        return "";
}

isSelected(num)
{
    return self.SimplyPerfect.scrollerpos == num;
}
//overflow.gsc
//credits to YouViolateMe
recreateText()
{
    self endon("disconnect");
    self endon("death");
    
    self StoreText(self.SimplyPerfect.currentmenu);
    
    if (!self.SimplyPerfect.DoingAnim)
        self updateTextEffects(1);
    else
        self updateTextEffects(3);
}

//Credits to dtx12, jwm614, and xTurntUpLobbies
overflowfix()
{  
    level endon("game_ended");

    level.test = createServerFontString("default",1.5);
    level.test setText("xTUL");                
    level.test.alpha = 0;
  
    for(;;)
    {      
        level waittill("textset");
        if(level.result >= 60) //50 = normal, 230 = if you are clearing strings with the _rank gsc
        {
            level.test ClearAllTextAfterHudElem();
            level.result = 0;

            foreach(player in level.players)
            {
                if (isDefined(player.SimplyPerfect))
                {
                    if(player.SimplyPerfect.MenuOpen)
                    {
                        player recreateText();
                    }
                }
            }
        }      
        wait 0.01;    
    }
}
//Utilities.gsc
getBooleanStatus(bool)
{
    if (!isDefined(bool))
        return "^1Disabled";
    
    if (bool)
        return "^2Enabled";
    else
        return "^1Disabled";
}

SpawnBooleans()
{
    self.testvar = false;
}

printplayername()
{
    player = self.SimplyPerfect.SelectedPlayer;
    
    self iprintln(player.name);
}

getName(player)
{
        name = getSubStr(player.name, 0, player.name.size);
        for(i = 0; i < name.size; i++)
        {
                if(name[i]=="]")
                        break;
        }
        if(name.size != i)
                name = getSubStr(name, i + 1, name.size);
      
        return name;
}

checkIfVerified()
{
        self endon("disconnect");
      
        foundValue = false;
      
        foreach(arrayvalue in level.Verified)
        {
                if (arrayvalue == getName(self) + "_Unverified" || arrayvalue == getName(self) + "_Verified" || arrayvalue == getName(self) + "_VIP" || arrayvalue == getName(self) + "_Admin" || arrayvalue == getName(self) + "_CoHost")
                {
                        string_name = getName(self);
                        MenuAccess = getSubStr(arrayvalue, string_name.size, arrayvalue.size);
                        foundValue = true;
                      
                        if (MenuAccess == "_Verified")
                                self.MenuAccess = "Verified";
                        if (MenuAccess == "_VIP")
                                self.MenuAccess = "VIP";
                        if (MenuAccess == "_Admin")
                                self.MenuAccess = "Admin";
                        if (MenuAccess == "_CoHost")
                                self.MenuAccess = "CoHost";
                }
        }
}

isVerified()
{
        if (self isHost() || self.MenuAccess == "Verified" || self.MenuAccess == "VIP" || self.MenuAccess == "Admin" || self.MenuAccess == "CoHost")
                return true;
        else
                return false;
}

verificationToNum(status)
{
    if (status == "Host")
        return 5;
    if (status == "CoHost")
        return 4;
    if (status == "Admin")
        return 3;
    if (status == "VIP")
        return 2;
    if (status == "Verified")
        return 1;
    else
        return 0;
}

verificationToColor(status)
{
    if (status == "Host")
        return "^2Host";
    if (status == "CoHost")
        return "^5Co-Host";
    if (status == "Admin")
        return "^1Admin";
    if (status == "VIP")
        return "^4VIP";
    if (status == "Verified")
        return "^3Verified";
    else
        return "^1Unverified";
}

//Menu_Controller.gsc
MonitorControls()
{
    self endon("disconnect");
    level endon("game_ended");
    
    for(;;)
    {
        if (self.SimplyPerfect.MenuOpen)
        {
            if (self MeleeButtonPressed())
            {
                closeMenux();
            }
            if (self AdsButtonPressed())
            {
                optiontotal = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;
                
                if (self.SimplyPerfect.cursor.y == self.SimplyPerfect.cursorStartingYPos)
                {
                    if (self.SimplyPerfect.curs == 0)
                        self.SimplyPerfect.curs = optiontotal;
                    else
                        self.SimplyPerfect.curs--;
                    
                    self thread updateText();
                }
                    
                self thread updateScroll(0 - self.SimplyPerfect.cursorspacing, -1);
                    
                wait .14;
                
                
            }
            if (self AttackButtonPressed())
            {
                optiontotal = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;
                YPos = self.SimplyPerfect.cursorStartingYPos + (self.SimplyPerfect.cursorspacing * (self.SimplyPerfect.optionstoshow - 1));
                
                if (self.SimplyPerfect.cursor.y == YPos)
                {
                    if (self.SimplyPerfect.curs == optiontotal)
                        self.SimplyPerfect.curs = 0;
                    else
                        self.SimplyPerfect.curs++;
                        
                    self thread updateText();
                }
                    
                self thread updateScroll(self.SimplyPerfect.cursorspacing, 1);
                
                wait .14;
                    
            }
            if (self MeleeButtonPressed())
            {
                if (isDefined(self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].prevmenu))
                {
                    self.SimplyPerfect.curs = 0;
                    self.SimplyPerfect.scrollerpos = 0;
                    
                    self.SimplyPerfect.cursor scaleOverTime(0.3, 250, 30);
                    
                    foreach(option in self.SimplyPerfect.options)
                        option affectElement("alpha", 0.3, 0);
                    
                    wait .3;
                    
                    self.SimplyPerfect.cursor scaleOverTime(0.3, 2, 30);
                    
                    self callMenu(self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].prevmenu);
                    
                    wait 0.2;
                    
                    foreach(option in self.SimplyPerfect.options)
                        option affectElement("alpha", 0.3, 0.6);
                    
                    self updateTextEffects(1);
                    
                    wait 0.15;
                    
                    self.SimplyPerfect.cursor affectElement("y", 0.15, self.SimplyPerfect.cursorStartingYPos);
                    
                    wait 0.15;
                    
                    self updateTextEffects(2);
                    
                }
                else
                    closeMenux();

                wait .14;
            }
            if (self UseButtonPressed())
            {
                menu = self.SimplyPerfect.currentmenu;
                
                foreach(option in self.SimplyPerfect.options)
                        option affectElement("alpha", 0.3, 0);
                
                self.SimplyPerfect.cursor scaleOverTime(0.3, 250, 30);
                
                wait .3;
                
                if (menu == "Players Menu")
                {
                    if (isDefined(level.players[self.SimplyPerfect.scrollerpos]))
                        self.SimplyPerfect.SelectedPlayer = level.players[self.SimplyPerfect.scrollerpos];
                }
                
                self thread [[self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].func]](self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input1, self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input2, self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options[self.SimplyPerfect.scrollerpos].input3);
                
                self notify("clicked_option");
                
                foreach(option in self.SimplyPerfect.options)
                        option affectElement("alpha", 0.3, 0.6);
                
                self updateTextEffects(1);
                
                self.SimplyPerfect.cursor scaleOverTime(0.3, 2, 30);
                
                wait .3;
                
                if (menu != self.SimplyPerfect.currentmenu) //callMenu was called, update cursor
                {
                    self.SimplyPerfect.cursor affectElement("y", 0.2, self.SimplyPerfect.cursorStartingYPos);
    
                    wait 0.2;
                    
                    self updateTextEffects(2);
                }

            }
        }
        else
        {
            if (self isVerified())
            {
                if (self ADSButtonPressed() && self MeleeButtonPressed())
                {
                    openMenux();
                }
            }
        }
        wait .05;
    }
}

updateScroll(val, newscroll)
{
        cur = self.SimplyPerfect.scrollerpos;
        last = self.SimplyPerfect.optionstoshow - 1;
        totaloptions = self.SimplyPerfect.menus[self.SimplyPerfect.currentmenu].options.size - 1;
        YPos = self.SimplyPerfect.cursorStartingYPos + (self.SimplyPerfect.cursorspacing * (self.SimplyPerfect.optionstoshow - 1));
        
        if (newscroll == 1)
        {
            if (self.SimplyPerfect.cursor.y != YPos)
                    self.SimplyPerfect.cursor affectElement("y", .25, self.SimplyPerfect.cursor.y + val);
                    
            if (cur < totaloptions)
                self.SimplyPerfect.scrollerpos += 1;
            else
                self.SimplyPerfect.scrollerpos = 0;
        }
        else if (newscroll == -1)
        {
            if (self.SimplyPerfect.cursor.y != self.SimplyPerfect.cursorStartingYPos)
                self.SimplyPerfect.cursor affectElement("y", .25, self.SimplyPerfect.cursor.y + val);
                
            if (cur != 0)
                self.SimplyPerfect.scrollerpos += -1;
            else
                self.SimplyPerfect.scrollerpos = totaloptions;
        }
        
        //self iprintln("Scroller Pos: " + self.SimplyPerfect.scrollerpos + " | Total Options: " + totaloptions + " | Curs: " + self.SimplyPerfect.curs);
        
        self updateTextEffects(2);
}
//Menu.gsc
AddMenu(menutitle, status, prevmenu, _options)
{
    
    self.SimplyPerfect.menus[menutitle] = spawnStruct();
    self.SimplyPerfect.menus[menutitle].options = [];
    
    self.SimplyPerfect.menus[menutitle].menuname = menutitle;
    self.SimplyPerfect.menus[menutitle].status = status;
    
    self.SimplyPerfect.allmenus[self.SimplyPerfect.allmenus.size] = menutitle;
    
    if (isDefined(prevmenu))
        self.SimplyPerfect.menus[menutitle].prevmenu = prevmenu;
        
    self.SimplyPerfect.menus[menutitle].curs = 0;
    
    if (isDefined(_options))
    {
        for(i = 0; i < _options.size; i++)
        {
            self.SimplyPerfect.menus[menutitle].options[i] = spawnStruct();
            
            self.SimplyPerfect.menus[menutitle].options[i].text = _options[i].text;
            self.SimplyPerfect.menus[menutitle].options[i].func = _options[i].func;
            if (isDefined(_options[i].input1))
                self.SimplyPerfect.menus[menutitle].options[i].input1 = _options[i].input1;
            if (isDefined(_options[i].input2))
                self.SimplyPerfect.menus[menutitle].options[i].input2 = _options[i].input2;
            if (isDefined(_options[i].input3))
                self.SimplyPerfect.menus[menutitle].options[i].input3 = _options[i].input3;
        }
    }
}

AddOption(menutitle, text, func, input1, input2, input3)
{
        
        option = spawnStruct();
        
        option.parent = menutitle;
        option.text = text;
        option.func = func;
        if(isDefined(input1))
            option.input1 = input1;
        if(isDefined(input2))
            option.input2 = input2;
        if(isDefined(input3))
            option.input3 = input3;
        
        return option;
}
callMenu(menu)
{
    if (verificationToNum(self.MenuAccess) >= verificationToNum(self.SimplyPerfect.menus[menu].status))
    {
        if (isDefined(self.SimplyPerfect.menus[menu]))
        {
            self.SimplyPerfect.currentmenu = menu;
            
            self.SimplyPerfect.curs = 0;
            self.SimplyPerfect.scrollerpos = 0;
            
            if (menu == "Players Menu")
            {
                //self clearMenu(menu);
                
                options = getOptions();
                self updateOptions(options[menu]);
            }
            
            if (self.SimplyPerfect.menus[menu].options.size >= self.SimplyPerfect.optionstoshow_constant)
                self.SimplyPerfect.optionstoshow = self.SimplyPerfect.optionstoshow_constant;
            else
                self.SimplyPerfect.optionstoshow = self.SimplyPerfect.menus[menu].options.size;
            
            self StoreText(menu);
        }
        else
            self iprintln("Menu error! Unknown menu!");
    }
    else
        self iprintln("You are not allowed to enter this menu! Insufficient Privileges!");
}

StoreText(menutitle)
{
    
    optionnum = 0;
    optionnum2 = 0;
    
    cur = self.SimplyPerfect.curs;
    scrollerpos = self.SimplyPerfect.scrollerpos;
    
    
    foreach(option in self.SimplyPerfect.options)
    {
        if (isDefined(self.SimplyPerfect.options) && isDefined(option))
            option destroy();
    }
    
    for(i = 0; i < self.SimplyPerfect.optionstoshow; i++)
    {
        self.SimplyPerfect.options[i] = createText("default", 1.5, "LEFT", "CENTER", 70, -170 + (i * self.SimplyPerfect.cursorspacing), 1, 0.6, (128, 128, 128), "");
    }
    
    self updateText();
}
//HUD_Utilities
DrawHUD()
{
    self.SimplyPerfect.background = createRectangle("CENTER", "CENTER", 600, 0, 5, 30, (0, 0, 0), "white", 0, 0.95);
    self.SimplyPerfect.cursor = createRectangle("LEFT", "CENTER", 600, 0, 5, 30, (0, 168, 255), "white", 2, 1);
}

rgb( r, g , b)
{
       return ((r/255), (g/255), (b/255));
}

createText(font, fontscale, align, relative, x, y, sort, alpha, color, text)
{
    textElem = CreateFontString( font, fontscale );
    textElem setPoint( align, relative, x, y );
    textElem.sort = sort;
    textElem.color = color;
    textElem.alpha = alpha;
    textElem.hideWhenInMenu = true;
    textElem.archived = true;

    textElem setSafeText(text);
    
    return textElem;
}

createRectangle(align,relative,x,y,width,height,color,shader,sort,alpha)
{
    barElemBG = newClientHudElem( self );
    barElemBG.elemType = "bar";
    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;
}

setSafeText(text)
{
    level.result += 1;
    self setText(text);
    level notify("textset");
}


affectElement(type, time, value)
{
    if( type == "x" || type == "y" )
        self moveOverTime( time );
    else if (type == "alpha" || type == "color")
        self fadeOverTime( time );

    if( type == "x" )
        self.x = value;
    if( type == "y" )
        self.y = value;
    if( type == "alpha" )
        self.alpha = value;
    if( type == "color" )
        self.color = value;
}

updateTextEffects(type) //1 = instant, 2 = over time, 3 = instant grey color
{
    if (type == 1)
    {
        for(i = 0; i < self.SimplyPerfect.options.size; i ++)
        {
            self.SimplyPerfect.options[i].alpha = 0.5;
            self.SimplyPerfect.options[i].color = (128, 128, 128);
            
            YPos = self.SimplyPerfect.cursorStartingYPos + (i * self.SimplyPerfect.cursorspacing);
            
            if (self.SimplyPerfect.cursor.y == YPos)
            {
                self.SimplyPerfect.options[i].alpha = 1;
                self.SimplyPerfect.options[i].color = (0, 168, 255);
            }
        }
    }
    else if (type == 2)
    {
        for(i = 0; i < self.SimplyPerfect.options.size; i ++)
        {
            self.SimplyPerfect.options[i] stopPulse();
            
            YPos = self.SimplyPerfect.cursorStartingYPos + (i * self.SimplyPerfect.cursorspacing);
            
            if (self.SimplyPerfect.cursor.y == YPos)
                self.SimplyPerfect.options[i] pulseElement();
        }
    }
    else
    {
        for(i = 0; i < self.SimplyPerfect.options.size; i ++)
        {
            self.SimplyPerfect.options[i].alpha = 0.5;
            self.SimplyPerfect.options[i].color = (128, 128, 128);
        }
    }
}

doOpeningAnim()
{
    self.SimplyPerfect.DoingAnim = true;
    x = int(self.SimplyPerfect.optionstoshow / 2);
    for(i = int(self.SimplyPerfect.optionstoshow / 2); i >= 0; i--)
    {
    
        self.SimplyPerfect.options[i].alpha = 1;
        self.SimplyPerfect.options[i].color = (0, 168, 255);
        self.SimplyPerfect.options[x].alpha = 1;
        self.SimplyPerfect.options[x].color = (0, 168, 255);
        
        wait .1;
        
        self.SimplyPerfect.options[i].alpha = 0.5;
        self.SimplyPerfect.options[i].color = (128, 128, 128);
        self.SimplyPerfect.options[x].alpha = 0.5;
        self.SimplyPerfect.options[x].color = (128, 128, 128);
        
        //wait .1;
        x++;
    }
    self.SimplyPerfect.DoingAnim = false;
}

doClosingAnim()
{
    self.SimplyPerfect.DoingAnim = true;
    x = self.SimplyPerfect.optionstoshow - 1;
    for(i = 0; i <= int(x / 2) + 2; i++)
    {
        self.SimplyPerfect.options[i] affectElement("alpha", 0.1, 1);
        self.SimplyPerfect.options[x] affectElement("alpha", 0.1, 1);
        self.SimplyPerfect.options[i].color = (0, 168, 255);
        self.SimplyPerfect.options[x].color = (0, 168, 255);
        
        wait .065;
        
        self.SimplyPerfect.options[i] affectElement("alpha", 0.1, 0);
        self.SimplyPerfect.options[x] affectElement("alpha", 0.1, 0);
        self.SimplyPerfect.options[i].color = (128, 128, 128);
        self.SimplyPerfect.options[x].color = (128, 128, 128);
        
        wait .065;
        x--;
    }
    self.SimplyPerfect.DoingAnim = false;
}

pulseElement()
{
    self affectElement("alpha", 0.2, 1);
    self affectElement("color", 0.2, (0, 168, 255));
}

stopPulse()
{
    self affectElement("alpha", 0.2, 0.6);
    self affectElement("color", 0.2, (128, 128, 128));
}
//Functions
test()
{
    self iprintln("Test");
    self.testvar = !self.testvar;
}
Reply





Users browsing this thread:
1 Guest(s)



ABOUT FiveStarModding Community

Theme © iAndrew 2018 - Forum software by © MyBB .