Post: Please check my modmenu!
07-13-2015, 10:33 PM #1
(adsbygoogle = window.adsbygoogle || []).push({}); I started a ModMenu in GSC studio. I have used the Shark's Menu Base. I don't now why when I inject the ModMenu in the game, when I start a match it crash when the game it's loading. Please check the source and find the error. I need help!



#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_rank;

//BO2 GSC Menu Base By Shark

init()
{
level thread onplayerconnect();
}

onplayerconnect()
{
for(;Winky Winky
{
level waittill( "connecting", player );
if(player isHost())
player.status = "Host";
else
player.status = "Unverified";

player thread onplayerspawned();
}
}

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

self.MenuInit = false;

for(;Winky Winky
{
self waittill( "spawned_player" );
self welcomeMessage();
if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
{
if (!self.MenuInit)
{
self.MenuInit = true;
self thread MenuInit();
self thread closeMenuOnDeath();
}
}
}
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
hud = self createFontString(font, fontScale);
hud setText(text);
hud.x = x;
hud.y = y;
hud.color = color;
hud.alpha = alpha;
hud.glowColor = glowColor;
hud.glowAlpha = glowAlpha;
hud.sort = sort;
hud.alpha = alpha;
return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
hud = newClientHudElem(self);
hud.elemtype = "icon";
hud.color = color;
hud.alpha = alpha;
hud.sort = sort;
hud.children = [];
hud setParent(level.uiParent);
hud setShader(shader, width, height);
hud.x = x;
hud.y = y;
return hud;
}

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 "^5CoHost";
if (status == "Admin")
return "^1Admin";
if (status == "VIP")
return "^4VIP";
if (status == "Verified")
return "^3Verified";
else
return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
if( player.status != verlevel)
{
player.status = verlevel;

self.menu.title destroy();
self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

if(player.status == "Unverified")
self thread destroyMenu(player);

player suicide();
self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
}
else
{
self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
}
}

changeVerification(player, verlevel)
{
player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}

