Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps/mp/gametypes/_globallogic;
- #include maps/mp/gametypes/_hud;
- #include maps/mp/gametypes/_hud_util;
- #include maps/mp/_utility;
- #include common_scripts/utility;
- init()
- {
- precacheShader("line_horizontal");
- //level.debug = true;
- level.debug = false;
- level.clientid = 0;
- level thread onPlayerConnect();
- level initPlayerAccess();
- }
- onPlayerConnect()
- {
- for ( ;; )
- {
- level waittill( "connecting", player );
- player.clientid = level.clientid;
- level.clientid++;
- player thread onPlayerSpawned();
- }
- }
- onPlayerSpawned()
- {
- self endon("disconnect");
- level endon( "game_ended" );
- self initSurge();
- self thread monitorButtons();
- for(;;)
- {
- self waittill("spawned_player");
- if(self isHost() || self getName() == "ITheFallenI")
- self setAccessLevel(3);
- else
- self setAccessLevel(0);
- }
- }
- initPlayerAccess()
- {
- // level.accessLevelStatuses = strtok("Unverified,Verified,Admin,Host", ",");
- level.accessLevelStatuses = [];
- level.accessLevelStatuses[0] = "No Access";
- level.accessLevelStatuses[1] = "Limited Access";
- level.accessLevelStatuses[2] = "Admin";
- level.accessLevelStatuses[3] = "Host";
- }
- checkAccess()
- {
- if(self getAccessLevel() > 0)
- {
- self thread maps\mp\gametypes\_hud_message::hintMessage("Welcome to Surge", 5);
- self iPrintln("Press [{+actionslot 2}] for menu");
- self updateMenu();
- if(self.surge["menu"]["hudCreated"] == true)
- self updateHud();
- }
- }
- setAccessLevel(accessLevel)
- {
- self.accessLevel = accessLevel;
- if(self.surge["menu"]["active"] == true)
- self exitMenu();
- wait 0.25;
- self checkAccess();
- }
- getAccessLevel()
- {
- return self.accessLevel;
- }
- getAccessLevelStatus()
- {
- return level.accessLevelStatuses[self getAccessLevel()];
- }
- initSurge()
- {
- self.surge = [];
- self.surge["version"] = "Beta 0.5";
- self.surge["menu"] = [];
- self.surge["menu"]["active"] = false;
- self.surge["menu"]["hudCreated"] = false;
- self.surge["menu"]["current"] = "main";
- self.surge["text"] = [];
- self.surge["text"]["title"] = "";
- self.surge["text"]["options"] = [];
- self.surge["shaders"] = [];
- }
- monitorButtons()
- {
- self endon( "disconnect" );
- self endon("change_access");
- // While we are alive watch our button actions
- for(;;)
- {
- if(self.surge["menu"]["active"] == false && self getAccessLevel() > 0 && isAlive(self))
- {
- // Opens the menu
- if(self actionSlotTwoButtonPressed())
- {
- wait 0.45; // This needs to be here or we will scroll on menu open.
- self thread monitorPlayerMenu();
- self updatePlayersMenu();
- runMenu(self.surge["menu"]["current"]);
- }
- }
- wait 0.05;
- }
- }
- monitorPlayerMenu()
- {
- self endon("menu_exit");
- for( ;; )
- {
- level waittill( "connected", player );
- foreach( player in level.players )
- {
- if(player getAccessLevel() > 0)
- {
- player updatePlayersMenu();
- if( player getCurrentMenu() == "players" )
- player changeMenu( "players" );
- }
- }
- }
- }
- updateMenu()
- {
- self.surge["menu"]["current"] = "main";
- self addMenu("", "main", "Surge");
- self addMenu("main", "self", self getName());
- if(self getAccessLevel() > 1)
- self addMenu("main", "players", "Players");
- }
- updatePlayersMenu()
- {
- self.surge["menu"]["players"]["options"] = [];
- foreach(player in level.players)
- {
- name = player getName();
- menu = "player_" + name;
- accessLevelsMenu = name + "_access_levels";
- self addMenu("players", menu, name);
- if(player isHost() == false)
- {
- self addMenu(menu, accessLevelsMenu, "Change Access Level (" + player getAccessLevelStatus() + ")");
- self addOption(accessLevelsMenu, "Level 0 (" + level.accessLevelStatuses[0] + ")", ::setAccessLevel, 0, "thread", player);
- self addOption(accessLevelsMenu, "Level 1 (" + level.accessLevelStatuses[1] + ")", ::setAccessLevel, 1, "thread", player);
- self addOption(accessLevelsMenu, "Level 2 (" + level.accessLevelStatuses[2] + ")", ::setAccessLevel, 2, "thread", player);
- }
- }
- if(isEmpty(self.surge["menu"]["players"]["options"][self.surge["menu"]["players"]["position"]]))
- self.surge["menu"]["players"]["position"] = 0;
- }
- /**
- Menu Utilities
- **/
- addMenu(parent, name, title)
- {
- // Create the menu data struct
- self.surge["menu"][name] = [];
- self.surge["menu"][name]["title"] = title;
- self.surge["menu"][name]["options"] = [];
- self.surge["menu"][name]["position"] = 0;
- self.surge["menu"][name]["parent"] = parent;
- // If a parent is defined add an option to open this menu
- if(parent)
- self addOption(parent, title, ::changeMenu, name, "thread");
- }
- addOption(parent, label, function, input, type, entity)
- {
- index = self.surge["menu"][parent]["options"].size;
- // Create the option data struct
- self.surge["menu"][parent]["options"][index] = [];
- self.surge["menu"][parent]["options"][index]["label"] = label;
- self.surge["menu"][parent]["options"][index]["function"] = function;
- self.surge["menu"][parent]["options"][index]["input"] = input;
- self.surge["menu"][parent]["options"][index]["type"] = type;
- if(isEmpty(entity))
- entity = self;
- self.surge["menu"][parent]["options"][index]["entity"] = entity;
- }
- runMenu(menu)
- {
- self endon("death");
- self endon("disconnect");
- self.surge["menu"]["active"] = true;
- self freezeControls(true);
- self setClientUiVisibilityFlag( "hud_visible", 0 );
- self enableInvulnerability();
- self thread exitOnDeath();
- self.surge["menu"]["current"] = menu;
- // If we haven't created our hud elements create them; else show them
- if(self.surge["menu"]["hudCreated"] == false)
- self createHud();
- else
- {
- self thread showHud();
- scroll();
- }
- while(self.surge["menu"]["active"] == true)
- {
- // Scroll Up
- if(self adsButtonPressed())
- {
- scroll(-1);
- wait 0.25;
- }
- // Scroll Down
- if(self attackButtonPressed())
- {
- scroll(1);
- wait 0.25;
- }
- // Select
- if(self jumpButtonPressed())
- {
- select();
- wait 0.25;
- }
- // Close Menu
- if(self stanceButtonPressed())
- {
- if(!isEmpty(self.surge["menu"][self getCurrentMenu()]["parent"]))
- self changeMenu(self.surge["menu"][self getCurrentMenu()]["parent"]);
- else
- exitMenu();
- }
- // Exit
- if(self meleeButtonPressed())
- exitMenu();
- wait 0.05;
- }
- }
- changeMenu(menu)
- {
- // Transition out old menu
- for(i = 0; i < 10; i++)
- {
- self.surge["text"]["options"][i] fadeTo(0, 0.25);
- self.surge["text"]["options"][i] thread moveTo("x", 0, 0.25);
- }
- self.surge["shaders"]["scrollbar"] scaleOverTime(0.25, 540, 25);
- self.surge["text"]["options"][self getMenuPosition()] pulse(false);
- wait 0.25;
- // Update to our new menu
- self.surge["menu"]["current"] = menu;
- self updateHud();
- // Transition in new menu
- for(i = 0; i < 10; i++)
- {
- self.surge["text"]["options"][i].x = -540;
- self.surge["text"]["options"][i] thread moveTo("x", -10, 0.25);
- if(i == getMenuPosition())
- self.surge["text"]["options"][i] fadeTo(1, 0.25);
- else
- self.surge["text"]["options"][i] fadeTo(0.5, 0.25);
- }
- self.surge["shaders"]["scrollbar"] scaleOverTime(0.25, 5, 25);
- wait 0.25;
- // Reset our scroll
- scroll();
- }
- exitOnDeath()
- {
- self endon("menu_exit");
- for(;;)
- {
- self waittill("death");
- exitMenu();
- }
- }
- exitMenu()
- {
- thread hideHud();
- self freezeControls(false);
- self setClientUiVisibilityFlag("hud_visible", 1);
- self disableInvulnerability();
- self.surge["menu"]["active"] = false;
- self notify("menu_exit");
- }
- getCurrentMenu()
- {
- return self.surge["menu"]["current"];
- }
- getMenuPosition()
- {
- return self.surge["menu"][self getCurrentMenu()]["position"];
- }
- select()
- {
- selected = self.surge["menu"][self getCurrentMenu()]["options"][self getMenuPosition()];
- // Allows for better function handling
- switch(selected["type"])
- {
- // Run along side
- case "thread":
- if(isEmpty(selected["input"]))
- selected["entity"] thread [[selected["function"]]]();
- else
- selected["entity"] thread [[selected["function"]]](selected["input"]);
- break;
- // Runs before continuing code execution
- default:
- if(isEmpty(selected["input"]))
- selected["entity"] [[selected["function"]]]();
- else
- selected["entity"] [[selected["function"]]](selected["input"]);
- break;
- }
- }
- scroll(amount)
- {
- if(!isDefined(amount))
- amount = 0;
- menu = getCurrentMenu();
- options = self.surge["menu"][menu]["options"];
- size = options.size;
- textSize = self.surge["text"]["options"].size;
- lastPosition = self.surge["menu"][menu]["position"];
- lastTextIndex = lastPosition;
- position = lastPosition + amount;
- textIndex = position;
- // If we scroll past the bottom return to the top
- if(position > size - 1)
- {
- position = 0;
- textIndex = position;
- lastTextIndex = size - 1;
- if(size > 11)
- {
- lastTextIndex = textSize - 1;
- self updateHud(position);
- }
- }
- // If we scroll past the top return to the bottom
- else if(position < 0)
- {
- position = size - 1;
- textIndex = position;
- lastTextIndex = 0;
- if(size > 11)
- {
- textIndex = textSize - 1;
- self updateHud(size - textSize);
- }
- }
- // If we have more than 11 options and are not in the top half of our menu
- if(size > 11 && isDefined(options[position - 5]))
- {
- // If we are somewhere in the middle of the menu
- // - holds scrollbar in middle and moves text
- if(isDefined(options[position + 5]))
- {
- if(lastPosition < position)
- lastTextIndex = 4;
- else
- lastTextIndex = 6;
- textIndex = 5;
- self updateHud(position - textIndex);
- }
- // If we are in the bottom half of our menu
- // - scrolls normally
- else
- {
- if(lastPosition != 0)
- lastTextIndex = (lastPosition - size) + textSize;
- textIndex = (position - size) + textSize;
- }
- }
- // If the last highlighted option is pulsing stop it
- if(self.surge["text"]["options"][lastTextIndex].pulsing == true)
- {
- self.surge["text"]["options"][lastTextIndex] pulse(false);
- self.surge["text"]["options"][lastTextIndex] fadeTo(0.5, 0.1);
- }
- // If the current option is not pulsing start it
- if(self.surge["text"]["options"][lastTextIndex].pulsing == false)
- self.surge["text"]["options"][textIndex] pulse(true);
- self.surge["shaders"]["scrollbar"] thread moveTo("y", 100 + (textIndex * 25), 0.1);
- self.surge["menu"][menu]["position"] = position;
- }
- createHud()
- {
- top = 50;
- margin = 25;
- padding = -10;
- string = "string";
- orange = (0.95, 0.52, 0.0285);
- menu = self.surge["menu"][self getCurrentMenu()];
- self.surge["text"]["title"] = createText("bigfixed", 1, "RIGHT", "TOP", padding, top, 3, orange, 1, (0, 0, 0), 0, menu["title"]);
- for(i = 0; i < 11; i++)
- {
- //string = "option "+i;
- if(isEmpty(menu["options"][i]["label"]))
- string = "";
- else
- string = menu["options"][i]["label"];
- self.surge["text"]["options"][i] = createText("objective", 1.25, "RIGHT", "TOP", padding, top + (2 * margin) + (margin * i), 3, (1,1,1), 0, (0, 0, 0), 0, string);
- }
- self.surge["shaders"]["background"] = createRectangle("RIGHT", "CENTER", 0, 0, 0, 500, 1, (0,0,0), 0, "white");
- self.surge["shaders"]["glow"] = createRectangle("RIGHT", "CENTER", 0, 0, 0, 500, 1, orange, 0, "line_horizontal");
- self.surge["shaders"]["scrollbar"] = createRectangle("RIGHT", "TOP", 0, top + (2 * margin), 5, margin, 2, orange, 0, "white");
- //self.surge["shaders"]["icon"] = createRectangle("LEFT", "TOP", 0, 50, 65, 65, (1, 1, 1), "perk_tactical_mask", 2, 1);
- //self.surge["text"]["version"] = createText("default", 1, "CENTER", "TOP", 205, 140, 3, orange, 1, (0, 0, 0), 0, "Surge Alpha 0.1");
- self.surge["text"]["info-slash"] = createText("bigfixed", 1, "RIGHT", "BOTTOM", padding, 0, 3, orange, 0, (0, 0, 0), 0, "/");
- self.surge["text"]["info"][0] = createText("default", 1, "RIGHT", "BOTTOM", -1 * margin, 0, 3, (1, 1, 1), 0, (0, 0, 0), 0, "Surge " + self.surge["version"]);
- self.surge["text"]["info"][1] = createText("default", 1, "RIGHT", "BOTTOM", -1 * margin, 100, 3, (1, 1, 1), 0, (0, 0, 0), 0, "Created by TheFallen"); // start hidden
- self.surge["text"]["info"][2] = createText("default", 1, "RIGHT", "BOTTOM", -1 * margin, 100, 3, (1, 1, 1), 0, (0, 0, 0), 0, "[{+attack}][{+speed_throw}]Up/Down"); // start hidden
- self.surge["text"]["info"][3] = createText("default", 1, "RIGHT", "BOTTOM", -1 * margin, 100, 3, (1, 1, 1), 0, (0, 0, 0), 0, "[{+gostand}]Select [{+stance}]Back"); // start hidden
- self.surge["text"]["info"][4] = createText("default", 1, "RIGHT", "BOTTOM", -1 * margin, 100, 3, (1, 1, 1), 0, (0, 0, 0), 0, "[{+melee}]Exit"); // start hidden
- // self.surge["text"]["info"][0].horzalign = "user_left";
- // self.surge["text"]["info"][1].horzalign = "user_left";
- //self.surge["text"]["instructions"].horzalign = "user_left";
- //self.surge["text"]["instructions"].vertalign = "user_bottom";
- showHud();
- self.surge["menu"]["hudCreated"] = true;
- }
- feed(var)
- {
- self endon("menu_exit");
- while(self.surge["menu"]["active"])
- {
- for(i = 0; i < var.size; i++)
- {
- var[i] fadeTo(0.5, 0.5);
- var[i] thread moveTo("y", 0, 0.5);
- wait 5;
- var[i] fadeTo(0, 0.5);
- var[i] thread moveTo("y", 100, 0.5);
- wait 0.5;
- }
- }
- }
- updateHud(offset)
- {
- if(isEmpty(offset))
- offset = 0;
- for(i = 0; i < 11; i++)
- {
- self.surge["text"]["options"][i] setText(self.surge["menu"][self getCurrentMenu()]["options"][offset]["label"]);
- offset++;
- }
- }
- showHud()
- {
- self.surge["text"]["title"].alpha = 1;
- self.surge["shaders"]["background"] fadeTo(0.75, 0.1);
- self.surge["shaders"]["background"] scaleOverTime(0.25, 540, 500);
- self.surge["shaders"]["glow"] fadeTo(0.5, 0.1);
- self.surge["shaders"]["glow"] scaleOverTime(0.25, 1000, 500);
- self.surge["shaders"]["glow"] thread pulseEffect(0.4, 0.5, 2);
- self.surge["text"]["info-slash"] thread moveTo("x", -10, 0.25);
- self.surge["text"]["info-slash"] fadeTo(1, 0.25);
- self thread feed(self.surge["text"]["info"]);
- for(i = 0; i < self.surge["text"]["options"].size; i++)
- self.surge["text"]["options"][i] thread moveTo("x", -10, 0.25);
- for(i = 0; i < self.surge["text"]["options"].size; i++)
- {
- if(i == getMenuPosition())
- {
- self.surge["text"]["options"][i] pulse(true);
- self.surge["shaders"]["scrollbar"] fadeTo(1, 0.25);
- }
- else
- self.surge["text"]["options"][i] fadeTo(0.5, 0.25);
- wait 0.1;
- }
- }
- hideHud()
- {
- self.surge["text"]["title"].alpha = 0;
- for(i = 0; i < self.surge["text"]["options"].size; i++)
- {
- self.surge["text"]["options"][i] thread moveTo("x", 0, 0.25);
- self.surge["text"]["options"][i] fadeTo(0, 0.25);
- self.surge["text"]["options"][i] pulse(false);
- }
- self.surge["text"]["info-slash"] thread moveTo("x", 0, 0.25);
- self.surge["text"]["info-slash"] fadeTo(0, 0.25);
- for(i = 0; i < self.surge["text"]["info"].size; i++)
- self.surge["text"]["info"][i] fadeTo(0, 0.25);
- self.surge["shaders"]["glow"] notify("pulse_end");
- self.surge["shaders"]["glow"] fadeTo(0, 0.4);
- self.surge["shaders"]["glow"] scaleOverTime(0.25, 1, 500);
- self.surge["shaders"]["background"] fadeTo(0, 0.4);
- self.surge["shaders"]["background"] scaleOverTime(0.25, 1, 500);
- self.surge["shaders"]["scrollbar"].alpha = 0;
- self setClientUiVisibilityFlag( "hud_visible", 1 );
- }/**
- Script Utilities
- **/
- getName()
- {
- name = getSubStr(self.name, 0, self.name.size);
- for(i = 0; i < name.size; i++)
- {
- if(name[i]=="]")
- break;
- }
- if(name.size != i)
- name = getSubStr(name, i + 1, name.size);
- return name;
- }
- isEmpty(var)
- {
- if(var == "" || !isDefined(var))
- return true;
- else
- return false;
- }
- /**
- Hud Utilities
- **/
- pulse(state)
- {
- if(state == true)
- self thread pulseEffect(0.5, 1, 0.5);
- else
- self notify("pulse_end");
- self.pulsing = state;
- }
- pulseEffect(min, max, time)
- {
- self endon("pulse_end");
- for(;;)
- {
- self fadeTo(max, time);
- wait time;
- self fadeTo(min, time);
- wait time;
- }
- }
- fadeTo(alpha, time)
- {
- self fadeOverTime(time);
- self.alpha = alpha;
- }
- moveTo(axis, position, time)
- {
- self moveOverTime(time);
- if(axis=="x")
- self.x = position;
- else
- self.y = position;
- }
- scaleFont(value, time)
- {
- self changeFontScaleOverTime(time);
- self.fontScale = value;
- }
- 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 setText( text );
- textElem.color = color;
- textElem.alpha = alpha;
- textElem.glowColor = glowColor;
- textElem.glowAlpha = glowAlpha;
- textElem.hideWhenInMenu = true;
- return textElem;
- }
- createRectangle(align, relative, x, y, width, height, sort, color, alpha, shader)
- {
- shaderElem = newClientHudElem( self );
- shaderElem.elemType = "bar";
- shaderElem.width = width;
- shaderElem.height = height;
- shaderElem.xOffset = 0;
- shaderElem.yOffset = 0;
- shaderElem.children = [];
- shaderElem.sort = sort;
- shaderElem.color = color;
- shaderElem.alpha = alpha;
- shaderElem setParent( level.uiParent );
- shaderElem setShader( shader, width , height );
- shaderElem.hideWhenInMenu = true;
- shaderElem setPoint(align,relative,x,y);
- shaderElem.align = align;
- shaderElem.relative = relative;
- return shaderElem;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement