Jelentkezz be, hogy követhesd  
Követő(k) 0
Hawkz

[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]

5 hozzászólás ebben a témában

Improved ZCMD

Legfrissebb verzió: 0.2.2 (2015 június 22.)

"Már 6 éve annak, hogy nem fejlesztik a ZCMD-t. Sokat fejlődtünk az elmúlt években, és a legtöbb fejlesztést nem alkalmazták a ZCMD-ben. Újraírtam ennek a legutolsó, 0.3.1-es változatát, és frissítettem. Most sokkal gyorsabb a ZCMD-nél, ezért ez a leggyorsabb parancs feldolgozó jelenleg. A sebességteszt eredményeit legalul találod meg.

Hatékonysága akár kisebb parancsoknál is megfigyelhető. Az I-ZCMD nagyjából 2x gyorsabb a ZCMD-nél. Gyorsaságának a legfőbb oka az, hogy az I-ZCMD nem használja a CallLocalFunction-t, ellenben elődjével, ami csak lassítaná a kódot."

Változások a ZCMD-hez képest:

  • Az OnPlayerCommandReceived és OnPlayerCommandPerformed azonnal meghívódik a CallLocalFunction használata helyett.
  • Az OnGameModeInit és OnFilterscriptInit eseményfigyelő (hook) eltávolítva.
  • Kisebb optimalizálások.
  • Kis- és nagybetűs parancs érzékenység, ami bekapcsolható definiálás segítségével.

Telepítése:

Azoknak, akik eddig a ZCMD-t használták, csak letöltik az I-ZCMD include-t és kicserélik a ZCMD-vel. Nincs semmilyen változás az alkalmasságát illetően, mindez csak a gyorsaságában és hatékonyságában jelenik meg. Az egyetlen újdonság a kis- és nagybetűs parancs érzékenység, amit úgy tudunk használni, ha definiáljuk az IZCMD_ENABLE_CASE_SENSITIVITY-t, még mielőtt magát az I-ZCMD-t betöltenénk (include). Alapértelmezettként ez nem kis- és nagybetű érzékeny, ahogyan elődje sem az.

Használata:

Parancskészítéshez annyit kell tenned, hogy létrehozod a felsorolt függvények valamelyikét.

COMMAND:parancsneve(playerid, params[])
{
     return 1;
}
CMD:parancsneve(playerid, params[])
{
     return 1;
}
command(parancsneve, playerid, params[])
{
     return 1;
}
cmd(parancsneve, playerid, params[])
{
     return 1;
}

Amikor egy játékos beírja a "/parancsneve paraméterek" parancsot, akkor a függvény meghívódik. A playerid paraméter kapja annak a játékosnak az ID-jét, aki használta a parancsot. A params[] paraméter (vagy segédváltozó) pedig azt a szöveget kapja értékként, amit a játékos a parancs után írt.

A visszatérési (return) értéknek CMD_SUCCESS (vagy 1) értéken kell lennie, így a parancs lefut a játékos számára. Ha olyan parancsot használtak, ami nem létezik, akkor a CMD_FAILURE (vagy 0) értéket kapja meg az OnPlayerCommandPerformed callback (eljárás) success értéke.

Az OnPlayerCommandText callback-et nem fogod tudni használni, miután az I-ZCMD-t betöltötted. Van viszont két új eljárás helyette.

OnPlayerCommandReceived

Minden parancs használata előtt hívódik meg.

Paraméterek:

playerid - Annak a játékosnak az ID-je, aki használta a parancsot

cmdtext - Az a szöveg, amit a játékos a parancs után írt

Visszatérési értékek:

1 - A használt parancs lefut

0 - A parancs nem fut le

public OnPlayerCommandReceived(playerid, cmdtext[])
{
     return 1;
}

OnPlayerCommandPerformed

Minden parancs használata után hívódik meg.

Paraméterek:

playerid - Annak a játékosnak az ID-je, aki használta a parancsot

cmdtext - Az a szöveg, amit a játékos a parancs után írt

success - A parancs visszatérési értékét adja meg (1 vagy 0)

Visszatérési értékek:

0 - A játékos látni fogja a hibaüzenetet (pl.: "Unknown Command")

1 - Nem lesz hibaüzenet elküldve

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
return success;
}

Ha nem használod az OnPlayerCommandPerformed-et:

Ha a parancs visszatérése 0, akkor az alapértelmezett hibaüzenet lesz elküldve, de a parancs lefut.

