PnF Menu base

vampytwist

"Don't you trust me?"
Staff member
Messages
538
Points
408
Bit buggy, was a fairly quick and sloppy port if I'm to be honest but someone out there may find this useful



Code:
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\gametypes_zm\_hud_util;
#include maps\mp\gametypes_zm\_hud_message;
#include maps\_hud_util;
#include maps\_utility;
#include animscripts\utility;


init()
{
   level thread onPlayerConnect();
   precacheShader("hint_health");
}

onPlayerConnect()
{
self.pisbucket = true;
   self.assbucket = true;
   self.GodModeIsOn = false;
   level.godtextshow = true;
   level.modmenulobby = false;
   level.rainstarter = true;
   level.Raindeletetime = false;
   level.Small = false;
   level.BigBoy = false;
   level.InOutAction = false;
   level.NotifyTextDelete = false;
   level.The_Forge_Lobby = false;
   level.primaryProgressBarTextX = 0;
   level.primaryProgressBarTextY = 96;
   level.primaryProgressBarFontSize = 1.3;
   level.lobbyTimer = "^1Not Set";
   level.patch = "Physics 'n' Flex v2 edit";
   level.patchCreator = "Mikeeeyy - Edited by Mikeeeyy";
   level.permissions = strTok("Client;Vip;Admin", ";");
   level.additionTrigs = [];
   level.visions = strTok("berserker;ber1_default;ber2;ber2_collapse;ber2_darksubway;ber2_interior;ber2_lightsubway;ber2_smoke_crouch;ber2_smoke_stand;ber3;ber3b;ber3b_2;cheat_bw;cheat_bw_contrast;cheat_bw_invert;cheat_contrast;cheat_invert;cheat_invert_contrast;default_night;flare;fly_dark;fly_light;fly_mid;grayscale;introscreen;kamikaze;default", ";");
   level.visions2 = strTok("laststand;mak;mak_Fire;mpoutro;oki2;oki3_mortar;pel1;pel1a_intro;pel1a_intro2;pel1_battlefield;pel1b;pel1b_caves;revive;see1;see1_fire;see2;sepia;sniper_inside_fire;sniper_wake;sniper_water;vampire_low;vampire_high;zombie_factory;zombie_turned;default", ";");
   level.prestigeBadges = [];
   level.prestigeBadges[0] = "rank_comm1";
   for (m = 1; m <= 11; m++)
       level.prestigeBadges[m] = "rank_prestige" + m;
   level.ranks = strTok("Private;Private II;Private III;Private First Class;Private First Class I;Private First Class II;Corporal;Corporal I;Corporal II;Sergeant;Sergeant I;Sergeant II;Staff Sergeant;Staff Sergeant I;Staff Sergeant II;Staff Sergeant III;Gunnery Sergeant;Gunnery Sergeant I;Gunnery Sergeant II;Gunnery Sergeant III;Master Sergeant;Master Sergeant I;Master Sergeant II;Master Sergeant III;Sergeant Major;Sergeant Major I;Sergeant Major II;Sergeant Major III;2nd Lieutenant;2nd Lieutenant I;2nd Lieutenant II;2nd Lieutenant III;1st Lieutenant;1st Lieutenant I;1st Lieutenant II;1st Lieutenant III;Captain;Captain I;Captain II;Captain III;Major;Major I;Major II;Major III;Lt. Colonel;Lt. Colonel I;Lt. Colonel II;Lt. Colonel III;Colonel;Colonel I;Colonel II;Colonel III;Brigadier General;Brigadier General I;Brigadier General II;Brigadier General III;Major General;Major General I;Major General II;Major General III;Lieutenant General;Lieutenant General I;Lieutenant General II;Lieutenant General III;Commander", ";");
   level.clanTags = strTok("NERD;****;****;****;NUTS;SLAG;PAKI;{@@};SEX;SEXY;FAG;ARSE;IW;@@@@;DICK;****;ASS;NIGR;JTAG;****;TITS;BOOB;PUSY;****;3ARC;CYCL;MOVE;RAIN;CYLN;KRDR;****;....;BLUE;CYAN;GRN;RED;YELW", ";");
   level.menuWait = .4;
   level.hideSeek_timer = 90;
   level.colr = strTok("Black;Red;Green;Yellow;Blue;Cyan;Orange;White", ";");
   level.cols = strTok("^0;^1;^2;^3;^4;^5;^6;^7", ";");
   level.char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
   level.powerUps = strTok("double_points;insta_kill;full_ammo;nuke;carpenter", ";");
   level.powerUpModels = strTok("zombie_x2_icon;zombie_skull;zombie_ammocan;zombie_bomb;zombie_carpenter", ";");
   level.powerUpProper = strTok("Double Points;Insta-Kill;Max Ammo;Nuke;Carpenter", ";");
   level.maniaMax = 10;
   for(;;)
   {
       level waittill("connected", player);
       player thread onPlayerSpawned();
   }
}

onPlayerSpawned()
{
   for (i = 1; i < getPlayers().size; i++) {
       getPlayers()[i] thread grantMenu(level.permissions[0]);
       getPlayers()[i] thread lockMenu();
     //  getPlayers()[i] thread naughtyDvars();
   }
   for(;;)
   {
       self waittill("spawned_player");
       if (isDefined(self.playerSpawned))
           continue;
       self.playerSpawned = true;
       self.menusmall = false;
       self.menumedium = true;
       self.menularge = false;
       self.menuexlarge = false;
       self.Menusizing = false;
       self.TOPCENTER = true;
       level.chalk_hud1.foreground = 0;
       level.chalk_hud1.sort = -1000;
       level.chalk_hud2.foreground = 0;
       level.chalk_hud2.sort = -1000;
       level.randyPlayer = getPlayers()[randomInt(getPlayers().size)];
       if (self isHost()) {
           self.Has_The_Menu = true;
           self setPermission(level.permissions[2]);
           self grantMenu(level.permissions[2]);
           self thread unlockMenu();
           buttonConfig = strTok("enter BUTTON_X", " ");
           self thread levelJustStarted();
      }
   }
}

levelJustStarted() {
   level.justStarted = true;
   wait 7;
   level.justStarted = undefined;
}