welcomeMessage()
{
notifyData = spawnstruct();
notifyData.titleText = "Welcome " + self.name + " To (Alpha)"; //Line 1
notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
notifyData.duration = 5; //Change Duration
notifyData.font = "objective"; //font
notifyData.hideWhenInMenu = false;
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

CreateMenu()
{
self add_menu("Main Menu", undefined, "Unverified");
self add_option("Main Menu", "Main Mods Menu", ::submenu, "MainModsMenu", "Main Mods Menu");
self add_option("Main Menu", "Fun Menu", ::submenu, "FunMenu", "Fun Menu");
self add_option("Main Menu", "Game Settings Menu", ::submenu, "GameSettingsMenu", "Game Settings Menu");
self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");

self add_menu("MainModsMenu", "Main Menu", "Admin");
self add_option("SubMenu1", "God Mod", ::Toggle_God);
self add_option("SubMenu1", "Unlimited Ammo", ::Toggle_unlimitedammo);
self add_option("SubMenu1", "MultiJump", ::Toggle_Multijump);
self add_option("SubMenu1", "Speed X2", ::Toggle_SpeedX2);
self add_option("SubMenu1", "All Perks", ::doPerks);
self add_option("SubMenu1", "Cleark Perks", ::clearkperkslel);
self add_option("SubMenu1", "Clone Player", ::cloneyourself);
self add_option("SubMenu1", "Invisible", ::Toggle_Hideeeeee);
self add_option("SubMenu1", "Pro mod", ::ToggleFOV);
self add_option("SubMenu1", "Gun Left Side", ::ToggleLeft);
self add_option("SubMenu1", "Teleport", ::doTeleport);
self add_option("SubMenu1", "Change Class InGame", ::ChangeClass);

self add_menu("FunMenu", "Main Menu", "VIP");
self add_option("FunMenu", "Option 1");
self add_option("FunMenu", "Option 2");
self add_option("FunMenu", "Option 3");

self add_menu("GameSettingsMenu", "Main Menu", "Verified");
self add_option("GameSettingsMenu", "Option 1");
self add_option("GameSettingsMenu", "Option 2");
self add_option("GameSettingsMenu", "Option 3");

self add_menu("PlayersMenu", "Main Menu", "CoHost");
for (i = 0; i < 12; i++)
{ self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
self.menu.menucount["PlayersMenu"] = 0;
for (i = 0; i < 12; i++)
{
player = level.players;
name = player.name;

playersizefixed = level.players.size - 1;
if(self.menu.curs["PlayersMenu"] > playersizefixed)
{
self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
self.menu.curs["PlayersMenu"] = playersizefixed;
}

self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);

self add_menu_alt("pOpt " + i, "PlayersMenu");
self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
}
}

add_menu_alt(Menu, prevmenu)
{
self.menu.getmenu[Menu] = Menu;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
self.menu.status[Menu] = status;
self.menu.getmenu[Menu] = Menu;
self.menu.scrollerpos[Menu] = 0;
self.menu.curs[Menu] = 0;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
Menu = self.menu.getmenu[Menu];
Num = self.menu.menucount[Menu];
self.menu.menuopt[Menu][Num] = Text;
self.menu.menufunc[Menu][Num] = Func;
self.menu.menuinput[Menu][Num] = arg1;
self.menu.menuinput1[Menu][Num] = arg2;
self.menu.menucount[Menu] += 1;
}

openMenu()
{
self freezeControls( false );
self StoreText("Main Menu", "Main Menu");

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0.65;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -50;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
self.menu.open = true;
}

closeMenu()
{
for(i = 0; i < self.menu.opt.size; i++)
{
self.menu.opt FadeOverTime(0.3);
self.menu.opt.alpha = 0;
}

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0;

self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 0;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -550;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = -500;
self.menu.open = false;
}

destroyMenu(player)
{
player.MenuInit = false;
closeMenu();

wait 0.3;

for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
{ player.menu.opt destroy(); }

player.menu.background destroy();
player.menu.scroller destroy();
player.menu.line destroy();
player.menu.title destroy();
player notify( "destroyMenu" );
}

closeMenuOnDeath()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");
for (;Winky Winky
{
self waittill("death");
self.menu.closeondeath = true;
self submenu("Main Menu", "Main Menu");
closeMenu();
self.menu.closeondeath = false;
}
}

StoreShaders()
{
self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
self.menu.currentmenu = menu;
self.menu.title destroy();
self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

for(i=0; i < self.menu.menuopt[menu].size; i++)
{
self.menu.opt destroy();
self.menu.opt = drawText(self.menu.menuopt[menu], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
self.menu.opt FadeOverTime(0.3);
self.menu.opt.alpha = 1;
}
}

MenuInit()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");

self.menu = spawnstruct();
self.toggles = spawnstruct();

self.menu.open = false;

self StoreShaders();
self CreateMenu();

for(;Winky Winky
{
if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
{
openMenu();
}
if(self.menu.open)
{
if(self usebuttonpressed())
{
if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
{
self submenu(self.menu.previousmenu[self.menu.currentmenu]);
}
else
{
closeMenu();
}
wait 0.2;
}
if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
{
self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
}
if(self jumpbuttonpressed())
{
self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
wait 0.2;
}
}
wait 0.05;
}
}

submenu(input, title)
{
if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
{
for(i=0; i < self.menu.opt.size; i++)
{ self.menu.opt destroy(); }

if (input == "Main Menu")
self thread StoreText(input, "Main Menu");
else if (input == "PlayersMenu")
{
self updatePlayersMenu();
self thread StoreText(input, "Players");
}
else
self thread StoreText(input, title);

self.CurMenu = input;

self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
self.menu.curs[input] = self.menu.scrollerpos[input];

if (!self.menu.closeondeath)
{
self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
}
}
else
{
self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
}
}

//Functions

Toggle_God()
{
if(self.God==false)
{
self iPrintln("GodMod : ^2ON");
self enableInvulnerability();
self.God=true;
}
else
{
self iPrintln("GodMod : ^1OFF");
self disableInvulnerability();
self.God=false;
}
}

Toggle_unlimitedammo()
{
if(self.unlimitedammo==0)
{
self.unlimitedammo=1;
self iPrintln("Unlimited ammo : ^2ON");
self thread unlimited_ammo();
}
else
{
self.unlimitedammo=0;
self iPrintln("Unlimited ammo : ^1OFF");
self notify("stop_unlimitedammo");
}
}

Toggle_Multijump()
{
if(self.MultiJump==0)
{
self thread onPlayerMultijump();
self.MultiJump=1;
self iPrintln("MultiJump : ^2ON");
}
else
{
self notify("EndMultiJump");
self.MultiJump=0;
self iPrintln("MultiJump : ^1OFF");
}
}

Toggle_SpeedX2()
{
if(self.SpeedX2==0)
{
self.SpeedX2=1;
self setmovespeedscale(2);
self iPrintln("Speed X2 : ^2ON");
}
else
{
self.SpeedX2=0;
self setmovespeedscale(1);
self iPrintln("Speed X2 : ^1OFF");
}
}

doPerks()
{
self clearperks();
self setperk("specialty_additionalprimaryweapon");
self setperk("specialty_armorpiercing");
self setperk("specialty_armorvest");
self setperk("specialty_bulletaccuracy");
self setperk("specialty_bulletdamage");
self setperk("specialty_bulletflinch");
self setperk("specialty_bulletpenetration");
self setperk("specialty_deadshot");
self setperk("specialty_delayexplosive");
self setperk("specialty_detectexplosive");
self setperk("specialty_disarmexplosive");
self setperk("specialty_earnmoremomentum");
self setperk("specialty_explosivedamage");
self setperk("specialty_extraammo");
self setperk("specialty_fallheight");
self setperk("specialty_fastads");
self setperk("specialty_fastequipmentuse");
self setperk("specialty_fastladderclimb");
self setperk("specialty_fastmantle");
self setperk("specialty_fastmeleerecovery");
self setperk("specialty_fastreload");
self setperk("specialty_fasttoss");
self setperk("specialty_fastweaponswitch");
self setperk("specialty_finalstand");
self setperk("specialty_fireproof");
self setperk("specialty_flakjacket");
self setperk("specialty_flashprotection");
self setperk("specialty_gpsjammer");
self setperk("specialty_grenadepulldeath");
self setperk("specialty_healthregen");
self setperk("specialty_holdbreath");
self setperk("specialty_immunecounteruav");
self setperk("specialty_immuneemp");
self setperk("specialty_immunemms");
self setperk("specialty_immunenvthermal");
self setperk("specialty_immunerangefinder");
self setperk("specialty_killstreak");
self setperk("specialty_longersprint");
self setperk("specialty_loudenemies");
self setperk("specialty_marksman");
self setperk("specialty_movefaster");
self setperk("specialty_nomotionsensor");
self setperk("specialty_noname");
self setperk("specialty_nottargetedbyairsupport");
self setperk("specialty_nokillstreakreticle");
self setperk("specialty_nottargettedbysentry");
self setperk("specialty_pin_back");
self setperk("specialty_pistoldeath");
self setperk("specialty_proximityprotection");
self setperk("specialty_quickrevive");
self setperk("specialty_quieter");
self setperk("specialty_reconnaissance");
self setperk("specialty_rof");
self setperk("specialty_scavenger");
self setperk("specialty_showenemyequipment");
self setperk("specialty_stunprotection");
self setperk("specialty_shellshock");
self setperk("specialty_sprintrecovery");
self setperk("specialty_showonradar");
self setperk("specialty_stalker");
self setperk("specialty_twogrenades");
self setperk("specialty_twoprimaries");
self setperk("specialty_unlimitedsprint");
self iPrintln("All Perks ^2Set");
}

clearkperkslel()
{
self iPrintln("^2Clear all perks!");
self clearperks();
}

cloneyourself()
{
self iPrintln("^2Duuuuh You Have A Fucking Clown!");
self cloneplayer(1);
}

Toggle_Hideeeeee()
{
if(self.Hideeeeee==0)
{
self.Hideeeeee=1;
self iPrintln("Invisible : ^2ON");
self hide();
}
else
{
self.Hideeeeee=0;
self iPrintln("Invisible : ^1OFF");
self show();
}
}

ToggleFOV()
{
if(self.fov == true)
{
self iPrintln("FOV : ^2ON");
setDvar("cg_fov", "110");
self.fov = false;
}
else
{
self iPrintln("FOV : ^1OFF");
setDvar("cg_fov", "65");
self.fov = true;
}
}

ToggleLeft()
{
if(self.LG == true)
{
self iPrintln("Left Sided Gun : ^2ON");
setDvar("cg_gun_y", "7");
self.LG = false;
}
else
{
self iPrintln("Left Sided Gun : ^1OFF");
setDvar("cg_gun_y", "0");
self.LG = true;
}
}

doTeleport()
{
self iPrintln("^2Ready for Teleport!");
self beginLocationSelection( "map_mortar_selector" );
self.selectingLocation = 1;
self waittill( "confirm_location", location );
newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
self SetOrigin( newLocation );
self endLocationSelection();
self.selectingLocation = undefined;
self iPrintLn("Teleported!");
}

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

self iPrintln("^2Have Fun Changing class!");
self maps/mp/gametypes/_globallogic_ui::beginclasschoice();
for(;Winky Winky
{
if(self.pers[ "changed_class" ])
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait 0.05;
}
}

(adsbygoogle = window.adsbygoogle || []).push({});
07-14-2015, 12:13 AM #2
Its pretty obvious on what you are missing sir... Here it is fixed

    
#include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_utility;
#include maps/mp/gametypes/_rank;

//BO2 GSC Menu Base By Shark

init()
{
level thread onplayerconnect();
}

onplayerconnect()
{
for(;Winky Winky
{
level waittill( "connecting", player );
if(player isHost())
player.status = "Host";
else
player.status = "Unverified";

player thread onplayerspawned();
}
}

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

isFirstSpawn = true;
self.MenuInit = false;

for(;Winky Winky
{
self waittill( "spawned_player" );
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
self welcomeMessage();
if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
{
if (!self.MenuInit)
{
self.MenuInit = true;
self thread MenuInit();
self thread closeMenuOnDeath();
}
}
}
}
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
hud = self createFontString(font, fontScale);
hud setText(text);
hud.x = x;
hud.y = y;
hud.color = color;
hud.alpha = alpha;
hud.glowColor = glowColor;
hud.glowAlpha = glowAlpha;
hud.sort = sort;
hud.alpha = alpha;
return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
hud = newClientHudElem(self);
hud.elemtype = "icon";
hud.color = color;
hud.alpha = alpha;
hud.sort = sort;
hud.children = [];
hud setParent(level.uiParent);
hud setShader(shader, width, height);
hud.x = x;
hud.y = y;
return hud;
}

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 "^5CoHost";
if (status == "Admin")
return "^1Admin";
if (status == "VIP")
return "^4VIP";
if (status == "Verified")
return "^3Verified";
else
return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
if( player.status != verlevel)
{
player.status = verlevel;

self.menu.title destroy();
self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

if(player.status == "Unverified")
self thread destroyMenu(player);

player suicide();
self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
}
else
{
self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
}
}

changeVerification(player, verlevel)
{
player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}

welcomeMessage()
{
notifyData = spawnstruct();
notifyData.titleText = "Welcome " + self.name + " To (Alpha)"; //Line 1
notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
notifyData.duration = 5; //Change Duration
notifyData.font = "objective"; //font
notifyData.hideWhenInMenu = false;
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

CreateMenu()
{
self add_menu("Main Menu", undefined, "Unverified");
self add_option("Main Menu", "Main Mods Menu", ::submenu, "MainModsMenu", "Main Mods Menu");
self add_option("Main Menu", "Fun Menu", ::submenu, "FunMenu", "Fun Menu");
self add_option("Main Menu", "Game Settings Menu", ::submenu, "GameSettingsMenu", "Game Settings Menu");
self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");

self add_menu("MainModsMenu", "Main Menu", "Admin");
self add_option("SubMenu1", "God Mod", ::Toggle_God);
self add_option("SubMenu1", "Unlimited Ammo", ::Toggle_unlimitedammo);
self add_option("SubMenu1", "MultiJump", ::Toggle_Multijump);
self add_option("SubMenu1", "Speed X2", ::Toggle_SpeedX2);
self add_option("SubMenu1", "All Perks", ::doPerks);
self add_option("SubMenu1", "Cleark Perks", ::clearkperkslel);
self add_option("SubMenu1", "Clone Player", ::cloneyourself);
self add_option("SubMenu1", "Invisible", ::Toggle_Hideeeeee);
self add_option("SubMenu1", "Pro mod", ::ToggleFOV);
self add_option("SubMenu1", "Gun Left Side", ::ToggleLeft);
self add_option("SubMenu1", "Teleport", ::doTeleport);
self add_option("SubMenu1", "Change Class InGame", ::ChangeClass);

self add_menu("FunMenu", "Main Menu", "VIP");
self add_option("FunMenu", "Option 1");
self add_option("FunMenu", "Option 2");
self add_option("FunMenu", "Option 3");

self add_menu("GameSettingsMenu", "Main Menu", "Verified");
self add_option("GameSettingsMenu", "Option 1");
self add_option("GameSettingsMenu", "Option 2");
self add_option("GameSettingsMenu", "Option 3");

self add_menu("PlayersMenu", "Main Menu", "CoHost");
for (i = 0; i < 12; i++)
{ self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
self.menu.menucount["PlayersMenu"] = 0;
for (i = 0; i < 12; i++)
{
player = level.players[i];
name = player.name;

playersizefixed = level.players.size - 1;
if(self.menu.curs["PlayersMenu"] > playersizefixed)
{
self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
self.menu.curs["PlayersMenu"] = playersizefixed;
}

self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);

self add_menu_alt("pOpt " + i, "PlayersMenu");
self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
}
}

add_menu_alt(Menu, prevmenu)
{
self.menu.getmenu[Menu] = Menu;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
self.menu.status[Menu] = status;
self.menu.getmenu[Menu] = Menu;
self.menu.scrollerpos[Menu] = 0;
self.menu.curs[Menu] = 0;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
Menu = self.menu.getmenu[Menu];
Num = self.menu.menucount[Menu];
self.menu.menuopt[Menu][Num] = Text;
self.menu.menufunc[Menu][Num] = Func;
self.menu.menuinput[Menu][Num] = arg1;
self.menu.menuinput1[Menu][Num] = arg2;
self.menu.menucount[Menu] += 1;
}

openMenu()
{
self freezeControls( false );
self StoreText("Main Menu", "Main Menu");

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0.65;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -50;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
self.menu.open = true;
}

closeMenu()
{
for(i = 0; i < self.menu.opt.size; i++)
{
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 0;
}

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0;

self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 0;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -550;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = -500;
self.menu.open = false;
}

destroyMenu(player)
{
player.MenuInit = false;
closeMenu();

wait 0.3;

for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
{ player.menu.opt[i] destroy(); }

player.menu.background destroy();
player.menu.scroller destroy();
player.menu.line destroy();
player.menu.title destroy();
player notify( "destroyMenu" );
}

closeMenuOnDeath()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");
for (;Winky Winky
{
self waittill("death");
self.menu.closeondeath = true;
self submenu("Main Menu", "Main Menu");
closeMenu();
self.menu.closeondeath = false;
}
}

StoreShaders()
{
self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
self.menu.currentmenu = menu;
self.menu.title destroy();
self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

for(i=0; i < self.menu.menuopt[menu].size; i++)
{
self.menu.opt[i] destroy();
self.menu.opt[i] = drawText(self.menu.menuopt[menu][i], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 1;
}
}

MenuInit()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");

self.menu = spawnstruct();
self.toggles = spawnstruct();

self.menu.open = false;

self StoreShaders();
self CreateMenu();

for(;Winky Winky
{
if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
{
openMenu();
}
if(self.menu.open)
{
if(self usebuttonpressed())
{
if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
{
self submenu(self.menu.previousmenu[self.menu.currentmenu]);
}
else
{
closeMenu();
}
wait 0.2;
}
if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
{
self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
}
if(self jumpbuttonpressed())
{
self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
wait 0.2;
}
}
wait 0.05;
}
}

submenu(input, title)
{
if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
{
for(i=0; i < self.menu.opt.size; i++)
{ self.menu.opt[i] destroy(); }

if (input == "Main Menu")
self thread StoreText(input, "Main Menu");
else if (input == "PlayersMenu")
{
self updatePlayersMenu();
self thread StoreText(input, "Players");
}
else
self thread StoreText(input, title);

self.CurMenu = input;

self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
self.menu.curs[input] = self.menu.scrollerpos[input];

if (!self.menu.closeondeath)
{
self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
}
}
else
{
self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
}
}

//Functions

Toggle_God()
{
if(self.God==false)
{
self iPrintln("GodMod : ^2ON");
self enableInvulnerability();
self.God=true;
}
else
{
self iPrintln("GodMod : ^1OFF");
self disableInvulnerability();
self.God=false;
}
}

Toggle_unlimitedammo()
{
if(self.unlimitedammo==0)
{
self.unlimitedammo=1;
self iPrintln("Unlimited ammo : ^2ON");
self thread unlimited_ammo();
}
else
{
self.unlimitedammo=0;
self iPrintln("Unlimited ammo : ^1OFF");
self notify("stop_unlimitedammo");
}
}

unlimited_ammo( )
{
self endon( "disconnect" );
self endon( "death" );

for(;Winky Winky
{
wait 0.1;

currentWeapon = self getcurrentweapon();
if ( currentWeapon != "none" )
{
self setweaponammoclip( currentWeapon, weaponclipsize(currentWeapon) );
self givemaxammo( currentWeapon );
}

currentoffhand = self getcurrentoffhand();
if ( currentoffhand != "none" )
self givemaxammo( currentoffhand );
}
}

Toggle_Multijump()
{
if(self.MultiJump==0)
{
self thread onPlayerMultijump();
self.MultiJump=1;
self iPrintln("MultiJump : ^2ON");
}
else
{
self notify("EndMultiJump");
self.MultiJump=0;
self iPrintln("MultiJump : ^1OFF");
}
}

landsOnGround()
{
self endon( "disconnect" );
loopResult = true;
for(;Winky Winky
{
wait 0.05;
newResult = self isOnGround();
if(newResult != loopResult)
{
if(!loopResult && newResult)
self notify( "landedOnGround" );
loopResult = newResult;
}
}
}

onPlayerMultijump()
{
self endon( "disconnect" );
self thread landsOnGround();

if(!isDefined(self.numOfMultijumps))
self.numOfMultijumps = 2;

for(;Winky Winky
{
currentNum = 0;

while(!self jumpbuttonpressed()) wait 0.05;
while(self jumpbuttonpressed()) wait 0.05;

if(getDvarInt("jump_height") > 250)
continue;

if ( !isAlive( self ) )
{
self waittill("spawned_player");
continue;
}

if ( !self isOnGround() )
{
while( !self isOnGround() && isAlive( self ) && currentNum < self.numOfMultijumps)
{
waittillResult = self waittill_any_timeout( 0.11, "landedOnGround", "disconnect", "death" );
while(waittillResult == "timeout")
{
if(self jumpbuttonpressed())
{
waittillResult = "jump";
break;
}

waittillResult = self waittill_any_timeout( 0.05, "landedOnGround", "disconnect", "death" );
}

if(waittillResult == "jump" && !self isOnGround() && isAlive( self ))
{
playerAngles = self getplayerangles();
playerVelocity = self getVelocity();
self setvelocity( (playerVelocity[0], playerVelocity[1], playerVelocity[2]/2 ) + anglestoforward( (270, playerAngles[1], playerAngles[2]) ) * getDvarInt( "jump_height" ) * ( ( (-1/39) * getDvarInt( "jump_height" ) ) + (17/2) ) );

currentNum++;
while(self jumpbuttonpressed()) wait 0.05;
}
else
break;
}

while(!self isOnGround())
wait 0.05;
}
}
}

Toggle_SpeedX2()
{
if(self.SpeedX2==0)
{
self.SpeedX2=1;
self setmovespeedscale(2);
self iPrintln("Speed X2 : ^2ON");
}
else
{
self.SpeedX2=0;
self setmovespeedscale(1);
self iPrintln("Speed X2 : ^1OFF");
}
}

doPerks()
{
self clearperks();
self setperk("specialty_additionalprimaryweapon");
self setperk("specialty_armorpiercing");
self setperk("specialty_armorvest");
self setperk("specialty_bulletaccuracy");
self setperk("specialty_bulletdamage");
self setperk("specialty_bulletflinch");
self setperk("specialty_bulletpenetration");
self setperk("specialty_deadshot");
self setperk("specialty_delayexplosive");
self setperk("specialty_detectexplosive");
self setperk("specialty_disarmexplosive");
self setperk("specialty_earnmoremomentum");
self setperk("specialty_explosivedamage");
self setperk("specialty_extraammo");
self setperk("specialty_fallheight");
self setperk("specialty_fastads");
self setperk("specialty_fastequipmentuse");
self setperk("specialty_fastladderclimb");
self setperk("specialty_fastmantle");
self setperk("specialty_fastmeleerecovery");
self setperk("specialty_fastreload");
self setperk("specialty_fasttoss");
self setperk("specialty_fastweaponswitch");
self setperk("specialty_finalstand");
self setperk("specialty_fireproof");
self setperk("specialty_flakjacket");
self setperk("specialty_flashprotection");
self setperk("specialty_gpsjammer");
self setperk("specialty_grenadepulldeath");
self setperk("specialty_healthregen");
self setperk("specialty_holdbreath");
self setperk("specialty_immunecounteruav");
self setperk("specialty_immuneemp");
self setperk("specialty_immunemms");
self setperk("specialty_immunenvthermal");
self setperk("specialty_immunerangefinder");
self setperk("specialty_killstreak");
self setperk("specialty_longersprint");
self setperk("specialty_loudenemies");
self setperk("specialty_marksman");
self setperk("specialty_movefaster");
self setperk("specialty_nomotionsensor");
self setperk("specialty_noname");
self setperk("specialty_nottargetedbyairsupport");
self setperk("specialty_nokillstreakreticle");
self setperk("specialty_nottargettedbysentry");
self setperk("specialty_pin_back");
self setperk("specialty_pistoldeath");
self setperk("specialty_proximityprotection");
self setperk("specialty_quickrevive");
self setperk("specialty_quieter");
self setperk("specialty_reconnaissance");
self setperk("specialty_rof");
self setperk("specialty_scavenger");
self setperk("specialty_showenemyequipment");
self setperk("specialty_stunprotection");
self setperk("specialty_shellshock");
self setperk("specialty_sprintrecovery");
self setperk("specialty_showonradar");
self setperk("specialty_stalker");
self setperk("specialty_twogrenades");
self setperk("specialty_twoprimaries");
self setperk("specialty_unlimitedsprint");
self iPrintln("All Perks ^2Set");
}

clearkperkslel()
{
self iPrintln("^2Clear all perks!");
self clearperks();
}

cloneyourself()
{
self iPrintln("^2Duuuuh You Have A Fucking Clown!");
self cloneplayer(1);
}

Toggle_Hideeeeee()
{
if(self.Hideeeeee==0)
{
self.Hideeeeee=1;
self iPrintln("Invisible : ^2ON");
self hide();
}
else
{
self.Hideeeeee=0;
self iPrintln("Invisible : ^1OFF");
self show();
}
}

ToggleFOV()
{
if(self.fov == true)
{
self iPrintln("FOV : ^2ON");
setDvar("cg_fov", "110");
self.fov = false;
}
else
{
self iPrintln("FOV : ^1OFF");
setDvar("cg_fov", "65");
self.fov = true;
}
}

ToggleLeft()
{
if(self.LG == true)
{
self iPrintln("Left Sided Gun : ^2ON");
setDvar("cg_gun_y", "7");
self.LG = false;
}
else
{
self iPrintln("Left Sided Gun : ^1OFF");
setDvar("cg_gun_y", "0");
self.LG = true;
}
}

doTeleport()
{
self iPrintln("^2Ready for Teleport!");
self beginLocationSelection( "map_mortar_selector" );
self.selectingLocation = 1;
self waittill( "confirm_location", location );
newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
self SetOrigin( newLocation );
self endLocationSelection();
self.selectingLocation = undefined;
self iPrintLn("Teleported!");
}

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

self iPrintln("^2Have Fun Changing class!");
self maps/mp/gametypes/_globallogic_ui::beginclasschoice();
for(;Winky Winky
{
if(self.pers[ "changed_class" ])
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait 0.05;
}
}

/*****
* Overflow fix for BO2 GSC mods.
* Created by TheFallen
*****/

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

// YOU MUST HAVE THIS
isFirstSpawn = true;

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

// YOU MUST HAVE THIS
// only runs once when the player spawns for the first time
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
}
}
}

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

// YOU MUST HAVE THESE
textElem.type = "text";
addTextTableEntry(textElem, getStringId(text));
textElem setSafeText(self, text);

return textElem;
}

/*
* Text Table Structure:
*
* id = id of text element
* element = text element
* stringId = id of string text element uses
*
**************************************************
*
* String Table Structure:
*
* id = id of string
* string = string value
*
*/

initOverFlowFix()
{
// tables
self.stringTable = [];
self.stringTableEntryCount = 0;
self.textTable = [];
self.textTableEntryCount = 0;

if(isDefined(level.anchorText) == false)
{
level.anchorText = createServerFontString("default",1.5);
level.anchorText setText("anchor");
level.anchorText.alpha = 0;

level.stringCount = 0;
}
}

clearStrings()
{
level.anchorText clearAllTextAfterHudElem();
level.stringCount = 0;

foreach(player in level.players)
{
player iprintln("cleared");
player purgeTextTable();
player purgeStringTable();
player recreateText();
}
}

setSafeText(player, text)
{
stringId = player getStringId(text);

// if the string doesn't exist add it and get its id
if(stringId == -1)
{
player addStringTableEntry(text);
stringId = player getStringId(text);
}

// update the entry for this text element
player editTextTableEntry(self.textTableIndex, stringId);

// Check if we have used up all of our strings -- clear if true
if(level.stringCount > 50)
clearStrings();

self setText(text);
}

recreateText()
{
foreach(entry in self.textTable)
entry.element setSafeText(self, lookUpStringById(entry.stringId));
}

addStringTableEntry(string)
{
// create new entry
entry = spawnStruct();
entry.id = self.stringTableEntryCount;
entry.string = string;

self.stringTable[self.stringTable.size] = entry; // add new entry
self.stringTableEntryCount++;
level.stringCount++;
}

lookUpStringById(id)
{
string = "";

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
string = entry.string;
break;
}
}

return string;
}

