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.
OnPlayerCommandReceivedMinden 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;
}
OnPlayerCommandPerformedMinden 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ök1. Rövidített parancsokEgyetlen 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ásaKö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üttHaszná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égtesztekA 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ésHivatalos SA-MP Fórum OldalaGitHub Project OldalaPastebin v0.2.2 (Legfrissebb)Készítők:YashasZeex -
az eredeti ZCMD készítője