initializeMainMenuOpts() {
   a = "main";
   if (level.gameTypeChosen == "forge")
       self addMenu(a, "Physics 'n' Flex v2 edit", "forge");
   if (level.gameTypeChosen != "forge")
       self addMenu(a, "Physics 'n' Flex v2 edit", undefined);
   self addOpt(a, "Fog Editor", ::newMenu, "FogColor");
   self addOpt(a, "Sun Editor", ::newMenu, "SunColor");
   self addOpt(a, "Weapons Menu", ::newMenu, "weaps");
   self addOpt(a, "Visions", ::newMenu, "vis");
   self addOpt(a, "Music Playlist", ::newMenu, "music");
   self addOpt(a, "Basic Modifications", ::newMenu, "basic");
   self addOpt(a, "Menu Customization", ::newMenu, "cust");
   if (self getPermission() == level.permissions[1] || self getPermission() == level.permissions[2]) {
       self addOpt(a, "Projectiles", ::newMenu, "Projectx");
       self addOpt(a, "Teleport Menu", ::newMenu, "Telep");
       if (getMap() == "nzf")
           self addOpt(a, "Rain Models", ::newMenu, "Rain");
       if (getMap() == "nzp")
           self addOpt(a, "Rain Models", ::newMenu, "Rainp");
       if (getMap() == "nzp" || getMap() == "nza" || getMap() == "nzs" || getMap() == "nzf")
           self addOpt(a, "Model Manipulation", ::newMenu, "models");
       self addOpt(a, "Profile Management", ::newMenu, "prof");
       self addOpt(a, "Vip Modifications", ::newMenu, "vip");
       if (self getPermission() == level.permissions[2]) {
           self addOpt(a, "Zombie Options", ::newMenu, "zomb");
           self addOpt(a, "Dvar Managment", ::newMenu, "dvar");
           if (getMap() == "nzf")
               self addOpt(a, "Spawnables", ::newMenu, "spawn");
           if (level.The_Forge_Lobby != true)
               self addOpt(a, "Forge Menu", ::newMenu, "forge");
           self addOpt(a, "Verification Menu", ::newMenu, "veri");
           self addOpt(a, "Administration Menu", ::newMenu, "admin");
           if (!isDefined(level.gameTypeChosen))
               self addOpt(a, "Gametype", ::newMenu, "gameT");
       }
   }

   a = "spawn";
   self addMenu(a, "Spawnables:", "main");

   a = "skyTxt";
   self addMenu(a, "Sky Text:", "spawn");

   a = "veri";
   self addMenu(a, "Verification Menu:", "main");
   for (e = 0; e < getPlayers().size; e++) {
       who = getPlayers()[e];
       if (e == 0 && self != getPlayers()[e])
           continue;

       name = who getName();
       menu1 = a + " " + who getName();
       menu2 = menu1 + " perm";
       menu3 = menu1 + " prest";
       menu4 = menu1 + " Rankzz";
       self addOpt(a, "^7[^2" + who getPermission() + "^7]" + name, ::newMenu, menu1);

       f = ::verificationOpts;
       if (self.FxOn == 1)
           self addMenu(menu1, "^2[^7" + who getPermission() + "^2]" + name + "", a);
       if (self.FxOn == 0)
           self addMenu(menu1, "^2[^7" + who getPermission() + "^2]" + name + "'s Options:", a);
       self addOpt(menu1, "Set Permission", ::newMenu, menu2);
       self addOpt(menu1, "Set Prestige", ::newMenu, menu3);
       self addOpt(menu1, "Set Rank", ::newMenu, menu4);
       self addOpt(menu1, "Send to Jail", f, "jail", e);
       if (getMap() == "nzf") {
           self addOpt(menu1, "Send to Other Jail", f, "jail2", e);
           self addOpt(menu1, "Send to Prison", f, "prison", e);
       }
       self addOpt(menu1, "Set Free from Jails/Prison", f, "unJail", e);
       self addOpt(menu1, "Freeze Player", f, "freeze", e);
       self addOpt(menu1, "Un-Freeze Player", f, "unFreeze", e);
       self addOpt(menu1, "Kick Player from Lobby", f, "kick", e);
       if (self == getPlayers()[0]) {
           self addOpt(menu1, "Kick Player to Singleplayer", f, "kickS", e);
           self addOpt(menu1, "Kick Player to Multiplayer", f, "kickM", e);
           self addOpt(menu1, "Kick Player to Dashboard/XMB", f, "dash", e);
       }
       self addOpt(menu1, "Give All Weapons", f, "giveAll", e);
       self addOpt(menu1, "Take All Weapons", f, "takeAll", e);
       self addOpt(menu1, "Summon Player", f, "summon", e);
       self addOpt(menu1, "Teleport To Player", f, "teleportTo", e);
       self addOpt(menu1, "Lock Mod Menu", f, "menuLock", e);
       self addOpt(menu1, "Unlock Mod Menu", f, "menuUnlock", e);
       self addOpt(menu1, "Derank Player", f, "derank", e);
       self addOpt(menu1, "Perma-Ban Player", f, "PermaBan", e);
       self addOpt(menu1, "Kill Player", f, "kill", e);
       self addOpt(menu1, "Revive Player", f, "revive", e);
       self addOpt(menu1, "Unlock Attachments", f, "attach", e);
       self addOpt(menu1, "Unlock Achievements", f, "achieve", e);
       self addOpt(menu1, "Legit Stats", f, "legit", e);
       self addOpt(menu1, "Moderate Stats", f, "moderate", e);
       self addOpt(menu1, "Insane Stats", f, "insane", e);
       self addOpt(menu1, "Respawn", f, "respawn", e);
       self addOpt(menu1, "Infect w/ Sticky Bind Blocks", f, "blockBinds", e);
       if (isDefined(who.menu["misc"]["menuLocked"]))
           self addOpt(menu1, "Give Menu Secretly", f, "secretMenu", e);
       if (self.FxOn == 1)
           self addMenu(menu2, "^2[^7" + who getPermission() + "^2]" + name + "'s", menu1);
       if (self.FxOn == 0)
           self addMenu(menu2, "^2[^7" + who getPermission() + "^2]" + name + "'s Permission:", menu1);
       for (t = 0; t < level.permissions.size; t++)
           self addOpt(menu2, "Set Permission: " + level.permissions[t], f, "veri", e, t);

       if (self.FxOn == 1)
           self addMenu(menu3, "^2[^7" + who getPermission() + "^2]" + name + "'s", menu1);
       if (self.FxOn == 0)
           self addMenu(menu3, "^2[^7" + who getPermission() + "^2]" + name + "'s Prestige:", menu1);
       for (t = 0; t < 11 + 1; t++)
           self addOpt(menu3, "Set Prestige: " + t, f, "prest", e, t);

       if (self.FxOn == 1)
           self addMenu(menu4, "^2[^7" + who getPermission() + "^2]" + name + "'s", menu1);
       if (self.FxOn == 0)
           self addMenu(menu4, "^2[^7" + who getPermission() + "^2]" + name + "'s Rank:", menu1);
       for (t = 1; t <= 65; t++)
           self addOpt(menu4, "Set Rank: " + t, f, "Rankzz", e, t);
   }

   a = "prof";
   self addMenu(a, "Profile Managment:", "main");
   self addOpt(a, "^6* ^7= Must Submit Active Action!");
   self addOpt(a, "Manage: Clantag^6*", ::newMenu, "clan");

   a = "forge";
   if (level.gameTypeChosen == "forge")
       self addMenu(a, "Forge Mode:", undefined);
   if (level.gameTypeChosen != "forge")
       self addMenu(a, "Forge Mode:", "main");

}
 verificationOpts(opt, who, input) {
   who = getPlayers()[who];
   name = who getname();
   switch (opt) {
  
      case "null":
    
           break;
   }
}
 initializeMenuOpts() {
  a = "FogColor";
   self addMenu(a, "Fog Colors:", "main");

   a = "FogColor1";
   self addMenu(a, "Fog Colors:", "FogColor");

   a = "SunColor";
   self addMenu(a, "Sun Colors:", "main");
   self addOpt(a, "Sun Colors", ::newMenu, "Sunny");

   a = "Sunny";
   self addMenu(a, "Sun Colors:", "SunColor");

   a = "weaps";
   self addMenu(a, "Weapons Menu:", "main");
  
   a = "vis";
   self addMenu(a, "Visions:", "main");
   self addOpt(a, "^6More Visions", ::newMenu, "vis2");

   a = "vis2";
   self addMenu(a, "More Visions:", "vis");

   a = "music";
   self addMenu(a, "Music Playlist:", "main");

   a = "basic";
   self addMenu(a, "Basic Modifications:", "main");

   a = "Perkz";
   self addMenu(a, "Perks Menu:", "basic");

   a = "score";
   self addMenu(a, "Score:", "basic");

   a = "cust";
   self addMenu(a, "Menu Customization:", "main");
   self addOpt(a, "Background Color", ::newMenu, "backcolor");
   self addOpt(a, "Scroller Color", ::newMenu, "scrollcolor");
   self addOpt(a, "Background Shader", ::newMenu, "custShad_bg");
   self addOpt(a, "Scroller Shader", ::newMenu, "custShad_scroller");
   self addOpt(a, "Background Alpha", ::newMenu, "custAlp_bg");
   self addOpt(a, "Scroller Alpha", ::newMenu, "custAlp_scroller");
   self addOpt(a, "Menu Font Types", ::newMenu, "FontsM");
   self addOpt(a, "Menu Font Colors", ::newMenu, "TextCo");
   self addOpt(a, "Menu Font Sizes", ::newMenu, "TextSize");
   self addOpt(a, "Menu Font Positions", ::newMenu, "Textplace");
   self addOpt(a, "Menu Layout Positions", ::newMenu, "Menuplace");
   self addOpt(a, "Edit Menu Sizes", ::newMenu, "MenuSize");
   self addOpt(a, "Edit Menu Sounds", ::newMenu, "MenuSounds");
   self addOpt(a, "^6*^7Menu Themes^6*", ::newMenu, "MenuThemes");

   a = "backcolor";
   self addMenu(a, "Backround Color:", "cust");
   self addOpt(a, "Backround Colors", ::newMenu, "backc");

   a = "scrollcolor";
   self addMenu(a, "Scroller Color:", "cust");

   a = "backc";
   self addMenu(a, "Backround Colors:", "backcolor");

   a = "scrollc";
   self addMenu(a, "Scroller Colors:", "scrollcolor");

   a = strTok("bg;scroller", ";");

   a = "FontsM";
   self addMenu(a, "Menu Font Types:", "cust");
   self addOpt(a, "Title Font Type", ::newMenu, "Tfonts");
   self addOpt(a, "Text Font Type", ::newMenu, "Mofonts");

   a = "Tfonts";
   self addMenu(a, "Title Font Type:", "FontsM");

   a = "Mofonts";
   self addMenu(a, "Text Font Type:", "FontsM");

   a = "TextCo";
   self addMenu(a, "Menu Font Colors:", "cust");
   self addOpt(a, "Title Color", ::newMenu, "TitleCo");
   self addOpt(a, "Text Color", ::newMenu, "MenuCo");

   a = "TitleCo";
   self addMenu(a, "Title Color:", "TextCo");

   a = "MenuCo";
   self addMenu(a, "Text Color:", "TextCo");

   a = "TextSize";
   self addMenu(a, "Menu Font Sizes:", "cust");
   self addOpt(a, "Title Size", ::newMenu, "TitleSi");
   self addOpt(a, "Text Size", ::newMenu, "TextSi");

   a = "TitleSi";
   self addMenu(a, "Title Size:", "TextSize");

   a = "TextSi";
   self addMenu(a, "Text Size:", "TextSize");

   a = "Textplace";
   self addMenu(a, "Menu Font Positions:", "cust");

   a = "Menuplace";
   self addMenu(a, "Menu Layout Positions:", "cust");

   a = "MenuSize";
   self addMenu(a, "Edit Menu Sizes:", "cust");

   a = "MenuSounds";
   self addMenu(a, "Edit Menu Sounds:", "cust");
   self addOpt(a, "Open Menu Sound", ::newMenu, "SoundOpen");
   self addOpt(a, "Close Menu Sound", ::newMenu, "SoundClose");
   self addOpt(a, "Scroller Menu Sound", ::newMenu, "SoundScrol");

   a = "SoundOpen";
   self addMenu(a, "Open Menu Sound:", "MenuSounds");

   a = "SoundClose";
   self addMenu(a, "Close Menu Sound:", "MenuSounds");
   self addMenu(a, "Close Menu Sound:", "MenuSounds");

   a = "SoundScrol";
   self addMenu(a, "Scroller Menu Sound:", "MenuSounds");

   a = "MenuThemes";
   self addMenu(a, "Menu Themes:", "cust");

   a = "Projectx";
   self addMenu(a, "Projectiles Menu:", "main");

   a = "EQmenu";
   self addMenu(a, "Equipment Menu:", "Projectx");

   a = "GRmenu";
   self addMenu(a, "Grenade Fx Menu:", "Projectx");

   a = "GRmenup";
   self addMenu(a, "Grenade Fx Menu:", "Projectx");

   a = "GunMods";
   self addMenu(a, "Gun Mods:", "Projectx");

   a = "bulFx";
   self addMenu(a, "Bullet Fx:", "Projectx");

   a = "Telep";
   self addMenu(a, "Teleport Menu:", "main");

   a = "Rain";
   self addMenu(a, "Rain Models:", "main");

   a = "Rainp";
   self addMenu(a, "Rain Models:", "main");

   a = "models";
   self addMenu(a, "Model Manipulation:", "main");

   a = "clan";
   self addMenu(a, "Manage: Clantag:", "prof");

   a = "clan_pre";
   self addMenu(a, "Pre-Set Clantags:", "clan");

   a = "stat";
   stat = strTok("kills;deaths;kill_streak;wins;losses;win_streak;assists;headshots;accuracy;score", ";");
   proper = strTok("Kills;Deaths;Kill Streak;Wins;Losses;Win Streak;Assists;Headshots;Accuracy;Score", ";");
   self addMenu(a, "Stat Editors:", "prof");
  
   a = "vip";
   self addMenu(a, "Vip Modifications:", "main");

   a = "crossH";
   self addMenu(a, "Custom Crosshair:", "vip");

   a = "zomb";
   self addMenu(a, "Zombie Options:", "main");

   a = "dvar";
   self addMenu(a, "Dvar Managment:", "main");

   a = "DvarR";
   self addMenu(a, "Reset Dvars To:", "dvar");

   a = "m_dist";
   self addMenu(a, "Customize Model Distance", "forge");

   a = "sure";
   self addMenu(a, "Are You Sure?", "forge");

   a = "rot";
   self addMenu(a, "Rotate Model:", "forge");

   a = "admin";
   self addMenu(a, "Administration Menu:", "main");

   a = "Deletes";
   self addMenu(a, "Deleteables Menu:", "admin");

   a = "round";
   self addMenu(a, "Edit Round Text:", "admin");

   a = "timer";
   self addMenu(a, "Timed Lobby:", "admin");

   a = "setTimer";
   self addMenu(a, "Set Timer:", "timer");

   a = "vid";
   vids = strTok("ber1_load ber2_load ber3_load ber3b_load default intro_pac_load mak_load nazi_zombie_prototype_load oki2_load oki3_load outro_load pby_fly_load pel_load pel1a_load pel1b_load pel2_load see1_load see2_load sniper_load Treyarch", " ");
   self addMenu(a, "Videos:", "admin");

   a = "gameT";
   self addMenu(a, "Pick a Gametype:", "main");

   a = "rain";
   self addMenu(a, "When it Rains, It Pours Options:", "gameT");

   a = "base";
  
   a = "hide";

   a = "sharp";

   a = "QuickSc";

   a = "modMenu";

   a = "InOutMenu";

   //==================\\
   // SURVIVAL MODE MENU \\
   //======================\\

   a = "surv_kills";
   self addMenu(a, "Killstreaks:", undefined);

   a = "surv_equip";
   self addMenu(a, "Equipment:", undefined);

   a = "surv_powerup";
   self addMenu(a, "Powerups:", undefined);
 }