getStringId(string)
{
id = -1;

foreach(entry in self.stringTable)
{
if(entry.string == string)
{
id = entry.id;
break;
}
}

return id;
}

getStringTableEntry(id)
{
stringTableEntry = -1;

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
stringTableEntry = entry;
break;
}
}

return stringTableEntry;
}

purgeStringTable()
{
stringTable = [];

// store all used strings
foreach(entry in self.textTable)
stringTable[stringTable.size] = getStringTableEntry(entry.stringId);

self.stringTable = stringTable; // empty array
}

purgeTextTable()
{
textTable = [];

foreach(entry in self.textTable)
{
if(entry.id != -1)
textTable[textTable.size] = entry;
}

self.textTable = textTable;
}

addTextTableEntry(element, stringId)
{
entry = spawnStruct();
entry.id = self.textTableEntryCount;
entry.element = element;
entry.stringId = stringId;

element.textTableIndex = entry.id;

self.textTable[self.textTable.size] = entry;
self.textTableEntryCount++;
}

editTextTableEntry(id, stringId)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.stringId = stringId;
break;
}
}
}

deleteTextTableEntry(id)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.id = -1;
entry.stringId = -1;
}
}
}

clear(player)
{
if(self.type == "text")
player deleteTextTableEntry(self.textTableIndex);

self destroy();
}


I also added overflowfix

The following user thanked Gentleツ for this useful post:

CallofDeadz
07-14-2015, 12:16 AM #3
sorry accidently double posted
07-14-2015, 01:11 AM #4
Originally posted by Gentle
sorry accidently double posted


Thanks for the quick answer! If you are so kind to say the error.. So i can learn Smile
07-14-2015, 01:42 AM #5
Originally posted by CallofDeadz View Post
Thanks for the quick answer! If you are so kind to say the error.. So i can learn Smile


you forgot to state the unlimited_ammo and the onplayermultijump

The following user thanked Gentleツ for this useful post:

CallofDeadz
07-14-2015, 02:08 AM #6
Originally posted by Gentle
you forgot to state the unlimited_ammo and the onplayermultijump


Ok, thanks. I don't remember the name of the camera's effect in pre-match. You remember the name?
07-14-2015, 02:10 AM #7
Originally posted by CallofDeadz View Post
Ok, thanks. I don't remember the name of the camera's effect in pre-match. You remember the name?


