Jump to content

Nu se modifica baza de date


Recommended Posts

Yo, salut, am o problema legata de o variabila care nu se actualizeaza in baza de date. Am facut un sistem bazat pe lobby-uri si alte chesti. Atunci cand jucatorul intra pe server trebuie sa aleaga un lobby(momentan este doar unul). Dupa ce alege unul acesta este trimis intr-un anume virtual world si de acolo poate juca linistit. Pe langa asta, as vrea ca sa se vada acest lucru si in baza de date, ca default valoarea in baza de date sa fie 0(asta insemnand ca jucatorul este offline) iar atunci cand este online si selecteaza un lobby, valoarea lui sa se modifice si in baza de date, am incercat mai multe modalitati dar tot nu merge.

In baza de date e trecuta ca "Lobby"-de tip int

#define pLobbyx 1
enum pInfo {
	...,
	pLobby
}
function UpdateVariable(playerid, varid) {
	new query[256];
	switch(varid) {
	    case pLobbyx: {
			mysql_format(g_Sql, query, sizeof(query), "UPDATE `users` SET `Lobby`='%d' WHERE `ID`='%d'", PlayerInfo[playerid][pLobby], PlayerInfo[playerid][pSQLID]);
			mysql_tquery(g_Sql, query, "", "");
		}
	...
}
 
//la comanda de alegere al lobby-ului:
PlayerInfo[playerid][pLobby] = 1;
UpdateVariable(playerid, pLobbyx);     

//la disconnect
PlayerInfo[playerid][pLobby] = 0;
UpdateVariable(playerid, pLobbyx);

Daca ma poate ajuta cineva, in joc se modifica, dar in baza de date.

Si nici intr-un textdraw nu se afiseaza corect.

Edited by Se7en_Days
Link to comment
Share on other sites

On 4/4/2022 at 8:21 PM, danuts said:

Ai verificat `mysql_log` cand se actualizeaza in baza de date?

Da, pot citi din baza de date dar nu merge sa se actualizeze.

In mysql_log nu apare vreo eroare sau ceva ciudat. Zice ca s-a executat cu succes

 

Link to comment
Share on other sites

19 hours ago, iSorin[] said:

Introdu mysql_log in pastebin

O alta problema pe care o mai am, nu pot introduce astfel de variabile care au legatura cu baza de date in PlayerTextdraw-uri(imi apare 0 la toate).

Adica daca in baza de date Level = 12, cand creez un PlayerTextdraw si pun la text PlayerInfo[playerid][pLevel] apare doar 0.

Link to comment
Share on other sites

46 minutes ago, Se7en_Days said:

O alta problema pe care o mai am, nu pot introduce astfel de variabile care au legatura cu baza de date in PlayerTextdraw-uri(imi apare 0 la toate).

Adica daca in baza de date Level = 12, cand creez un PlayerTextdraw si pun la text PlayerInfo[playerid][pLevel] apare doar 0.

Dar in schimb PlayerInfo[playerid][pLevel] contine valoarea care trebuie?

Ma gandeam poate incarcarea din baza se face gresit dar ma indoiesc desi atat timp cat faci format corect la string si  PlayerInfo[playerid][pLevel] are valoarea corecta nu vad de ce anume iti afiseaza eronat in textdraw. Eventual ne poti arata si cum creezi acel textdraw si cum formatezi/afisezi mesajul?

Ai un bug destul de special as putea spune si imi da impresia ca problema ta se afla altundeva in cod si compilatorul nu iti raporteaza problema. 

Link to comment
Share on other sites

42 minutes ago, Banditul said:

Dar in schimb PlayerInfo[playerid][pLevel] contine valoarea care trebuie?

Ma gandeam poate incarcarea din baza se face gresit dar ma indoiesc desi atat timp cat faci format corect la string si  PlayerInfo[playerid][pLevel] are valoarea corecta nu vad de ce anume iti afiseaza eronat in textdraw. Eventual ne poti arata si cum creezi acel textdraw si cum formatezi/afisezi mesajul?

Ai un bug destul de special as putea spune si imi da impresia ca problema ta se afla altundeva in cod si compilatorul nu iti raporteaza problema. 

In baza de date, "Level" este trecut cu valoarea 10. Si in joc daca fac o comanda oarecare care îmi spune level ul merge. Doar la textdraw uri nu merge. 

Momentan sunt putin ocupat si nu am laptop-ul la mine, voi trimite codul cu textdraw urile cand ajung acasa, cam vreo 2 ore mai dureaza. 

Edited by Se7en_Days
Link to comment
Share on other sites

42 minutes ago, Banditul said:

Dar in schimb PlayerInfo[playerid][pLevel] contine valoarea care trebuie?

Ma gandeam poate incarcarea din baza se face gresit dar ma indoiesc desi atat timp cat faci format corect la string si  PlayerInfo[playerid][pLevel] are valoarea corecta nu vad de ce anume iti afiseaza eronat in textdraw. Eventual ne poti arata si cum creezi acel textdraw si cum formatezi/afisezi mesajul?

Ai un bug destul de special as putea spune si imi da impresia ca problema ta se afla altundeva in cod si compilatorul nu iti raporteaza problema. 

 

Link to comment
Share on other sites

5 hours ago, iSorin[] said:

Ai incercat sa folosesti pluginuri speciale pentru a detecta o eroare?

Cum este `crashdetect` . Foloseste pluginu si daca ai erori in consola da-ne informatiile!

Am incercat, nu apare nimic...

Aici este codul cu textdraw-ul:

	new szLobby[24];
	format(szLobby, sizeof(szLobby), "Lobby:%d", PlayerInfo[playerid][pLobby]);

	PlayerTD[playerid][7] = CreatePlayerTextDraw(playerid, 392.000000, 47.000000, szLobby);
	PlayerTextDrawFont(playerid, PlayerTD[playerid][7], 3);
	PlayerTextDrawLetterSize(playerid, PlayerTD[playerid][7], 0.375000, 1.799998);
	PlayerTextDrawTextSize(playerid, PlayerTD[playerid][7], 271.500000, 17.000000);
	PlayerTextDrawSetOutline(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetShadow(playerid, PlayerTD[playerid][7], 0);
	PlayerTextDrawAlignment(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawColor(playerid, PlayerTD[playerid][7], -1);
	PlayerTextDrawBackgroundColor(playerid, PlayerTD[playerid][7], 255);
	PlayerTextDrawBoxColor(playerid, PlayerTD[playerid][7], 0);
	PlayerTextDrawUseBox(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetProportional(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetSelectable(playerid, PlayerTD[playerid][7], 0);

Codul cu textdraw-urile sunt puse la OnPlayerConnect.

Edited by Se7en_Days
Link to comment
Share on other sites

16 hours ago, Se7en_Days said:

Am incercat, nu apare nimic...

Aici este codul cu textdraw-ul:

	new szLobby[24];
	format(szLobby, sizeof(szLobby), "Lobby:%d", PlayerInfo[playerid][pLobby]);

	PlayerTD[playerid][7] = CreatePlayerTextDraw(playerid, 392.000000, 47.000000, szLobby);
	PlayerTextDrawFont(playerid, PlayerTD[playerid][7], 3);
	PlayerTextDrawLetterSize(playerid, PlayerTD[playerid][7], 0.375000, 1.799998);
	PlayerTextDrawTextSize(playerid, PlayerTD[playerid][7], 271.500000, 17.000000);
	PlayerTextDrawSetOutline(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetShadow(playerid, PlayerTD[playerid][7], 0);
	PlayerTextDrawAlignment(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawColor(playerid, PlayerTD[playerid][7], -1);
	PlayerTextDrawBackgroundColor(playerid, PlayerTD[playerid][7], 255);
	PlayerTextDrawBoxColor(playerid, PlayerTD[playerid][7], 0);
	PlayerTextDrawUseBox(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetProportional(playerid, PlayerTD[playerid][7], 1);
	PlayerTextDrawSetSelectable(playerid, PlayerTD[playerid][7], 0);

Codul cu textdraw-urile sunt puse la OnPlayerConnect.

OnPlayerConnect

Aici e problema, la OnPlayerConnect datele jucatorului sunt invalide pentru ca inca nu s-a logat. Eventual lasa partea de creare a textdrawului acolo dar partea format a mesajului cu datele pe care le vrei pune-o dupa ce se incarca datele (OnPlayerLogin sau depinde cum ai definita functia)

Link to comment
Share on other sites

55 minutes ago, Banditul said:

OnPlayerConnect

Aici e problema, la OnPlayerConnect datele jucatorului sunt invalide pentru ca inca nu s-a logat. Eventual lasa partea de creare a textdrawului acolo dar partea format a mesajului cu datele pe care le vrei pune-o dupa ce se incarca datele (OnPlayerLogin sau depinde cum ai definita functia)

Pai si cum ar trebui sa scriu la OnPlayerLogin? Adica codul cum ar trebui sa il scriu? 

Link to comment
Share on other sites

1 hour ago, Se7en_Days said:

Pai si cum ar trebui sa scriu la OnPlayerLogin? Adica codul cum ar trebui sa il scriu? 

Tot ce ai facut pentru Lobby punel in cod-ul unde se executa incarcarea datelor din baza de date. Daca ai gamemode burned ai functioa OnPlayerLogin.
Si pentru textdraw-uri ai un include unde se pun toate textdraw-urile. Si dupa se incarca automat. Si dupa le afisezi cu PlayerTextDrawShow (doar daca textdraw-urile sunt de playerid) daca nu sunt de playerid afiseazale cu TextDrawShowForPlayer.

Sper ca ai inteles ce ai de facut.

  • Thanks 1
Link to comment
Share on other sites

4 hours ago, iSorin[] said:

Tot ce ai facut pentru Lobby punel in cod-ul unde se executa incarcarea datelor din baza de date. Daca ai gamemode burned ai functioa OnPlayerLogin.
Si pentru textdraw-uri ai un include unde se pun toate textdraw-urile. Si dupa se incarca automat. Si dupa le afisezi cu PlayerTextDrawShow (doar daca textdraw-urile sunt de playerid) daca nu sunt de playerid afiseazale cu TextDrawShowForPlayer.

Sper ca ai inteles ce ai de facut.

Mergee, mersi tare mult doar ca, mai am o problema, nu mi se actualizeaza baza de date cand o variabila isi schimba valoarea, spre exemplu am o comanda [/levelup] si atunci cand o execut am codurile urmatoare:image.thumb.png.3bc938fd042da15c76eebfdbbb88d51b.png

CMD:levelup(playerid, params[]){	
	new string[64];
 	format(string, sizeof(string), "Acum ai level %d", PlayerInfo[playerid][pLevel]);
	SCM(playerid, COLOR_LIGHTBLUE, string); //aici arata bine
	PlayerInfo[playerid][pLevel]++; // aici e se actualizeaza si tot creste de la 1++
	UpdateVariable(playerid, pLevelx); // aici e problema
	//e doar de exemplu comanda
	return 1;
}
//Asta e functia care ar trebui sa faca update in baza de date
#define pLevelx 1

function UpdateVariable(playerid, varid) {
	new query[256];
	switch(varid) {
		case pLevelx: {
			mysql_format(g_Sql,query, sizeof(query), "UPDATE `users` SET `Level`='%d' WHERE `ID`='%d'", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pSQLID]);
			mysql_tquery(g_Sql, query, "", "");
  		}
	}
	return 1;
}
Edited by Se7en_Days
Link to comment
Share on other sites

3 hours ago, Se7en_Days said:

Mergee, mersi tare mult doar ca, mai am o problema, nu mi se actualizeaza baza de date cand o variabila isi schimba valoarea, spre exemplu am o comanda [/levelup] si atunci cand o execut am codurile urmatoare:image.thumb.png.3bc938fd042da15c76eebfdbbb88d51b.png

CMD:levelup(playerid, params[]){	
	new string[64];
 	format(string, sizeof(string), "Acum ai level %d", PlayerInfo[playerid][pLevel]);
	SCM(playerid, COLOR_LIGHTBLUE, string); //aici arata bine
	PlayerInfo[playerid][pLevel]++; // aici e se actualizeaza si tot creste de la 1++
	UpdateVariable(playerid, pLevelx); // aici e problema
	//e doar de exemplu comanda
	return 1;
}
//Asta e functia care ar trebui sa faca update in baza de date
#define pLevelx 1

function UpdateVariable(playerid, varid) {
	new query[256];
	switch(varid) {
		case pLevelx: {
			mysql_format(g_Sql,query, sizeof(query), "UPDATE `users` SET `Level`='%d' WHERE `ID`='%d'", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pSQLID]);
			mysql_tquery(g_Sql, query, "", "");
  		}
	}
	return 1;
}

Daca in functia UpdateVariable e pe define ai grija ca pLevelx sa fie mai mare ca orice valoare care este in swtich-ul din UpdateVariable.

Exemplu
#define pMoneyx 1
#define pLevelx 1

si in functie pMoneyx inainte de pLevelx o sa updateze doar la bani deaorece a gasit pe pMoneyx ca valoare 1

Rezolvare?

#define pMoneyx 1
#define pLevelx 2
#define pExpPointsx 3

(la fiecare define adaugat pentru functia UpdateVariable adaugi un numar mai mare decat ultimu exemplu)

#define pGiftPointsx 4 (4 e mai mare ca 3.)

Daca nu e asta solutia baga aici mysql_log.

 

 

 

  • Thanks 1
Link to comment
Share on other sites

36 minutes ago, iSorin[] said:

Daca in functia UpdateVariable e pe define ai grija ca pLevelx sa fie mai mare ca orice valoare care este in swtich-ul din UpdateVariable.

Exemplu
#define pMoneyx 1
#define pLevelx 1

si in functie pMoneyx inainte de pLevelx o sa updateze doar la bani deaorece a gasit pe pMoneyx ca valoare 1

Rezolvare?

#define pMoneyx 1
#define pLevelx 2
#define pExpPointsx 3

(la fiecare define adaugat pentru functia UpdateVariable adaugi un numar mai mare decat ultimu exemplu)

#define pGiftPointsx 4 (4 e mai mare ca 3.)

Daca nu e asta solutia baga aici mysql_log.

 

 

 

Am doar 2 define-uri legate de functia Update si sunt numerotate corect.

 

Aici ai mysql_log de la ultima testare a serverului: https://pastebin.com/SZ58eNLL

Link to comment
Share on other sites

51 minutes ago, iSorin[] said:

Daca in functia UpdateVariable e pe define ai grija ca pLevelx sa fie mai mare ca orice valoare care este in swtich-ul din UpdateVariable.

Exemplu
#define pMoneyx 1
#define pLevelx 1

si in functie pMoneyx inainte de pLevelx o sa updateze doar la bani deaorece a gasit pe pMoneyx ca valoare 1

Rezolvare?

#define pMoneyx 1
#define pLevelx 2
#define pExpPointsx 3

(la fiecare define adaugat pentru functia UpdateVariable adaugi un numar mai mare decat ultimu exemplu)

#define pGiftPointsx 4 (4 e mai mare ca 3.)

Daca nu e asta solutia baga aici mysql_log.

 

 

 

Mi-am dat seama de problema, daca te uiti in log-uri, atunci cand face update face doar pentru ID 1

 

Doar ca nu prea stiu ce ar trebui sa fac mai exact in cazul asta

Edited by Se7en_Days
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.