Jump to content

[TUTORIAL] Sistem Task-uri


MiHaY111
 Share

Recommended Posts

Salut! In acest tutorial o sa va arat un sistem de task-uri facut de mine, de la 0. Vreau sa precizez ca sunt nab in Pawn si nu stiu foarte multe chestii.

Sa-ncepem!

Aveti nevoie de ZCMD pentru comenzi, trebuie scris la inceputul GM-ului

#include <zcmd>

Inainte de toate, eu am definit si:

 

#define SCM SendClientMessage // pentru a-mi fi mai usor, sa nu mai stau sa scriu tot 
#define COLOR_TASKS 0xCULOARE// culoare mesajelor specifice task-urilor, le puteti schimba. Puteti lua de pe colorpicker.com
  1. Definim task-urile pentru baza de date, pe la inceputul gamemode-ului sau unde aveti voi definite si altele de genul:
#define pTasksx

2. Mergem la enum pInfo si definim task-urile pentru joc:

pTasks

3. Acum, trebuie sa facem sa se salveze in baza de date, cat si randul pentru task-uri in contul jucatorilor:

Intram in baza de date, ne ducem la users (sau accounts, cum aveti dvs.), la "Structura", apoi va duceti jos de tot si o sa va apara o optiune "Adauga coloane". Veti adauga una, apoi apasati pe "Executa". La "Nume", veti pune "Tasks", iar apoi salvati.

Apoi, definim si in baza de date pentru a se realiza conexiunea si sa se faca update-urile necesare la Task-uri:

Mergem in GM, la public Update si scriem linia:

(depinde cum aveti voi in gm, eu am astfel)

case pTasksx: format(var, sizeof(var), "UPDATE `users` SET `Tasks`='%d' WHERE `ID`='%d'", PlayerInfo[playerid][pTasks],  PlayerInfo[playerid][pSQLID]); 
// va actualiza numarul task-urilor de cate ori veti primi sau vi se va lua cate unul

4. Mergem la Payday, in GM, si adaugam liniile:

PlayerInfo[i][pTasks] +=1, Update(i, pTasksx); // La fiecare payday, jucatorul va primi cate un Task. Totodata se actualizeaza numarul si in baza de date
format(string, sizeof(string), "Ai primit un nou task! Foloseste /tasks!"); // Mesajul pe care jucatorul il primeste la payday
SCM(i, COLOR_TASKS, string); // Se trimite mesajul cu aceasta linie

acum, fiecare jucator va primi cate un Task la fiecare payday. 

5. Acum, vom creea comanda care sa arate task-urile. Eu o s-o fac sub forma de dialog

CMD:tasks(playerid, params[]) {
	if(PlayerInfo[playerid][pTasks] < 1) return SCM(playerid, COLOR_TASKS, "Nu ai un task!");  // Daca jucatorul nu are un task, va primi acest mesaj si nu i se vor arata task-urile
	if(IsPlayerConnected(playerid)) ShowPlayerDialog(playerid, DIALOG_TASKS, DIALOG_STYLE_LIST, "Tasks", "Schimba numarul de inmatriculare (PREMIU: $1000)\nAlt Task", "Select", "Cancel"); // Acesta este dialogul care ii va aparea jucatorului cand va tasta comanda, si se va folosi de dialogul "DIALOG_TASKS"
return 1;
}

6. Vom creea dialogul "DIALOG_TASKS", care va trimite comenzi atunci cand jucatorul apasa pe o optiune din /tasks

if(dialogid == DIALOG_TASKS) { // verifica daca se foloseste de DIALOG_TASKS, in cazul nostru, /tasks
		if(!response) return 1;
		switch(listitem) { // aici o sa adaugam caracteristici la fiecare optiune
                case 0: // primul caz, adica primul task din /tasks
                {
				if(PlayerInfo[playerid][pTasks] < 1) return SCM(playerid, COLOR_ERROR, "Eroare: Nu ai un task!"); // daca nu are un task nu va primi mesajul si nu va face task-ul
				if(PlayerInfo[playerid][pTasks] >= 1) return SCM(playerid, COLOR_TASKS, "Schimba plate-ul de la masina prin /carplate"); // daca are unul sau mai multe task-uri, va primi acest mesaj cu instructiuni
                }

            }
        }

7. Dupa cum vedeti, task-ul meu este acela de a schimba numarul de inmatriculare, ce se face prin comanda /carplate. O sa ma duc la comanda (CMD:carplate) si o sa adaug (inainte de "return 1"):

if(PlayerInfo[playerid][pTasks] >= 1) { // verifica daca jucatorul are unul sau mai multe task-uri
		SendClientMessage(playerid, COLOR_TASKS, "Ai completat task-ul 'Schimba nr. de inmatriculare'!"); // trimite mesajul ca a realizat task-ul
		SendClientMessage(playerid, COLOR_TASKS, "+$1000"); // acesta este premiul, trimis intr-un mesaj
		GivePlayerCash(playerid, 2000); // trimite banii jucatorului
		PlayerInfo[playerid][pTasks] -= 1;  // ii va lua un task jucatorului
		Update(playerid, pTasksx);	// i se vor actualiza task-urile in baza de date jucatorului
	    	}

SI asa puteti adauga si dvs. task-uri. Sper ca v-am ajutat si ca am explicat cat de bine posibil ca sa intelegeti. Inca sunt foarte incepator in Pawn si nu stiu toate denumirile, dar sper ca ati inteles ceva.

Link to comment
Share on other sites

Un sistem basic de task-uri, dar bazat pe payday-uri, care poate fi completat si adus intr-o forma mai complexa, ce pot sa spun, e oarecum folositor pentru incepatori, felicitari pentru munca depusa!

Link to comment
Share on other sites

12 minutes ago, DaNNy ToV said:

Un sistem basic de task-uri, dar bazat pe payday-uri, care poate fi completat si adus intr-o forma mai complexa, ce pot sa spun, e oarecum folositor pentru incepatori, felicitari pentru munca depusa!

mersi

Link to comment
Share on other sites

1 minute ago, Syconic said:

Un sistem frumos, ce pot spune, insa nu e prea complex, e simplu si dragut. Felicitari pentru munca depusa.

mersi

Link to comment
Share on other sites

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