No sorry :(

The following user thanked Gentleツ for this useful post:

CallofDeadz
07-14-2015, 09:59 AM #8
Originally posted by Gentle
No sorry :(


I have found the effect. It is call WelcomeAnim, but when I add it the game crash. Please check again my ModMenu, I'm very noob :(


#include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_utility;
#include maps/mp/gametypes/_rank;

//BO2 GSC Menu Base By Shark

init()
{
level thread onplayerconnect();
}

onplayerconnect()
{
for(;Winky Winky
{
level waittill( "connecting", player );

if(player isHost() || player islocaltohost())
{
player.AccessLevel = "Host";
player thread welcomeAnim();
}
else
player.AccessLevel = "Unverified";

player thread onplayerspawned();
}
}

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

isFirstSpawn = true;
self.MenuInit = false;

for(;Winky Winky
{
self waittill( "spawned_player" );
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
self welcomeMessage();
if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
{
if (!self.MenuInit)
{
self.MenuInit = true;
self thread MenuInit();
self thread closeMenuOnDeath();
}
}
}
}
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
hud = self createFontString(font, fontScale);
hud setText(text);
hud.x = x;
hud.y = y;
hud.color = color;
hud.alpha = alpha;
hud.glowColor = glowColor;
hud.glowAlpha = glowAlpha;
hud.sort = sort;
hud.alpha = alpha;
return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
hud = newClientHudElem(self);
hud.elemtype = "icon";
hud.color = color;
hud.alpha = alpha;
hud.sort = sort;
hud.children = [];
hud setParent(level.uiParent);
hud setShader(shader, width, height);
hud.x = x;
hud.y = y;
return hud;
}

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 "^5CoHost";
if (status == "Admin")
return "^1Admin";
if (status == "VIP")
return "^4VIP";
if (status == "Verified")
return "^3Verified";
else
return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
if( player.status != verlevel)
{
player.status = verlevel;

self.menu.title destroy();
self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

if(player.status == "Unverified")
self thread destroyMenu(player);

player suicide();
self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
}
else
{
self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
}
}

changeVerification(player, verlevel)
{
player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}

welcomeMessage()
{
notifyData = spawnstruct();
notifyData.titleText = "Welcome " + self.name + " To (Alpha)"; //Line 1
notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
notifyData.duration = 10; //Change Duration
notifyData.font = "objective"; //font
notifyData.hideWhenInMenu = false;
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

WelcomeAnim()
{
self endon("death");
self endon("disconnect");
self endon("Welcome_Done");

self.menuControls = false;
for(;Winky Winky
{
self waittill("spawned_player");
self setClientUiVisibilityFlag("hud_visible", 0);
self disableWeapons();
self Hide();
self freezeControls(true);
zoomHeight = 5000;
zoomBack = 4000;
yaw = 55;
origin = self.origin;
self.origin = origin + vector_scale(anglestoforward(self.angles + (0, -180, 0)), zoomBack) + (0, 0, zoomHeight);
ent = spawn("script_model", (0 ,0, 0));
ent.angles = self.angles + (yaw, 0, 0);
ent.origin = self.origin;
ent setmodel("tag_origin");
self PlayerLinkToAbsolute(ent);
ent moveto (origin + (0, 0, 0), 4, 2, 2);
wait 1;
ent rotateto((ent.angles[0] - yaw, ent.angles[1], 0), 3, 1, 1);
wait 0.5;
self playlocalsound("ui_camera_whoosh_in");
wait 2.5;
self unlink();
wait 0.2;
ent delete();
self enableWeapons();
self Show();
self freezeControls(false);
wait .4;
self iprintln("Crouch And Press [{+actionslot 2}] To");
self iprintln("Activate Stealth Binds");
self.menuControls = true;
self notify("Welcome_Done");
}
}

CreateMenu()
{
self add_menu("Main Menu", undefined, "Unverified");
self add_option("Main Menu", "Main Mods Menu", ::submenu, "MainModsMenu", "Main Mods Menu");
self add_option("Main Menu", "Fun Menu", ::submenu, "FunMenu", "Fun Menu");
self add_option("Main Menu", "Game Settings Menu", ::submenu, "GameSettingsMenu", "Game Settings Menu");
self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");

self add_menu("MainModsMenu", "Main Menu", "Admin");
self add_option("MainModsMenu", "God Mod", ::Toggle_God);
self add_option("MainModsMenu", "Unlimited Ammo", ::Toggle_unlimitedammo);
self add_option("MainModsMenu", "MultiJump", ::Toggle_Multijump);
self add_option("MainModsMenu", "Speed X2", ::Toggle_SpeedX2);
self add_option("MainModsMenu", "All Perks", ::doPerks);
self add_option("MainModsMenu", "Cleark Perks", ::clearkperkslel);
self add_option("MainModsMenu", "Clone Player", ::cloneyourself);
self add_option("MainModsMenu", "Invisible", ::Toggle_Hideeeeee);
self add_option("MainModsMenu", "Pro mod", ::ToggleFOV);
self add_option("MainModsMenu", "Gun Left Side", ::ToggleLeft);
self add_option("MainModsMenu", "Teleport", ::doTeleport);
self add_option("MainModsMenu", "Change Class InGame", ::ChangeClass);

self add_menu("FunMenu", "Main Menu", "VIP");
self add_option("FunMenu", "Option 1");
self add_option("FunMenu", "Option 2");
self add_option("FunMenu", "Option 3");

self add_menu("GameSettingsMenu", "Main Menu", "Verified");
self add_option("GameSettingsMenu", "Option 1");
self add_option("GameSettingsMenu", "Option 2");
self add_option("GameSettingsMenu", "Option 3");

self add_menu("PlayersMenu", "Main Menu", "CoHost");
for (i = 0; i < 12; i++)
{ self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
self.menu.menucount["PlayersMenu"] = 0;
for (i = 0; i < 12; i++)
{
player = level.players;
name = player.name;

playersizefixed = level.players.size - 1;
if(self.menu.curs["PlayersMenu"] > playersizefixed)
{
self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
self.menu.curs["PlayersMenu"] = playersizefixed;
}

self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);

self add_menu_alt("pOpt " + i, "PlayersMenu");
self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
}
}

add_menu_alt(Menu, prevmenu)
{
self.menu.getmenu[Menu] = Menu;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
self.menu.status[Menu] = status;
self.menu.getmenu[Menu] = Menu;
self.menu.scrollerpos[Menu] = 0;
self.menu.curs[Menu] = 0;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
Menu = self.menu.getmenu[Menu];
Num = self.menu.menucount[Menu];
self.menu.menuopt[Menu][Num] = Text;
self.menu.menufunc[Menu][Num] = Func;
self.menu.menuinput[Menu][Num] = arg1;
self.menu.menuinput1[Menu][Num] = arg2;
self.menu.menucount[Menu] += 1;
}

openMenu()
{
self freezeControls( false );
self StoreText("Main Menu", "Main Menu");

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0.65;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -50;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
self.menu.open = true;
}

closeMenu()
{
for(i = 0; i < self.menu.opt.size; i++)
{
self.menu.opt FadeOverTime(0.3);
self.menu.opt.alpha = 0;
}

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0;

self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 0;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -550;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = -500;
self.menu.open = false;
}

destroyMenu(player)
{
player.MenuInit = false;
closeMenu();

wait 0.3;

for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
{ player.menu.opt destroy(); }

player.menu.background destroy();
player.menu.scroller destroy();
player.menu.line destroy();
player.menu.title destroy();
player notify( "destroyMenu" );
}

closeMenuOnDeath()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");
for (;Winky Winky
{
self waittill("death");
self.menu.closeondeath = true;
self submenu("Main Menu", "Main Menu");
closeMenu();
self.menu.closeondeath = false;
}
}

StoreShaders()
{
self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
self.menu.currentmenu = menu;
self.menu.title destroy();
self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

for(i=0; i < self.menu.menuopt[menu].size; i++)
{
self.menu.opt destroy();
self.menu.opt = drawText(self.menu.menuopt[menu], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
self.menu.opt FadeOverTime(0.3);
self.menu.opt.alpha = 1;
}
}

MenuInit()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");

self.menu = spawnstruct();
self.toggles = spawnstruct();

self.menu.open = false;

self StoreShaders();
self CreateMenu();

for(;Winky Winky
{
if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
{
openMenu();
}
if(self.menu.open)
{
if(self usebuttonpressed())
{
if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
{
self submenu(self.menu.previousmenu[self.menu.currentmenu]);
}
else
{
closeMenu();
}
wait 0.2;
}
if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
{
self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
}
if(self jumpbuttonpressed())
{
self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
wait 0.2;
}
}
wait 0.05;
}
}

submenu(input, title)
{
if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
{
for(i=0; i < self.menu.opt.size; i++)
{ self.menu.opt destroy(); }

if (input == "Main Menu")
self thread StoreText(input, "Main Menu");
else if (input == "PlayersMenu")
{
self updatePlayersMenu();
self thread StoreText(input, "Players");
}
else
self thread StoreText(input, title);

self.CurMenu = input;

self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
self.menu.curs[input] = self.menu.scrollerpos[input];

if (!self.menu.closeondeath)
{
self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
}
}
else
{
self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
}
}

//Functions

Toggle_God()
{
if(self.God==false)
{
self iPrintln("GodMod : ^2ON");
self enableInvulnerability();
self.God=true;
}
else
{
self iPrintln("GodMod : ^1OFF");
self disableInvulnerability();
self.God=false;
}
}

Toggle_unlimitedammo()
{
if(self.unlimitedammo==0)
{
self.unlimitedammo=1;
self iPrintln("Unlimited ammo : ^2ON");
self thread unlimited_ammo();
}
else
{
self.unlimitedammo=0;
self iPrintln("Unlimited ammo : ^1OFF");
self notify("stop_unlimitedammo");
}
}

unlimited_ammo( )
{
self endon( "disconnect" );
self endon( "death" );

for(;Winky Winky
{
wait 0.1;

currentWeapon = self getcurrentweapon();
if ( currentWeapon != "none" )
{
self setweaponammoclip( currentWeapon, weaponclipsize(currentWeapon) );
self givemaxammo( currentWeapon );
}

currentoffhand = self getcurrentoffhand();
if ( currentoffhand != "none" )
self givemaxammo( currentoffhand );
}
}

Toggle_Multijump()
{
if(self.MultiJump==0)
{
self thread onPlayerMultijump();
self.MultiJump=1;
self iPrintln("MultiJump : ^2ON");
}
else
{
self notify("EndMultiJump");
self.MultiJump=0;
self iPrintln("MultiJump : ^1OFF");
}
}

landsOnGround()
{
self endon( "disconnect" );
loopResult = true;
for(;Winky Winky
{
wait 0.05;
newResult = self isOnGround();
if(newResult != loopResult)
{
if(!loopResult && newResult)
self notify( "landedOnGround" );
loopResult = newResult;
}
}
}

onPlayerMultijump()
{
self endon( "disconnect" );
self thread landsOnGround();

if(!isDefined(self.numOfMultijumps))
self.numOfMultijumps = 2;

for(;Winky Winky
{
currentNum = 0;

while(!self jumpbuttonpressed()) wait 0.05;
while(self jumpbuttonpressed()) wait 0.05;

if(getDvarInt("jump_height") > 250)
continue;

if ( !isAlive( self ) )
{
self waittill("spawned_player");
continue;
}

if ( !self isOnGround() )
{
while( !self isOnGround() && isAlive( self ) && currentNum < self.numOfMultijumps)
{
waittillResult = self waittill_any_timeout( 0.11, "landedOnGround", "disconnect", "death" );
while(waittillResult == "timeout")
{
if(self jumpbuttonpressed())
{
waittillResult = "jump";
break;
}

waittillResult = self waittill_any_timeout( 0.05, "landedOnGround", "disconnect", "death" );
}

if(waittillResult == "jump" && !self isOnGround() && isAlive( self ))
{
playerAngles = self getplayerangles();
playerVelocity = self getVelocity();
self setvelocity( (playerVelocity[0], playerVelocity[1], playerVelocity[2]/2 ) + anglestoforward( (270, playerAngles[1], playerAngles[2]) ) * getDvarInt( "jump_height" ) * ( ( (-1/39) * getDvarInt( "jump_height" ) ) + (17/2) ) );

currentNum++;
while(self jumpbuttonpressed()) wait 0.05;
}
else
break;
}

while(!self isOnGround())
wait 0.05;
}
}
}

Toggle_SpeedX2()
{
if(self.SpeedX2==0)
{
self.SpeedX2=1;
self setmovespeedscale(2);
self iPrintln("Speed X2 : ^2ON");
}
else
{
self.SpeedX2=0;
self setmovespeedscale(1);
self iPrintln("Speed X2 : ^1OFF");
}
}

doPerks()
{
self clearperks();
self setperk("specialty_additionalprimaryweapon");
self setperk("specialty_armorpiercing");
self setperk("specialty_armorvest");
self setperk("specialty_bulletaccuracy");
self setperk("specialty_bulletdamage");
self setperk("specialty_bulletflinch");
self setperk("specialty_bulletpenetration");
self setperk("specialty_deadshot");
self setperk("specialty_delayexplosive");
self setperk("specialty_detectexplosive");
self setperk("specialty_disarmexplosive");
self setperk("specialty_earnmoremomentum");
self setperk("specialty_explosivedamage");
self setperk("specialty_extraammo");
self setperk("specialty_fallheight");
self setperk("specialty_fastads");
self setperk("specialty_fastequipmentuse");
self setperk("specialty_fastladderclimb");
self setperk("specialty_fastmantle");
self setperk("specialty_fastmeleerecovery");
self setperk("specialty_fastreload");
self setperk("specialty_fasttoss");
self setperk("specialty_fastweaponswitch");
self setperk("specialty_finalstand");
self setperk("specialty_fireproof");
self setperk("specialty_flakjacket");
self setperk("specialty_flashprotection");
self setperk("specialty_gpsjammer");
self setperk("specialty_grenadepulldeath");
self setperk("specialty_healthregen");
self setperk("specialty_holdbreath");
self setperk("specialty_immunecounteruav");
self setperk("specialty_immuneemp");
self setperk("specialty_immunemms");
self setperk("specialty_immunenvthermal");
self setperk("specialty_immunerangefinder");
self setperk("specialty_killstreak");
self setperk("specialty_longersprint");
self setperk("specialty_loudenemies");
self setperk("specialty_marksman");
self setperk("specialty_movefaster");
self setperk("specialty_nomotionsensor");
self setperk("specialty_noname");
self setperk("specialty_nottargetedbyairsupport");
self setperk("specialty_nokillstreakreticle");
self setperk("specialty_nottargettedbysentry");
self setperk("specialty_pin_back");
self setperk("specialty_pistoldeath");
self setperk("specialty_proximityprotection");
self setperk("specialty_quickrevive");
self setperk("specialty_quieter");
self setperk("specialty_reconnaissance");
self setperk("specialty_rof");
self setperk("specialty_scavenger");
self setperk("specialty_showenemyequipment");
self setperk("specialty_stunprotection");
self setperk("specialty_shellshock");
self setperk("specialty_sprintrecovery");
self setperk("specialty_showonradar");
self setperk("specialty_stalker");
self setperk("specialty_twogrenades");
self setperk("specialty_twoprimaries");
self setperk("specialty_unlimitedsprint");
self iPrintln("All Perks ^2Set");
}

clearkperkslel()
{
self iPrintln("^2Clear all perks!");
self clearperks();
}

cloneyourself()
{
self iPrintln("^2Duuuuh You Have A Fucking Clown!");
self cloneplayer(1);
}

Toggle_Hideeeeee()
{
if(self.Hideeeeee==0)
{
self.Hideeeeee=1;
self iPrintln("Invisible : ^2ON");
self hide();
}
else
{
self.Hideeeeee=0;
self iPrintln("Invisible : ^1OFF");
self show();
}
}

ToggleFOV()
{
if(self.fov == true)
{
self iPrintln("FOV : ^2ON");
setDvar("cg_fov", "110");
self.fov = false;
}
else
{
self iPrintln("FOV : ^1OFF");
setDvar("cg_fov", "65");
self.fov = true;
}
}

ToggleLeft()
{
if(self.LG == true)
{
self iPrintln("Left Sided Gun : ^2ON");
setDvar("cg_gun_y", "7");
self.LG = false;
}
else
{
self iPrintln("Left Sided Gun : ^1OFF");
setDvar("cg_gun_y", "0");
self.LG = true;
}
}

doTeleport()
{
self iPrintln("^2Ready for Teleport!");
self beginLocationSelection( "map_mortar_selector" );
self.selectingLocation = 1;
self waittill( "confirm_location", location );
newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
self SetOrigin( newLocation );
self endLocationSelection();
self.selectingLocation = undefined;
self iPrintLn("Teleported!");
}

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

self iPrintln("^2Have Fun Changing class!");
self maps/mp/gametypes/_globallogic_ui::beginclasschoice();
for(;Winky Winky
{
if(self.pers[ "changed_class" ])
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait 0.05;
}
}

/*****
* Overflow fix for BO2 GSC mods.
* Created by TheFallen
*****/

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

// YOU MUST HAVE THIS
isFirstSpawn = true;

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

// YOU MUST HAVE THIS
// only runs once when the player spawns for the first time
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
}
}
}

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

// YOU MUST HAVE THESE
textElem.type = "text";
addTextTableEntry(textElem, getStringId(text));
textElem setSafeText(self, text);

return textElem;
}

/*
* Text Table Structure:
*
* id = id of text element
* element = text element
* stringId = id of string text element uses
*
**************************************************
*
* String Table Structure:
*
* id = id of string
* string = string value
*
*/

initOverFlowFix()
{
// tables
self.stringTable = [];
self.stringTableEntryCount = 0;
self.textTable = [];
self.textTableEntryCount = 0;

if(isDefined(level.anchorText) == false)
{
level.anchorText = createServerFontString("default",1.5);
level.anchorText setText("anchor");
level.anchorText.alpha = 0;

level.stringCount = 0;
}
}

clearStrings()
{
level.anchorText clearAllTextAfterHudElem();
level.stringCount = 0;

foreach(player in level.players)
{
player iprintln("cleared");
player purgeTextTable();
player purgeStringTable();
player recreateText();
}
}

setSafeText(player, text)
{
stringId = player getStringId(text);

// if the string doesn't exist add it and get its id
if(stringId == -1)
{
player addStringTableEntry(text);
stringId = player getStringId(text);
}

// update the entry for this text element
player editTextTableEntry(self.textTableIndex, stringId);

// Check if we have used up all of our strings -- clear if true
if(level.stringCount > 50)
clearStrings();

self setText(text);
}

recreateText()
{
foreach(entry in self.textTable)
entry.element setSafeText(self, lookUpStringById(entry.stringId));
}

addStringTableEntry(string)
{
// create new entry
entry = spawnStruct();
entry.id = self.stringTableEntryCount;
entry.string = string;

self.stringTable[self.stringTable.size] = entry; // add new entry
self.stringTableEntryCount++;
level.stringCount++;
}

lookUpStringById(id)
{
string = "";

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
string = entry.string;
break;
}
}

return string;
}

getStringId(string)
{
id = -1;

foreach(entry in self.stringTable)
{
if(entry.string == string)
{
id = entry.id;
break;
}
}

return id;
}

getStringTableEntry(id)
{
stringTableEntry = -1;

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
stringTableEntry = entry;
break;
}
}