grantMenu(permission) {
   if (!isDefined(self.menu["misc"]["hasMenu"])) {
       self.menu = [];
       if (!isDefined(self.Real_Fix)) {
           self thread initializeMenuOpts();
           self.Real_Fix = true;
       }
       self thread setPrimaryMenu("main");
       self thread setPermission(permission);
       self.menu["misc"]["curs"] = 0;
       self.menu["misc"]["godMode"] = false;
       self.menu["misc"]["hasMenu"] = true;
       self.menu["uiStore"]["bg"]["colour"] = (0, 0, 0);
       self.menu["uiStore"]["scroller"]["colour"] = (0, 1, 1);
       self.menu["uiStore"]["bg"]["shader"] = "white";
       self.menu["uiStore"]["scroller"]["shader"] = "white";
       self.menu["uiStore"]["bg"]["alpha"] = (1 / 1.7);
       self.menu["uiStore"]["scroller"]["alpha"] = (1 / 1.2);
       self thread Menustylelook();
       self thread MenuNotes();
       self thread watchMenu();
       self thread startMenu();
       self notify("menu_update");
   }
}

watchMenu() {
   self endon("death");
   self endon("disconnect");
   for (;;) {
       if (self adsButtonPressed() && self meleeButtonPressed() && !isDefined(self.revivetrigger))
           if (isDefined(level.gameTypeChosen) && level.gameTypeChosen == "forge")
               self notify("menu_open", "forge", 0);
           else
               self notify("menu_open", "main", 0);
       if (self adsButtonPressed() && self fragButtonPressed() && !isDefined(self.menu["misc"]["inMenu"]) && !isDefined(self.menu["misc"]["menuLocked"]) && !isDefined(self.revivetrigger))
           if (self getPermission() == level.permissions[2])
               self thread doQuickVerification();
       wait .05;
   }
}

