WTFCS Community | Gaming community @ since 2011
[TUTORIAL] Sistem Task-uri - Printable Version

+- WTFCS Community | Gaming community @ since 2011 (https://wtfcs.com/forum)
+-- Forum: WTFCS - GAMING (https://wtfcs.com/forum/forumdisplay.php?fid=1035)
+--- Forum: Lumea jocurilor (https://wtfcs.com/forum/forumdisplay.php?fid=3072)
+---- Forum: SA:MP (https://wtfcs.com/forum/forumdisplay.php?fid=3077)
+----- Forum: Ajutor scripting (https://wtfcs.com/forum/forumdisplay.php?fid=3594)
+------ Forum: Tutoriale (https://wtfcs.com/forum/forumdisplay.php?fid=3595)
+------ Thread: [TUTORIAL] Sistem Task-uri (/showthread.php?tid=68733)



[TUTORIAL] Sistem Task-uri - mihay111 - 04-04-2020

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.