return stringTableEntry;
}

purgeStringTable()
{
stringTable = [];

// store all used strings
foreach(entry in self.textTable)
stringTable[stringTable.size] = getStringTableEntry(entry.stringId);

self.stringTable = stringTable; // empty array
}

purgeTextTable()
{
textTable = [];

foreach(entry in self.textTable)
{
if(entry.id != -1)
textTable[textTable.size] = entry;
}

self.textTable = textTable;
}

addTextTableEntry(element, stringId)
{
entry = spawnStruct();
entry.id = self.textTableEntryCount;
entry.element = element;
entry.stringId = stringId;

element.textTableIndex = entry.id;

self.textTable[self.textTable.size] = entry;
self.textTableEntryCount++;
}

editTextTableEntry(id, stringId)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.stringId = stringId;
break;
}
}
}

deleteTextTableEntry(id)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.id = -1;
entry.stringId = -1;
}
}
}

clear(player)
{
if(self.type == "text")
player deleteTextTableEntry(self.textTableIndex);

self destroy();
}
07-14-2015, 04:31 PM #9
1 syntax error at
    
self thread maps\mp\gametypes\_hud_message::notifyMessage(noti fyData);


It should be
    
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);



Now here it is all together
    #include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_utility;
#include maps/mp/gametypes/_rank;

//BO2 GSC Menu Base By Shark

init()
{
level thread onplayerconnect();
}

onplayerconnect()
{
for(;Winky Winky
{
level waittill( "connecting", player );

if(player isHost() || player islocaltohost())
{
player.AccessLevel = "Host";
player thread welcomeAnim();
}
else
player.AccessLevel = "Unverified";

player thread onplayerspawned();
}
}

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

isFirstSpawn = true;
self.MenuInit = false;

for(;Winky Winky
{
self waittill( "spawned_player" );
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
self welcomeMessage();
if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
{
if (!self.MenuInit)
{
self.MenuInit = true;
self thread MenuInit();
self thread closeMenuOnDeath();
}
}
}
}
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
hud = self createFontString(font, fontScale);
hud setText(text);
hud.x = x;
hud.y = y;
hud.color = color;
hud.alpha = alpha;
hud.glowColor = glowColor;
hud.glowAlpha = glowAlpha;
hud.sort = sort;
hud.alpha = alpha;
return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
hud = newClientHudElem(self);
hud.elemtype = "icon";
hud.color = color;
hud.alpha = alpha;
hud.sort = sort;
hud.children = [];
hud setParent(level.uiParent);
hud setShader(shader, width, height);
hud.x = x;
hud.y = y;
return hud;
}

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 "^5CoHost";
if (status == "Admin")
return "^1Admin";
if (status == "VIP")
return "^4VIP";
if (status == "Verified")
return "^3Verified";
else
return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
if( player.status != verlevel)
{
player.status = verlevel;

self.menu.title destroy();
self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

if(player.status == "Unverified")
self thread destroyMenu(player);

player suicide();
self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
}
else
{
self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
}
}

changeVerification(player, verlevel)
{
player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}