Ha a parancs visszatérése 1, akkor nem lesz hibaüzenet elküldve és a parancs lefut.

Kis- és nagybetű érzékenység:

Ez alapértelmezettként ki van kapcsolva, azaz pl. a /me és /ME parancs ugyanaz.

Ha ezt két külön parancsként szeretnéd használni, akkor a bekapcsoláshoz definiálnod kell az IZCMD_ENABLE_CASE_SENSITIVITY-t, mielőtt az I-ZCMD-t betöltenéd.

#define IZCMD_ENABLE_CASE_SENSITIVITY
#include <izcmd>

Tippek és trükkök

1. Rövidített parancsok

Egyetlen sorban írhatsz egy rövidebb változatot parancsaidra.

CMD:report(playerid, params[])
{
     // a parancs kód
     return 1; 
}
COMMAND:r(playerid, params[]) return cmd_report(playerid, params);
COMMAND:rep(playerid, params[]) return cmd_report(playerid, params);

2. Parancsok használatának letiltása

Könnyen letilthatod a parancsok használatát pl. egy olyan játékosnak, aki még nem spawn-olt le.

public OnPlayerCommandReceived(playerid, cmdtext[])
{
     if(!GetPlayerState(playerid) == PLAYER_STATE_SPAWNED)
     {
          return 0;
     }
     return 1;
}

3. Egyéni hibaüzenet

Írass ki egyéni hibaüzenetet egy beírt, érvénytelen parancsnál.

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(!success)
    {
        new error[64];
        format(error, sizeof(error), "Ismeretlen parancs: %s", cmdtext);
        SendClientMessage(playerid, -1, error);
    }
    return 1;
}

4. I-ZCMD az sscanf-el együtt

Használd az sscanf függvényt, így még hatékonyabbá teheted az I-ZCMD használatát.

CMD:setskin(playerid, params[])
{
      new skinid;
      if(sscanf(params, "i", skinid)) return SendClientMessage(playerid, -1, "Használat: /setskin [skinID]");
      SetPlayerSkin(playerid, skinid);
      return 1;
}

Sebességtesztek

A teszt során 250 teszt parancsot használtunk, amiből 6-t működőt, és 1 hibásat meghívtunk.

Ez a kód megtalálható itt.

  • y_commands átlagosan 1231ms lefutási idő
  • ZCMD átlagosan 1201ms lefutási idő
  • I-ZCMD átlagosan 547ms lefutási idő
  • I-ZCMD (kis- és nagybetű érzékenységgel) 353ms lefutási idő
  • I-ZCMD 2.20x gyorsabb a ZCMD-nél
  • I-ZCMD 2.25x gyorsabb a y_commands-nál
  • I-ZCMD (kis- és nagybetű érzékenységgel) 3.4x gyorsabb a ZCMD-nél
  • I-ZCMD (kis- és nagybetű érzékenységgel) 3.5x gyorsabb a y_commands-nál

(Megjegyzés: Csak akkor használd az I-ZCMD-t, ha nem használod a y_commands funkcióit.)

Letöltés

Hivatalos SA-MP Fórum Oldala

GitHub Project Oldala

Pastebin v0.2.2 (Legfrissebb)

Készítők:

Yashas

Zeex - az eredeti ZCMD készítője

4 emberek kedveli ezt

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Szép kis leírás, gratula.

CMD:q(playerid) return SendClientMessage(playerid, 0x99aaffff, "Na hát te innen ki nem lépsz, maraggyá csak még egy kicsit.");

CMD:q(playerid) {
      SendClientMessage(playerid, 0x99aaffff, "Na hát te innen ki nem lépsz, maraggyá csak még egy kicsit.");
      return 1;
}
2 emberek kedveli ezt

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Szép kis leírás, gratula.

CMD:q(playerid) return SendClientMessage(playerid, 0x99aaffff, "Na hát te innen ki nem lépsz, maraggyá csak még egy kicsit.");

CMD:q(playerid) {
      SendClientMessage(playerid, 0x99aaffff, "Na hát te innen ki nem lépsz, maraggyá csak még egy kicsit.");
      return 1;
}

Oké, ezeken besírtam elég rendesen.. :)  ;D

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Regisztrálj vagy jelentkezz be, hogy válaszolhass

Csak felhasználóként kommentelhetsz.

Regisztrálj

Légy közösségünk tagja még ma! Csak fél perc.


Regisztrálok

Jelentkezz be

Már van felhasználód? Lépj be!


Bejelentkezek
Jelentkezz be, hogy követhesd  
Követő(k) 0