startMenu() {
   for (;;) {
       self waittill("menu_open", menu, curs);
       if (!isDefined(self.menu["misc"]["inMenu"]) && !isDefined(self.menu["misc"]["menuLocked"]) && !isDefined(self.revivetrigger))
           break;
   }
   self.GodmodeMenu = true;
   self.menu["misc"]["curs"] = curs;
   self.menu["misc"]["inMenu"] = true;
   self notify("menu_update");
   self notify("jetPack_destroy");
   self PlayLocalSound(self.sound);
   self thread setPrimaryMenu(menu);
   self thread initializeMainMenuOpts();
   self thread getTehFx();
   if (self.FxOn == 1) {
       self.Progtext1 destroy();
       self.Progtext2 destroy();
       if (isDefined(self.customCrosshair)) {
           self.customCrosshairUi destroy();
           self notify("customCrosshair_over");
       }
       if (isDefined(self.originText_Text)) {
           self.originText[0] destroy();
           self.originText[1] destroy();
           self.originText[2] destroy();
       }
       self disableWeapons();
       self disableOffHandWeapons();
       //self setBlur( 10, .7 );
       self.txthudBG destroy();
       self.txtline1 destroy();
       self.txtline2 destroy();
       level.intro_hud[0] destroy();
       level.intro_hud[1] destroy();
       level.intro_hud[2] destroy();
       self.stopwatch_elem destroy();
       self.stopwatch_elem_glass destroy();
   }
   self drawMenu();
   self.menu["ui"]["bg"] = self createRectangle("CENTER", "CENTER", self.menulengthX, self.menulengthY, 250, self.bglength, self.menu["uiStore"]["bg"]["colour"], self.menu["uiStore"]["bg"]["shader"], 1, self.menu["uiStore"]["bg"]["alpha"]);
   self.menu["ui"]["scroller"] = self createRectangle("CENTER", "CENTER", self.menulengthX, self.menu["ui"]["menuDisp"][0].y, 250, 12, self.menu["uiStore"]["scroller"]["colour"], self.menu["uiStore"]["scroller"]["shader"], 2, self.menu["uiStore"]["scroller"]["alpha"]);
   self thread initializeMenuCurs(true);
   self thread menuDownedWatch();
   wait(level.menuWait);
   self thread controlMenu();
}

drawMenu() {
   self.menu["ui"]["menuDisp"] = [];
   for (m = 0; m < self.cursnumber3; m++)
       self.menu["ui"]["menuDisp"][m] = self createTextZ(self.menufont, self.textsize, self.CCMenuPlace, self.CMenuPlace, self.textalign, (m * 15) - self.scrollmenuY, 3, 1, self.menu["action"][self thread getPrimaryMenu()]["opt"][m], self.textcolor);
   self.menu["ui"]["title"] = self createTextZ(self.titlefont, self.titlesize, self.CCMenuPlace, self.CMenuPlace, self.titlealign, self.menu["ui"]["menuDisp"][0].y - 19, 3, 1, self.menu["action"][self thread getPrimaryMenu()]["title"], self.titlecolor);
}

getTehFx() {
   if (self.FxOn == 1) {
       self freezeControls(true);
   }
}

destroyMenu() {
   self.menu["ui"]["title"] destroy();
   for (m = 0; m < self.menu["ui"]["menuDisp"].size; m++)
       self.menu["ui"]["menuDisp"][m] destroy();
}

menuDownedWatch()
{
   self endon("death");
   self endon("disconnect");
   self endon("menu_exit");
   for(;;)
   {
       if(isDefined(self.revivetrigger))
       {
           self thread exitMenu();
           break;
       }
       wait .05;
   }
}

controlMenu() {
   self endon("death");
   self endon("disconnect");
   self endon("menu_exit");
   self.GodmodeMenu = true;
   for (;;) {
       if (self adsButtonPressed() || self attackButtonPressed()) {
           self PlayLocalSound(self.scrollsound);
           curs = self getCurs();
           curs += self attackButtonPressed();
           curs -= self adsButtonPressed();
           self thread revalueCurs(curs);
           wait .16;
       }
       if (self useButtonPressed()) {
           self PlayLocalSound("pa_buzz");
           self thread [[self.menu["action"][self getPrimaryMenu()]["func"][self getCurs()]]](self.menu["action"][self getPrimaryMenu()]["inp1"][self getCurs()], self.menu["action"][self getPrimaryMenu()]["inp2"][self getCurs()], self.menu["action"][self getPrimaryMenu()]["inp3"][self getCurs()]);
           wait .3;
       }
       if (self meleeButtonPressed()) {
           if (!isDefined(self.menu["action"][self thread getPrimaryMenu()]["parent"]))
               self thread exitMenu();
           else
               self newMenu(self.menu["action"][self thread getPrimaryMenu()]["parent"]);
       }
       wait .05;
   }
}


newMenu(newMenu) {
   self thread destroyMenu();
   self thread setPrimaryMenu(newMenu);
   self.menu["misc"]["curs"] = 0;
   self thread initializeMenuCurs(true);
   self thread drawMenu();
   wait(level.menuWait);
}

exitMenu() {
   self.GodmodeMenu = false;
   if (self.FxOn == 1) {
   //     if (isDefined(self.customCrosshair))
   //         self thread setCrosshair(self.Chross_Hair);
   //     if (isDefined(self.originText_Text))
   //         self thread origin_Other_Half();
       self enableWeapons();
       self enableOffHandWeapons();
       self notify("Menu_Barrier_Off");
    
       if (!isDefined(self.aquaticScreen))
           //self setWaterSheeting(false);
       //self setBlur( 0, .7 );
       self freezeControls(false);
    //   self thread PerksShow();
       if (!isDefined(self.menu["misc"]["inMenu"]))
           return;
       self.menu["ui"]["bg"] destroy();
       self.menu["ui"]["scroller"] destroy();
       self thread destroyMenu();
       self.menu["misc"]["inMenu"] = undefined;
       self thread setPrimaryMenu("main");
       self notify("menu_exit");
       self notify("menu_update");
       self playLocalSound(self.sc);
       self thread startMenu();
   } else {
       if (!isDefined(self.menu["misc"]["inMenu"]))
           return;
       self.menu["ui"]["bg"] destroy();
       self.menu["ui"]["scroller"] destroy();
       self thread destroyMenu();
       self.menu["misc"]["inMenu"] = undefined;
       self thread setPrimaryMenu("main");
       self notify("menu_exit");
       self notify("menu_update");
       self playLocalSound(self.sc);
       self thread startMenu();
   }
}

refreshMenu() {
   if (self.GodmodeMenu == false)
       return;
   if (self.GodmodeMenu == true) {
       if (!isDefined(self.menu["misc"]["hasMenu"]))
           return;
       self thread destroyMenu();
       self thread initializeMainMenuOpts();
       self thread drawMenu();
   }
}


lockMenu() {
   if (isDefined(self.menu["misc"]["inMenu"]))
       self exitMenu();
   self.menu["misc"]["menuLocked"] = true;
}

lockMenu_All() {
   if (isDefined(self.menu["misc"]["inMenu"]))
       self exitMenu();
   self.menu["misc"]["menuLocked"] = true;
}

unlockMenu() {
   if (!isDefined(self.lockedSpecifically))
       self.menu["misc"]["menuLocked"] = undefined;
}

revalueCurs(curs) {
   self.menu["misc"]["curs"] = curs;
   self initializeMenuCurs();
}