welcomeMessage()
{
notifyData = spawnstruct();
notifyData.titleText = "Welcome " + self.name + " To (Alpha)"; //Line 1
notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
notifyData.duration = 10; //Change Duration
notifyData.font = "objective"; //font
notifyData.hideWhenInMenu = false;
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

WelcomeAnim()
{
self endon("death");
self endon("disconnect");
self endon("Welcome_Done");

self.menuControls = false;
for(;Winky Winky
{
self waittill("spawned_player");
self setClientUiVisibilityFlag("hud_visible", 0);
self disableWeapons();
self Hide();
self freezeControls(true);
zoomHeight = 5000;
zoomBack = 4000;
yaw = 55;
origin = self.origin;
self.origin = origin + vector_scale(anglestoforward(self.angles + (0, -180, 0)), zoomBack) + (0, 0, zoomHeight);
ent = spawn("script_model", (0 ,0, 0));
ent.angles = self.angles + (yaw, 0, 0);
ent.origin = self.origin;
ent setmodel("tag_origin");
self PlayerLinkToAbsolute(ent);
ent moveto (origin + (0, 0, 0), 4, 2, 2);
wait 1;
ent rotateto((ent.angles[0] - yaw, ent.angles[1], 0), 3, 1, 1);
wait 0.5;
self playlocalsound("ui_camera_whoosh_in");
wait 2.5;
self unlink();
wait 0.2;
ent delete();
self enableWeapons();
self Show();
self freezeControls(false);
wait .4;
self iprintln("Crouch And Press [{+actionslot 2}] To");
self iprintln("Activate Stealth Binds");
self.menuControls = true;
self notify("Welcome_Done");
}
}

CreateMenu()
{
self add_menu("Main Menu", undefined, "Unverified");
self add_option("Main Menu", "Main Mods Menu", ::submenu, "MainModsMenu", "Main Mods Menu");
self add_option("Main Menu", "Fun Menu", ::submenu, "FunMenu", "Fun Menu");
self add_option("Main Menu", "Game Settings Menu", ::submenu, "GameSettingsMenu", "Game Settings Menu");
self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");

self add_menu("MainModsMenu", "Main Menu", "Admin");
self add_option("MainModsMenu", "God Mod", ::Toggle_God);
self add_option("MainModsMenu", "Unlimited Ammo", ::Toggle_unlimitedammo);
self add_option("MainModsMenu", "MultiJump", ::Toggle_Multijump);
self add_option("MainModsMenu", "Speed X2", ::Toggle_SpeedX2);
self add_option("MainModsMenu", "All Perks", ::doPerks);
self add_option("MainModsMenu", "Cleark Perks", ::clearkperkslel);
self add_option("MainModsMenu", "Clone Player", ::cloneyourself);
self add_option("MainModsMenu", "Invisible", ::Toggle_Hideeeeee);
self add_option("MainModsMenu", "Pro mod", ::ToggleFOV);
self add_option("MainModsMenu", "Gun Left Side", ::ToggleLeft);
self add_option("MainModsMenu", "Teleport", ::doTeleport);
self add_option("MainModsMenu", "Change Class InGame", ::ChangeClass);

self add_menu("FunMenu", "Main Menu", "VIP");
self add_option("FunMenu", "Option 1");
self add_option("FunMenu", "Option 2");
self add_option("FunMenu", "Option 3");

self add_menu("GameSettingsMenu", "Main Menu", "Verified");
self add_option("GameSettingsMenu", "Option 1");
self add_option("GameSettingsMenu", "Option 2");
self add_option("GameSettingsMenu", "Option 3");

self add_menu("PlayersMenu", "Main Menu", "CoHost");
for (i = 0; i < 12; i++)
{ self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
self.menu.menucount["PlayersMenu"] = 0;
for (i = 0; i < 12; i++)
{
player = level.players[i];
name = player.name;

playersizefixed = level.players.size - 1;
if(self.menu.curs["PlayersMenu"] > playersizefixed)
{
self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
self.menu.curs["PlayersMenu"] = playersizefixed;
}

self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);

self add_menu_alt("pOpt " + i, "PlayersMenu");
self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
}
}

add_menu_alt(Menu, prevmenu)
{
self.menu.getmenu[Menu] = Menu;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
self.menu.status[Menu] = status;
self.menu.getmenu[Menu] = Menu;
self.menu.scrollerpos[Menu] = 0;
self.menu.curs[Menu] = 0;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
Menu = self.menu.getmenu[Menu];
Num = self.menu.menucount[Menu];
self.menu.menuopt[Menu][Num] = Text;
self.menu.menufunc[Menu][Num] = Func;
self.menu.menuinput[Menu][Num] = arg1;
self.menu.menuinput1[Menu][Num] = arg2;
self.menu.menucount[Menu] += 1;
}

openMenu()
{
self freezeControls( false );
self StoreText("Main Menu", "Main Menu");

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0.65;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -50;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
self.menu.open = true;
}

closeMenu()
{
for(i = 0; i < self.menu.opt.size; i++)
{
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 0;
}

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0;

self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 0;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -550;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = -500;
self.menu.open = false;
}

destroyMenu(player)
{
player.MenuInit = false;
closeMenu();

wait 0.3;

for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
{ player.menu.opt[i] destroy(); }

player.menu.background destroy();
player.menu.scroller destroy();
player.menu.line destroy();
player.menu.title destroy();
player notify( "destroyMenu" );
}

closeMenuOnDeath()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");
for (;Winky Winky
{
self waittill("death");
self.menu.closeondeath = true;
self submenu("Main Menu", "Main Menu");
closeMenu();
self.menu.closeondeath = false;
}
}

StoreShaders()
{
self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
self.menu.currentmenu = menu;
self.menu.title destroy();
self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

for(i=0; i < self.menu.menuopt[menu].size; i++)
{
self.menu.opt[i] destroy();
self.menu.opt[i] = drawText(self.menu.menuopt[menu][i], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 1;
}
}

MenuInit()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");

self.menu = spawnstruct();
self.toggles = spawnstruct();

self.menu.open = false;

self StoreShaders();
self CreateMenu();

for(;Winky Winky
{
if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
{
openMenu();
}
if(self.menu.open)
{
if(self usebuttonpressed())
{
if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
{
self submenu(self.menu.previousmenu[self.menu.currentmenu]);
}
else
{
closeMenu();
}
wait 0.2;
}
if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
{
self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
}
if(self jumpbuttonpressed())
{
self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
wait 0.2;
}
}
wait 0.05;
}
}

submenu(input, title)
{
if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
{
for(i=0; i < self.menu.opt.size; i++)
{ self.menu.opt[i] destroy(); }

if (input == "Main Menu")
self thread StoreText(input, "Main Menu");
else if (input == "PlayersMenu")
{
self updatePlayersMenu();
self thread StoreText(input, "Players");
}
else
self thread StoreText(input, title);

self.CurMenu = input;

self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
self.menu.curs[input] = self.menu.scrollerpos[input];

if (!self.menu.closeondeath)
{
self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
}
}
else
{
self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
}
}

//Functions

Toggle_God()
{
if(self.God==false)
{
self iPrintln("GodMod : ^2ON");
self enableInvulnerability();
self.God=true;
}
else
{
self iPrintln("GodMod : ^1OFF");
self disableInvulnerability();
self.God=false;
}
}

Toggle_unlimitedammo()
{
if(self.unlimitedammo==0)
{
self.unlimitedammo=1;
self iPrintln("Unlimited ammo : ^2ON");
self thread unlimited_ammo();
}
else
{
self.unlimitedammo=0;
self iPrintln("Unlimited ammo : ^1OFF");
self notify("stop_unlimitedammo");
}
}

unlimited_ammo( )
{
self endon( "disconnect" );
self endon( "death" );

for(;Winky Winky
{
wait 0.1;

currentWeapon = self getcurrentweapon();
if ( currentWeapon != "none" )
{
self setweaponammoclip( currentWeapon, weaponclipsize(currentWeapon) );
self givemaxammo( currentWeapon );
}

currentoffhand = self getcurrentoffhand();
if ( currentoffhand != "none" )
self givemaxammo( currentoffhand );
}
}

Toggle_Multijump()
{
if(self.MultiJump==0)
{
self thread onPlayerMultijump();
self.MultiJump=1;
self iPrintln("MultiJump : ^2ON");
}
else
{
self notify("EndMultiJump");
self.MultiJump=0;
self iPrintln("MultiJump : ^1OFF");
}
}

landsOnGround()
{
self endon( "disconnect" );
loopResult = true;
for(;Winky Winky
{
wait 0.05;
newResult = self isOnGround();
if(newResult != loopResult)
{
if(!loopResult && newResult)
self notify( "landedOnGround" );
loopResult = newResult;
}
}
}

onPlayerMultijump()
{
self endon( "disconnect" );
self thread landsOnGround();

if(!isDefined(self.numOfMultijumps))
self.numOfMultijumps = 2;

for(;Winky Winky
{
currentNum = 0;

while(!self jumpbuttonpressed()) wait 0.05;
while(self jumpbuttonpressed()) wait 0.05;

if(getDvarInt("jump_height") > 250)
continue;

if ( !isAlive( self ) )
{
self waittill("spawned_player");
continue;
}

if ( !self isOnGround() )
{
while( !self isOnGround() && isAlive( self ) && currentNum < self.numOfMultijumps)
{
waittillResult = self waittill_any_timeout( 0.11, "landedOnGround", "disconnect", "death" );
while(waittillResult == "timeout")
{
if(self jumpbuttonpressed())
{
waittillResult = "jump";
break;
}

waittillResult = self waittill_any_timeout( 0.05, "landedOnGround", "disconnect", "death" );
}

if(waittillResult == "jump" && !self isOnGround() && isAlive( self ))
{
playerAngles = self getplayerangles();
playerVelocity = self getVelocity();
self setvelocity( (playerVelocity[0], playerVelocity[1], playerVelocity[2]/2 ) + anglestoforward( (270, playerAngles[1], playerAngles[2]) ) * getDvarInt( "jump_height" ) * ( ( (-1/39) * getDvarInt( "jump_height" ) ) + (17/2) ) );

currentNum++;
while(self jumpbuttonpressed()) wait 0.05;
}
else
break;
}

while(!self isOnGround())
wait 0.05;
}
}
}

Toggle_SpeedX2()
{
if(self.SpeedX2==0)
{
self.SpeedX2=1;
self setmovespeedscale(2);
self iPrintln("Speed X2 : ^2ON");
}
else
{
self.SpeedX2=0;
self setmovespeedscale(1);
self iPrintln("Speed X2 : ^1OFF");
}
}

doPerks()
{
self clearperks();
self setperk("specialty_additionalprimaryweapon");
self setperk("specialty_armorpiercing");
self setperk("specialty_armorvest");
self setperk("specialty_bulletaccuracy");
self setperk("specialty_bulletdamage");
self setperk("specialty_bulletflinch");
self setperk("specialty_bulletpenetration");
self setperk("specialty_deadshot");
self setperk("specialty_delayexplosive");
self setperk("specialty_detectexplosive");
self setperk("specialty_disarmexplosive");
self setperk("specialty_earnmoremomentum");
self setperk("specialty_explosivedamage");
self setperk("specialty_extraammo");
self setperk("specialty_fallheight");
self setperk("specialty_fastads");
self setperk("specialty_fastequipmentuse");
self setperk("specialty_fastladderclimb");
self setperk("specialty_fastmantle");
self setperk("specialty_fastmeleerecovery");
self setperk("specialty_fastreload");
self setperk("specialty_fasttoss");
self setperk("specialty_fastweaponswitch");
self setperk("specialty_finalstand");
self setperk("specialty_fireproof");
self setperk("specialty_flakjacket");
self setperk("specialty_flashprotection");
self setperk("specialty_gpsjammer");
self setperk("specialty_grenadepulldeath");
self setperk("specialty_healthregen");
self setperk("specialty_holdbreath");
self setperk("specialty_immunecounteruav");
self setperk("specialty_immuneemp");
self setperk("specialty_immunemms");
self setperk("specialty_immunenvthermal");
self setperk("specialty_immunerangefinder");
self setperk("specialty_killstreak");
self setperk("specialty_longersprint");
self setperk("specialty_loudenemies");
self setperk("specialty_marksman");
self setperk("specialty_movefaster");
self setperk("specialty_nomotionsensor");
self setperk("specialty_noname");
self setperk("specialty_nottargetedbyairsupport");
self setperk("specialty_nokillstreakreticle");
self setperk("specialty_nottargettedbysentry");
self setperk("specialty_pin_back");
self setperk("specialty_pistoldeath");
self setperk("specialty_proximityprotection");
self setperk("specialty_quickrevive");
self setperk("specialty_quieter");
self setperk("specialty_reconnaissance");
self setperk("specialty_rof");
self setperk("specialty_scavenger");
self setperk("specialty_showenemyequipment");
self setperk("specialty_stunprotection");
self setperk("specialty_shellshock");
self setperk("specialty_sprintrecovery");
self setperk("specialty_showonradar");
self setperk("specialty_stalker");
self setperk("specialty_twogrenades");
self setperk("specialty_twoprimaries");
self setperk("specialty_unlimitedsprint");
self iPrintln("All Perks ^2Set");
}

clearkperkslel()
{
self iPrintln("^2Clear all perks!");
self clearperks();
}

cloneyourself()
{
self iPrintln("^2Duuuuh You Have A Fucking Clown!");
self cloneplayer(1);
}

Toggle_Hideeeeee()
{
if(self.Hideeeeee==0)
{
self.Hideeeeee=1;
self iPrintln("Invisible : ^2ON");
self hide();
}
else
{
self.Hideeeeee=0;
self iPrintln("Invisible : ^1OFF");
self show();
}
}

ToggleFOV()
{
if(self.fov == true)
{
self iPrintln("FOV : ^2ON");
setDvar("cg_fov", "110");
self.fov = false;
}
else
{
self iPrintln("FOV : ^1OFF");
setDvar("cg_fov", "65");
self.fov = true;
}
}

ToggleLeft()
{
if(self.LG == true)
{
self iPrintln("Left Sided Gun : ^2ON");
setDvar("cg_gun_y", "7");
self.LG = false;
}
else
{
self iPrintln("Left Sided Gun : ^1OFF");
setDvar("cg_gun_y", "0");
self.LG = true;
}
}

doTeleport()
{
self iPrintln("^2Ready for Teleport!");
self beginLocationSelection( "map_mortar_selector" );
self.selectingLocation = 1;
self waittill( "confirm_location", location );
newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
self SetOrigin( newLocation );
self endLocationSelection();
self.selectingLocation = undefined;
self iPrintLn("Teleported!");
}

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

self iPrintln("^2Have Fun Changing class!");
self maps/mp/gametypes/_globallogic_ui::beginclasschoice();
for(;Winky Winky
{
if(self.pers[ "changed_class" ])
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait 0.05;
}
}

/*****
* Overflow fix for BO2 GSC mods.
* Created by TheFallen
*****/

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

// YOU MUST HAVE THIS
isFirstSpawn = true;

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

// YOU MUST HAVE THIS
// only runs once when the player spawns for the first time
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
}
}
}

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

// YOU MUST HAVE THESE
textElem.type = "text";
addTextTableEntry(textElem, getStringId(text));
textElem setSafeText(self, text);

return textElem;
}

/*
* Text Table Structure:
*
* id = id of text element
* element = text element
* stringId = id of string text element uses
*
**************************************************
*
* String Table Structure:
*
* id = id of string
* string = string value
*
*/

initOverFlowFix()
{
// tables
self.stringTable = [];
self.stringTableEntryCount = 0;
self.textTable = [];
self.textTableEntryCount = 0;

if(isDefined(level.anchorText) == false)
{
level.anchorText = createServerFontString("default",1.5);
level.anchorText setText("anchor");
level.anchorText.alpha = 0;

level.stringCount = 0;
}
}

clearStrings()
{
level.anchorText clearAllTextAfterHudElem();
level.stringCount = 0;

foreach(player in level.players)
{
player iprintln("cleared");
player purgeTextTable();
player purgeStringTable();
player recreateText();
}
}

setSafeText(player, text)
{
stringId = player getStringId(text);

// if the string doesn't exist add it and get its id
if(stringId == -1)
{
player addStringTableEntry(text);
stringId = player getStringId(text);
}

// update the entry for this text element
player editTextTableEntry(self.textTableIndex, stringId);

// Check if we have used up all of our strings -- clear if true
if(level.stringCount > 50)
clearStrings();

self setText(text);
}

recreateText()
{
foreach(entry in self.textTable)
entry.element setSafeText(self, lookUpStringById(entry.stringId));
}

addStringTableEntry(string)
{
// create new entry
entry = spawnStruct();
entry.id = self.stringTableEntryCount;
entry.string = string;

self.stringTable[self.stringTable.size] = entry; // add new entry
self.stringTableEntryCount++;
level.stringCount++;
}

lookUpStringById(id)
{
string = "";

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
string = entry.string;
break;
}
}

return string;
}

getStringId(string)
{
id = -1;

foreach(entry in self.stringTable)
{
if(entry.string == string)
{
id = entry.id;
break;
}
}

return id;
}

getStringTableEntry(id)
{
stringTableEntry = -1;

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
stringTableEntry = entry;
break;
}
}

return stringTableEntry;
}

purgeStringTable()
{
stringTable = [];

// store all used strings
foreach(entry in self.textTable)
stringTable[stringTable.size] = getStringTableEntry(entry.stringId);

self.stringTable = stringTable; // empty array
}

purgeTextTable()
{
textTable = [];

foreach(entry in self.textTable)
{
if(entry.id != -1)
textTable[textTable.size] = entry;
}

self.textTable = textTable;
}

addTextTableEntry(element, stringId)
{
entry = spawnStruct();
entry.id = self.textTableEntryCount;
entry.element = element;
entry.stringId = stringId;

element.textTableIndex = entry.id;

self.textTable[self.textTable.size] = entry;
self.textTableEntryCount++;
}

editTextTableEntry(id, stringId)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.stringId = stringId;
break;
}
}
}

deleteTextTableEntry(id)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.id = -1;
entry.stringId = -1;
}
}
}

clear(player)
{
if(self.type == "text")
player deleteTextTableEntry(self.textTableIndex);

self destroy();
}
07-14-2015, 06:06 PM #10
Originally posted by Gentle
1 syntax error at
    
