WiDuAlK Posted March 19, 2015 Posted March 19, 2015 (edited) Salutare, astazi vin cu un nou tutorial in 3 pasi. Mi-am propus in cei 3 pasi sa va arat cum se creaza o factiune de la 0, pentru ca si voi sa va concepeti un GM de la 0 , si sa stiti cum se adauga factiunile. Atentie, inainte tin sa mentionez ca eu ma folosesc de registerul mysql din tutorialul acesta: . Parcurgeti acest tutorial doar daca v-ati creat sistemul de inregistrare dupa tutorial, deoarece eu aduc o contribuire lui. In partea 1 o sa creem variabilele de la factiune pe care le vom folosi si anume pLeader, pMember si pRank in baza de date , dar si in GM. Tot aici vom crea publicul Update, care ne va usura updateul la baza de date. Am vazut la unele GM-uri ca se foloseau de acest public(R33 Ideal pentru RPG by wopss, RedzMax parca asa se chema si alte GM-uri care nu imi mai aduc aminte denumirea lor ) si m-am gandit ca e foarte bine sa il folositi. Vom crea si un nou enum cu datele de update. Vom crea comenzile /invite , /makeleader(cu rconul) /giverank, /uninvite , /fpk(cu rcon). Acum ca am facut introducerea sa trecem si la treaba practica. Mergem la enum-ul "pInfo" si vom adauga cele 3 variabile in felul urmator: enum pInfo { pParola, pID, pLeader,// variabila playerului cand are lider pMember,// variabila playerului cand are membru pRank// variabila playerului cand are rank }; creem un enum cu cele 3 upload-uri enum { LeaderUpdate, MemberUpdate, RankUpdate }; si callback-ul forward Update(playerid, type);// creem callback-ul public Update(playerid, type) // facem publicul { if(IsPlayerConnected(playerid))// verificam daca playerul este conectat { new query[256];// se creaza o interogare in public pentru baza de date switch(type)// aplicam la swich pentru a face mai rapida apelarea la callback { switch(type) { case LeaderUpdate:// dupa cum am creat enum-ul , verificam cazul de update, adica lider { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Leader`='%d' WHERE `Nume`='%e'", P_Data[playerid][pLeader], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } case MemberUpdate:// cazul memnerului { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Memner`='%d' WHERE `Nume`='%e'", P_Data[playerid][pMember], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } case RankUpdate:// cazul rank-ului { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Memner`='%d' WHERE `Nume`='%e'", P_Data[playerid][pMember], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } } } } return 1; } Acum facem comenzile , dar mai intai aveti nevoie de urmatparele scripturi: ZCMD SSCANF CMD:makeleader(playerid,params[]) { if(IsPlayerConnected(playerid)) { new string[100], lider, factiuneid;// se creaza variabilele, lider = persoana pe care aplicam comanda, factiuneid = id factiunii la care va fi acea persoana if(!IsPlayerAdmin(playerid))// verificam daca playerul nu este conectat cu rcon-ul return SendClientMessage(playerid, -1, "Trebuie sa fi conectat cu Rcon-ul!"); if(sscanf(params,"ud",lider,factiuneid))// verificam daca playerul nu scrie comanda completa return SendClientMessage(playerid,-1,"Romania Reality: /makeleader [Nume_Player/ID] [FactiuneID]"); if(factiuneid > 11 && factiuneid < 1)//punem conditie la cate factiuni avem return SendClientMessage(playerid, -1, "Trebuie sa fie intre 1 si 11!"); if(!IsPlayerConnected(lider))// verificam daca playerul nu este conectat return SendClientMessage(playerid,-1,"Acest jucator nu este conectat"); P_Data[lider][pLeader] = factiuneid;// persoana pe care aplicam comanda va fi liderul factiunii pe care am scris-o P_Data[lider][pMember] = factiuneid;// persoana pe care aplicam comanda va fi membrul factiunii pe care am scris-o P_Data[lider][pRank] = 6; // ii va da rank 6 Update(lider, LeaderUpdate);// se va face update catre baza de date a liderului Update(lider, MemberUpdate);// se va face update catre baza de date a liderului ca este si membru in factiune Update(lider, RankUpdate);// se va face update la bazaz de date a liderului care are rank 6 format(string, sizeof(string), "Ai fost promovat ca lider de catre %s", GetName(playerid)); SendClientMessage(lider, -1, string);// ii da mesaj liderului de cine a fost promovat format(string, sizeof(string), "%s este noul lider al factiunii %d.", GetName(lider), factiuneid); SendClientMessage(playerid, -1, string);// ii da mesaj adminului pe cine a promovat SpawnPlayer(lider);// il spawneaza pe lider } return 1; } Facem comanda /fpk CMD:fpk(playerid,params[]) { if(IsPlayerConnected(playerid)) { new concediat, motiv[200], string[200];// se creaza noile variabile care vor fi folosite la verificarea comenzii in scriere if(sscanf(params,"us[199]", concediat, motiv))// verificam ca comanda sa se scrie corect return SendClientMessage(playerid,-1,"SERVER: /fpk [Nume_Player] [MOTIV]");// daca nu e scrisa corect , atunci sa ii dea mesajul cum sa se scrie if(!IsPlayerAdmin(playerid))// verificam daca playerul nu este conectat cu rcon-ul return SendClientMessage(playerid, -1, "Trebuie sa fi conectat cu Rcon-ul!"); if(!IsPlayerConnected(concediat))// verificam daca playerul nu este conectat return SendClientMessage(playerid,-1,"Acest jucator nu este conectat"); if(sscanf(params,"us[199]", concediat, motiv))// verificam ca comanda sa se scrie corect return SendClientMessage(playerid,-1,"SERVER: /fpk [Nume_Player] [MOTIV]"); P_Data[concediat][pLeader] = 0;// il facem lider 0 P_Data[concediat][pMember] = 0;// il facem membru 0 P_Data[concediat][pRank] = 0; // ii dam rank 0 Update(concediat, LeaderUpdate);// se va face update la bazaz de date a concediatului Update(concediat, MemberUpdate);// se va face update la bazaz de date a concediatului Update(concediat, RankUpdate);// se va face update la bazaz de date a concediatului format(string, sizeof(string), "Ai fost concediat de catre OWNERUL %s, pe motivul: %s", GetName(playerid), motiv); SendClientMessage(concediat, -1, string);// ii da mesaj concediatului de cine a fost concediat format(string, sizeof(string), "%s este concediat pe motivul: %s", GetName(concediat), motiv); SendClientMessage(playerid, -1, string);// ii da mesaj adminului pe cine a concediat SpawnPlayer(concediat);// il spawneaza pe lider } return 1; } Facem comanda /uninvite CMD:uninvite(playerid,params[]) { if(IsPlayerConnected(playerid)) { new concediat, motiv[200], string[200];// creem variabilele de care ne folosim in comanda if(P_Data[playerid][pLeader] < 0)// verificam daca playerul este lider(persoana care foloseste comanda) return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"us[199]", concediat, motiv))//verificam daca comanda e scrisa bine return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID] [MOTIV]"); if(P_Data[playerid][pLeader] != P_Data[concediat][pMember])// verificam daca liderul foloseste comanda pe ai sai prieteni return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda decat pe cei din factiune la tine!"); if(concediat == P_Data[concediat][pLeader])// verificam daca concediatul nu e lider return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe un lider!"); // daca este ii dam mesaj corespunzator P_Data[concediat][pMember] = 0;// il facem membru 0 P_Data[concediat][pRank] = 0; // ii dam rank 0 Update(concediat, MemberUpdate);// se va face update la bazaz de date a concediatului Update(concediat, RankUpdate);// se va face update la bazaz de date a concediatului format(string, sizeof(string), "Ai fost concediat de catre Liderul %s, pe motivul", GetName(playerid), motiv); SendClientMessage(concediat, -1, string);// ii da mesaj "victimei" de cine a fost concediat format(string, sizeof(string), "%s este concediat pe motivul: %s", GetName(concediat), motiv); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a concediat SpawnPlayer(concediat);// il spawneaza pe lider } return 1; } Facem comanda /invite CMD:invite(playerid,params[]) { if(IsPlayerConnected(playerid)) { new membru, string[200];// se creaza variabilele folosite in comanda if(P_Data[playerid][pLeader] < 0)// verificam daca playerul este lider return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"u", membru))//verificam daca comanda e scrisa bine return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID]"); if(P_Data[membru][pLeader] > 1) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti lideri!"); if(P_Data[membru][pMember] > 1) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti membri!"); P_Data[membru][pMember] = P_Data[playerid][pLeader];// il facem membru la factiunea in care este si cel care invita P_Data[membru][pRank] = 0; // ii dam rank 0 Update(membru, MemberUpdate);// se va face update la bazaz de date a membrului Update(membru, RankUpdate);// se va face update la bazaz de date a membrului format(string, sizeof(string), "Ai fost promovat membru de catre Liderul %s, pe motivul", GetName(playerid)); SendClientMessage(membru, -1, string);// ii da mesaj membrului de cine a fost invitat format(string, sizeof(string), "%s este membru la tine in factiune", GetName(membru)); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a invitat SpawnPlayer(membru);// il spawneaza pe lider } return 1; } Comanda /giverank CMD:giverank(playerid,params[]) { if(IsPlayerConnected(playerid)) { new membru, rank, string[200];// creem variabilele cu care vom face conditie in comanda if(P_Data[playerid][pLeader] < 1)// verificam daca playerul este lider return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"ud", membru, rank))//verificam daca comanda e scrisa bine(ne folosim de cele de mai sus) return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID] [NRRank]"); if(P_Data[membru][pLeader] == P_Data[playerid][pLeader]) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe tine!"); if(P_Data[membru][pLeader] > 0) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti lideri!"); if(P_Data[membru][pMember] != P_Data[playerid][pLeader])// verificam daca comanda se foloseste pe membri altei factiune return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti membri!"); if(P_Data[membru][pMember] != P_Data[playerid][pLeader]) P_Data[membru][pRank] = rank; // ii dam rank 0 Update(membru, RankUpdate);// se va face update la bazaz de date a membrului format(string, sizeof(string), "Ai fost promobat cu rank %d de catre liderul %s", rank, GetName(playerid)); SendClientMessage(membru, -1, string);// ii da mesaj membrului de cine a fost promovat in rank format(string, sizeof(string), "%s este membru la tine in factiune cu rank: %d", GetName(membru), rank); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a promovat } return 1; } Acum un pas foarte important, mergem la callback-ul OnLogin si punem sub P_Data[playerid][pID] = cache_get_field_content_int(0, "ID"); urmatoarele: P_Data[playerid][pLeader] = cache_get_field_content_int(0, "Leader"); P_Data[playerid][pMember] = cache_get_field_content_int(0, "Member"); P_Data[playerid][pRank] = cache_get_field_content_int(0, "Rank"); Iar acum mergem la baza de date si parcurgem urmatorii pasi: Bun, aceasta a fost partea 1. Daca gasiti greseli pe la comenzi , asta e din cauza ca acuma, seara, l-am facut si sunt putin cam obosit(se vede si dupa data de postare a tutorialului). Sper ca ati inteles pana aici, voi reveni cu a 2-a parte maine. Tutorial 100% scris de WIDUALK. Postarea acestui tutorial fara acordul meu va fi reclamata! Pana data viitoare(maine) PACE! Edited April 27, 2015 by WiDuAlK.SaMp 12 @WiDuAlK Tutorial`s: PAWN pentru SA:MP in Notepad++Tutorial Register-Login MYSQL R39 Tutorial etape de register Cum sa creezi un PayDay (2 METODE)Cum sa creezi o factiune de la 0 PART 1 Cum sa creezi o factiune de la 0 PART 2 Cum sa creezi o factiune de la 0 partea a 3-a (ULTIMA)Functii folositoare din NEW.PWN Tutorial Engine Vehicle Optimizare simplitate si stil Foreach inlocuieste loop-ul SSCANF si ZCMD Cum sa creezi o poarta miscatoare Tutorial cum sa creezi un radio pe server si cum sa iti creezi melodi pentru ascultat pe server Cum sa tii un server din PC folosind HAMACHI Documentatie* Despre hack-uri Servicii: Servicii Scripting & Mapping Produse: Farmer Job Realistic Drugs Dealer System [SA-MP] UNIQUE
kwnx Posted March 20, 2015 Posted March 20, 2015 Ai muncit la acest tutorial, meriti un +1 scumpetea mamii :*
WiDuAlK Posted March 20, 2015 Author Posted March 20, 2015 Ai muncit la acest tutorial, meriti un +1 scumpetea mamii :* mersi "mami" ) @WiDuAlK Tutorial`s: PAWN pentru SA:MP in Notepad++Tutorial Register-Login MYSQL R39 Tutorial etape de register Cum sa creezi un PayDay (2 METODE)Cum sa creezi o factiune de la 0 PART 1 Cum sa creezi o factiune de la 0 PART 2 Cum sa creezi o factiune de la 0 partea a 3-a (ULTIMA)Functii folositoare din NEW.PWN Tutorial Engine Vehicle Optimizare simplitate si stil Foreach inlocuieste loop-ul SSCANF si ZCMD Cum sa creezi o poarta miscatoare Tutorial cum sa creezi un radio pe server si cum sa iti creezi melodi pentru ascultat pe server Cum sa tii un server din PC folosind HAMACHI Documentatie* Despre hack-uri Servicii: Servicii Scripting & Mapping Produse: Farmer Job Realistic Drugs Dealer System [SA-MP] UNIQUE
WiDuAlK Posted March 20, 2015 Author Posted March 20, 2015 #Tutorial EDITAT---> REPARAT , IMBUNATATIT P.S Imi cer scuze de x2 post , dar am adus la cunostinta, iar aceasta nu are legatura cu reply de mai sus @WiDuAlK Tutorial`s: PAWN pentru SA:MP in Notepad++Tutorial Register-Login MYSQL R39 Tutorial etape de register Cum sa creezi un PayDay (2 METODE)Cum sa creezi o factiune de la 0 PART 1 Cum sa creezi o factiune de la 0 PART 2 Cum sa creezi o factiune de la 0 partea a 3-a (ULTIMA)Functii folositoare din NEW.PWN Tutorial Engine Vehicle Optimizare simplitate si stil Foreach inlocuieste loop-ul SSCANF si ZCMD Cum sa creezi o poarta miscatoare Tutorial cum sa creezi un radio pe server si cum sa iti creezi melodi pentru ascultat pe server Cum sa tii un server din PC folosind HAMACHI Documentatie* Despre hack-uri Servicii: Servicii Scripting & Mapping Produse: Farmer Job Realistic Drugs Dealer System [SA-MP] UNIQUE
Administrator WopsS Posted April 24, 2015 Administrator Posted April 24, 2015 @WiDuAlK.SaMp in noua versiune a gamemode-ului "Ideal pentru RPG" este altfel numita functia Update. De ce? Pentru ca se incurca, de exemplu cand vrei sa folosesti o intergare pentru jucator sau factiune. forward UpdatePlayer(playerid, type); // Pentru jucator. forward UpdateFaction(factionid, type); // Pentru factiune.
WiDuAlK Posted April 24, 2015 Author Posted April 24, 2015 @WiDuAlK.SaMp in noua versiune a gamemode-ului "Ideal pentru RPG" este altfel numita functia Update. De ce? Pentru ca se incurca, de exemplu cand vrei sa folosesti o intergare pentru jucator sau factiune. forward UpdatePlayer(playerid, type); // Pentru jucator. forward UpdateFaction(factionid, type); // Pentru factiune. Ai dreptate, dar e mai bine asa, de ce? Pentru ca poate face update la altceva din factiune cu UpdateFaction, de pilda mats, drugs, money. De ce am prezentat aceasta metoda? Simplu. Findca una e sa folosesti bucata aia de cod pt update la fiecare comanda, callback si una e sa faci Update(playerid, ceva); si daca o faci bine de prima data bucata aia de cod nu vei avea probleme la update in baza de date folosind functia "Update" decat sa folosesti aceeasi bucata de cod, sa o scri de 100 de ori si din acelea 100 de ori de vro 40-50 de ori sa fie scris gresit ceva, la urma intrebandu-te "De ce mama naibii nu merge?". Prima data am vazut-o la tine si dupa la inca 3 gm-uri(cred ca erau edit-uri) si mi sa parut mai speciala prin simplitate. @WiDuAlK Tutorial`s: PAWN pentru SA:MP in Notepad++Tutorial Register-Login MYSQL R39 Tutorial etape de register Cum sa creezi un PayDay (2 METODE)Cum sa creezi o factiune de la 0 PART 1 Cum sa creezi o factiune de la 0 PART 2 Cum sa creezi o factiune de la 0 partea a 3-a (ULTIMA)Functii folositoare din NEW.PWN Tutorial Engine Vehicle Optimizare simplitate si stil Foreach inlocuieste loop-ul SSCANF si ZCMD Cum sa creezi o poarta miscatoare Tutorial cum sa creezi un radio pe server si cum sa iti creezi melodi pentru ascultat pe server Cum sa tii un server din PC folosind HAMACHI Documentatie* Despre hack-uri Servicii: Servicii Scripting & Mapping Produse: Farmer Job Realistic Drugs Dealer System [SA-MP] UNIQUE
Administrator WopsS Posted April 24, 2015 Administrator Posted April 24, 2015 Ai dreptate, dar e mai bine asa, de ce? Pentru ca poate face update la altceva din factiune cu UpdateFaction, de pilda mats, drugs, money. De ce am prezentat aceasta metoda? Simplu. Findca una e sa folosesti bucata aia de cod pt update la fiecare comanda, callback si una e sa faci Update(playerid, ceva); si daca o faci bine de prima data bucata aia de cod nu vei avea probleme la update in baza de date folosind functia "Update" decat sa folosesti aceeasi bucata de cod, sa o scri de 100 de ori si din acelea 100 de ori de vro 40-50 de ori sa fie scris gresit ceva, la urma intrebandu-te "De ce mama naibii nu merge?". Prima data am vazut-o la tine si dupa la inca 3 gm-uri(cred ca erau edit-uri) si mi sa parut mai speciala prin simplitate. Update(playerid, ceva); Nu inteleg, este acelasi lucru ce zic eu, doar ca mai ordonat.
WiDuAlK Posted April 25, 2015 Author Posted April 25, 2015 Update(playerid, ceva); Nu inteleg, este acelasi lucru ce zic eu, doar ca mai ordonat. asa-i, dar fiecare cu al sau stil @WiDuAlK Tutorial`s: PAWN pentru SA:MP in Notepad++Tutorial Register-Login MYSQL R39 Tutorial etape de register Cum sa creezi un PayDay (2 METODE)Cum sa creezi o factiune de la 0 PART 1 Cum sa creezi o factiune de la 0 PART 2 Cum sa creezi o factiune de la 0 partea a 3-a (ULTIMA)Functii folositoare din NEW.PWN Tutorial Engine Vehicle Optimizare simplitate si stil Foreach inlocuieste loop-ul SSCANF si ZCMD Cum sa creezi o poarta miscatoare Tutorial cum sa creezi un radio pe server si cum sa iti creezi melodi pentru ascultat pe server Cum sa tii un server din PC folosind HAMACHI Documentatie* Despre hack-uri Servicii: Servicii Scripting & Mapping Produse: Farmer Job Realistic Drugs Dealer System [SA-MP] UNIQUE
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now