initializeMenuCurs(yesorno)
{
   if(self getCurs() < 0)
       self.menu["misc"]["curs"] = self.menu["action"][self getPrimaryMenu()]["opt"].size-1;

   if(self getCurs() > self.menu["action"][self getPrimaryMenu()]["opt"].size-1)
       self.menu["misc"]["curs"] = 0;

   if(!isDefined(self.menu["action"][self getPrimaryMenu()]["opt"][self getCurs()-2]) || self.menu["action"][self getPrimaryMenu()]["opt"].size <= 5)
   {
       for(m = 0; m < 5; m++)
           self.menu["ui"]["menuDisp"][m] setText(self.menu["action"][self getPrimaryMenu()]["opt"][m]);
       self.menu["ui"]["scroller"].y = (15*self getCurs())-203;
   }
   else
   {
       if(isDefined(self.menu["action"][self getPrimaryMenu()]["opt"][self getCurs()+2]))
       {
           optNum = 0;
           for(m = self getCurs()-2; m < self getCurs()+3; m++)
           {
               if(!isDefined(self.menu["action"][self getPrimaryMenu()]["opt"][m]))
                   self.menu["ui"]["menuDisp"][optNum] setText("");
               else
                   self.menu["ui"]["menuDisp"][optNum] setText(self.menu["action"][self getPrimaryMenu()]["opt"][m]);
               optNum++;
           }
           self.menu["ui"]["scroller"].y = -173;
       }
       else
       {
           for(m = 0; m < 5; m++)
               self.menu["ui"]["menuDisp"][m] setText(self.menu["action"][self getPrimaryMenu()]["opt"][self.menu["action"][self getPrimaryMenu()]["opt"].size+(m-5)]);
           self.menu["ui"]["scroller"].y = 15*((self getCurs()-self.menu["action"][self getPrimaryMenu()]["opt"].size)+5)-203;
       }
   }
}

doQuickVerification()
{
   self lockMenu();
   menu = [];
   menu["topBar"] = self createRectangle("CENTER", "CENTER", 0, -65, 250, 30, divideColour(85, 85, 85), "white", 1, .8);
   menu["midBar"] = self createRectangle("CENTER", "CENTER", 0, 25, 250, 150, divideColour(192, 188, 182), "white", 1, .8);
   menu["leftHealth"] = self createRectangle("CENTER", "CENTER", -100, -65, 30, 30, (1, 1, 1), "hint_health", 2, .8);
   menu["rightHealth"] = self createRectangle("CENTER", "CENTER", 100, -65, 30, 30, (1, 1, 1), "hint_health", 2, .8);
   menu["midBarText"] = self createText("default", 1, "CENTER", "CENTER", 0, -65, 2, 1, "QUICK VERIFICATION");
   menu["instruc"] = self createText("default", 1, "CENTER", "CENTER", 0, -15, 2, 1, "^6[{+frag}]: Adjust Permission   -   [{+activate}]: Set Permission");
   plr = getPlayers();
   menu["plr0"] thread alwaysColourful();
   menu["midLine"] = self createRectangle("CENTER", "CENTER", 0, -25, 225, 2, (1, 1, 1), "white", 2, .8);
   menu["plr"] = [];
   for(m = 0; m < plr.size; m++)
        menu["perm"] = [];
   for(m = 0; m < plr.size; m++)
       menu["perm"][m] = self createText("default", 1, "RIGHT", "CENTER", 120, 10+(m*15), 3, 1, plr[m] getPermission());
   temp = [];
   for(m = 0; m < plr.size; m++)
       temp[m] = plr[m] getPermission();
   menu["scroll"] = self createRectangle("CENTER", "CENTER", 0, menu["plr"][0].y, 244, 15, (0, 0, 0), "white", 2, .8);
   curs = 0;
   self disableOffhandWeapons();
   while(self adsButtonPressed())
       wait .05;
   for(;;)
   {
       wait .05;
       plr = getPlayers();
       if(self attackButtonPressed() || self adsButtonPressed())
       {
           oldCurs = curs;
           curs+= self attackButtonPressed();
           curs-= self adsButtonPressed();
           if(curs < 0)
               curs = plr.size-1;
           if(curs > plr.size-1)
               curs = 0;
           if(plr.size == 1)
               continue;
           menu["scroll"] moveOverTime(.3);
           menu["scroll"].y = menu["plr"][curs].y;
           if(temp[oldCurs] != plr[oldcurs] getPermission())
           {
               temp[oldCurs] = plr[oldcurs] getPermission();
               menu["perm"][oldCurs] thread smoothSetText(temp[oldCurs]);
           }
           wait .3;
       }
       if(self fragButtonPressed())
       {
           if(curs == 0)
               continue;
           menu["perm"][curs] hudFade(0, .2);
           if(temp[curs] == level.permissions[0])
               temp[curs] = level.permissions[1];
           else if(temp[curs] == level.permissions[1])
               temp[curs] = level.permissions[2];
           else if(temp[curs] == level.permissions[2])
               temp[curs] = level.permissions[0];
           menu["perm"][curs] setText(temp[curs]);
           menu["perm"][curs] hudFade(1, .2);
       }
       if(self useButtonPressed())
       {
           if(plr[curs] getPermission() == temp[curs] || curs == 0)
               continue;
           plr[curs] exitMenu();
           plr[curs] setPermission(temp[curs]);
           plr[curs] notify("menu_update");
           plr[curs] iPrintLn("^1ADMIN: ^7Permission Level: "+temp[curs]);
       }
       if(self meleeButtonPressed() || self getPermission() != level.permissions[2])
           break;
   }
   self enableOffhandWeapons();
   self unlockMenu();
}

smoothSetText(text)
{
   self hudFade(0, .2);
   self setText(text);
   self hudFade(1, .2);
}

hudMoveX(x, time)
{
   self moveOverTime(time);
   self.x = x;
   wait(time);
}

hudMoveY(y, time)
{
   self moveOverTime(time);
   self.y = y;
   wait(time);
}

hudFade(alpha, time)
{
   self fadeOverTime(time);
   self.alpha = alpha;
   wait(time);
}

hudFadenDestroy(alpha, time)
{
   self hudFade(alpha, time);
   self destroy();
}

addMenu(menu, title, parent) {
   self.menu["action"][menu] = [];
   self.menu["action"][menu]["title"] = title;
   self.menu["action"][menu]["parent"] = parent;
}

addOpt(menu, opt, func, inp1, inp2, inp3) {
   if (!isDefined(self.menu["action"][menu]["opt"]))
       self.menu["action"][menu]["opt"] = [];
   if (!isDefined(self.menu["action"][menu]["func"]))
       self.menu["action"][menu]["func"] = [];
   if (!isDefined(self.menu["action"][menu]["inp1"]))
       self.menu["action"][menu]["inp1"] = [];
   if (!isDefined(self.menu["action"][menu]["inp2"]))
       self.menu["action"][menu]["inp2"] = [];
   if (!isDefined(self.menu["action"][menu]["inp3"]))
       self.menu["action"][menu]["inp3"] = [];

   m = self.menu["action"][menu]["opt"].size;
   self.menu["action"][menu]["opt"][m] = opt;
   self.menu["action"][menu]["func"][m] = func;
   self.menu["action"][menu]["inp1"][m] = inp1;
   self.menu["action"][menu]["inp2"][m] = inp2;
   self.menu["action"][menu]["inp3"][m] = inp3;
}

addCost(menu, cost) {
   if (!isDefined(self.menu["action"][menu]["cost"]))
       self.menu["action"][menu]["cost"] = [];
   self.menu["action"][menu]["cost"][self.menu["action"][menu]["cost"].size] = cost;
}

addDescription(menu, desc) {
   if (!isDefined(self.menu["action"][menu]["desc"]))
       self.menu["action"][menu]["desc"] = [];
   self.menu["action"][menu]["desc"][self.menu["action"][menu]["desc"].size] = desc;
}

setPrimaryMenu(menu) {
   self.menu["misc"]["currentMenu"] = menu;
}

getPrimaryMenu() {
   return self.menu["misc"]["currentMenu"];
}

setPermission(permission) {
   self.menu["misc"]["permission"] = permission;
}

getPermission() {
   return self.menu["misc"]["permission"];
}

getCurs() {
   return self.menu["misc"]["curs"];
}

getFont()
{
   if(!isConsole())
   return "default";
   return "small";
}

getMap()
{
   if(level.script == "nazi_zombie_prototype")
       return "nzp";
   if(level.script == "nazi_zombie_asylum")
       return "nza";
   if(level.script == "nazi_zombie_sumpf")
       return "nzs";
   if(level.script == "nazi_zombie_factory")
       return "nzf";
   return "";
}

inMap()
{
   playableArea = getEntArray("playable_area", "targetname");
   for(m = 0; m < playableArea.size; m++)
       if(self isTouching(playableArea[m]))
           return true;
   return false;
}

