Jump to content

[PAWN] Language System pe MySQL


Tupi
 Share

Recommended Posts

In acest tutorial am sa va explic cum se poate crea un sistem pentru selectarea limbii in joc care ramane si salvata.

 

 

Inainte de toate eu am folosit urmatoarele include-uri: a_samp, a_mysql, zcmd, foreach, si am definit SCM-ul si DIALOG_SETLANGUAGE.

#include <a_samp>
#include <a_mysql>
#include <zcmd>
  
#define SCM SendClientMessage
#define DIALOG_SETLANGUAGE 1 //numarul dialogului trebuie sa fie egal cu numarul ultimui dialog definit +1

 

1. Pentru inceput vom merge la enum-ul unde aveti toate variabilele (in cazul meu pInfo) si adaugam variabila 'pLanguage'.

enum pInfo
{
	pLanguage,
}

 

2. Intram in baza de date, mergem la tabelul cu toate conturile de pe server (in cazul meu users) si vom adauga un nou rand pentru a putea incarca/salva limba jucatorului. Dupa ce ati intrat in tabelul cu conturi, va duceti la 'Structura' iar jos de tot o sa aveti o optiune 'Adauga coloane' cu o valoare prestabilita de 1 coloana. Noi doar de una avem nevoie asadar apasati direct pe butonul 'Executa'. La nume veti pune 'Language' dupa care ve-ti apasa pe butonul 'Salveaza'. Acum noua coloana 'Language' a fost adaugata in baza de date pentru toti jucatorii.

 

3. Mergem la functia de logare a unui jucator pe server (OnPlayerLogin(playerid) in cazul meu) si vom lua valoarea din baza de date in variabila creata pentru enum.

function OnPlayerLogin(playerid)
{
	PlayerInfo[playerid][pLanguage] = cache_get_field_content_int(0, "Language");

	return 1;
}

 

4. Vom crea un stock care va fi folosit pentru trimiterea mesajelor jucatorilor in functie de limba pe care o are setata (SendClientMessageEx in cazul meu).

stock SendClientMessageEx(playerid, color, string1[], string2[]) // string1 = Text-ul in romana | string2 = Text-ul in engleza
{
	if(PlayerInfo[playerid][pLanguage] == 0) SCM(playerid, color, string1); //daca are limba romana setata atunci ii trimite text-ul de la string1
	else SCM(playerid, color, string2); //altfel daca nu are limba romana setat ii trimite text-ul de la string2
	
	return 1;
}

 

5. Acum vom crea o comanda prin care jucatorul sa-si poata seta limba dorita.

CMD:setlanguage(playerid, params[]) {
	ShowPlayerDialog(playerid, DIALOG_SETLANGUAGE, DIALOG_STYLE_MSGBOX, "", "RO: Selecteaza limba ta\n\nEN: Select your language", "Romana", "English");
	return 1;
}

 

6. Mergem la public OnPlayerDialogResponse si verificam daca jucatorul a raspuns la dialogul de selectare a limbei.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	swich(dialogid)
	{
		case DIALOG_SETLANGUAGE: {
			if(response) { //daca apasa primul buton
				PlayerInfo[playerid][pLanguage] = 0; //Ii setam limba pe 0 (romana)
				SCM(playerid, -1, "Ti-ai setat limba jocului ca fiind Romana"); //Ii trimitem un mesaj de informare
			}
			else { //daca apasa pe al doilea buton
				PlayerInfo[playerid][pLanguage] = 1; //Ii setam limba pe 1 (engleza)
				SCM(playerid, -1, "You set your language to be English"); //II trimitem un mesaj de informare
			}
			
			new query[128], pName[MAX_PLAYER_NAME]; //cream o varibila pentru a salva limba selectata in baza de date si una pentru a lua numele jucatorului la care trebuie salvata limba
			GetPlayerName(playerid, pName, sizeof(pName)); //luam numele jucatorului
			format(query, sizeof(query), "UPDATE `users` SET `Language`='%d' WHERE `name`='%s'", PlayerInfo[playerid][pLanguage], pName); //formatam query-ul pentru a salva limba in baza de date la jucator
			mysql_query(SQL, query) //trimitem query-ul formatat catre baza de date.
		}
	}
	return 1;
}

 

 

Va las mai jos si un exemplu de comanda pentru a vedea cum se poate folosi ce am creat mai sus, de aici depine doar de voi unde si cum vreti sa folositi.

CMD:test(playerid, params[])
{
	SendClientMessageEx(playerid, -1, "Acesta este un mesaj de test", "This is a test message");
	return 1;
}

 

Sper ca v-am ajutat cu acest tutorial. Pentru orice intrebare/nelamurire imi puteti trimite un PM si va voi ajuta.

Edited by Tupi
Corectare greseala.
Link to comment
Share on other sites

For those who don't know how create a Mysql table this might help

CREATE TABLE `users` (
`Name` varchar(255) NOT NULL,
`Language` bigint(255) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Thanks for the tutorial.


 

Link to comment
Share on other sites

  • Tupi locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • 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.