Přejít na obsah

I-ZCMD [*]

i-zcmd zcmd dcmd příkazy pawno

  • Pokud chcete odpovědět, přihlaste se
5 odpovědí

#1
HighΡrint

HighΡrint

    Hraju za Wildcats

  • Uživatel
  • Příspěvků: 900

*
POPULÁRNÍ

I-ZCMD

:1:

Obsah:
Úvod
I-ZCMD
Vytváření příkazů
Funkce includu
Tipy a triky

Příklady
Zá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-ZCMD
Pří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.

Spoiler

.

●   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ářů.

 

[success='Ověřený návod']Tento návod prošel validací, a lze ho proto považovat za ověřený.[/success]


  • 7


podpis.png


#2
Paulee

Paulee

    Learning pawn ...

  • Uživatel
  • Příspěvků: 595

Steam Profile

  • Paulee - Offline
    Since: lis 21 2017 21:41:00
    21,7 hrs last 2 weeks.
    Add Friend

     

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.


  • 0

#3
HighΡrint

HighΡrint

    Hraju za Wildcats

  • Uživatel
  • Příspěvků: 900

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.c...ad.php?t=576114

Při měření podle tohoto kódu: http://pastebin.com/2KBBzcdz


Upraveno uživatelem Lukasz: 31 červenec 2016 - 21:11:31

  • 0

podpis.png


#4
vEnd

vEnd

    Python maniac

  • Globální moderátor
  • Příspěvků: 682

Co kdyby se to přesunulo do hlavní sekce? Byla by škoda, kdyby to zapadlo do historie v téhle sekci.


  • 0

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
It's hard to follow the train when you are hauling two number nines; a number nine large; a number six with extra dip; a number seven; two number 45s, one with cheese; and a large soda. -guess who


#5
Paulee

Paulee

    Learning pawn ...

  • Uživatel
  • Příspěvků: 595

Steam Profile

  • Paulee - Offline
    Since: lis 21 2017 21:41:00
    21,7 hrs last 2 weeks.
    Add Friend

     

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.c...ad.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


  • 0

#6
UareBugged

UareBugged

    Old Reece

  • Globální moderátor
  • Příspěvků: 1 197

Steam Profile


                                                                       

Téme presunutá

Téma presunutá do hlavnej sekcie návodov


  • 0

TH1R6.gif






Také označeno jedním nebo více klíčovými slovy: Návod, i-zcmd, zcmd, dcmd, příkazy, pawno

0 uživatelů si prohlíží toto fórum

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

© 2015 IPS, Inc.

Zajímat Vás mohou ještě aktuální zprávy. sleviště, slevy dnes Herbalife je skvělou cestou pro dobré zdraví. Je libo dětský web?