self thread maps\mp\gametypes\_hud_message::notifyMessage(noti fyData);


It should be
    
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);



Now here it is all together
    #include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_utility;
#include maps/mp/gametypes/_rank;

//BO2 GSC Menu Base By Shark

init()
{
level thread onplayerconnect();
}

onplayerconnect()
{
for(;Winky Winky
{
level waittill( "connecting", player );

if(player isHost() || player islocaltohost())
{
player.AccessLevel = "Host";
player thread welcomeAnim();
}
else
player.AccessLevel = "Unverified";

player thread onplayerspawned();
}
}

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

isFirstSpawn = true;
self.MenuInit = false;

for(;Winky Winky
{
self waittill( "spawned_player" );
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
self welcomeMessage();
if( self.status == "Host" || self.status == "CoHost" || self.status == "Admin" || self.status == "VIP" || self.status == "Verified")
{
if (!self.MenuInit)
{
self.MenuInit = true;
self thread MenuInit();
self thread closeMenuOnDeath();
}
}
}
}
}

drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort)
{
hud = self createFontString(font, fontScale);
hud setText(text);
hud.x = x;
hud.y = y;
hud.color = color;
hud.alpha = alpha;
hud.glowColor = glowColor;
hud.glowAlpha = glowAlpha;
hud.sort = sort;
hud.alpha = alpha;
return hud;
}

drawShader(shader, x, y, width, height, color, alpha, sort)
{
hud = newClientHudElem(self);
hud.elemtype = "icon";
hud.color = color;
hud.alpha = alpha;
hud.sort = sort;
hud.children = [];
hud setParent(level.uiParent);
hud setShader(shader, width, height);
hud.x = x;
hud.y = y;
return hud;
}

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 "^5CoHost";
if (status == "Admin")
return "^1Admin";
if (status == "VIP")
return "^4VIP";
if (status == "Verified")
return "^3Verified";
else
return "^7Unverified";
}

changeVerificationMenu(player, verlevel)
{
if( player.status != verlevel)
{
player.status = verlevel;

self.menu.title destroy();
self.menu.title = drawText("[" + verificationToColor(player.status) + "^7] " + player.name, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

if(player.status == "Unverified")
self thread destroyMenu(player);

player suicide();
self iPrintln("Set Access Level For " + player.name + " To " + verificationToColor(verlevel));
player iPrintln("Your Access Level Has Been Set To " + verificationToColor(verlevel));
}
else
{
self iPrintln("Access Level For " + player.name + " Is Already Set To " + verificationToColor(verlevel));
}
}

changeVerification(player, verlevel)
{
player.status = verlevel;
}

Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}

welcomeMessage()
{
notifyData = spawnstruct();
notifyData.titleText = "Welcome " + self.name + " To (Alpha)"; //Line 1
notifyData.notifyText = "Your Status Is " + verificationToColor(self.status); //Line 2
notifyData.glowColor = (0.3, 0.6, 0.3); //RGB Color array divided by 100
notifyData.duration = 10; //Change Duration
notifyData.font = "objective"; //font
notifyData.hideWhenInMenu = false;
self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

WelcomeAnim()
{
self endon("death");
self endon("disconnect");
self endon("Welcome_Done");

self.menuControls = false;
for(;Winky Winky
{
self waittill("spawned_player");
self setClientUiVisibilityFlag("hud_visible", 0);
self disableWeapons();
self Hide();
self freezeControls(true);
zoomHeight = 5000;
zoomBack = 4000;
yaw = 55;
origin = self.origin;
self.origin = origin + vector_scale(anglestoforward(self.angles + (0, -180, 0)), zoomBack) + (0, 0, zoomHeight);
ent = spawn("script_model", (0 ,0, 0));
ent.angles = self.angles + (yaw, 0, 0);
ent.origin = self.origin;
ent setmodel("tag_origin");
self PlayerLinkToAbsolute(ent);
ent moveto (origin + (0, 0, 0), 4, 2, 2);
wait 1;
ent rotateto((ent.angles[0] - yaw, ent.angles[1], 0), 3, 1, 1);
wait 0.5;
self playlocalsound("ui_camera_whoosh_in");
wait 2.5;
self unlink();
wait 0.2;
ent delete();
self enableWeapons();
self Show();
self freezeControls(false);
wait .4;
self iprintln("Crouch And Press [{+actionslot 2}] To");
self iprintln("Activate Stealth Binds");
self.menuControls = true;
self notify("Welcome_Done");
}
}

CreateMenu()
{
self add_menu("Main Menu", undefined, "Unverified");
self add_option("Main Menu", "Main Mods Menu", ::submenu, "MainModsMenu", "Main Mods Menu");
self add_option("Main Menu", "Fun Menu", ::submenu, "FunMenu", "Fun Menu");
self add_option("Main Menu", "Game Settings Menu", ::submenu, "GameSettingsMenu", "Game Settings Menu");
self add_option("Main Menu", "Players", ::submenu, "PlayersMenu", "Players");

self add_menu("MainModsMenu", "Main Menu", "Admin");
self add_option("MainModsMenu", "God Mod", ::Toggle_God);
self add_option("MainModsMenu", "Unlimited Ammo", ::Toggle_unlimitedammo);
self add_option("MainModsMenu", "MultiJump", ::Toggle_Multijump);
self add_option("MainModsMenu", "Speed X2", ::Toggle_SpeedX2);
self add_option("MainModsMenu", "All Perks", ::doPerks);
self add_option("MainModsMenu", "Cleark Perks", ::clearkperkslel);
self add_option("MainModsMenu", "Clone Player", ::cloneyourself);
self add_option("MainModsMenu", "Invisible", ::Toggle_Hideeeeee);
self add_option("MainModsMenu", "Pro mod", ::ToggleFOV);
self add_option("MainModsMenu", "Gun Left Side", ::ToggleLeft);
self add_option("MainModsMenu", "Teleport", ::doTeleport);
self add_option("MainModsMenu", "Change Class InGame", ::ChangeClass);

self add_menu("FunMenu", "Main Menu", "VIP");
self add_option("FunMenu", "Option 1");
self add_option("FunMenu", "Option 2");
self add_option("FunMenu", "Option 3");

self add_menu("GameSettingsMenu", "Main Menu", "Verified");
self add_option("GameSettingsMenu", "Option 1");
self add_option("GameSettingsMenu", "Option 2");
self add_option("GameSettingsMenu", "Option 3");

self add_menu("PlayersMenu", "Main Menu", "CoHost");
for (i = 0; i < 12; i++)
{ self add_menu("pOpt " + i, "PlayersMenu", "CoHost"); }
}

updatePlayersMenu()
{
self.menu.menucount["PlayersMenu"] = 0;
for (i = 0; i < 12; i++)
{
player = level.players[i];
name = player.name;

playersizefixed = level.players.size - 1;
if(self.menu.curs["PlayersMenu"] > playersizefixed)
{
self.menu.scrollerpos["PlayersMenu"] = playersizefixed;
self.menu.curs["PlayersMenu"] = playersizefixed;
}

self add_option("PlayersMenu", "[" + verificationToColor(player.status) + "^7] " + player.name, ::submenu, "pOpt " + i, "[" + verificationToColor(player.status) + "^7] " + player.name);

self add_menu_alt("pOpt " + i, "PlayersMenu");
self add_option("pOpt " + i, "Give CoHost", ::changeVerificationMenu, player, "CoHost");
self add_option("pOpt " + i, "Give Admin", ::changeVerificationMenu, player, "Admin");
self add_option("pOpt " + i, "Give VIP", ::changeVerificationMenu, player, "VIP");
self add_option("pOpt " + i, "Verify", ::changeVerificationMenu, player, "Verified");
self add_option("pOpt " + i, "Unverify", ::changeVerificationMenu, player, "Unverified");
}
}

add_menu_alt(Menu, prevmenu)
{
self.menu.getmenu[Menu] = Menu;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_menu(Menu, prevmenu, status)
{
self.menu.status[Menu] = status;
self.menu.getmenu[Menu] = Menu;
self.menu.scrollerpos[Menu] = 0;
self.menu.curs[Menu] = 0;
self.menu.menucount[Menu] = 0;
self.menu.previousmenu[Menu] = prevmenu;
}

add_option(Menu, Text, Func, arg1, arg2)
{
Menu = self.menu.getmenu[Menu];
Num = self.menu.menucount[Menu];
self.menu.menuopt[Menu][Num] = Text;
self.menu.menufunc[Menu][Num] = Func;
self.menu.menuinput[Menu][Num] = arg1;
self.menu.menuinput1[Menu][Num] = arg2;
self.menu.menucount[Menu] += 1;
}

openMenu()
{
self freezeControls( false );
self StoreText("Main Menu", "Main Menu");

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0.65;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -50;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
self.menu.open = true;
}

closeMenu()
{
for(i = 0; i < self.menu.opt.size; i++)
{
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 0;
}

self.menu.background FadeOverTime(0.3);
self.menu.background.alpha = 0;

self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 0;

self.menu.line MoveOverTime(0.15);
self.menu.line.y = -550;

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = -500;
self.menu.open = false;
}

destroyMenu(player)
{
player.MenuInit = false;
closeMenu();

wait 0.3;

for(i=0; i < self.menu.menuopt[player.menu.currentmenu].size; i++)
{ player.menu.opt[i] destroy(); }

player.menu.background destroy();
player.menu.scroller destroy();
player.menu.line destroy();
player.menu.title destroy();
player notify( "destroyMenu" );
}

closeMenuOnDeath()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");
for (;Winky Winky
{
self waittill("death");
self.menu.closeondeath = true;
self submenu("Main Menu", "Main Menu");
closeMenu();
self.menu.closeondeath = false;
}
}

StoreShaders()
{
self.menu.background = self drawShader("white", 320, -50, 300, 500, (0, 0, 0), 0, 0);
self.menu.scroller = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1);
self.menu.line = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2);
}

StoreText(menu, title)
{
self.menu.currentmenu = menu;
self.menu.title destroy();
self.menu.title = drawText(title, "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3);
self.menu.title FadeOverTime(0.3);
self.menu.title.alpha = 1;

for(i=0; i < self.menu.menuopt[menu].size; i++)
{
self.menu.opt[i] destroy();
self.menu.opt[i] = drawText(self.menu.menuopt[menu][i], "objective", 1.6, 280, 68 + (i*20), (1, 1, 1), 0, (0, 0, 0), 0, 4);
self.menu.opt[i] FadeOverTime(0.3);
self.menu.opt[i].alpha = 1;
}
}

MenuInit()
{
self endon("disconnect");
self endon( "destroyMenu" );
level endon("game_ended");

self.menu = spawnstruct();
self.toggles = spawnstruct();

self.menu.open = false;

self StoreShaders();
self CreateMenu();

for(;Winky Winky
{
if(self MeleeButtonPressed() && self adsbuttonpressed() && !self.menu.open) // Open.
{
openMenu();
}
if(self.menu.open)
{
if(self usebuttonpressed())
{
if(isDefined(self.menu.previousmenu[self.menu.currentmenu]))
{
self submenu(self.menu.previousmenu[self.menu.currentmenu]);
}
else
{
closeMenu();
}
wait 0.2;
}
if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed())
{
self.menu.curs[self.menu.currentmenu] += (Iif(self actionslottwobuttonpressed(), 1, -1));
self.menu.curs[self.menu.currentmenu] = (Iif(self.menu.curs[self.menu.currentmenu] < 0, self.menu.menuopt[self.menu.currentmenu].size-1, Iif(self.menu.curs[self.menu.currentmenu] > self.menu.menuopt[self.menu.currentmenu].size-1, 0, self.menu.curs[self.menu.currentmenu])));

self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.menu.currentmenu]].y+1;
}
if(self jumpbuttonpressed())
{
self thread [[self.menu.menufunc[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]]](self.menu.menuinput[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]], self.menu.menuinput1[self.menu.currentmenu][self.menu.curs[self.menu.currentmenu]]);
wait 0.2;
}
}
wait 0.05;
}
}

