Mmartin 0 Odesláno: 12. Březen, 2011 Share Odesláno: 12. Březen, 2011 Zdravim. Iste niekomu lame hlavou premenovanie sa na serveri, ci uz s registraciou, alebo bez nej, aby sme sa nabuduce mohli prihlasit pod novym menom. Idem rovno k veci, teda, co budeme potrebovat? [*:1ze1z47h]dcmd - kto nema definicu, je tu: #define dcmd(%1,%2,%3) if((strcmp((%3)[1],#%1,true,(%2))==0)&&((((%3)[(%2)+1]==0)&&(dcmd_%1(playerid,"")))||(((%3)[(%2)+1]==32)&&(dcmd_%1(playerid,(%3)[(%2)+2]))))) return 1 [*:1ze1z47h]SetPlayerName(playerid, meno[]);[*:1ze1z47h]V pripade registracie na serveri aj dudb a dini[*:1ze1z47h]A samozrejme, zakladnu znalost pawna. Na zaciatok trocha teorie k funkciam, ktore budu pre tento jav nove a potrebne: SetPlayerName(playerid,meno[]) [*:1ze1z47h]playerid - ID hraca, ktoremu menime meno[*:1ze1z47h]meno[] - nove meno hraca (string). Odporucam maximalne 15 znakov, aby meno nebolo priliz dlhe. Ak je meno dlhsie ako 20 znakov, server moze spadnut. Tato funkcia je klucova pre zmenu mena v hre. Zaujimave su jej returny, ktore neskor budeme potrebovat. [*:1ze1z47h]-1 : Nemozno zmenit meno, niekto ho pouziva, alebo meno obsahuje nepovolene znaky.[*:1ze1z47h]0: Menis si meno na rovnake, ake prave mas.[*:1ze1z47h]1: Meno zmenene. Pozor! Ak si chcete zmenit meno napriklad z "Hrac" na "hrAc", nepojde to. Budete si ho musiet najskor zmenit na nejaky odlisny, az potom na "hrAc". udb_Exists(uzivatel[]) [*:1ze1z47h]uzivatel[] - Meno hraca, ktoreho existenciu testujeme (string). Toto je funkcia kniznice dudb, ktora skontroluje, ci je niekto zaregistrovany pod nickom uzivatel[]. Funkcia ma len dva returny, a to true a false. [*:1ze1z47h]true - hrac existuje.[*:1ze1z47h]false - hrac neexistuje. udb_RenameUser(staremeno[],novemeno[]) [*:1ze1z47h]staremeno[] - aktualne meno hraca, ktoreho chceme premenovat.[*:1ze1z47h]novemeno[] - meno, ktore bude mat hrac po premenovani. Takisto funkcia z kniznice dudb. Tato je klucova v premenovani uzivatela v databaze uzivatelov. Myslim si, ze teorie by bolo dost, vrhnime sa teda na prax: Najskor si musime nadefinovat prikaz v OnPlayerCommandText. Pridame si tam teda: dcmd(meno,4,cmdtext); Potom prichadza samotny prikaz, ten si dame mimo publicy, najlepsie pod OnPlayerCommandText: dcmd_meno(playerid,params[]) { new oldnick[24]; format(oldnick,24,meno(playerid)); new newnick[24]; format(newnick,24,params); if(!strlen(params)) return SendClientMessage(playerid,0xFF0000FF,"Premenovať sa: /meno "); if((strlen(params)<3) || (strlen(params)>15)) return SendClientMessage(playerid,0xFF0000FF,"Meno musí mať aspoň 3 a maximálne 15 znakov."); if(udb_Exists(params)) return SendClientMessage(playerid,0xFF0000FF,"Meno už používa niekto iný."); switch(SetPlayerName(playerid,params)) { case -1: return SendClientMessage(playerid,0xFF0000FF,"Meno obsahuje nepovolené znaky"); case 0: return SendClientMessage(playerid,0xFF0000FF,"Už používaš zadané meno!"); case 1:{ new str[128];format(str,128,"Hráč %s si zmenil meno na %s",oldnick,newnick);SendClientMessageToAll(0xFF0000FF,str);} } udb_RenameUser(oldnick,newnick); return 1; } A teraz si rozobereme kod kus po kusku: new oldnick[24]; // premenna pre stare meno format(oldnick,24,meno(playerid)); // ulozime stare meno do premennej new newnick[24]; // premenna pre nove meno format(newnick,24,params); // ulozime nove meno do premennej Teda, mena by sme ulozene mali. Teraz prichadza kontrola, ci je meno zadane spravne! Najskor skontrolujeme, ci hrac zadal prikaz spravne, teda s parametrom: if(!strlen(params)) return SendClientMessage(playerid,0xFF0000FF,"Premenovať sa: /meno"); Ak ano, kod ide dalej. Dalej skontrolujeme, ci ma meno aspon 3, a maximalne 15 znakov: if((strlen(params)<3) || (strlen(params)>15)) return SendClientMessage(playerid,0xFF0000FF,"Meno musí mať aspoň 3 a maximálne 15 znakov."); Teraz prichadza na rad funkcia, ktoru som vysvetlil hore, ideme testovat, ci uz taky hrac je zaregistrovany. if(udb_Exists(params)) return SendClientMessage(playerid,0xFF0000FF,"Meno už používa niekto iný."); Este tu ostavaju dve varianty zleho mena. [*:1ze1z47h]Nepovolene znaky[*:1ze1z47h]Hrac pouziva rovnake meno, na ake sa chce premenovat Predist sa im da lahko. Ako som spominal returny funkcie SetPlayerName, teraz ich vyuzijeme. switch(SetPlayerName(playerid,params)) { case -1: return SendClientMessage(playerid,0xFF0000FF,"Meno obsahuje nepovolené znaky"); case 0: return SendClientMessage(playerid,0xFF0000FF,"Už používaš zadané meno!"); case 1:{ new str[128]; format(str,128,"Hráč %s si zmenil meno na %s",oldnick,newnick); SendClientMessageToAll(0xFF0000FF,str); } } Ako vidite, ak nastane return 1, ihned hraca premenuje. Zostava uz len posledna vec, premenovat hraca v DUDB databaze. udb_RenameUser(oldnick,newnick); Jednoduche, vsak? //Pokial najdete v navode chybu, ohlaste mi ju do topicu, opravim sa Link to comment Share on other sites More sharing options...
XxM4st3rxX 3 Odesláno: 14. Březen, 2011 Share Odesláno: 14. Březen, 2011 Good 8/10 Link to comment Share on other sites More sharing options...
NoN@me 0 Odesláno: 14. Březen, 2011 Share Odesláno: 14. Březen, 2011 Diky... toto som potreboval... (príkaz na zmenu som si vytvoril sám ale nevedel som ako spraviť ak už existuje alebo ak použije nepovolený znak... ) Link to comment Share on other sites More sharing options...
Petr 44 Odesláno: 14. Březen, 2011 Share Odesláno: 14. Březen, 2011 http://wiki.sa-mp.com/wiki/SetPlayerName + ukládání do souboru, nic víc Link to comment Share on other sites More sharing options...
Mmartin 0 Odesláno: 14. Březen, 2011 Author Share Odesláno: 14. Březen, 2011 ":1l3i4r88]http://wiki.sa-mp.com/wiki/SetPlayerName+ ukládání do souboru, nic víc Ty asi nevies, od coho su tu tutorialy? Vsetky navody od tialto su bud prelozene, alebo cerpaju z wiki. Ak niekto nevie po anglicky, tu sa to moze dokonalo naucit. Link to comment Share on other sites More sharing options...
HardLock 1 Odesláno: 14. Březen, 2011 Share Odesláno: 14. Březen, 2011 tut dobře vysvětlený a přečitelný tak dávám 10/10 Link to comment Share on other sites More sharing options...
NurofeN-Cz 0 Odesláno: 14. Březen, 2011 Share Odesláno: 14. Březen, 2011 Dobry, 7/10 Link to comment Share on other sites More sharing options...
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