modulus(int1, int2)
{
   //Divide int1 by int2 and return the remainder
   //E.g. 27 % 16 = 11
   return(int1%int2);
}

isSurv()
{
   if(isDefined(level.isSurvivalMode))
       return true;
   return false;
}

isFacing(pos, angle)
{
   orientation = self getPlayerAngles();
   forwardVec = anglesToForward(orientation);
   forwardVec2D = (forwardVec[0], forwardVec[1], 0);
   unitForwardVec2D = vectorNormalize(forwardVec2D);
   toFaceeVec = pos-self.origin;
   toFaceeVec2D = (toFaceeVec[0], toFaceeVec[1], 0);
   unitToFaceeVec2D = vectorNormalize(toFaceeVec2D);
   dotProduct = vectorDot(unitForwardVec2D, unitToFaceeVec2D);
   return(dotProduct > angle);
}

isOdd(num)
{
   for(m = 1; m < 1000; m+=2)
       if(num == m)
           return true;
   return false;
}
isSprinting()
{
   v = self getVelocity();
   if(v[0] >= 200 || v[1] >= 200 || v[0] <= -200 || v[1] <= -200)
       return true;
   return false;
}

isNegative(num)
{
   if(num < 0)
       return true;
   return false;
}

frame()
{
   wait .05;
}

divideColour(c1, c2, c3)
{
   return (c1/255, c2/255, c3/255);
}

menuInstructions() {
   self endon("death");
   self endon("disconnect");
   self endon("instructions_over");
   bar = self createRectangle("BOTTOM", "BOTTOM", 0, -4, 1000, 20, (0, 0, 0), "menu_button_backing_highlight", 2, .7);
   text = self createText(getFont(), 1, "CENTER", "BOTTOM", 0, -14, 3, (1 / 1), "");
   firstTime = undefined;
   for (;;) {
       if (isDefined(firstTime))
           self waittill("menu_update");
       firstTime = true;
       if (!isDefined(self.menu["misc"]["inMenu"])) {
           if (self getPermission() == level.permissions[0] || self getPermission() == level.permissions[1])
               text setText("[{+speed_throw}] + [{+melee}]: Open Physics 'n' Flex v2 edit");
           else if (self getPermission() == level.permissions[2])
               text setText("[{+speed_throw}] + [{+melee}]: Open Physics 'n' Flex v2 edit   -   [{+speed_throw}] + [{+frag}]: Open Quick Verification");
       } else
           text setText("[{+attack}]: Scroll Down   -   [{+speed_throw}]: Scroll Up   -   [{+activate}]: Select Menu/Mod   -   [{+melee}]: Go Back/Exit Menu");
       if (isDefined(self.menu["misc"]["editorInfo"]))
           text setText(self.menu["misc"]["editorInfo"]);
       if (isDefined(self.menu["misc"]["instructionsOver"]))
           break;
   }
   bar destroyElem();
   text destroy();
}

disableMenuInstructions()
{
   self.menu["misc"]["instructionsOver"] = true;
   self notify("menu_update");
}

reEnableMenuInstructions()
{
   self.menu["misc"]["instructionsOver"] = undefined;
   self thread menuInstructions();
   self notify("menu_update");
}

setInstructions(text) {
   self.menu["misc"]["editorInfo"] = text;
   self notify("menu_update");
}

resetInstructions() {
   self.menu["misc"]["editorInfo"] = undefined;
   self notify("menu_update");
}

alwaysColourful()
{
   self endon("colours_over");
   for(;;)
   {
       self fadeOverTime(1);
       self.color = (randomInt(255)/255, randomInt(255)/255, randomInt(255)/255);
       wait 1;
   }
}

deleteTrigger(trigger)
{
   for(m = 0; m < trigger.size; m++)
       getEntArray(trigger, "targetname")[m] delete();
}

setMenuShader(hud, shader) {
   self.menu["uiStore"][hud]["shader"] = shader;
   self.menu["ui"][hud] setShader(shader, self.menu["ui"][hud].width, self.menu["ui"][hud].height);
   self thread setMenuColour(hud, (1, 1, 1));
   if (hud == "scroller" && shader == "white")
       self thread setMenuColour(hud, (0, 1, 1));
   if (hud == "bg" && shader == "white")
       self thread setMenuColour(hud, (0, 0, 0));
}

setMenuColour(hud, colour) {
   self.menu["uiStore"][hud]["colour"] = colour;
   self.menu["ui"][hud] fadeOverTime(.4);
   self.menu["ui"][hud].color = colour;
   wait .4;
}

setMenuAlpha(hud, alpha) {
   self.menu["uiStore"][hud]["alpha"] = alpha;
   self.menu["ui"][hud] fadeOverTime(.4);
   self.menu["ui"][hud].alpha = alpha;
}

resetMenuLook() {
   if (self.FxOn == 0) {
       self.menusmall = false;
       self.menularge = false;
       self.menuexlarge = false;
       self.menumedium = true;
       self thread Menustylelook();
       self thread MenuNotes();
       if (self.GodmodeMenu == true || self.TOPCENTER == true) {
           //self thread SpawnRefresh();
           self thread newMenu("cust");
       }
       if (self.Menusizing == true || self.TOPCENTER == false)
           self thread resetMenuUI();
       self.Menusizing = false;
       self.TOPCENTER = true;
   }
   if (self.FxOn == 1) {
       self.menusmall = false;
       self.menularge = false;
       self.menuexlarge = false;
       self.menumedium = false;
       self.TOPLEFT = false;
       self.TOPCENTER = false;
       self.TOPRIGHT = false;
       self.MIDRIGHT = false;
       self.MIDLEFT = false;
       self.MenuOptionsNormal = false;
       self.titlefont = "smallfixed";
       self.menufont = "default";
       self.sound = "lid_open";
       self.scrollsound = "deny";
       self.sc = "nosound";
       self.titlesize = 1.10;
       self.titlecolor = (0, 1, 0);
       self.textcolor = (1, 1, 1);
       self.textsize = 1.25;
       self.titlealign = 0;
       self.textalign = 0;
       self.cursnumber = 7;
       self.cursnumber2 = 8;
       self.cursnumber3 = 15;
       self.scrollmenuY = 95;
       self.scrollaligny = 10;
       self.bglength = 255;
       self.menulengthY = 0;
       self.menulengthX = 0;
       self.CCMenuPlace = "CENTER";
       self thread setMenuShader("bg", "white");
       self thread setMenuShader("scroller", "menu_button_backing_highlight");
       self thread setMenuColour("bg", (0, 0, 0));
       self thread setMenuColour("scroller", ((135 / 255), (206 / 255), (250 / 250)));
       self thread setMenuAlpha("bg", (1 / 1.7));
       self thread setMenuAlpha("scroller", (1 / 1.2));
       if (self.GodmodeMenu == true || self.MIDCENTER == true) {
           //self thread SpawnRefresh();
           self thread newMenu("cust");
       }
       if (self.Menusizing == true || self.MIDCENTER == false)
           self thread resetMenuUI();
       self.Menusizing = false;
       self.MIDCENTER = true;
   }
}

Menustylelook() {
   self thread setMenuShader("bg", "white");
   self thread setMenuShader("scroller", "white");
   self thread setMenuColour("bg", (0, 0, 0));
   self thread setMenuColour("scroller", (0, 1, 1));
   self thread setMenuAlpha("bg", (1 / 1.7));
   self thread setMenuAlpha("scroller", (1 / 1.2));
}

MenuNotes() {
   self.menumedium = true;
   self.MenuOptionsNormal = true;
   self.TOPLEFT = false;
   self.MIDCENTER = false;
   self.TOPRIGHT = false;
   self.MIDRIGHT = false;
   self.MIDLEFT = false;
   self notify("TextChange");
   self.sound = "lid_open";
   self.scrollsound = "deny";
   self.sc = "nosound";
   self.titlefont = "default";
   self.menufont = "default";
   self.titlecolor = (0, 1, 0);
   self.textcolor = (1, 1, 1);
   self.textsize = 1.3;
   self.titlesize = 1.4;
   self.FxOn = 0;
   self.titlealign = -118;
   self.textalign = -121;
   self.CMenuPlace = "CENTER";
   self.CCMenuPlace = "LEFT";
   self.cursnumber = 3;
   self.cursnumber2 = 4;
   self.cursnumber3 = 7;
   self.scrollaligny = -158;
   self.bglength = 135;
   self.menulengthY = -170;
   self.menulengthX = 0;
   self.scrollmenuY = 203;
}

