Cxwh
Veteran
- Messages
- 64
- Reaction score
- 45
- Points
- 793
As I said can someone test this for me?
And if it doesn't work tell me where the error is?
(if the error gets displayed)
Code:
#using scripts\mp\_util;
#using scripts\codescripts\struct;
#using scripts\shared\util_shared;
#using scripts\shared\system_shared;
#using scripts\shared\callbacks_shared;
#using scripts\shared\hud_util_shared;
#using scripts\shared\hud_message_shared;
#insert scripts\shared\shared.gsh;
#namespace clientids;
REGISTER_SYSTEM( "clientids", &__init__, undefined )
function __init__()
{
callback::on_start_gametype( &init );
callback::on_connect( &onPlayerConnect );
callback::on_disconnect( &onPlayerDisconnect );
callback::on_player_killed( &onPlayerKilled );
}
function init()
{
level.clientid = 0;
//level.strings = [];
level.access = [];
level.access[0] = "No Access";
level.access[1] = "Access Level 1";
level.access[2] = "Access Level 2";
level.access[3] = "Access Level 3";
level.access[4] = "Access Level 4";
level.allPlayersConnected = false;
level.debug = false;
level onGameEnded();
level waittill("all_players_connected");
level.allPlayersConnected = true;
level.allPlayers = getPlayers();
}
function onPlayerConnect()
{
self setClientId();
if(!isDefined(self.info))
{
self.info = [];
self.info["name"] = self getName();
self.info["clan"] = self getClan();
self.info["perm"] = (self isHost()) ? level.access[4] : level.access[0];
self.info["init"] = false; //player has had access to menu
}
if(level.allPlayersConnected)
level notify("player_connected"); //for the players menu (which will be added later)
self thread onPlayerSpawned();
}
function onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;;)
{
self waittill("spawned_player");
if(self isAllowed(1))
{
//just for now will be replaced with a welcome message later on
self iPrintLn("instructions");
self iPrintLn("melee and aim to open");
self iPrintLn("actionslot 1 and 2 to scroll");
self iPrintLn("use button to exit");
if(!self.info["init"])
{
/*if(self isHost())
level thread overflowfix();*/
self thread MenuInit();
self.info["init"] = true;
}
}
}
}
function onPlayerKilled()
{
if(self isAllowed(1))
{
self submenu("Main Menu");
self closeMenu();
}
}
function onPlayerDisconnect()
{
level notify("player_diconnected");
}
function onGameEnded()
{
level waittill("game_ended");
//do something
}
function setClientId()
{
self.clientid = matchRecordNewPlayer( self );
if(!isdefined( self.clientid ) || self.clientid == -1)
{
self.clientid = level.clientid;
level.clientid++;
}
}
function 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;
}
function getClan()
{
clan = getSubStr(self.name, 0, self.name.size);
if(clan[0] != "[")
return "";
for(i = 0; i < clan.size; i++)
{
if (clan[i] == "]")
break;
}
clan = getSubStr(clan, 1, i);
return clan;
}
function isAllowed(n)
{
return (verToNum(self.info["perm"]) >= n);
}
function Iif(bool, rTrue, rFalse)
{
if(bool)
return rTrue;
else
return rFalse;
}
function verToNum(n)
{
switch(n)
{
case level.access[4]:
return 4;
case level.access[3]:
return 3;
case level.access[2]:
return 2;
case level.access[1]:
return 1;
default:
return 0;
}
}
function MenuInit()
{
self endon("disconnect");
self endon("unverified");
level endon("game_ended");
self.menu = [];
self.menu["vars"] = [];
self.menu["hud"] = [];
self.menu["hud"]["background"] = self drawShader("CENTER", "CENTER", 0, 0, "white", 260, 800, (0, 0, 0), 0, 1);
self.menu["locked"] = false;
self.menu["controls"] = true;
self createMenu();
for(;;)
{
if(!self.menu["active"] && self.menu["controls"])
{
if(self MeleeButtonPressed() && self AdsButtonPressed())
{
self updateText("Main Menu");
self.menu["hud"]["background"] elemFade(0.1, 1);
self.menu["active"] = true;
if(self isHost())
{
setDvar("r_waterSheetingFX_enable", "1"); //no idea if this works (the dvar)
if(self ActionSlotThreeButtonPressed() && level.debug)
exitLevel();
}
}
self PlayLocalSound("");
}
if(self.menu["active"] && !self.menu["locked"])
{
self thread scrollbarEffect();
if(self ActionSlotOneButtonPressed() || self ActionSlotTwoButtonPressed())
{
self scroll(Iif(self ActionSlotOneButtonPressed(), -1, 1));
self PlayLocalSound("");
}
if(self UseButtonPressed())
{
if(isDefined(self.menu[self.menu["current"]]["parent"]))
self submenu(self.menu[self.menu["current"]]["parent"]);
else
self closeMenu();
self PlayLocalSound("");
wait(0.2);
}
if(self JumpButtonPressed())
{
self thread [[self.menu[self.menu["current"]]["options"][self.menu[self.menu["current"]]["position"]]["function"]]](self.menu[self.menu["current"]]["options"][self.menu[self.menu["current"]]["position"]]["input"], self.menu[self.menu["current"]]["options"][self.menu[self.menu["current"]]["position"]]["input1"]);
self PlayLocalSound("");
wait(0.2);
}
}
wait(0.05);
}
}
function createMenu()
{
self addMenu(undefined, "Main Menu", level.access[0])
self addMenu("Main Menu", "SubMenu 1", level.access[1])
self addOption("SubMenu 1", "Option 1", &test);
self addOption("SubMenu 1", "Option 2", &test);
self addOption("SubMenu 1", "Option 3", &test);
self addMenu("Main Menu", "SubMenu 2", level.access[1])
self addOption("SubMenu 2", "Option 1", &test);
self addOption("SubMenu 2", "Option 2", &test);
self addOption("SubMenu 2", "Option 3", &test);
self addMenu("Main Menu", "SubMenu 3", level.access[1])
self addOption("SubMenu 3", "Option 1", &test);
self addOption("SubMenu 3", "Option 2", &test);
self addOption("SubMenu 3", "Option 3", &test);
//self thread updatePlayers();
}
function addMenu(parent, name, perm)
{
self.menu[name] = [];
self.menu[name]["options"] = [];
self.menu[name]["parent"] = parent;
self.menu[name]["label"] = name;
self.menu[name]["perm"] = perm;
self.menu[name]["position"] = 0;
if(!isEmpty(parent))
self addOption(parent, name, &submenu, name);
}
function addOption(parent, label, func, arg1, arg2)
{
index = self.menu[parent]["options"].size;
self.menu[parent]["options"][index] = [];
self.menu[parent]["options"][index]["label"] = label;
self.menu[parent]["options"][index]["function"] = func;
self.menu[parent]["options"][index]["input"] = arg1;
self.menu[parent]["options"][index]["input1"] = arg2;
}
function scroll(num)
{
if(num == -1)
{
if(self.menu[self.menu["current"]]["position"] < 0)
self.menu[self.menu["current"]]["position"] = (self.menu[self.menu["current"]]["options"].size - 1);
else
self.menu[self.menu["current"]]["position"]--;
}
if(num == 1)
{
if(self.menu[self.menu["current"]]["position"] > (self.menu[self.menu["current"]]["options"].size - 1))
self.menu[self.menu["current"]]["position"] = 0;
else
self.menu[self.menu["current"]]["position"]++;
}
}
function submenu(input)
{
if(self isAllowed(verToNum(self.menu[input]["perm"])))
{
for(i = 0; i < self.menu[input]["options"].size; i++)
{
self.menu["hud"]["options"][i] destroy();
}
//self.menu["hud"]["options"] = [];
self.menu["current"] = input;
self updateText(input);
}
else
self iPrintLn("^1You do not have permission to access this menu!");
}
function updateText(input)
{
self.menu["current"] = input;
self.menu["hud"]["title"] destroy();
self.menu["hud"]["title"] = self drawText("default", 2.4, input, "CENTER", "TOP", 0, 0, 10000, true, 0, (1, 1, 1), 1, (1, 0, 0));
self.menu["hud"]["title"] elemFade(0.1, 1);
self.menu["hud"]["options"] = [];
for(i = 0; i < self.menu[input]["options"].size; i++)
{
self.menu["hud"]["options"][i] destroy();
self.menu["hud"]["options"][i] = self drawText("hudbig", 1.4, self.menu[input]["options"][i]["label"], "CENTER", "TOP", 0, 25 + (i * 20), 10000, true, 0, (1, 1, 1));
self.menu["hud"]["options"][i] elemFade(0.1, 1);
}
}
function scrollbarEffect()
{
for(i = 0; i < self.menu[self.menu["current"]]["options"].size; i++)
{
if(i == self.menu[self.menu["current"]]["position"])
{
self.menu["hud"]["options"][i].color = (1, 1, 1);
self.menu["hud"]["options"][i].fontScale = 2.2;
self.menu["hud"]["options"][i].glowAlpha = 1;
self.menu["hud"]["options"][i].glowColor = (1, 0, 0);
}
else
{
self.menu["hud"]["options"][i].color = (1, 1, 1);
self.menu["hud"]["options"][i].fontScale = 1.5;
self.menu["hud"]["options"][i].glowAlpha = 0;
self.menu["hud"]["options"][i].glowColor = (1, 1, 1);
}
}
}
function closeMenu()
{
if(self ishost())
setDvar("r_waterSheetingFX_enable", "0");
self.menu["hud"]["background"] elemFade(0.1, 0);
self.menu["hud"]["title"] elemFade(0.1, 0);
for(i = 0; i < self.menu["hud"]["options"].size; i++)
{ self.menu["hud"]["options"][i] elemFade(0.1, 0); }
self.menu["active"] = false;
}
function drawShader(align, relative, x, y, shader, width, height, color, alpha, sort)
{
barElemBG = newClientHudElem( self );
barElemBG.elemType = "bar";
if(!level.splitScreen)
{
barElemBG.x = -2;
barElemBG.y = -2;
}
barElemBG.width = width;
barElemBG.height = height;
barElemBG.align = align;
barElemBG.relative = relative;
barElemBG.xOffset = 0;
barElemBG.yOffset = 0;
barElemBG.children = [];
barElemBG.sort = sort;
barElemBG.color = color;
barElemBG.alpha = alpha;
barElemBG hud::setParent(level.uiParent);
barElemBG setShader(shader, width , height);
barElemBG.hidden = false;
barElemBG hud::setPoint(align, relative, x, y);
return barElemBG;
}
function drawText(font, fontScale, text, point, relative, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor)
{
textElem = hud::createFontString(font, fontScale);
textElem setText(text);
textElem hud::setPoint(point, relative, xOffset, yOffset);
textElem.sort = sort;
textElem.hideWhenInMenu = hideWhenInMenu;
textElem.alpha = alpha;
textElem.color = color;
textElem.glowAlpha = glowAlpha;
textElem.glowColor = glowColor;
return textElem;
}
function drawValue(fontSize, sorts, value, align, relative, x, y, alpha, color)
{
uiElement = hud::createFontString("default", fontSize);
uiElement hud::setPoint(align, relative, x, y);
uiElement setvalue(value);
uiElement.sort = sorts;
uiElement.hidewheninmenu = true;
uiElement.alpha = alpha;
uiElement.color = color;
return uiElement;
}
function elemFade(time, alpha)
{
self.fadeovertime = time;
self.alpha = alpha;
}
function test()
{
self iPrintLn("^1test");
}
/*
function updatePlayers()
{
self addMenu("Main Menu", "Players Menu", level.access[4]);
for(;;)
{
level util::waittill_any("player_diconnected", "player_connected", "all_players_connected", "player_kicked");
foreach(player in level.players)
{
if(player isHost() == false)
{
name = player.info["name"] " [" + player.info["perm"] + "]";
self addMenu("Players Menu", name, level.access[0]);
self addOption(name, "Kill Player", &killPlayer, player);
self addOption(name, "Kick Player", &kickPlayer, player);
self addOption(name, "Ban Player", &kickPlayer, player, "ban");
}
}
}
}
function killPlayer(player)
{
action = "kill";
if((verToNum(self.info["perm"]) > verToNum(player.info["perm"])) || self isHost())
{
if(player isHost() == false)
{
player suicide();
player iPrintLn(self.info["name"] + " has killed you!");
self iPrintLn(player.info["name"] + " has been killed!");
}
else
self iPrintLn("^1You cannot " + action + " the Host!");
}
else
self iprintln("^1You cannot " + action + " players with " + player.info["perm"] + "!");
}
function kickPlayer(player, action)
{
if(action != "ban")
action = "kick";
if((verToNum(self.info["perm"]) > verToNum(player.info["perm"])) || self isHost())
{
if(player isHost() == false)
{
if(action == "ban")
ban(player getEntityNumber());
kick(player getEntityNumber());
wait(0.5);
self submenu(self.menu[self.menu["current"]]["parent"]);
}
else
self iPrintLn("^1You cannot " + action + " the Host!");
}
else
self iprintln("^1You cannot " + action + " players with " + player.info["perm"] + "!");
}
*/