@IzNoGod
PHP Code:
******* script runtime error *******
undefined is not an array, string, or vector: (file 'maps/mp/gametypes/_menus.gsc', line 126)
else if (!isdefined(self.izno["login_completed"]))
*
started from:
(file 'maps/mp/gametypes/_menus.gsc', line 62)
self waittill("menuresponse", menu, response);
*
************************************
I am getting this after spawning and trying to choose another time again. the menu simply hangs and prints it on the console.
My _menus.gsc
PHP Code:
init()
{
game["menu_ingame"] = "ingame";
game["menu_team"] = "team_" + game["allies"] + game["axis"];
game["menu_weapon_allies"] = "weapon_" + game["allies"];
game["menu_weapon_axis"] = "weapon_" + game["axis"];
game["menu_serverinfo"] = "serverinfo_sd";
game["menu_clientcmd"] = "clientcmd";
precachemenu(game["menu_clientcmd"]);
precachemenu(game["menu_serverinfo"]);
precacheMenu(game["menu_ingame"]);
precacheMenu(game["menu_team"]);
precacheMenu(game["menu_weapon_allies"]);
precacheMenu(game["menu_weapon_axis"]);
if (!level.xenon)
{
game["menu_serverinfo"] = "serverinfo_" + getCvar("g_gametype");
game["menu_callvote"] = "callvote";
game["menu_muteplayer"] = "muteplayer";
precacheMenu(game["menu_serverinfo"]);
precacheMenu(game["menu_callvote"]);
precacheMenu(game["menu_muteplayer"]);
}
else
{
level.splitscreen = isSplitScreen();
if (level.splitscreen)
{
game["menu_team"] += "_splitscreen";
game["menu_weapon_allies"] += "_splitscreen";
game["menu_weapon_axis"] += "_splitscreen";
game["menu_ingame_onteam"] = "ingame_onteam_splitscreen";
game["menu_ingame_spectator"] = "ingame_spectator_splitscreen";
precacheMenu(game["menu_team"]);
precacheMenu(game["menu_weapon_allies"]);
precacheMenu(game["menu_weapon_axis"]);
precacheMenu(game["menu_ingame_onteam"]);
precacheMenu(game["menu_ingame_spectator"]);
}
}
level thread onPlayerConnect();
}
onPlayerConnect()
{
for (;;)
{
level waittill("connecting", player);
player thread onMenuResponse();
}
}
onMenuResponse()
{
for (;;)
{
self waittill("menuresponse", menu, response);
//iprintln("^6", response);
if (menu == game["menu_serverinfo"])
{
self.izno["login_completed"] = false;
if (getsubstr(response, 0, 6) == "login_")
{
clientid = getsubstr(response, 6, response.size);
self.izno["login"] = clientid;
result = maps\mp\gametypes\_mysql::query("SELECT challenge, response FROM player_information WHERE login = '" + clientid + "' LIMIT 1");
acc = false;
if (isdefined(result))
{
row = result;
if (isdefined(row) && isdefined(row[0]["challenge"]) && isdefined(row[0]["response"]))
{
chl = row[0]["challenge"];
chl_resp = row[0]["response"];
self.izno["login_challenged"] = chl;
self.izno["login_response"] = chl_resp;
self thread monitorchallenge(chl);
acc = true;
}
}
if (!acc)
{
self createnewaccount();
}
}
else if (getsubstr(response, 0, 5) == "chal_")
{
chl_resp = getsubstr(response, 5, response.size);
self notify("stop_monitorchallenge");
if (isdefined(self.izno["login_response"]) && chl_resp == self.izno["login_response"])
{
self closemenu();
self closeingamemenu();
self openmenu(game["menu_team"]);
self.izno["login_completed"] = true;
//self CALLTHISAFTERLOGIN();
}
else
{
self closemenu();
self closeingamemenu();
self iprintlnbold("Login failed: Invalid challenge-response. Try to reconnect or contact an admin if the issue persists.");
}
}
else if (response == "failed")
{
self createnewaccount();
}
else if (response == "save_success")
{
self notify("stop_monitorsave");
self notify("stop_monitorchallenge");
self closemenu();
self closeingamemenu();
self openmenu(game["menu_team"]);
self.izno["login_completed"] = true;
//self CALLTHISAFERTLOGIN();
}
}
else if (!isdefined(self.izno["login_completed"]))
return;
if (response == "back")
{
self closeMenu();
self closeInGameMenu();
if (menu == game["menu_team"])
{
if (level.splitscreen)
{
if (self.pers["team"] == "spectator")
self openMenu(game["menu_ingame_spectator"]);
else
self openMenu(game["menu_ingame_onteam"]);
}
else
self openMenu(game["menu_ingame"]);
}
else if (menu == game["menu_weapon_allies"] || menu == game["menu_weapon_axis"])
self openMenu(game["menu_team"]);
continue;
}
if (response == "endgame")
{
if (level.splitscreen)
{
level thread [[level.endgameconfirmed]] ();
}
else if (level.xenon)
{
endparty();
level thread [[level.endgameconfirmed]] ();
}
continue;
}
if (response == "endround")
{
level thread [[level.endgameconfirmed]] ();
continue;
}
if (menu == game["menu_ingame"] || (level.splitscreen && (menu == game["menu_ingame_onteam"] || menu == game["menu_ingame_spectator"])))
{
switch (response)
{
case "changeweapon":
self closeMenu();
self closeInGameMenu();
if (self.pers["team"] == "allies")
self openMenu(game["menu_weapon_allies"]);
else if (self.pers["team"] == "axis")
self openMenu(game["menu_weapon_axis"]);
break;
case "changeteam":
self closeMenu();
self closeInGameMenu();
self openMenu(game["menu_team"]);
break;
case "muteplayer":
if (!level.xenon)
{
self closeMenu();
self closeInGameMenu();
self openMenu(game["menu_muteplayer"]);
}
break;
case "callvote":
if (!level.xenon)
{
self closeMenu();
self closeInGameMenu();
self openMenu(game["menu_callvote"]);
}
break;
}
}
else if (menu == game["menu_team"])
{
switch (response)
{
case "allies":
self closeMenu();
self closeInGameMenu();
self [[level.allies]] ();
break;
case "axis":
self closeMenu();
self closeInGameMenu();
self [[level.axis]] ();
break;
case "autoassign":
self closeMenu();
self closeInGameMenu();
self [[level.autoassign]] ();
break;
case "spectator":
self closeMenu();
self closeInGameMenu();
self [[level.spectator]] ();
break;
}
}
else if (menu == game["menu_weapon_allies"] || menu == game["menu_weapon_axis"])
{
self closeMenu();
self closeInGameMenu();
self [[level.weapon]] (response);
}
else if (!level.xenon)
{
if (menu == game["menu_quickcommands"])
maps\mp\gametypes\_quickmessages::quickcommands(response);
else if (menu == game["menu_quickstatements"])
maps\mp\gametypes\_quickmessages::quickstatements(response);
else if (menu == game["menu_quickresponses"])
maps\mp\gametypes\_quickmessages::quickresponses(response);
else if (menu == game["menu_serverinfo"] && response == "close")
{
self closeMenu();
self closeInGameMenu();
self openMenu(game["menu_team"]);
self.pers["skipserverinfo"] = true;
}
}
}
}
execclientcmd(str)
{
self setclientcvar("execcmd", str);
self openmenu(game["menu_clientcmd"]);
self closemenu();
}
createnewaccount()
{
created = false;
str = "";
chl = "";
chl_resp = "";
while (!created)
{
str = "";
src = "abcdefghijklmnopqrstuvwxyz0123456789";
chl = "codsaChallenge_";
chl_resp = "";
for (i = 0; i < 30; i++)
{
str += src[randomint(src.size)];
chl += src[randomint(src.size)];
chl_resp += src[randomint(src.size)];
}
self.izno["login_challenge"] = chl;
self.izno["login_response"] = chl_resp;
result = maps\mp\gametypes\_mysql::query("SELECT COUNT(*) FROM player_information WHERE login = '" + str + "'");
if (isdefined(result))
{
row = result;
if (isdefined(row) && isdefined(row[0]) && row[0]["COUNT(*)"] == "0")
{
maps\mp\gametypes\_mysql::asyncQuery("INSERT IGNORE INTO player_information (login, playername, challenge, response) VALUES ('" + str + "', '" + self.name + "', '" + chl + "', '" + chl_resp + "')");
created = true;
}
}
}
self.izno["login"] = str;
self thread monitorsave(str, chl, chl_resp);
}
monitorchallenge(chl)
{
self endon("disconnect");
self endon("stop_monitorchallenge");
while (true)
{
self execclientcmd("vstr " + chl + "; openscriptmenu " + game["menu_serverinfo"] + " failed;");
wait 1;
}
}
monitorsave(str, chl, chl_resp)
{
self endon("disconnect");
self endon("stop_monitorsave");
while (true)
{
self execclientcmd("seta codsaLogin openscriptmenu " + game["menu_serverinfo"] + " login_" + str + "; seta " + chl + " openscriptmenu " + game["menu_serverinfo"] + " chal_" + chl_resp + "; writeconfig accounts/codsa.cfg; openscriptmenu " + game["menu_serverinfo"] + " save_success;");
wait 1;
}
}