[CAMPANIE STAFF]Cautam moderatori si designeri activi!
Welcome to WTFCS Community Forums!
Servere gaming la super-preturi! [HOSTING SERVICE]
-->






[TUTORIAL] Sistem Task-uri
Author : mihay111, Category : Tutoriale, 0 Replyes, 679 Views
EVALUATE THIS TOPIC
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
1 Guest(s)
Moderator
     
577
POSTS
452
THREADS
190
REPUTATION
Male
Sex

WtfCs Coins: 0.15[w]

Suit Member
04-04-2020, 06:32 PM
#1
Salut! In acest tutorial o sa va arat un sistem de task-uri facut de mine, de la 0.

Sa-ncepem! 
Aveti nevoie de ZCMD pentru comenzi, trebuie scris la inceputul GM-ului #include <zcmd>. 
Inainte de toate, eu am definit si:

Code:
#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:
Code:
#define pTasksx
2. Mergem la enum pInfo si definim task-urile pentru joc:
Code:
pTasks

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


Code:
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):

Code:
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:
Code:
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
Code:
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

Code:
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"):

Code:
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.


Forum Jump: