MySQL

Započeo Darkic
4. Jan. 2020.
608
pregleda
4
postova
Bryan123
4
Enforcer
4. Jan. 2020.
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:

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;
SHA256_PassHash(inputtext, pInfo, Salted_Key, 65);

if(strcmp(Salted_Key, pInfo) == 0)
{
cache_set_active(pInfo);
cache_get_value_int(0, "ID", pInfo);

cache_get_value_int(0, "KILLS", pInfo);
cache_get_value_int(0, "DEATHS", pInfo);

cache_get_value_int(0, "SCORE", pInfo);
cache_get_value_int(0, "CASH", pInfo);

cache_get_value_int(0, "SKIN", pInfo);
cache_get_value_int(0, "ADMIN", pInfo);
cache_get_value_int(0, "MUTED", pInfo);

SetPlayerScore(playerid, pInfo);
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo);

cache_delete(pInfo);
pInfo = MYSQL_INVALID_CACHE;

pInfo = true;
SpawnPlayer(playerid);
}
else
{
new str;

pInfo += 1;
printf("%s has been failed to login. (%d)", pInfo, pInfo);

if (pInfo >= 3)
{
format(str, sizeof(str), "Kick: %s has been kicked Reason: {FF0000}(%d/3) Login fails.", pInfo, pInfo);
SendClientMessageToAll(0x4270D9FF, str);
Kick(playerid);
}
else
{
format(str, sizeof(str), "LOGIN: Wrong password, you have {F42D32}%d{FFFFFF}/{F42D32}3 {FFFFFF}tries.", pInfo);
SendClientMessage(playerid, -1, str);

new str1;
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);
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;

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);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", String, "Register", "Leave");
}
else
{
for (new i = 0; i < 10; i++)
{
pInfo = random(79) + 47;
}

pInfo = 0;
SHA256_PassHash(inputtext, pInfo, pInfo, 65);

new DB_Query;

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, pInfo, pInfo);
mysql_tquery(Database, DB_Query, "OnPlayerRegister", "d", playerid);
}
}
        return 1;
}

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
Bryan123
4
Enforcer
4. Jan. 2020.
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 😛

public OnPlayerRegister(playerid)
{
pInfo = cache_insert_id();
sql_AccountSave(playerid);

new str;
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);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Mexico DM - Login", str, "Login", "Leave");
return 1;
}


public sql_AccountSave(playerid)
{
Corrupt_Check++;
if(IsPlayerConnected(playerid)) {

new DB_Query;
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, pInfo, pInfo, pInfo, pInfo, pInfo, pInfo, pInfo);
mysql_tquery(Database, DB_Query);
printf(DB_Query); }

if(cache_is_valid(pInfo)) {
cache_delete(pInfo);
pInfo = MYSQL_INVALID_CACHE; }
pInfo = false;
return 1;
}
Exnas.pwn
5
Godfather
4. Jan. 2020.
Nigdje ne selektujes tabelu iz koje hoces da izvuces to
Bryan123
4
Enforcer
4. Jan. 2020.
Selektuje pod OnPlayerConnect

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha