Szerző Téma: [INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]  (Megtekintve 2279 alkalommal)

[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]
« Dátum: 2015. október 10. - 15:05:07 »
+4 Show voters

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
« Utoljára szerkesztve: 2015. október 10. - 16:51:23 írta Hawkz »

ᗩωєѕσмє

  • Vendég
[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]
« Válasz #1 Dátum: 2015. október 10. - 15:22:54 »
+2 Show voters
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;
}
« Utoljára szerkesztve: 2015. október 10. - 15:28:49 írta zιтяσиє »

Nem elérhető !Adam

[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]
« Válasz #2 Dátum: 2016. február 07. - 23:52:06 »
0 Show voters
Idézetet írta: zιтяσиє date=1444483374\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"58110\" data-ipsquote-contentclass=\"forums_Topic
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

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]
« Válasz #3 Dátum: 2016. február 07. - 23:53:45 »
0 Show voters
ne floodold már teli az összes témát.

[INCLUDE] Improved ZCMD by Yashas - [Leggyorsabb parancs feldolgozó]
« Válasz #4 Dátum: 2016. március 19. - 23:42:29 »
0 Show voters
Az ékezetes parancsokat támogatja?

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal