Dialog nakon responsa ne nestaje

Započeo 032.Marcus, Jul 10, 2019, 23:23:44 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Dialog ne nestaje nakon sto unesem korektnu lozinku, vec svaki put se iznova pojavi. Kao da je u nekoj beskonacnoj petlji. U kodu sam izdvojio gde koristim DIALOG_LOGIN, kao i deo samo za njega umesto da saljem ceo DialogResponse. Ukoliko zatreba jos nesto, javite da dostavim. Dugo me nije bilo na SAMPu, pa dok se podsetim stvari, a ovako neke stvari me izbace iz takta pa ne znam sta se desava :D

Deo skripte:
public GetPlayerData(playerid)
{
	new query[128], playername[MAX_PLAYER_NAME];
	
	GetPlayerName(playerid, playername, sizeof(playername));
	mysql_format(mysql, query, sizeof(query), "SELECT * FROM Players WHERE NAME = '%e' LIMIT 1", playername);
	mysql_tquery(mysql, query, "LoadPlayerData", "i", playerid);
	
	return 1;
}

public LoadPlayerData(playerid)
{
	// Check if result has atleast one row, that means player has an account, show him dialog for login
	if(cache_num_rows() > 0)
	{
		cache_get_value_name_int(0, "ID", PlayerInfo[playerid][ID]);
		cache_get_value_name(0, "Password", PlayerInfo[playerid][Password], 65);
		cache_get_value_name(0, "Salt", PlayerInfo[playerid][Salt], 11);
		cache_get_value_name_int(0, "Sex", PlayerInfo[playerid][Sex]);
		cache_get_value_name_int(0, "Age", PlayerInfo[playerid][Age]);
		cache_get_value_name_int(0, "Country", PlayerInfo[playerid][Country]);
		cache_get_value_name_int(0, "City", PlayerInfo[playerid][City]);
		cache_get_value_name_float(0, "SpawnX", PlayerInfo[playerid][SpawnX]);
		cache_get_value_name_float(0, "SpawnY", PlayerInfo[playerid][SpawnY]);
		cache_get_value_name_float(0, "SpawnZ", PlayerInfo[playerid][SpawnZ]);
		
		ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Vas nalog je pronadjen. Molimo Vas upisite lozinku da se prijavite", "Dalje", "Izlaz");
	}
	// Otherwise, player is not registered, show him dialog for registration
	else
	{
		ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", "Vas nalog nije pronadjen. Molimo Vas upisite lozinku da se registrujete", "Dalje", "Izlaz");
	}
	
	return 1;
}

case DIALOG_LOGIN:
		{
			if(!response)
			{
				return Kick(playerid);
			}
			if(response)
			{
				new buffer[65], playername[MAX_PLAYER_NAME];
			
				SHA256_PassHash(inputtext, PlayerInfo[playerid][Salt], buffer, 65);
				
				if(strcmp(buffer, PlayerInfo[playerid][Password]) == 0)
				{
					GetPlayerName(playerid, playername, sizeof(playername));
					GetPlayerData(playerid);
					// If player didnt pick Sex, show him dialog
					if(!PlayerInfo[playerid][Sex])
					{
						ShowPlayerDialog(playerid, DIALOG_SEX, DIALOG_STYLE_LIST, "Registracija - Pol", "Musko\nZensko", "U redu", "Izadji");
					}
					// If player didnt pick Age, show him dialog
					else if(!PlayerInfo[playerid][Age])
					{
						ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT, "Registracija - Godine", "Unesite koliko imate godina", "U redu", "Izadji");
					}
					// If player didnt pick Country, show him dialog
					else if(!PlayerInfo[playerid][Country])
					{
						ShowPlayerDialog(playerid, DIALOG_COUNTRY, DIALOG_STYLE_LIST, "Registracija - Drzava", "Srbija\nCrna Gora\nBosna i Hercegovina\nHrvatska\nMakedonija\nOstalo", "U redu", "Izadji");
					}
					// If player didnt picky City, show him dialog
					else if(!PlayerInfo[playerid][City])
					{
						ShowPlayerDialog(playerid, DIALOG_CITY, DIALOG_STYLE_LIST, "Registracija - Grad", "Los Santos\nLas Venturas\nSan Fierro", "U redu", "Izadji");
					}
					// Otherwise, player is fully registered, spawn him
					else 
					{
						SetSpawnInfo(playerid, 0, 0, PlayerInfo[playerid][SpawnX], PlayerInfo[playerid][SpawnY], PlayerInfo[playerid][SpawnZ], 360.0, 0, 0, 0, 0, 0, 0);
						SpawnPlayer(playerid);
					}
				}
				else
				{
					ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Lozinka koju ste uneli nije ispravna, pokusajte ponovo", "Dalje", "Izlaz");
				}
			}
		}


Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): /

Slika/video ingame problema(obavezno ako je ingame problem): /


Probao sam stari nacin debagovanja, sa printfom. I bukvalno ispise sve kako treba. Sad ne znam koji jos nacini debagovanja imaju, a znacilo bi mi da znam jer imam malo vremena, a imam previse posla da skriptu doteram do vrhunca. Idem korak po korak, pa necu da prelazim dalje dok autentikacija iz aplikacije i iz igrice ne proradi kako treba

EDIT: Radilo je, i odjednom sam primetio da se nesto izbagovalo. Kako i sta, pojma nemam, satima ne mogu da provalim


Evo sad sam na svakom koraku pre poziva odradio, i ono sto je problem je sto se LoadPlayerData poziva non-stop
EDIT: Nasao sam gresku, pozivao sam GetPlayerData nakon sto unese ispravan password. Verovatno je imao razlog za to, a da ja nisam primetio da ce doci do petlje. Hvala svakako za pomoc, sad cu da vidim dalje :)
Poslednja Izmena: Jul 11, 2019, 07:44:07 PRE PODNE od 032.Marcus

Koristi za ovo pquery i gde pozivas getplayerdata pogledaj

Pre nego sto zakljucam temu, to oko querya, koja je konkretno razlika?

tquery ide jedan pa drugi single thread tu mozes neki update table, a ovaj pquery ide sve u isto vreme i on se koristi za neke vece select upite kao sto je taj

Da ne otvaram novu temu za kratko pitanje, nesto se ovde izbagovalo dobro. Svaki put kad se registrujem, dva puta moram da unosim godine, jer prvi put ih ne upise u bazu. Bukvalno ne znam sta se desava, sta baguje ovoliko

https://imgur.com/a/j0gujN8

Znaci procita lepo iz inputa, odradi se upit. Onda kada se ulogujem, pise da je Age 0, pa ponovo moram sve, i tek onda upise

EDIT: Isao sam korak po korak, sve se lepo desi. Jedini problem koji vidim je da kao da skripta zuri tj. query se kasnije izvrsi, kao da mu treba vremena. Kada idem polako, sacekam par sekundi pa nastavim korak po korak, onda se sve izvrsi kako treba
Poslednja Izmena: Jul 11, 2019, 20:09:00 POSLE PODNE od 032.Marcus