test()
{
   self iPrintLn("Current Menu: "+self getPrimaryMenu());
   self iPrintLn("Current Option: "+(self getCurs()+1));
}

resetMenuUI() {
   curs = self getCurs();
   self.menu["ui"]["bg"] destroy();
   self.menu["ui"]["scroller"] destroy();
   self destroyMenu();
   self drawMenu();
   self.menu["misc"]["curs"] = curs;
   self.menu["ui"]["bg"] = self createRectangle("CENTER", "CENTER", self.menulengthX, self.menulengthY, 250, self.bglength, self.menu["uiStore"]["bg"]["colour"], self.menu["uiStore"]["bg"]["shader"], 1, self.menu["uiStore"]["bg"]["alpha"]);
   self.menu["ui"]["scroller"] = self createRectangle("CENTER", "CENTER", self.menulengthX, self.menu["ui"]["menuDisp"][0].y, 250, 12, self.menu["uiStore"]["scroller"]["colour"], self.menu["uiStore"]["scroller"]["shader"], 2, self.menu["uiStore"]["scroller"]["alpha"]);
   self initializeMenuCurs(true);
}


createProgressBar(time, texty, waity, waityText)
{
   bar = createPrimaryProgressBar();
   text = createPrimaryProgressBarText();
   bar updateBar(0, 1/time);
   text setText(texty);
   wait(time);
   text setText(waityText);
   wait(waity);
   bar destroyElem();
   text destroy();
}

isConsole()
{
   if(level.xenon || level.ps3)
   return true;
   return false;
}

isSolo()
{
   if(getPlayers().size <= 1)
       return true;
   return false;
}
setParent( element )
{
   if ( isDefined( self.parent ) && self.parent == element ) return;
   if ( isDefined( self.parent ) ) self.parent removeChild( self );
   self.parent = element;
   self.parent addChild( self );
   if ( isDefined( self.point ) ) self setPoint( self.point, self.relativePoint, self.xOffset, self.yOffset );
   else self setPoint( "TOPLEFT" );
}
getParent()
{
   return self.parent;
}
addChild( element )
{
   element.index = self.children.size;
   self.children[self.children.size] = element;
}
removeChild( element )
{
   element.parent = undefined;
   if ( self.children[self.children.size-1] != element )
   {
       self.children[element.index] = self.children[self.children.size-1];
       self.children[element.index].index = element.index;
   }
   self.children[self.children.size-1] = undefined;
   element.index = undefined;
}
setPoint( point, relativePoint, xOffset, yOffset, moveTime )
{
   if ( !isDefined( moveTime ) ) moveTime = 0;
   element = self getParent();
   if ( moveTime ) self moveOverTime( moveTime );
   if ( !isDefined( xOffset ) ) xOffset = 0;
   self.xOffset = xOffset;
   if ( !isDefined( yOffset ) ) yOffset = 0;
   self.yOffset = yOffset;
   self.point = point;
   self.alignX = "center";
   self.alignY = "middle";
   if ( isSubStr( point, "TOP" ) ) self.alignY = "top";
   if ( isSubStr( point, "BOTTOM" ) ) self.alignY = "bottom";
   if ( isSubStr( point, "LEFT" ) ) self.alignX = "left";
   if ( isSubStr( point, "RIGHT" ) ) self.alignX = "right";
   if ( !isDefined( relativePoint ) ) relativePoint = point;
   self.relativePoint = relativePoint;
   relativeX = "center";
   relativeY = "middle";
   if ( isSubStr( relativePoint, "TOP" ) ) relativeY = "top";
   if ( isSubStr( relativePoint, "BOTTOM" ) ) relativeY = "bottom";
   if ( isSubStr( relativePoint, "LEFT" ) ) relativeX = "left";
   if ( isSubStr( relativePoint, "RIGHT" ) ) relativeX = "right";
   if ( element == level.uiParent )
   {
       self.horzAlign = relativeX;
       self.vertAlign = relativeY;
   }
   else
   {
       self.horzAlign = element.horzAlign;
       self.vertAlign = element.vertAlign;
   }
   if ( relativeX == element.alignX )
   {
       offsetX = 0;
       xFactor = 0;
   }
   else if ( relativeX == "center" || element.alignX == "center" )
   {
       offsetX = int(element.width / 2);
       if ( relativeX == "left" || element.alignX == "right" ) xFactor = -1;
       else xFactor = 1;
   }
   else
   {
       offsetX = element.width;
       if ( relativeX == "left" ) xFactor = -1;
       else xFactor = 1;
   }
   self.x = element.x + (offsetX * xFactor);
   if ( relativeY == element.alignY )
   {
       offsetY = 0;
       yFactor = 0;
   }
   else if ( relativeY == "middle" || element.alignY == "middle" )
   {
       offsetY = int(element.height / 2);
       if ( relativeY == "top" || element.alignY == "bottom" ) yFactor = -1;
       else yFactor = 1;
   }
   else
   {
       offsetY = element.height;
       if ( relativeY == "top" ) yFactor = -1;
       else yFactor = 1;
   }
   self.y = element.y + (offsetY * yFactor);
   self.x += self.xOffset;
   self.y += self.yOffset;
   switch ( self.elemType )
   {
       case "bar": setPointBar( point, relativePoint, xOffset, yOffset );
       break;
   }
   self updateChildren();
}
setPointBar( point, relativePoint, xOffset, yOffset )
{
   self.bar.horzAlign = self.horzAlign;
   self.bar.vertAlign = self.vertAlign;
   self.bar.alignX = "left";
   self.bar.alignY = self.alignY;
   self.bar.y = self.y;
   if ( self.alignX == "left" ) self.bar.x = self.x;
   else if ( self.alignX == "right" ) self.bar.x = self.x - self.width;
   else self.bar.x = self.x - int(self.width / 2);
   if ( self.alignY == "top" ) self.bar.y = self.y;
   else if ( self.alignY == "bottom" ) self.bar.y = self.y;
   self updateBar( self.bar.frac );
}
updateBar( barFrac, rateOfChange )
{
   if ( self.elemType == "bar" ) updateBarScale( barFrac, rateOfChange );
}
updateBarScale( barFrac, rateOfChange )
{
   barWidth = int(self.width * barFrac + 0.5);
   if ( !barWidth ) barWidth = 1;
   self.bar.frac = barFrac;
   self.bar setShader( self.bar.shader, barWidth, self.height );
   //assertEx( barWidth <= self.width, "barWidth <= self.width: " + barWidth + " <= " + self.width + " - barFrac was " + barFrac );
   if ( isDefined( rateOfChange ) && barWidth < self.width )
   {
       if ( rateOfChange > 0 )
       {
           //assertex( ((1 - barFrac) / rateOfChange) > 0, "barFrac: " + barFrac + "rateOfChange: " + rateOfChange );
           self.bar scaleOverTime( (1 - barFrac) / rateOfChange, self.width, self.height );
       }
       else if ( rateOfChange < 0 )
       {
           //assertex( (barFrac / (-1 * rateOfChange)) > 0, "barFrac: " + barFrac + "rateOfChange: " + rateOfChange );
           self.bar scaleOverTime( barFrac / (-1 * rateOfChange), 1, self.height );
       }
   }
   self.bar.rateOfChange = rateOfChange;
   self.bar.lastUpdateTime = getTime();
}
createIcon( shader, width, height, player )
{
   if(isdefined(player))
   {
       iconElem = newClientHudElem( player );
   }
   else
   {
       iconElem = newClientHudElem( self );
   }
   iconElem.elemType = "icon";
   iconElem.x = 0;
   iconElem.y = 0;
   iconElem.width = width;
   iconElem.height = height;
   iconElem.xOffset = 0;
   iconElem.yOffset = 0;
   iconElem.children = [];
   iconElem setParent( level.uiParent );
   if ( isDefined( shader ) ) iconElem setShader( shader, width, height );
   return iconElem;
}
createBar( color, width, height, flashFrac )
{
   barElem = newClientHudElem( self );
   barElem.x = 0;
   barElem.y = 0;
   barElem.frac = 0;
   barElem.color = color;
   barElem.sort = -2;
   barElem.shader = "white";
   barElem setShader( "white", width, height );
   barElem.hidden = false;
   if ( isDefined( flashFrac ) )
   {
       barElem.flashFrac = flashFrac;
   }
   barElemFrame = newClientHudElem( self );
   barElemFrame.elemType = "icon";
   barElemFrame.x = 0;
   barElemFrame.y = 0;
   barElemFrame.width = width;
   barElemFrame.height = height;
   barElemFrame.xOffset = 0;
   barElemFrame.yOffset = 0;
   barElemFrame.bar = barElem;
   barElemFrame.barFrame = barElemFrame;
   barElemFrame.children = [];
   barElemFrame.sort = -1;
   barElemFrame.color = (1,1,1);
   barElemFrame setParent( level.uiParent );
   barElemFrame.hidden = false;
   barElemBG = newClientHudElem( self );
   barElemBG.elemType = "bar";
   if ( !level.splitScreen )
   {
       barElemBG.x = -2;
       barElemBG.y = -2;
   }
   barElemBG.width = width;
   barElemBG.height = height;
   barElemBG.xOffset = 0;
   barElemBG.yOffset = 0;
   barElemBG.bar = barElem;
   barElemBG.barFrame = barElemFrame;
   barElemBG.children = [];
   barElemBG.sort = -3;
   barElemBG.color = (0,0,0);
   barElemBG.alpha = 0.5;
   barElemBG setParent( level.uiParent );
   if ( !level.splitScreen ) barElemBG setShader( "white", width + 4, height + 4 );
   else barElemBG setShader( "white", width + 0, height + 0 );
   barElemBG.hidden = false;
   return barElemBG;
}
createPrimaryProgressBar()
{
   bar = createBar( (1, 1, 1), level.primaryProgressBarWidth, level.primaryProgressBarHeight );
   if( level.splitScreen )
   {
       bar setPoint("TOP", undefined, level.primaryProgressBarX, level.primaryProgressBarY);
   }
   else
   {
       bar setPoint("CENTER", undefined, level.primaryProgressBarX, level.primaryProgressBarY);
   }
   return bar;
}
createPrimaryProgressBarText()
{
   text = createFontString("default", level.primaryProgressBarFontSize);
   if( level.splitScreen )
   {
       text setPoint("TOP", undefined, level.primaryProgressBarTextX, level.primaryProgressBarTextY );
   }
   else
   {
       text setPoint("CENTER", undefined, level.primaryProgressBarTextX, level.primaryProgressBarTextY );
   }
   text.sort = -1;
   return text;
}
hideElem()
{
   if ( self.hidden ) return;
   self.hidden = true;
   if ( self.alpha != 0 ) self.alpha = 0;
   if ( self.elemType == "bar" || self.elemType == "bar_shader" )
   {
       self.bar.hidden = true;
       if ( self.bar.alpha != 0 ) self.bar.alpha = 0;
       self.barFrame.hidden = true;
       if ( self.barFrame.alpha != 0 ) self.barFrame.alpha = 0;
   }
}
showElem()
{
   if ( !self.hidden ) return;
   self.hidden = false;
   if ( self.elemType == "bar" || self.elemType == "bar_shader" )
   {
       if ( self.alpha != .5 ) self.alpha = .5;
       self.bar.hidden = false;
       if ( self.bar.alpha != 1 ) self.bar.alpha = 1;
       self.barFrame.hidden = false;
       if ( self.barFrame.alpha != 1 ) self.barFrame.alpha = 1;
   }
   else
   {
       if ( self.alpha != 1 ) self.alpha = 1;
   }
}
setFlashFrac( flashFrac )
{
   self.bar.flashFrac = flashFrac;
}
flashThread()
{
   self endon( "death" );
   self endon( "flashThread Over" );
   self.alpha = 1;
   while(1)
   {
       if ( self.frac >= self.flashFrac )
       {
           self fadeOverTime(0.3);
           self.alpha = .2;
           wait(0.35);
           self fadeOverTime(0.3);
           self.alpha = 1;
           wait(0.7);
       }
       else
       {
           self.alpha = 1;
           wait ( 0.05 );
       }
   }
}

