Majitel ffredyk 164 Odesláno: 6. Září, 2010 Majitel Share Odesláno: 6. Září, 2010 Nekdo z vas to jiz zna a nekdo jeste ne.. Zde vam ukazu jak DCMD pouzivat a co vsechno se s nim da delat.. Nejdrive samotna DCMD definice: #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 Pokud ted chceme udelat prikaz pres DCMD musime si vytvorit neco jako "listener" nebo-li "poslouchac", ktery nam zajisti v pripade napsani hracem naseho prikazu, ze se vyvola ten spravny stock.. Tak tedy.. Napiseme si naseho posluchace do publicu OnPlayerCommandText dcmd(prikaz,5,cmdtext); Ted si vysvetlime proc to je tak a co to tam vsechno je.. Zacneme prvnim parametrem jimz je "prikaz". Je to text prikazu (bez /), ktery hrac musi napsat aby se nas prikaz vyvolal. "5" Je delka prikazu. Je to pro pozdejsi urcovani parametru prikazu, takze vzdy udavejte hodnotu delky vaseho prikazu (Kvuli lenosti pocitat se muzete nekdy divit proc vam prikaz nefunguje tak jak ma.. Kdyz napriklad mate prikaz "kill" a jako delku date 1 tak vam ve hre nepujde napsat /kill nybrz /k coz nepotrebujeme ). A nakonec "cmdtext" je zdroj cteni naseho poslouchace.. To znamena, ze DCMD se da pouzit i v OnPlayerText, OnRconCommand apod. (Dokonce ho muzete pouzit i v OnPlayerDisconnect pri urcovani duvodu.. Jen musite integer "reason" prevest na string jenz bude poslouchac cist..) Ted musime udelat stock jenz bude listener vyvolavat.. Neco o stocich a publicich si rozebereme v pristi lekci.. Takze ted se zatim nemusite obtezovat jak to funguje.. M osobne to, ze jsem umel DCMD driv nez jsem plne chapal stocky a publicy hodne pomohlo je pochopit. Takze si vytvorime kdekoliv v modu (Ve svete pawneru jsou zabehnute zvyky, ze DCMD stocky piseme bud pod/nad public OnPlayerCommandText a nebo nakonec/zacatek modu.. Nikdo neni rad, pri oprave ciziho scriptu, kdyz musi vse slozite hledat) stock na nas DCMD listener: dcmd_prikaz(playerid,params[]) { return 1; } Tento prikaz sam o sobe nic nedela.. Proto do nej pridame vypis textu do klientovo chatu. dcmd_prikaz(playerid,params[]) { SendClientMessage(playerid,BARVA,"Zadal jsi prikaz!"); return 1; } Barvu si dosadte sami.. Nejsem tu jak vase chuva a tim, ze tam nebudu psat barvu vas donutim aspon minimalne premyslet v cem j chyba (Myslim ty, kteri to oznaci, zmacknout CTRL + C vjedou si do pawna a CTRL + V). Kdyz nad tim budete aspon malinko premyslet, vas mozek bude pracovat s informacemi a stejne jako pocitac si nejaky informace musi ulozit. Akorat, ze pocitac si docasne informace hned maze, mozek vsak nikoliv. Ted jiz znate zakladni prikaz a jak do nej vkladat funkce.. Nyni si vysvetlime proc je tam to zahadne "return 1;". Je tam z toho duvodu, ze kdyby tam nebylo, nebo by tam bylo 0 (tudiz by prikaz vracel 0 = false) Server by bral prikaz jako neznamy a napsal by bylim textem: "Server Unknown Command" nebo neco v tom smyslu.. Ted si napisem co je "params[]" a k cemu nam slouzi. "params[]" je zde jako text toho, co je napsano za prikazem (tedy presneji "/prikaz " a dal uz je obssah "params[]"). Da se vyuzivat k urcovani cisel, textu a ruznych pozic (desetinnych cisel). My si ukazeme jak params pouzit jako urcivani cisel a textu.. Nejdriv si ukazeme prikaz warpu ve stylu "/warp [1 - 3]". dcmd_warp(playerid,params[]) { switch(strval(params)) { case 1: { SetPlayerPos(playerid,X,Y,Z); } case 2: { SetPlayerPos(playerid,X,Y,Z); } case 3: { SetPlayerPos(playerid,X,Y,Z); } default: { SendClientMessage(playerid,BARVA,"Prikaz je ve tvaru: /warp 1 - 3"); } } return 1; } "switch" jsme si vysvetlili v minule lekci (doufam) a "strval" je jednoduchy prikaz k prevodu stringu na integer. Tento prikaz je jasny.. Tak si zkusime prikaz na vypsani textu jako "console - nastext". V prikazu vyuzijeme tzv. "formatovani stringu", jenz znamena to, ze si string upravime presne podle nasich predstav (tohle opravdu nevim jak bych vam vysvetlil.. Proste a jednoduse, dela se s tim kazdy pokrocilejsi vystup textu). dcmd_prikaz(playerid,params[]) { if(strlen(params)) { new str[80]; format(str,80,"console - %s",params); SendClientMessage(playerid,0xFFFFFFFF,str); } else { SendClientMessage(playerid,BARVA,"Prikaz: /prikaz [text]"); } return 1; } Kdyz ptom ve hre napr. napisete "/prikaz ahoj" tak se vam do chatu napise bíle "console - ahoj". Doufam, ze jste pochopili.. Ted vam jeste ukazu zpusob, jakym se da docilit jedne funkce pomoci 2 a vice prikazu. Tedy abych vam to vysvetlil.. Mate treba jeden velky prikaz. Ale ted potrebujete uplne stejny prikaz, ale na jinou syntaxi (napr. prvni prikaz se pise "/warp 1 - 3" a druhej treba "/w 1 - 3". A chcete aby plnili tu stejnou funkci, ale nechcete zbytecne psat 2 stocky uplne stejny.. Da se toho docilit jednoduse: dcmd(warp,4,cmdtext); if(strcmp(cmdtext,"/w")) dcmd_warp(playerid,cmdtext[strlen(cmdtext)+1]); Doufam, ze tutorial pomuze.. Priste cokoliv !! 1 Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 6. Září, 2010 Share Odesláno: 6. Září, 2010 Pro me nic noveho, pro novacky super vysvetlene Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 Úžasné :thumbup: ... Nic jinného říct nemohu :rap2: Link to comment Share on other sites More sharing options...
_Killer_ 1 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 ani pre mna nic noveho ale good :thumbup: Link to comment Share on other sites More sharing options...
fugasjunior 1 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 7/10 protože jsi tam ještě mohl říct, jak udělat příkaz například s ID. A pokud možno příští lekci chci chrfind Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 7/10 protože jsi tam ještě mohl říct, jak udělat příkaz například s ID. A pokud možno příští lekci chci chrfind Dyt to tam je jenom tam nepracoval s ID jako hracovou ale s /warpy 1-3 a to je stejny, Link to comment Share on other sites More sharing options...
Frajtr 8 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 no pekny to je havne /w nebo /warp 10/10 Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 no pekny to je havne /w nebo /warp 10/10 Tak to je jednodussi, protoze dcmd je vlastne stock jak tam psal ffredyk takze ty vlastne udelas - if(strcmp(cmdtext,"/warp")) // kdyz napise /warp dcmd_warp(playerid,cmdtext[strlen(cmdtext)+1]); //spusti se dcmd_warp Link to comment Share on other sites More sharing options...
NurofeN-Cz 0 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 10/10.. pro novacky fajn:) Pekne vysvetlene.. Link to comment Share on other sites More sharing options...
_NosiK_ 0 Odesláno: 7. Září, 2010 Share Odesláno: 7. Září, 2010 pro novacky fakt good ja si vezmu jen ted to /warp a /w ale nwm jakou funcki pouziji Link to comment Share on other sites More sharing options...
Marwin37 5 Odesláno: 17. Září, 2010 Share Odesláno: 17. Září, 2010 no pekny to je havne /w nebo /warp 10/10 Tak to je jednodussi, protoze dcmd je vlastne stock jak tam psal ffredyk takze ty vlastne udelas - if(strcmp(cmdtext,"/warp")) // kdyz napise /warp dcmd_warp(playerid,cmdtext[strlen(cmdtext)+1]); //spusti se dcmd_warp a co třeba k tomu ještě dcmd_warp(playerid,params[]){ OnPlayerCommandText(playerid,"/warp"); nekonecny warp case 1: { SetPlayerPos(playerid,X,Y,Z); } nebylo by jednodušší case 1: return SetPlayerPos(playerid,X,Y,Z); Link to comment Share on other sites More sharing options...
Majitel ffredyk 164 Odesláno: 17. Září, 2010 Author Majitel Share Odesláno: 17. Září, 2010 no pekny to je havne /w nebo /warp 10/10 Tak to je jednodussi, protoze dcmd je vlastne stock jak tam psal ffredyk takze ty vlastne udelas - if(strcmp(cmdtext,"/warp")) // kdyz napise /warp dcmd_warp(playerid,cmdtext[strlen(cmdtext)+1]); //spusti se dcmd_warp a co třeba k tomu ještě dcmd_warp(playerid,params[]){ OnPlayerCommandText(playerid,"/warp"); nekonecny warp case 1: { SetPlayerPos(playerid,X,Y,Z); } nebylo by jednodušší case 1: return SetPlayerPos(playerid,X,Y,Z); Ja hraju na prehlednost.. A ne na spatlanost Link to comment Share on other sites More sharing options...
Marwin37 5 Odesláno: 17. Září, 2010 Share Odesláno: 17. Září, 2010 hej ja to taky tak v ABO v2.0 měl ale ve v3.0 sem díky tomu že sem použil returny ušetřil asi 400 řádků Link to comment Share on other sites More sharing options...
tbx 7 Odesláno: 17. Září, 2010 Share Odesláno: 17. Září, 2010 ono to jde i bez returnu Link to comment Share on other sites More sharing options...
Marwin37 5 Odesláno: 17. Září, 2010 Share Odesláno: 17. Září, 2010 ono to jde i bez returnu ale bez to nekdy hazi warning Link to comment Share on other sites More sharing options...
Majitel ffredyk 164 Odesláno: 18. Září, 2010 Author Majitel Share Odesláno: 18. Září, 2010 ono to jde i bez returnu ale bez to nekdy hazi warning Me to warningy nikdy nehazi.. Musis umet napsat kod tak, aby fungoval tak jak ma. Link to comment Share on other sites More sharing options...
darknes3915 0 Odesláno: 18. Září, 2010 Share Odesláno: 18. Září, 2010 a jaký má proboha racionalní důvod používat v něčem jako je switch returny? Jinak if(strcmp(cmdtext,"/warp")) dcmd_warp(playerid,cmdtext[strlen(cmdtext)+1]); má dělat co?. Porovnáváš co to napíše s textem /warp a když se nerovnají voláš stock dcmd_warp a předáváš mu jako parametr neexistující pole cmdtextu :shock: Link to comment Share on other sites More sharing options...
4Forse 94 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 Díék moc ffredy,konečně sem se naučil DCMD Ale ještě si tam mohl dát #pragma unused params aby to neházelo warningy Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 s tochto sa velmy naučit dcmd nedá ale dobrý tut Link to comment Share on other sites More sharing options...
4Forse 94 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 s tochto sa velmy naučit dcmd nedá ale dobrý tut Já sem pochopil princip takže se to naučit DÁ Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 dá ale ťažko Link to comment Share on other sites More sharing options...
4Forse 94 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 dá ale ťažko Za 2 minuty sem to měl naučené i napawnovamé tak nevím co to tu kecáš Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 chápeš nie každý to spraví Link to comment Share on other sites More sharing options...
4Forse 94 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 chápeš nie každý to spraví Hlavně že sem to pochopil já "lol" Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 25. Září, 2010 Share Odesláno: 25. Září, 2010 no to není hlavné to bi malo pochopit celé foro ne? 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