Problem(error/warning): invalid cache id, no active cache. Da napomenem da mi se ovo desi samo na prvom loginu, odnosno nakon registracije, jer izbacuje jedan za drugim dialogom.
Dio skripte: [pawn]
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_LOGIN && response == 0 || dialogid == DIALOG_REGISTER && response == 0) return Kick(playerid);
if(dialogid == DIALOG_LOGIN && response == 1)
{
new Salted_Key[65];
SHA256_PassHash(inputtext, pInfo[playerid][Salt], Salted_Key, 65);
if(strcmp(Salted_Key, pInfo[playerid][Password]) == 0)
{
cache_set_active(pInfo[playerid][Player_Cache]);
cache_get_value_int(0, "ID", pInfo[playerid][ID]);
cache_get_value_int(0, "KILLS", pInfo[playerid][Kills]);
cache_get_value_int(0, "DEATHS", pInfo[playerid][Deaths]);
cache_get_value_int(0, "SCORE", pInfo[playerid][Score]);
cache_get_value_int(0, "CASH", pInfo[playerid][Cash]);
cache_get_value_int(0, "SKIN", pInfo[playerid][Skin]);
cache_get_value_int(0, "ADMIN", pInfo[playerid][Admin]);
cache_get_value_int(0, "MUTED", pInfo[playerid][Muted]);
SetPlayerScore(playerid, pInfo[playerid][Score]);
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][Cash]);
cache_delete(pInfo[playerid][Player_Cache]);
pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE;
pInfo[playerid][LoggedIn] = true;
SpawnPlayer(playerid);
}
else
{
new str[82];
pInfo[playerid][PasswordFails] += 1;
printf("%s has been failed to login. (%d)", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
if (pInfo[playerid][PasswordFails] >= 3)
{
format(str, sizeof(str), "Kick: %s has been kicked Reason: {FF0000}(%d/3) Login fails.", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
SendClientMessageToAll(0x4270D9FF, str);
Kick(playerid);
}
else
{
format(str, sizeof(str), "LOGIN: Wrong password, you have {F42D32}%d{FFFFFF}/{F42D32}3 {FFFFFF}tries.", pInfo[playerid][PasswordFails]);
SendClientMessage(playerid, -1, str);
new str1[155];
format(str1, sizeof(str1), "{FFFFFF}Welcome , %s.\n\n{0099FF}This account is registered.\n\
{0099FF}Please, input your password below to proceed to the game.\n\n", pInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Mexico DeathMatch - Login", str1, "Login", "Leave");
}
}
}
if(dialogid == DIALOG_REGISTER && response == 1)
{
if(strlen(inputtext) < 5 || strlen(inputtext) > 60)
{
SendClientMessage(playerid, RED, "ERROR: {FFFFFF}");
new String[153];
format(String, sizeof(String), "{FFFFFF}Welcome %s,\n\n{0099FF}Your account is not registered.\n\
{0099FF}Please, enter your password below to register new account.\n\n", pInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", String, "Register", "Leave");
}
else
{
for (new i = 0; i < 10; i++)
{
pInfo[playerid][Salt] = random(79) + 47;
}
pInfo[playerid][Salt][10] = 0;
SHA256_PassHash(inputtext, pInfo[playerid][Salt], pInfo[playerid][Password], 65);
new DB_Query[272];
mysql_format(Database, DB_Query, sizeof(DB_Query), "INSERT INTO `PLAYERS` (`USERNAME`, `PASSWORD`, `SALT`, `SCORE`, `KILLS`, `CASH`, `DEATHS`,`SKIN`, `ADMIN`, `MUTED`)\
VALUES ('%e', '%s', '%e', '0', '0', '0', '0', '0', '0', '0')", pInfo[playerid][Name], pInfo[playerid][Password], pInfo[playerid][Salt]);
mysql_tquery(Database, DB_Query, "OnPlayerRegister", "d", playerid);
}
}
return 1;
}
[/pawn]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [19:54:20] [plugins/mysql] cache_set_active: invalid cache id '0'
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_get_value_name_int: no active cache
[19:54:20] [plugins/mysql] cache_delete: invalid cache id '0'
Slika/video ingame problema(obavezno ako je ingame problem): link slike
Izvinjavam se za DP, resio sam. Necu uklanjati sadrzaj teme, vec cu izneti objasnjenje, jer mozda jos neko ima slican problem.
Uglavnom, login dialog je pozivan u publicu OnPlayerRegister, ali je isto tako u tom publicu pozivan i sql_AccountSave u kome se brise cache. Znam, glup sam ko kurac :P
[pawn]
public OnPlayerRegister(playerid)
{
pInfo[playerid][ID] = cache_insert_id();
sql_AccountSave(playerid);
new str[128];
format(str, sizeof(str), "{FFFFFF}Welcome back, %s.\n\n{0099FF}This account is already registered.\n\
{0099FF}Please, input your password below to proceed to the game.\n\n", pInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Mexico DM - Login", str, "Login", "Leave");
return 1;
}
[/pawn]
[pawn]
public sql_AccountSave(playerid)
{
Corrupt_Check[playerid]++;
if(IsPlayerConnected(playerid)) {
new DB_Query[295];
mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` SET `SCORE` = '%d', `CASH` = '%d', `KILLS` = '%d', `DEATHS` = '%d', `SKIN` = '%d', `ADMIN` = '%d', `MUTED` = '%d' WHERE `ID` = '%d' LIMIT 1",
pInfo[playerid][Score], pInfo[playerid][Cash], pInfo[playerid][Kills], pInfo[playerid][Deaths], pInfo[playerid][Skin], pInfo[playerid][Admin], pInfo[playerid][Muted], pInfo[playerid][ID]);
mysql_tquery(Database, DB_Query);
printf(DB_Query); }
if(cache_is_valid(pInfo[playerid][Player_Cache])) {
cache_delete(pInfo[playerid][Player_Cache]);
pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE; }
pInfo[playerid][LoggedIn] = false;
return 1;
}
[/pawn]
Nigdje ne selektujes tabelu iz koje hoces da izvuces to
Selektuje pod OnPlayerConnect