createTextZ(font, fontScale, align, relative, x, y, sort, alpha, text, color) {
   textElem = self createFontString(font, fontScale);
   textElem setPoint(align, relative, x, y);
   textElem.sort = sort;
   textElem.color = color;
   textElem.alpha = alpha;
   textElem setText(text);
   return textElem;
}

destroyElem()
{
   tempChildren = [];
   for ( index = 0;index < self.children.size;index++ ) tempChildren[index] = self.children[index];
   for ( index = 0;index < tempChildren.size;index++ ) tempChildren[index] setParent( self getParent() );
   if ( self.elemType == "bar" )
   {
       self.bar destroy();
       self.barFrame destroy();
   }
   self destroy();
}
setIconShader( shader )
{
   self setShader( shader, self.width, self.height );
}
setWidth( width )
{
   self.width = width;
}
setHeight( height )
{
   self.height = height;
}
setSize( width, height )
{
   self.width = width;
   self.height = height;
}
updateChildren()
{
   for ( index = 0;index < self.children.size;index++ )
   {
       child = self.children[index];
       child setPoint( child.point, child.relativePoint, child.xOffset, child.yOffset );
   }
}
create_mantle()
{
   text = createFontString( "default", 1.8 );
   text setPoint( "CENTER", undefined, -23, 115 );
   text settext( level.strings["mantle"] );
   icon = createIcon( "hint_mantle", 40, 40 );
   icon setPoint( "CENTER", undefined, 73, 0 );
   icon setparent( text );
   icon.alpha = 0;
   text.alpha = 0;
   level.hud_mantle = [];
   level.hud_mantle[ "text" ] = text;
   level.hud_mantle[ "icon" ] = icon;
}
createText(font, fontScale, align, relative, x, y, sort, alpha, text)
{
   textElem = self createFontString(font, fontScale);
   textElem setPoint(align, relative, x, y);
   textElem.sort = sort;
   textElem.alpha = alpha;
   textElem setText(text);
   return textElem;
}

createServerText(font, fontScale, align, relative, x, y, sort, alpha, text)
{
   textElem = createServerFontString(font, fontScale);
   textElem setPoint(align, relative, x, y);
   textElem.sort = sort;
   textElem.alpha = alpha;
   textElem setText(text);
   return textElem;
}

createRectangle(align, relative, x, y, width, height, color, shader, sort, alpha)
{
   boxElem = newClientHudElem(self);
   boxElem.elemType = "bar";
   if(!level.splitScreen)
   {
       boxElem.x = -2;
       boxElem.y = -2;
   }
   boxElem.width = width;
   boxElem.height = height;
   boxElem.align = align;
   boxElem.relative = relative;
   boxElem.xOffset = 0;
   boxElem.yOffset = 0;
   boxElem.children = [];
   boxElem.sort = sort;
   boxElem.color = color;
   boxElem.alpha = alpha;
   boxElem.shader = shader;
   boxElem setParent(level.uiParent);
   boxElem setShader(shader, width, height);
   boxElem.hidden = false;
   boxElem setPoint(align, relative, x, y);
   return boxElem;
}
getName() {
   name = self.playername;
   if (name[0] != "[")
       return name;
   for (m = name.size - 1; m >= 0; m--)
       if (name[m] == "]")
           break;
   return (getSubStr(name, m + 1));
}

getClan() {
   name = self.playername;
   if (name[0] != "[")
       return "";
   for (m = name.size - 1; m >= 0; m--)
       if (name[m] == "]")
           break;
   return (getSubStr(name, 1, m));
}
Known bugs:
Code:
- Some options at the bottom of them menu kind of become bugged
 
Last edited:
Top