Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: 032.Marcus poslato Jul 10, 2019, 23:23:44 POSLE PODNE

Naslov: Dialog nakon responsa ne nestaje
Poruka od: 032.Marcus poslato Jul 10, 2019, 23:23:44 POSLE PODNE
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: [pawn]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");
            }
         }
      }

[/pawn]

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

Slika/video ingame problema(obavezno ako je ingame problem): /
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: Terza Lazarevic poslato Jul 10, 2019, 23:29:41 POSLE PODNE
jel si probao debug da odradis ?
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: 032.Marcus poslato Jul 10, 2019, 23:32:10 POSLE PODNE
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
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: Terza Lazarevic poslato Jul 10, 2019, 23:45:49 POSLE PODNE
printefaj pa posalji
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: 032.Marcus poslato Jul 11, 2019, 07:35:22 PRE PODNE
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 :)
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: Terza Lazarevic poslato Jul 11, 2019, 07:39:02 PRE PODNE
Koristi za ovo pquery i gde pozivas getplayerdata pogledaj
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: 032.Marcus poslato Jul 11, 2019, 07:44:53 PRE PODNE
Pre nego sto zakljucam temu, to oko querya, koja je konkretno razlika?
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: Terza Lazarevic poslato Jul 11, 2019, 10:05:44 PRE PODNE
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
Naslov: Odg: Dialog nakon responsa ne nestaje
Poruka od: 032.Marcus poslato Jul 11, 2019, 20:04:17 POSLE PODNE
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