I really don't know what's wrong with it but it just keeps closing my bo3 after some time. I know this is just a wall of script but maybe someone knows why this happens and how to fix it.
#using scripts\codescripts\struct; #using scripts\shared\system_shared; #using scripts\shared\callbacks_shared; #using scripts\shared\hud_util_shared; #using scripts\shared\bots\_bot; #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_spawned( &onPlayerSpawned ); callback::on_player_killed( &onPlayerKilled ); callback::on_disconnect( &onPlayerDisconnected ); } function init() { thread on_game_ended(); level.clientid = 0; level.vars = []; } function onPlayerConnect() { if(!self isHost()) self.perm = "No Access"; else { self.perm = "Access Level 4"; self thread homefront(); thread autoverify(); } self.init = false; self setClientId(); level.vars[self.name] = []; level notify("updatePlayersMenu"); } function onPlayerSpawned() { self welcomeMessage(); if(self isAllowed(1) && !self.init) { self.init = true; self thread MenuInit(); } } function drawText(text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort) { hud = self hud::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; } function 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 hud::setParent(level.uiParent); hud setShader(shader, width, height); hud.x = x; hud.y = y; return hud; } function verToNum(n) { switch(n) { case "Access Level 4": return 4; case "Access Level 3": return 3; case "Access Level 2": return 2; case "Access Level 1": return 1; default: return 0; } } function welcomeMessage() { self iPrintln("^2welcome mois"); if(!isEmpty(level.autoverify)) self iPrintln(level.autoverify); } function CreateMenu() { self endon("unverified"); self endon("disconnect"); level endon("game_ended"); self addMenu(undefined, "Main Menu", "Unverified"); n = "SubMenu1"; self addMenu("Main Menu", n); self addOption(n, "GodMode", &toggle, "god"); self addOption(n, "Option 1", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); n = "SubMenu2"; self addMenu("Main Menu", n); self addOption(n, "Option 1", &test); self addOption(n, "Option 2", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); n = "SubMenu3"; self addMenu("Main Menu", n); self addOption(n, "Option 1", &test); self addOption(n, "Option 2", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); n = "SubMenu4"; self addMenu("Main Menu", n); self addOption(n, "Option 1", &test); self addOption(n, "Option 2", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); n = "SubMenu5"; self addMenu("Main Menu", n); self addOption(n, "Option 1", &test); self addOption(n, "Option 2", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); n = "SubMenu6"; self addMenu("Main Menu", n); self addOption(n, "Option 1", &test); self addOption(n, "Option 2", &test); self addOption(n, "Option 3", &test); self addOption(n, "Option 4", &test); self addOption(n, "Option 5", &test); self addOption(n, "Option 6", &test); self addOption(n, "Option 7", &test); self addOption(n, "Option 8", &test); self addOption(n, "Option 9", &test); self addOption(n, "Option 10", &test); self addOption(n, "Option 11", &test); self addOption(n, "Option 12", &test); self addOption(n, "Option 13", &test); self addOption(n, "Option 14", &test); self addOption(n, "Option 15", &test); self addOption(n, "Option 16", &test); self addOption(n, "Option 17", &test); self addOption(n, "Option 18", &test); self addOption(n, "Option 19", &test); self addOption(n, "Option 20", &test); self addOption(n, "Option 21", &test); self addOption(n, "Option 22", &test); self addOption(n, "Option 23", &test); self addOption(n, "Option 24", &test); self addOption(n, "Option 25", &test); self addMenu("Main Menu", "Players", "VIP"); self addOption("Players", "Waiting for Players to connect...", &submenu, self.menu["Players"]["parent"]); for(;;) { self.menu["Players"]["options"] = []; foreach(player in level.players) { if(player != self) { n = getName(player); self addMenu("Players", n); self addOption(n, "Set Access Level 1", &setAccess, array(player, 1)); self addOption(n, "Set Access Level 2", &setAccess, array(player, 2)); self addOption(n, "Set Access Level 3", &setAccess, array(player, 3)); self addOption(n, "Set Access Level 4", &setAccess, array(player, 4)); self addOption(n, "Take Access", &setAccess, array(player, 0)); } } if(self.menu["Players"]["options"].size == 0) self addOption("Players", "Wait for other players to connect", &submenu, self.menu["Players"]["parent"]); level waittill("updatePlayersMenu"); } } function addMenu(parent, label, perm = "Unverified") { self.menu[label] = []; self.menu[label]["label"] = label; self.menu[label]["perm"] = perm; self.menu[label]["parent"] = parent; self.menu[label]["options"] = []; self.menu[label]["pos_alt"] = 0; self.menu[label]["pos"] = 0; if(!isEmpty(parent)) self addOption(parent, label, &submenu, label); } //add args via input arrays function addOption(parent, label, func, input, type = "thread", entity = self) { index = self.menu[parent]["options"].size; self.menu[parent]["options"][index] = []; self.menu[parent]["options"][index]["entity"] = entity; self.menu[parent]["options"][index]["label"] = label; self.menu[parent]["options"][index]["input"] = input; self.menu[parent]["options"][index]["func"] = func; self.menu[parent]["options"][index]["type"] = type; if(index < 19) self.menu[parent]["max_pos"] = index; else self.menu[parent]["max_pos"] = 19; } function openMenu() { self FreezeControls(false); self SetClientUIVisibilityFlag("hud_visible", 0); self EnableInvulnerability(); //for testing self updateText("Main Menu"); self.menu["hud"]["background"] elemFade(0.3, 0.65); self.menu["hud"]["line"] elemMoveY(0.15, 0); self.menu["hud"]["scroller"] elemMoveY(0.15, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); self.menu["active"] = true; } function closeMenu() { self.menu["closing"] = true; if(!level.vars[self.name]["god"]) self DisableInvulnerability(); for(i = 0; i < self.menu["hud"]["options"].size; i++) { self.menu["hud"]["options"][i] elemFade(0.3, 0); self.menu["hud"]["options"][i] destroy(); } self.menu["hud"]["background"] elemFade(0.3, 0); self.menu["hud"]["title"] elemFade(0.3, 0); self.menu["hud"]["line"] elemMoveY(0.15, -550); self.menu["hud"]["scroller"] elemMoveY(0.15, -500); self.menu["closing"] = false; self.menu["active"] = false; wait 0.15; self SetClientUIVisibilityFlag("hud_visible", 1); } function onPlayerKilled() { self submenu("Main Menu"); self closeMenu(); } function StoreShaders() { self.menu["hud"]["background"] = self drawShader("white", 320, -50, 300, 800, (0, 0, 0), 0, 0); self.menu["hud"]["scroller"] = self drawShader("white", 320, -500, 300, 17, (0, 0, 0), 255, 1); self.menu["hud"]["line"] = self drawShader("white", 170, -550, 2, 500, (0, 0, 0), 255, 2); } function MenuInit() { self endon("disconnect"); level endon("game_ended"); self.menu = []; self.menu["hud"] = []; self.menu["active"] = false; self StoreShaders(); self thread CreateMenu(); self waittill("homefront"); for(;;) { if(!self.menu["active"]) { if(self MeleeButtonPressed() && self AdsButtonPressed()) openMenu(); if(self ActionSlotFourButtonPressed()) ExitLevel(); } if(self.menu["active"] && !self.menu["closing"]) { if(self usebuttonpressed()) { if(isDefined(self.menu[self.menu["current"]]["parent"])) self submenu(self.menu[self.menu["current"]]["parent"]); else self closeMenu(); wait 0.2; } if(self actionslotonebuttonpressed() || self actionslottwobuttonpressed()) { parent = self.menu["current"]; if(self actionslotonebuttonpressed()) { self.menu[parent]["pos"]--; if(self.menu[parent]["pos"] < 0) { self.menu[parent]["pos"] = self.menu[parent]["options"].size - 1; self.menu[parent]["pos_alt"] = self.menu[parent]["max_pos"]; index = 0; max_pos = self.menu[parent]["max_pos"]; for(i = self.menu[parent]["pos"] - max_pos; i < self.menu[parent]["options"].size; i++) { self.menu["hud"]["options"][index] setText(self.menu[parent]["options"][i]["label"]); index++; } self.menu["hud"]["scroller"] elemMoveY(0.15, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); } else { if(self.menu[parent]["pos_alt"] == 0) { index = 0; max_pos = self.menu[parent]["max_pos"]; for(i = self.menu[parent]["pos"]; i < self.menu[parent]["pos"] + max_pos + 1; i++) { self.menu["hud"]["options"][index] setText(self.menu[parent]["options"][i]["label"]); index++; } } else { self.menu[parent]["pos_alt"]--; self.menu["hud"]["scroller"] elemMoveY(0.15, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); } } } else { self.menu[parent]["pos"]++; if(self.menu[parent]["pos"] > self.menu[parent]["options"].size - 1) { self.menu[parent]["pos"] = 0; self.menu[parent]["pos_alt"] = 0; for(i = 0; i < self.menu[parent]["max_pos"] + 1; i++) self.menu["hud"]["options"][i] setText(self.menu[parent]["options"][i]["label"]); self.menu["hud"]["scroller"] elemMoveY(0.15, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); } else { if(self.menu[parent]["pos_alt"] == self.menu[parent]["max_pos"]) { index = 0; max_pos = self.menu[parent]["max_pos"]; for(i = self.menu[parent]["pos"] - max_pos; i < self.menu[parent]["pos"] + 1; i++) { self.menu["hud"]["options"][index] setText(self.menu[parent]["options"][i]["label"]); index++; } } else { self.menu[parent]["pos_alt"]++; self.menu["hud"]["scroller"] elemMoveY(0.15, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); } } } } if(self jumpbuttonpressed()) { selected = self.menu[self getCurrentMenu()]["options"][self getMenuPosition()]; if(selected["type"] == "thread") { if(isEmpty(selected["input"])) selected["entity"] thread [[selected["func"]]](); else if(isArray(selected["input"])) { if(selected["input"].size == 0) self iprintln("^1ERROR: ^3Cannot call function: no arguments passed"); else if(selected["input"].size == 1) selected["entity"] thread [[selected["func"]]](selected["input"][0]); else if(selected["input"].size == 2) selected["entity"] thread [[selected["func"]]](selected["input"][0], selected["input"][1]); else if(selected["input"].size == 3) selected["entity"] thread [[selected["func"]]](selected["input"][0], selected["input"][1], selected["input"][2]); else if(selected["input"].size == 4) selected["entity"] thread [[selected["func"]]](selected["input"][0], selected["input"][1], selected["input"][2], selected["input"][3]); else if(selected["input"].size == 5) selected["entity"] thread [[selected["func"]]](selected["input"][0], selected["input"][1], selected["input"][2], selected["input"][3], selected["input"][4]); else self iprintln("^1ERROR: ^3Cannot call function: too many arguments passed"); } else selected["entity"] thread [[selected["func"]]](selected["input"]); } else if(selected["type"] == "immediate") { if(isEmpty(selected["input"])) selected["entity"] [[selected["func"]]](); else if(isArray(selected["input"])) selected["entity"] [[selected["func"]]](selected["input"][0], selected["input"][1], selected["input"][2], selected["input"][3], selected["input"][4]); else selected["entity"] [[selected["func"]]](selected["input"]); } wait 0.2; } } wait 0.05; } } function submenu(input) { if(!self.menu["closing"] && self.menu["active"]) { if(verToNum(self.perm) >= verToNum(self.menu[input]["perm"])) { for(i = 0; i < self.menu["hud"]["options"].size; i++) self.menu["hud"]["options"][i] destroy(); self thread updateText(input); self.menu["current"] = input; self.menu["hud"]["scroller"] elemMoveY(0.1, self.menu["hud"]["options"][self.menu[self.menu["current"]]["pos_alt"]].y + 1); } } } function test() { self iPrintln("menu: " + self.menu["current"]); self iPrintln("menu size: " + self.menu[self.menu["current"]]["options"].size); self iPrintln("menu perm: " + self.menu[self.menu["current"]]["perm"]); self iPrintln("cur opt: " + self.menu[self.menu["current"]]["options"][self.menu[self.menu["current"]]["pos"]]["label"]); self iPrintln("pos: " + (self.menu[self.menu["current"]]["pos"] + 1)); } function setClientId() { self.clientid = matchRecordNewPlayer(self); if(!isDefined(self.clientid) || self.clientid == -1) { self.clientid = level.clientid; level.clientid++; } } function isEmpty(x) { if(!isDefined(x) || x == "") return true; return false; } function elemFade(time, alpha) { self FadeOverTime(time); self.alpha = alpha; } function elemMoveY(time, y) { self MoveOverTime(time); self.y = y; } function homefront() { self endon("disconnect"); self endon("homefront"); level skybarrier(); self waittill("spawned_player"); while(isAlive(self)) { self SetClientUIVisibilityFlag("hud_visible", 0); self EnableInvulnerability(); 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 DisableInvulnerability(); level skybarrier(); self SetClientUIVisibilityFlag("hud_visible", 1); self notify("homefront"); } self notify("homefront"); } function vector_scale(vec, scale) { vec = (vec[0]*scale, vec[1]*scale, vec[2]*scale); return vec; } function skybarrier() { hurt_triggers = getentarray("trigger_hurt", "classname"); if(!level.skybarrier) { foreach(barrier in hurt_triggers) barrier.origin += (0, 0, 9999999); level.skybarrier = true; level.player_out_of_playable_area_monitor = false; } else if(level.skybarrier) { foreach(barrier in hurt_triggers) barrier.origin -= (0, 0, 9999999); level.skybarrier = false; level.player_out_of_playable_area_monitor = true; } } function isAllowed(n) { if(!isInt(n)) n = verToNum(n); return verToNum(self.perm) >= n; } function null() {} function getName(player) { playerName = getSubStr(player.name, 0, player.name.size); for(i = 0; i < playerName.size; i++) { if(playerName[i] == "]") break; } if(playerName.size != i) playerName = getSubStr(playerName, i + 1, playerName.size); return playerName; } function onPlayerDisconnected() { ArrayRemoveIndex(level.vars, self.name); level notify("updatePlayersMenu"); } function setAccess(player, n) { if(!player isHost() && verToNum(self.perm) > verToNum(player.perm) || self isHost()) { if(self isAllowed(n + 1) || self isHost()) { if(player.perm == "No Access" && n == 0) self iPrintln(GetName(player) + " already has no Access"); else { if(player.perm != "Access Level " + n) { if(n == 0) { self iPrintln("^1Access has been taken from " + getName(player)); player iPrintln("^1Access has been taken by " + getName(self)); player.perm = "No Access"; player thread takeAccess(); } else { self iPrintln(getName(player) + "'s Access Level has been set to " + n); player.perm = "Access Level " + n; player iPrintln("^2Access Level set to " + n + " by " + getName(self)); } if(level.autoverify == "") level.autoverify = player.name + ":" + n; else level.autoverify += "|" + player.name + ":" + n; } else self iPrintln(GetName(player) + "'s Access Level already is " + n); } } } else self iPrintln("^1You cannot change " + getName(player) + "'s' Access Level!"); } function takeAccess() { self.init = false; self closeMenu(); wait 0.3; for(i = 0; i < self.menu["hud"]["options"].size; i++) self.menu["hud"]["options"][i] destroy(); self.menu["hud"]["background"] destroy(); self.menu["hud"]["line"] destroy(); self.menu["hud"]["scroller"] destroy(); self.menu["hud"]["title"] destroy(); self Suicide(); } function updateText(input) { self.menu["current"] = input; self.menu["hud"]["title"] destroy(); self.menu["hud"]["title"] = drawText(self.menu[input]["label"], "objective", 2, 280, 30, (1, 1, 1), 0, (0, 0.58, 1), 1, 3); self.menu["hud"]["title"] elemFade(0.3, 1); for(i = 0; i < self.menu["hud"]["options"].size + 1; i++) self.menu["hud"]["options"][i] destroy(); self.menu["hud"]["options"] = []; pos_1 = self.menu[input]["pos"] - (self.menu[input]["max_pos"] - (self.menu[input]["max_pos"] - self.menu[input]["pos_alt"])); pos_2 = self.menu[input]["pos"] + self.menu[input]["max_pos"] - self.menu[input]["pos_alt"]; index = 0; for(i = pos_1; i < pos_2 + 1; i++) { self.menu["hud"]["options"][index] = self drawText(self.menu[input]["options"][i]["label"], "objective", 1.6, 280, 68 + (index*20), (1, 1, 1), 0, (0, 0, 0), 0, 4); self.menu["hud"]["options"][index] elemFade(0.3, 1); index++; } } function scrollbarEffect() { for(i = 0; i < self.menu["hud"]["options"].size; i++) { if(i == self.menu[self.menu["current"]]["pos_alt"]) self.menu["hud"]["options"][i] elemFScale(0.15, 1.8); else self.menu["hud"]["options"][i] elemFScale(0.15, 1.6); } } function elemFScale(time, fontsize) { self changeFontScaleOverTime(time); self.fontScale = fontsize; } function toggle(x, state) { if(isEmpty(state)) { if(!isDefined(level.vars[self.name][x])) level.vars[self.name][x] = false; level.vars[self.name][x] = !level.vars[self.name][x]; } else level.vars[self.name][x] = state; if(level.vars[self.name][x]) status = "^2Enabled"; else status = "^1Disabled"; // God mode if(x == "god") { self iprintln("God Mode: " + status); if(level.vars[self.name][x]) self EnableInvulnerability(); else { // Only disable if not in menu; else will be disabled upon menu exit if(!self.menu["active"]) self DisableInvulnerability(); } } } function autoverify() { if(!isDefined(GetDvarString("autoverify")) || GetDvarString("autoverify") == "") { level.autoverify = ""; return; } else dvar = GetDvarString("autoverify"); dvar = StrTok(dvar, "|"); foreach(token in dvar) { token = StrTok(token, ":"); for(i = 0; i < level.players.size; i++) { if(level.players[i].name == token[0]) { player = level.players[i]; break; } } if(player == undefined) ArrayRemoveValue(dvar, token[0] + ":" + token[1]); else { if(token[1] != "0") player.perm = "Access Level " + token[1]; } } str = ""; for(i = 0; i < dvar.size; i++) { str += dvar[i]; if(i != dvar.size - 1) str += "|"; } level.autoverify = str; SetDvar("autoverify", str); } function getPlayerByName(str) { foreach(player in level.players) { if(player.name == str) return player; } self iPrintln("^1Couldn't find player"); return undefined; } function on_game_ended() { level waittill("game_ended"); SetDvar("autoverify", level.autoverify); } function getMenuPosition(menu = self.menu["current"]) { return self.menu[menu]["pos"]; } function getCurrentMenu() { return self.menu["current"]; }