Popular Post Lukasz 336 Odesláno: 31. Červenec, 2016 Popular Post Share Odesláno: 31. Červenec, 2016 I-ZCMD Obsah:ÚvodI-ZCMDVytváření příkazůFunkce includuTipy a triky PříkladyZávěr 1. Úvod:V tomto návodu se podíváme na práci s příkazovým systémem I-ZCMD. Konkrétně tedy probereme vytváření příkazů, používání funkcí includu a nějaké tipy. 2. I-ZCMDPříkazový systém I-ZCMD vytvořil Yashas, jako reakci na neaktuálnost ZCMD, z kterého také vychází. Jedná se o aktuálnější, optimalizovanější a rychlejší ZCMD. Stáhnout jej můžete na tomto githubu.Návod se bude držet aktuálního I-ZCMD, ale většina informací platí i k ZCMD od Zeexe. 3. Vytváření příkazůPříkazy můžeme vytvářet hned několika způsoby a to COMMAND:nazev_prikazu(playerid, params[]) { //další kód } CMD:nazev_prikazu(playerid, params[]) { //další kód } command(nazev_prikazu, playerid, params[]) { //další kód } cmd(nazev_prikazu, playerid, params[]) { //další kód } nazev_prikazu – váš název příkazu bez lomítka (kill, pm, admins). playerid – id hráče, který odeslal příkaz. params[] - text, který hráč napsal za samotný příkaz. Parametry jsou od názvu příkazu oddělené mezerou. pozn. V příkazech při vrácení 0 (CMD_FAILURE) a nepoužití OnPlayerCommandPerformed se vypíše hláška "UNKNOWN COMMAND". Doporučuji tedy vracet 1 (CMD_SUCCESS). V samotném scriptu nepoužíváme OnPlayerCommandText (I-ZCMD ho již zahrnuje), protože se stejně nezavolá. Místo této funkce zde máme dvě funkce, na které se nyní podíváme. 4. Funkce includu V I-ZCMD se narozdíl od ZCMD tyto funkce volají přímo. To je jednou z optimalizací, kterou tento systém prošel (ZCMD využívá funkci CallLocalFunction, která je více časově náročná). .● OnPlayerCommandReceived(playerid, cmdtext[]) je plnou náhražkou za OnPlayerCommandText a má stejné parametry. Funkce se volá před samotným procesem zpracování a volání zadaného příkazu.Vrácením 0 můžeme ukončit zpracování příkazu, ale nebude vypsána hláška "UNKNOWN COMMAND". ● OnPlayerCommandPerformed(playerid, cmdtext[], success) je další ze zmiňovaných dvou funkcí. Narozdíl od předešle, se tato funkce volá až po zavolání našeho příkazu. Funkce má stejné parametry, ale jeden zde přibyl. Hodnota success odpovídá vrácené hodnotě funkce CallLocalFunction (pokud příkaz existuje, odpovídá vrácené hodnotě v daném příkazu). Díky tomuto parametru si tedy můžeme kontrolovat, zda příkaz existuje, proběhl v pořádku a podobně.Vrácení 0 v této funkci vypíše hlášku "UNKNOWN COMMAND". 5. Tipy a triky● I-ZCMD není defaultně case-sensitive. Znamená to tedy, že příkaz "/prikaz" a "/PRIKAZ" vyvolá stejnou funkci, avšak tuto vlastnost můžeme změnit následující definicí (nelze u ZCMD). #define IZCMD_ENABLE_CASE_SENSITIVITY . ● Narozdíl od ZCMD, se nehookuje OnFilterScriptInit/OnGameModeInit, a proto nijak neřešíme definici FILTERSCRIPT.. ● Pokud chceme zjistit, zda hráč nezadal parametry, využijeme k tomu isnull (součástí includu). Viz spoiler. Nemůžeme jednoduše kontrolovat, zda první znak params není nulový, protože při nezadání parametru se neodesílá prázdný string, ale '/1'. Je tomu tak, protože prázdný string v CallLocalFuntion crashne server. . ● Příkaz můžeme vyvolat odkudkoliv následujícím způsob (za playerid a params si dosadíme příslušné hodnoty) cmd_nazev_prikazu(playerid, params); Tímto způsobem můžeme jednoduše vytvořit mnoho příkazů, které provádějí stejné akce. 6. Příklady ● Jednoduchý příkaz na zabití hráče (bez parametrů). COMMAND:kill(playerid, params[]) { SetPlayerHealth(playerid, 0); return 1; } . ● Jednoduchý příkaz (s parametrem), ukázka použití isnull a chybová hláška. CMD:say(playerid, params[]) { if(isnull(params)) return SendClientMessage(playerid, -1, "Použití: /say [zpráva]"); new str[145]; GetPlayerName(playerid, str, MAX_PLAYER_NAME); format(str, sizeof str, "%s říká: %s", str, params); SendClientMessageToAll(str); return 1; } . ● Vlastní text místo "UNKNOWN COMMAND". public OnPlayerCommandPerformed(playerid, cmdtext[], success) { if(!success) return SendClientMessage(playerid, 0xFF0000FF, "Příkaz neexistuje"); return 1; } . ● Zakázání příkazů danému hráči. public OnPlayerCommandReceived(playerid, cmdtext[]) { if(isMuted[playerid]) { SendClientMessage(playerid, 0xFF0000FF, "Máte zakázáno používání příkazů"); return 0; } return 1; } . 7. Závěr To by bylo k tomuto návodu o jednom z nejrychlejších příkazových systémů vše. Pokud máte nějaké otázky, připomínky, nebo máte cokoliv jiného na srdíčku, můžete dát vědět do komentářů. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený. 7 Link to comment Share on other sites More sharing options...
Paulee 16 Odesláno: 31. Červenec, 2016 Share Odesláno: 31. Červenec, 2016 Zdravím, Máš to tu pěkně popsané, ale nemáš nějaký graf o kolik je I-ZCMD rychlejší než ZCMD? Mě se zdá, že v tom až takový rozdíl nebude. Jinak pěkný tut pro začátečníky. Link to comment Share on other sites More sharing options...
Lukasz 336 Odesláno: 31. Červenec, 2016 Author Share Odesláno: 31. Červenec, 2016 (upraveno) y_commands - 1231ms (MEH YSI) ZCMD - 1201msI-ZCMD - 547msI-ZCMD (case-sensitive) - 353ms to znamená I-ZCMD (case-sensitive) - 3.40x rychlejší než ZCMD I-ZCMD - 2.20x rychlejší než ZCMD Uváděny jsou průměrné hodnoty a zdrojem je tento topic: http://forum.sa-mp.com/showthread.php?t=576114 Při měření podle tohoto kódu: http://pastebin.com/2KBBzcdz Edited 31. Červenec, 2016 by Lukasz Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 1. Srpen, 2016 Hlavní moderátor Share Odesláno: 1. Srpen, 2016 Co kdyby se to přesunulo do hlavní sekce? Byla by škoda, kdyby to zapadlo do historie v téhle sekci. Link to comment Share on other sites More sharing options...
Paulee 16 Odesláno: 1. Srpen, 2016 Share Odesláno: 1. Srpen, 2016 y_commands - 1231ms (MEH YSI) ZCMD - 1201ms I-ZCMD - 547ms I-ZCMD (case-sensitive) - 353ms to znamená I-ZCMD (case-sensitive) - 3.40x rychlejší než ZCMD I-ZCMD - 2.20x rychlejší než ZCMD Uváděny jsou průměrné hodnoty a zdrojem je tento topic: http://forum.sa-mp.com/showthread.php?t=576114 Při měření podle tohoto kódu: http://pastebin.com/2KBBzcdz Wow. Jsem nečekal, že až o tolik to bude rychlejší. GJ Link to comment Share on other sites More sharing options...
Globální moderátor bug 131 Odesláno: 1. Srpen, 2016 Globální moderátor Share Odesláno: 1. Srpen, 2016 Téme presunutá Téma presunutá do hlavnej sekcie návodov Link to comment Share on other sites More sharing options...
Tryharzzz 0 Odesláno: 15. Prosinec, 2020 Share Odesláno: 15. Prosinec, 2020 ahoj pls nešiel by si mi helpovat z nejakymi vecami ? keby ano tak napis dikes <3 5 Link to comment Share on other sites More sharing options...
Mivčo 90 Odesláno: 15. Prosinec, 2020 Share Odesláno: 15. Prosinec, 2020 a prečo nenapíšeš mu SZ a píšeš topic ktorý je už 4 roky neaktívny Link to comment Share on other sites More sharing options...
Tryharzzz 0 Odesláno: 16. Prosinec, 2020 Share Odesláno: 16. Prosinec, 2020 prečo mi nede stiahnut to zcmd 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