#include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\gametypes\_hud_util; init() { level thread onPlayerConnect(); level thread init_overflowfix(); PrecacheShader("white"); } onPlayerConnect() { for(;;) { level waittill("connected", player); player thread onPlayerSpawned(); if(player isHost()) { player thread initMenu(); player.Verified = true; } } } onPlayerSpawned() { self endon("disconnect"); level endon("game_ended"); for(;;) { self waittill("spawned_player"); } } // Menu Init InitVariables() { setdvar("testbool", "^1off"); self.HazeDer = "Brav"; } initMenu() { self.Menu = spawnStruct(); self.Hud = spawnStruct(); self.Menu.Opened = false; self InitVariables(); self thread menuStructure(); self thread MonitorButtons(); self thread menuButtons(); } // Menu Scrolling menuButtons() { self endon("disconnect"); while( self.Verified ) { if(self.Menu.Opened == false) { if(self isButtonPressed("+actionslot 1") && self AdsButtonPressed()) { self.Menu.Opened = true; self thread createHud(); self _loadMenu("main"); wait 0.2; } } else if(self.Menu.Opened == true) { if(self isButtonPressed("+actionslot 1")) { self.Scroller--; self _scrollUpdate(); wait 0.1; } if(self isButtonPressed("+actionslot 2")) { self.Scroller++; self _scrollUpdate(); wait 0.1; } if(self isButtonPressed("+actionslot 4")) { if(self.Menu.SlideType[self.Menu.CurrentMenu][self.Scroller] == "dvar") { self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] += self.Menu.SliderMove[self.Menu.CurrentMenu][self.Scroller]; if(self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] > self.Menu.SliderMax[self.Menu.CurrentMenu][self.Scroller]) self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] = self.Menu.SliderMin[self.Menu.CurrentMenu][self.Scroller]; self setClientDvar(self.Menu.SliderDvar[self.Menu.CurrentMenu][self.Scroller], self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller]); wait 0.1; } else { self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] += self.Menu.SliderMove[self.Menu.CurrentMenu][self.Scroller]; } self _scrollUpdate(); wait 0.2; } if(self isButtonPressed("+actionslot 3")) { if(self.Menu.SlideType[self.Menu.CurrentMenu][self.Scroller] == "dvar") { self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] -= self.Menu.SliderMove[self.Menu.CurrentMenu][self.Scroller]; if(self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] < self.Menu.SliderMin[self.Menu.CurrentMenu][self.Scroller]) self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] = self.Menu.SliderMax[self.Menu.CurrentMenu][self.Scroller]; self setClientDvar(self.Menu.SliderDvar[self.Menu.CurrentMenu][self.Scroller], self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller]); wait 0.1; } else { self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] -= self.Menu.SliderMove[self.Menu.CurrentMenu][self.Scroller]; } self _scrollUpdate(); wait 0.2; } if(self UseButtonPressed()) { a1 = self.Menu.a1[self.Menu.CurrentMenu][self.Scroller]; a2 = self.Menu.a2[self.Menu.CurrentMenu][self.Scroller]; a3 = self.Menu.a3[self.Menu.CurrentMenu][self.Scroller]; a4 = self.Menu.a4[self.Menu.CurrentMenu][self.Scroller]; self thread [[self.Menu.Func[self.Menu.CurrentMenu][self.Scroller]]](a1, a2, a3, a4); self _scrollUpdate(); wait 0.2; } if(self MeleeButtonPressed()) { if(self.Menu.parent[self.Menu.CurrentMenu] == "Exit") { self.Menu.Opened = false; self thread destroyMenuText(); self thread destroyHud(); } else { self _loadMenu(self.Menu.parent[self.Menu.CurrentMenu]); } wait 0.3; } } wait 0.05; } wait 0.05; } _scrollUpdate() { if(self.Scroller<0) { self.Scroller = self.Menu.Text[self.Menu.CurrentMenu].size-1; } if(self.Scroller>self.Menu.Text[self.Menu.CurrentMenu].size-1) { self.Scroller = 0; } if (self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] > self.Menu.SliderMax[self.Menu.CurrentMenu][self.Scroller]) self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] = self.Menu.SliderMin[self.Menu.CurrentMenu][self.Scroller]; if (self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] < self.Menu.SliderMin[self.Menu.CurrentMenu][self.Scroller]) self.Menu.Slider[self.Menu.CurrentMenu][self.Scroller] = self.Menu.SliderMax[self.Menu.CurrentMenu][self.Scroller]; self menuStructure(); if(!isDefined( self.Menu.Text[ self.Menu.CurrentMenu ][ self.Scroller -7 ] ) || self.Menu.Text[self.Menu.CurrentMenu].size <= 8 ) { for( i = 0; i < 8; i++ ) { if(isDefined(self.Menu.Text[ self.Menu.CurrentMenu ][ i ])) { self.Hud.Text[i] _setText(self.Menu.Text[ self.Menu.CurrentMenu ][ i ]); } else { self.Hud.Text[i] _setText(""); } if ( isdefined(self.Menu.Bool[self.Menu.CurrentMenu][i] )) { self.hud.BoolText[i] _setText(self.Menu.Bool[self.Menu.CurrentMenu][i]); } else { self.hud.BoolText[i] _setText(""); } } } else { optnum = 0; for( i = self.Scroller-7; i < self.Scroller+8; i++ ) { if(isDefined(self.Menu.Text[ self.Menu.CurrentMenu ][ i ])) { self.Hud.Text[optnum] _setText(self.Menu.Text[self.Menu.CurrentMenu][ i ]); } else { self.Hud.Text[optnum] _setText(""); } if ( isdefined(self.Menu.Bool[self.Menu.CurrentMenu][i])) { self.hud.BoolText[optnum] _setText(self.Menu.Bool[self.Menu.CurrentMenu][i]); } else { self.hud.BoolText[optnum] _setText(""); } optnum ++; } } if (self.Scroller < 8) scroll = self.Scroller; else scroll = 7; self.Hud.Scrollbar.y = 82+(18*scroll); } createMenuText() { for(i=0;i<8;i++) { self.Hud.Text[i] = self createText("default",1.4,"LEFT","TOP",-95,82+(18*i),0,(1,1,1),2,(0,0,0),1,self.Menu.Text[self.Menu.CurrentMenu][i]); self.hud.BoolText[i] = self createText("default", 1.4, "RIGHT", "TOP", 95, 82+(18*i), 2, (1,1,1), 1,(0,0,0),1 ,self.Menu.Bool[self.Menu.CurrentMenu][i] ); } } destroyMenuText() { if(isDefined(self.Hud.Text)) { for(i=0;i<8;i++) { self.Hud.Text[i] destroy(); self.hud.BoolText[i] destroy(); } } } createHud() { self.Hud.Title = createText("default",2.0,"CENTER","TOP",0,50,0,(1,1,1),1,(0,0,0),1,""); self.Hud.Title.foreground = true; self.Hud.Background = createRectangle("TOP","TOP",0,70,200,150,(0,0,0),.7,0,"white"); self.Hud.Header = createRectangle("TOP","TOP",0,30,200,40,(0,1,0),0.8,0,"white"); self.Hud.Scrollbar = createRectangle("CENTER","TOP",0,82,200,20,(0,1,0),0.8,1,"white"); self createMenuText(); } destroyHud() { self.Hud.Title destroy(); self.Hud.Background destroy(); self.Hud.Header destroy(); self.Hud.Scrollbar destroy(); } // Menu Base _loadMenu(menu) { self.Menu.CurrentMenu = menu; self.Scroller = 0; self.Hud.Title _setText(self.Menu.title[self.Menu.CurrentMenu]); self _scrollUpdate(); self updatebackground(); } updatebackground() { amount = self.Menu.Text[self.Menu.CurrentMenu].size; if(amount > 8) amount = 8; self.Hud.Background SetShader("white", 200, 7 + (18 * amount)); } CreateMenu(menu,title,parent) { self.Menu.title[menu] = title; self.Menu.parent[menu] = parent; self.Menu.OptCount[menu] = 0; } addOption(menu,text,func,input,input2,input3,input4) { index = self.Menu.OptCount[menu]; self.Menu.Text[menu][index] = text; if(isdefined(func) && func == ::_loadMenu) self.Menu.Bool[menu][index] = ">"; self.Menu.Func[menu][index] = func; self.Menu.a1[menu][index] = input; self.Menu.a2[menu][index] = input2; self.Menu.a3[menu][index] = input3; self.Menu.a4[menu][index] = input4; self.Menu.OptCount[menu] += 1; } addBoolOption(menu, text, func, bool) { index = self.Menu.OptCount[menu]; self.Menu.Text[menu][index] = text; self.Menu.Bool[menu][index] = bool; self.Menu.Func[menu][index] = func; self.Menu.OptCount[menu] += 1; } addStringSlider(menu, text, func, string , stringname) { index = self.Menu.OptCount[menu]; if (!isDefined(self.Menu.Slider[menu][index])) self.Menu.Slider[menu][index] = 0; self.Menu.SliderMin[menu][index] = 0; self.Menu.SliderMax[menu][index] = string.size - 1; self.Menu.SliderMove[menu][index] = 1; self.Menu.SlideType[menu][index] = "string"; self.Menu.Text[menu][index] = text; self.Menu.Bool[menu][index] = "<" + stringname[self.Menu.Slider[menu][index]] + ">"; self.Menu.Func[menu][index] = func; self.Menu.a1[menu][index] = string[self.Menu.Slider[menu][index]]; self.Menu.OptCount[menu] += 1; } addDvarSlider(menu, text, min, max, step, dvar) { index = self.Menu.OptCount[menu]; if (isDefined(dvar) && getDvar(dvar) != "") self.Menu.Slider[menu][index] = getdvarfloat(dvar); else self.Menu.Slider[menu][index] = min; self.Menu.SliderMin[menu][index] = min; self.Menu.SliderMax[menu][index] = max; self.Menu.SliderMove[menu][index] = step; self.Menu.SliderDvar[menu][index] = dvar; self.Menu.SlideType[menu][index] = "dvar"; self.Menu.Text[menu][index] = text; self.Menu.Bool[menu][index] = "<" + self.Menu.Slider[menu][index] + ">"; self.Menu.OptCount[menu] += 1; } // Hud Util createText(font, fontscale, align, relative, x, y, sort, color, alpha, glowColor, glowAlpha, text) { textElem = CreateFontString( font, fontscale ); textElem setPoint( align, relative, x, y ); textElem.sort = sort; textElem.type = "text"; textElem _setText(text); textElem.color = color; textElem.alpha = alpha; textElem.glowColor = glowColor; textElem.glowAlpha = glowAlpha; textElem.hideWhenInMenu = false; return textElem; } createRectangle(align, relative, x, y, width, height, color, alpha, sorting, shadero) { barElemBG = newClientHudElem(self); barElemBG.elemType = "bar"; barElemBG.width = width; barElemBG.height = height; barElemBG.align = align; barElemBG.relative = relative; barElemBG.xOffset = 0; barElemBG.yOffset = 0; barElemBG.children = []; barElemBG.color = color; if(isDefined(alpha)) barElemBG.alpha = alpha; else barElemBG.alpha = 1; barElemBG setShader( shadero, width , height ); barElemBG.hidden = false; barElemBG.sort = sorting; barElemBG setPoint(align,relative,x,y); return barElemBG; } // Overflow init_overFlowFix() { level.overFlowFix_Started = true; level.strings = []; level.overflowElem = createServerFontString("default",1.5); level.overflowElem _setText("overflow"); level.overflowElem.alpha = 0; level thread overflowfix_monitor(); } _setText(string) { self.string = string; self setText(string); self addString(string); self thread fix_string(); } addString(string) { level.strings[level.strings.size] = string; level notify("string_added"); } fix_string() { self notify("new_string"); self endon("new_string"); while(isDefined(self)) { level waittill("overflow_fixed"); if(isDefined(self.string)) { self _setText(self.string); } } } overflowfix_monitor() { level endon("game_ended"); for(;;) { level waittill("string_added"); if(level.strings.size >= 145) { level.overflowElem clearalltextafterhudelem();//180 level.overflowElem clearalltextafterhudelem();//180 level.overflowElem clearalltextafterhudelem();//180 level.strings = []; level notify("overflow_fixed"); //players = getentarray("player", "classname"); //for(i = 0; i < players.size; i++) //{ //iprintln("overflow"); //} wait 0.01; } } } // Button Monitor MonitorButtons() { if(!isdefined(self.monitoringbuttons)) self.monitoringbuttons = []; foreach(button in StrTok("+actionslot 1,+actionslot 2,+actionslot 3,+actionslot 4,+frag,+smoke,+melee", ",")) { self.monitoringbuttons[button] = false; self thread buttonmonitor(button); } } buttonmonitor(button) { self NotifyOnPlayerCommand(button, button); while(true) { self waittill(button); self.monitoringbuttons[button] = true; wait 0.1; self.monitoringbuttons[button] = false; } } isbuttonpressed(button) { return self.monitoringbuttons[button]; } // Menu Struct menuStructure() { self CreateMenu("main","Main Menu","Exit"); self addOption("main","Sub Menu 1",::_loadMenu,"submenu1"); self addOption("main","Sub Menu 2",::_loadMenu,"submenu1"); self addOption("main","Sub Menu 3",::_loadMenu,"submenu1"); self addOption("main","Client Menu",::_loadMenu,"clients"); self addBoolOption("main","Example Bool",::TestBool,getdvar("testbool")); self addBoolOption("main","Example Bool 2",::TestBool2,self.HazeDer); self addStringSlider("main","Example Slider",::GiveDaWeapon,strtok("cheytac_mp,barrett_mp,wa2000_mp,m21_mp", ","), strtok("Inter,Barrett,WA2000,M21", ",")); self addDvarSlider("main", "Example Dvar [FOV]", 65, 120, 1, "cg_fov"); self CreateMenu("submenu1","Sub Menu 1","main"); self addOption("submenu1","Test Option",::Test); self CreateMenu("clients", "Client Menu", "main"); foreach(player in level.players) { self addOption("clients", player.name, ::_loadMenu, player.name+"menu"); self CreateMenu(player.name+"menu", player.name, "clients"); self addOption(player.name+"menu", "Verify", ::VerifyClient, player); self addOption(player.name+"menu", "Unverify", ::UnverifyClient, player); } } // Functions GiveDaWeapon(weapon) { self giveweapon(weapon); self setspawnweapon(weapon); self iprintln(weapon + " ^2Given"); } TestBool2() { if(self.HazeDer == "Brav") { self.HazeDer = "Is"; } else if(self.HazeDer == "Is") { self.HazeDer = "The"; } else if(self.HazeDer == "The") { self.HazeDer = "Goat"; } else { self.HazeDer = "Brav"; } } TestBool() { if(getdvar("testbool") == "^1off") { setdvar("testbool", "^2on"); } else { setdvar("testbool", "^1off"); } } Test() { self iprintln("^1TEST"); } // Client Menu VerifyClient(player) { if(player isHost()) { self iPrintLn("^2You Cant Do This To The Host"); } else if(player.Verified == true) { self iPrintLn("^2This Player Is Already Verified"); } else { player.Verified = true; player thread initMenu(); self iPrintLn(player.name + " is now ^2Verified"); } } UnverifyClient(player) { if(player isHost()) { self iPrintLn("^2You Cant Do This To The Host"); } else { player.Verified = false; player.Menu.Opened = false; player thread destroyMenuText(); player thread destroyHud(); self iPrintLn(player.name + " is now ^1Unverified"); } }