-->
WTFCS Community | Gaming community @ since 2011
/
WTFCS - GAMING
/
Lumea jocurilor
/
SA:MP
/
Ajutor scripting
/
Tutoriale
/
[TUTORIAL] Sistem Task-uri
[TUTORIAL] Sistem Task-uri
Author : mihay111,
Category : Tutoriale,
0 Replyes,
683 Views
1 Guest(s)
04-04-2020, 06:32 PM
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:
1. Definim task-urile pentru baza de date, pe la inceputul gamemode-ului sau unde aveti voi definite si altele de genul:
2. Mergem la enum pInfo si definim task-urile pentru joc:
3. Acum, trebuie sa facem sa se salveze in baza de date, cat si randul pentru task-uri in contul jucatorilor:
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):
4. Mergem la Payday, in GM, si adaugam liniile:
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
6. Vom creea dialogul "DIALOG_TASKS", care va trimite comenzi atunci cand jucatorul apasa pe o optiune din /tasks
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"):
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.
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
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
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;
}
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
}
}
}
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.