Jump to content
Autentificarea cu Google și Facebook nu mai este disponibilă. ×

Recommended Posts

Posted (edited)

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
Posted

posibil ca problema ta sa fie.. 

PlayerInfo[playerid[pLobby]

din case-ul dat.

Posted
4 minutes ago, consty said:

posibil ca problema ta sa fie.. 

PlayerInfo[playerid[pLobby]

din case-ul dat.

Nu, am scris eu gresit, scuze :(

Posted

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

Posted
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

 

Posted
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.

Posted
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. 

Posted (edited)
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
Posted
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. 

 

Posted

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!

  • Like 1
Posted (edited)
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
Posted
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)

Posted
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? 

Posted
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
Posted (edited)
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
Posted
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
Posted
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

Posted (edited)
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.