submenu(input, title)
{
if (verificationToNum(self.status) >= verificationToNum(self.menu.status[input]))
{
for(i=0; i < self.menu.opt.size; i++)
{ self.menu.opt[i] destroy(); }

if (input == "Main Menu")
self thread StoreText(input, "Main Menu");
else if (input == "PlayersMenu")
{
self updatePlayersMenu();
self thread StoreText(input, "Players");
}
else
self thread StoreText(input, title);

self.CurMenu = input;

self.menu.scrollerpos[self.CurMenu] = self.menu.curs[self.CurMenu];
self.menu.curs[input] = self.menu.scrollerpos[input];

if (!self.menu.closeondeath)
{
self.menu.scroller MoveOverTime(0.15);
self.menu.scroller.y = self.menu.opt[self.menu.curs[self.CurMenu]].y+1;
}
}
else
{
self iPrintln("Only Players With ^1" + verificationToColor(self.menu.status[input]) + " ^7Can Access This Menu!");
}
}

//Functions

Toggle_God()
{
if(self.God==false)
{
self iPrintln("GodMod : ^2ON");
self enableInvulnerability();
self.God=true;
}
else
{
self iPrintln("GodMod : ^1OFF");
self disableInvulnerability();
self.God=false;
}
}

Toggle_unlimitedammo()
{
if(self.unlimitedammo==0)
{
self.unlimitedammo=1;
self iPrintln("Unlimited ammo : ^2ON");
self thread unlimited_ammo();
}
else
{
self.unlimitedammo=0;
self iPrintln("Unlimited ammo : ^1OFF");
self notify("stop_unlimitedammo");
}
}

unlimited_ammo( )
{
self endon( "disconnect" );
self endon( "death" );

for(;Winky Winky
{
wait 0.1;

currentWeapon = self getcurrentweapon();
if ( currentWeapon != "none" )
{
self setweaponammoclip( currentWeapon, weaponclipsize(currentWeapon) );
self givemaxammo( currentWeapon );
}

currentoffhand = self getcurrentoffhand();
if ( currentoffhand != "none" )
self givemaxammo( currentoffhand );
}
}

Toggle_Multijump()
{
if(self.MultiJump==0)
{
self thread onPlayerMultijump();
self.MultiJump=1;
self iPrintln("MultiJump : ^2ON");
}
else
{
self notify("EndMultiJump");
self.MultiJump=0;
self iPrintln("MultiJump : ^1OFF");
}
}

landsOnGround()
{
self endon( "disconnect" );
loopResult = true;
for(;Winky Winky
{
wait 0.05;
newResult = self isOnGround();
if(newResult != loopResult)
{
if(!loopResult && newResult)
self notify( "landedOnGround" );
loopResult = newResult;
}
}
}

onPlayerMultijump()
{
self endon( "disconnect" );
self thread landsOnGround();

if(!isDefined(self.numOfMultijumps))
self.numOfMultijumps = 2;

for(;Winky Winky
{
currentNum = 0;

while(!self jumpbuttonpressed()) wait 0.05;
while(self jumpbuttonpressed()) wait 0.05;

if(getDvarInt("jump_height") > 250)
continue;

if ( !isAlive( self ) )
{
self waittill("spawned_player");
continue;
}

if ( !self isOnGround() )
{
while( !self isOnGround() && isAlive( self ) && currentNum < self.numOfMultijumps)
{
waittillResult = self waittill_any_timeout( 0.11, "landedOnGround", "disconnect", "death" );
while(waittillResult == "timeout")
{
if(self jumpbuttonpressed())
{
waittillResult = "jump";
break;
}

waittillResult = self waittill_any_timeout( 0.05, "landedOnGround", "disconnect", "death" );
}

if(waittillResult == "jump" && !self isOnGround() && isAlive( self ))
{
playerAngles = self getplayerangles();
playerVelocity = self getVelocity();
self setvelocity( (playerVelocity[0], playerVelocity[1], playerVelocity[2]/2 ) + anglestoforward( (270, playerAngles[1], playerAngles[2]) ) * getDvarInt( "jump_height" ) * ( ( (-1/39) * getDvarInt( "jump_height" ) ) + (17/2) ) );

currentNum++;
while(self jumpbuttonpressed()) wait 0.05;
}
else
break;
}

while(!self isOnGround())
wait 0.05;
}
}
}

Toggle_SpeedX2()
{
if(self.SpeedX2==0)
{
self.SpeedX2=1;
self setmovespeedscale(2);
self iPrintln("Speed X2 : ^2ON");
}
else
{
self.SpeedX2=0;
self setmovespeedscale(1);
self iPrintln("Speed X2 : ^1OFF");
}
}

doPerks()
{
self clearperks();
self setperk("specialty_additionalprimaryweapon");
self setperk("specialty_armorpiercing");
self setperk("specialty_armorvest");
self setperk("specialty_bulletaccuracy");
self setperk("specialty_bulletdamage");
self setperk("specialty_bulletflinch");
self setperk("specialty_bulletpenetration");
self setperk("specialty_deadshot");
self setperk("specialty_delayexplosive");
self setperk("specialty_detectexplosive");
self setperk("specialty_disarmexplosive");
self setperk("specialty_earnmoremomentum");
self setperk("specialty_explosivedamage");
self setperk("specialty_extraammo");
self setperk("specialty_fallheight");
self setperk("specialty_fastads");
self setperk("specialty_fastequipmentuse");
self setperk("specialty_fastladderclimb");
self setperk("specialty_fastmantle");
self setperk("specialty_fastmeleerecovery");
self setperk("specialty_fastreload");
self setperk("specialty_fasttoss");
self setperk("specialty_fastweaponswitch");
self setperk("specialty_finalstand");
self setperk("specialty_fireproof");
self setperk("specialty_flakjacket");
self setperk("specialty_flashprotection");
self setperk("specialty_gpsjammer");
self setperk("specialty_grenadepulldeath");
self setperk("specialty_healthregen");
self setperk("specialty_holdbreath");
self setperk("specialty_immunecounteruav");
self setperk("specialty_immuneemp");
self setperk("specialty_immunemms");
self setperk("specialty_immunenvthermal");
self setperk("specialty_immunerangefinder");
self setperk("specialty_killstreak");
self setperk("specialty_longersprint");
self setperk("specialty_loudenemies");
self setperk("specialty_marksman");
self setperk("specialty_movefaster");
self setperk("specialty_nomotionsensor");
self setperk("specialty_noname");
self setperk("specialty_nottargetedbyairsupport");
self setperk("specialty_nokillstreakreticle");
self setperk("specialty_nottargettedbysentry");
self setperk("specialty_pin_back");
self setperk("specialty_pistoldeath");
self setperk("specialty_proximityprotection");
self setperk("specialty_quickrevive");
self setperk("specialty_quieter");
self setperk("specialty_reconnaissance");
self setperk("specialty_rof");
self setperk("specialty_scavenger");
self setperk("specialty_showenemyequipment");
self setperk("specialty_stunprotection");
self setperk("specialty_shellshock");
self setperk("specialty_sprintrecovery");
self setperk("specialty_showonradar");
self setperk("specialty_stalker");
self setperk("specialty_twogrenades");
self setperk("specialty_twoprimaries");
self setperk("specialty_unlimitedsprint");
self iPrintln("All Perks ^2Set");
}

clearkperkslel()
{
self iPrintln("^2Clear all perks!");
self clearperks();
}

cloneyourself()
{
self iPrintln("^2Duuuuh You Have A Fucking Clown!");
self cloneplayer(1);
}

Toggle_Hideeeeee()
{
if(self.Hideeeeee==0)
{
self.Hideeeeee=1;
self iPrintln("Invisible : ^2ON");
self hide();
}
else
{
self.Hideeeeee=0;
self iPrintln("Invisible : ^1OFF");
self show();
}
}

ToggleFOV()
{
if(self.fov == true)
{
self iPrintln("FOV : ^2ON");
setDvar("cg_fov", "110");
self.fov = false;
}
else
{
self iPrintln("FOV : ^1OFF");
setDvar("cg_fov", "65");
self.fov = true;
}
}

ToggleLeft()
{
if(self.LG == true)
{
self iPrintln("Left Sided Gun : ^2ON");
setDvar("cg_gun_y", "7");
self.LG = false;
}
else
{
self iPrintln("Left Sided Gun : ^1OFF");
setDvar("cg_gun_y", "0");
self.LG = true;
}
}

doTeleport()
{
self iPrintln("^2Ready for Teleport!");
self beginLocationSelection( "map_mortar_selector" );
self.selectingLocation = 1;
self waittill( "confirm_location", location );
newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
self SetOrigin( newLocation );
self endLocationSelection();
self.selectingLocation = undefined;
self iPrintLn("Teleported!");
}

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

self iPrintln("^2Have Fun Changing class!");
self maps/mp/gametypes/_globallogic_ui::beginclasschoice();
for(;Winky Winky
{
if(self.pers[ "changed_class" ])
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait 0.05;
}
}

/*****
* Overflow fix for BO2 GSC mods.
* Created by TheFallen
*****/

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

// YOU MUST HAVE THIS
isFirstSpawn = true;

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

// YOU MUST HAVE THIS
// only runs once when the player spawns for the first time
if(isFirstSpawn)
{
initOverFlowFix();

isFirstSpawn = false;
}
}
}

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

// YOU MUST HAVE THESE
textElem.type = "text";
addTextTableEntry(textElem, getStringId(text));
textElem setSafeText(self, text);

return textElem;
}

/*
* Text Table Structure:
*
* id = id of text element
* element = text element
* stringId = id of string text element uses
*
**************************************************
*
* String Table Structure:
*
* id = id of string
* string = string value
*
*/

initOverFlowFix()
{
// tables
self.stringTable = [];
self.stringTableEntryCount = 0;
self.textTable = [];
self.textTableEntryCount = 0;

if(isDefined(level.anchorText) == false)
{
level.anchorText = createServerFontString("default",1.5);
level.anchorText setText("anchor");
level.anchorText.alpha = 0;

level.stringCount = 0;
}
}

clearStrings()
{
level.anchorText clearAllTextAfterHudElem();
level.stringCount = 0;

foreach(player in level.players)
{
player iprintln("cleared");
player purgeTextTable();
player purgeStringTable();
player recreateText();
}
}

setSafeText(player, text)
{
stringId = player getStringId(text);

// if the string doesn't exist add it and get its id
if(stringId == -1)
{
player addStringTableEntry(text);
stringId = player getStringId(text);
}

// update the entry for this text element
player editTextTableEntry(self.textTableIndex, stringId);

// Check if we have used up all of our strings -- clear if true
if(level.stringCount > 50)
clearStrings();

self setText(text);
}

recreateText()
{
foreach(entry in self.textTable)
entry.element setSafeText(self, lookUpStringById(entry.stringId));
}

addStringTableEntry(string)
{
// create new entry
entry = spawnStruct();
entry.id = self.stringTableEntryCount;
entry.string = string;

self.stringTable[self.stringTable.size] = entry; // add new entry
self.stringTableEntryCount++;
level.stringCount++;
}

lookUpStringById(id)
{
string = "";

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
string = entry.string;
break;
}
}

return string;
}

getStringId(string)
{
id = -1;

foreach(entry in self.stringTable)
{
if(entry.string == string)
{
id = entry.id;
break;
}
}

return id;
}

getStringTableEntry(id)
{
stringTableEntry = -1;

foreach(entry in self.stringTable)
{
if(entry.id == id)
{
stringTableEntry = entry;
break;
}
}

return stringTableEntry;
}

purgeStringTable()
{
stringTable = [];

// store all used strings
foreach(entry in self.textTable)
stringTable[stringTable.size] = getStringTableEntry(entry.stringId);

self.stringTable = stringTable; // empty array
}

purgeTextTable()
{
textTable = [];

foreach(entry in self.textTable)
{
if(entry.id != -1)
textTable[textTable.size] = entry;
}

self.textTable = textTable;
}

addTextTableEntry(element, stringId)
{
entry = spawnStruct();
entry.id = self.textTableEntryCount;
entry.element = element;
entry.stringId = stringId;

element.textTableIndex = entry.id;

self.textTable[self.textTable.size] = entry;
self.textTableEntryCount++;
}

editTextTableEntry(id, stringId)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.stringId = stringId;
break;
}
}
}

deleteTextTableEntry(id)
{
foreach(entry in self.textTable)
{
if(entry.id == id)
{
entry.id = -1;
entry.stringId = -1;
}
}
}

clear(player)
{
if(self.type == "text")
player deleteTextTableEntry(self.textTableIndex);

self destroy();
}


It doesn't work.. :( The game crash when I start a match.

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo