Ez az include az OnPlayerCommandText függvény helyett használható. Mindegyik parancs egy külonálló funkció úgy mint a dcmd-ben. Ez a módszer sokkal gyorsabb, mint amikor a beírt parancsot összehasonlítod az összes létezo paranccsal.
Használat Egy parancs hozzáadásához csak készítened kell a függvényt egy elore definiált makróval:
COMMAND:parancs(playerid, params[]) // vagy CMD:parancs(playerid, params[])
{
// Ide jöhet a prancs fo része
return 1;
}
vagy
command(parancs, playerid, params[]) // vagy cmd(parancs, playerid, params[])
{
// A parancs fo része
return 1;
}
A params[] változó tartalmazza a parancs után beírt szöveget, és / vagy számokat.
Megejgyzés #1: Ha a zcmd-t filterscriptben akarod használni akkor az icnlude-ot a
#define FILTERSCRIPT
alá kell tenned.
Megjegyzés #2: Ha le akarod ellenorizni, hogy a játékos írt be paramétert akkor azt ne egyszeruen a
if (!strlen(params))
{
// nincs paraméter
}
vagy a:
if (!params[0])
mert enneg a stringnek a hossza sose 0, egyszeruen használd az isnull() függvényt (benne van az include-ban):
if (isnull(params))
Esetleg, ha használod az sscanf-ot akkor nincs szükséged erre az ellenorzésre.
Itt egy egyszeru példa a zcmd használatára, szükséges hozzá az sscanf is:
COMMAND:givemoney(playerid, params[])
{
if (IsPlayerAdmin(playerid))
{
new
toplayerid, // a játékos akinek a pénzt akarjuk küldeni
amount;
// a params[] string szétválasztása
if (!sscanf(params, \"ii\", toplayerid, amount))
{
if (toplayerid != INVALID_PLAYER_ID)
{
new
message[40];
GivePlayerMoney(toplayerid, amount);
format(message, sizeof(message), \"Kaptál $%d az admintól!\", amount);
SendClientMessage(toplayerid, 0x00FF00FF, message);
}
else SendClientMessage(playerid, 0xFF0000FF, \"A játékos Offline\");
}
else SendClientMessage(playerid, 0xFFFFFFFF, \"Használat: /givemoney <playerid> <összeg>\");
}
else SendClientMessage(playerid, 0xFF0000FF, \"Csak adminok használhatják ezt a parancsot!\");
return 1;
}
Kiegészítés:Ha nem akarod átírni az összes parancsot zcmd-re akkor írd át az
OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, \"/valami\", true)==0)
{
//valami....
return 1;
}
return 0;
}
public OnPlayerCommandReceived(playerid, cmdtext[])
{
if (!strcmp(cmdtext, \"/valami\", true))
{
//valami
return 0;
}
return 1;
}
Vagy ha nem akarod az összes visszatérést megcserélni akkor az zmcd.inc fileban cseréld le a 48.sort
if (zcmd_g_HasOPCS && !CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))
if (zcmd_g_HasOPCS && CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))
erre.
És akkor a parancsokatban maradhatnak a visszatérések így:
public OnPlayerCommandReceived(playerid, cmdtext[])
{
if (!strcmp(cmdtext, \"/valami\", true))
{
//valami
return 1;
}
return 0;
}
Letöltés /**********************************
* *
* @Author: ZeeX *
* @Version: 0.3.1 *
* @Released: 31/10/2009 *
* *
**********************************/
#if defined _zcmd_included
#endinput
#endif
#define _zcmd_included
#define MAX_FUNC_NAME (32)
#define COMMAND:%1(%2) \\
forward cmd_%1(%2); \\
public cmd_%1(%2)
#define CMD:%1(%2) \\
COMMAND:%1(%2)
#define command(%1,%2,%3) \\
COMMAND:%1(%2, %3)
#define cmd(%1,%2,%3) \\
COMMAND:%1(%2, %3)
#if !defined isnull
#define isnull(%1) \\
((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1]))))
#endif
forward OnPlayerCommandReceived(playerid, cmdtext[]);
forward OnPlayerCommandPerformed(playerid, cmdtext[], success);
static
bool:zcmd_g_HasOPCS = false,
bool:zcmd_g_HasOPCE = false;
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
zcmd_g_HasOPCS = funcidx(\"OnPlayerCommandReceived\") != -1;
zcmd_g_HasOPCE = funcidx(\"OnPlayerCommandPerformed\") != -1;
return CallLocalFunction(\"zcmd_OnFilterScriptInit\", \"\");
}
#if defined _ALS_OnFilterScriptInit
#undef OnFilterScriptInit
#else
#define _ALS_OnFilterScriptInit
#endif
#define OnFilterScriptInit zcmd_OnFilterScriptInit
forward zcmd_OnFilterScriptInit();
#else /*not a filterscript*/
public OnGameModeInit()
{
zcmd_g_HasOPCS = funcidx(\"OnPlayerCommandReceived\") != -1;
zcmd_g_HasOPCE = funcidx(\"OnPlayerCommandPerformed\") != -1;
if (funcidx(\"zcmd_OnGameModeInit\") != -1)
{
return CallLocalFunction(\"zcmd_OnGameModeInit\", \"\");
}
return 1;
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit zcmd_OnGameModeInit
forward zcmd_OnGameModeInit();
#endif /*if defined FILTERSCRIPT*/
public OnPlayerCommandText(playerid, cmdtext[])
{
if (zcmd_g_HasOPCS && !CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))
{
return 1;
}
new
pos,
funcname[MAX_FUNC_NAME];
while (cmdtext[++pos] > \' \')
{
funcname[pos-1] = tolower(cmdtext[pos]);
}
format(funcname, sizeof(funcname), \"cmd_%s\", funcname);
while (cmdtext[pos] == \' \') pos++;
if (!cmdtext[pos])
{
if (zcmd_g_HasOPCE)
{
return CallLocalFunction(\"OnPlayerCommandPerformed\", \"isi\", playerid, cmdtext, CallLocalFunction(funcname, \"is\", playerid, \"\\1\"));
}
return CallLocalFunction(funcname, \"is\", playerid, \"\\1\");
}
if (zcmd_g_HasOPCE)
{
return CallLocalFunction(\"OnPlayerCommandPerformed\", \"isi\", playerid, cmdtext, CallLocalFunction(funcname, \"is\", playerid, cmdtext[pos]));
}
return CallLocalFunction(funcname, \"is\", playerid, cmdtext[pos]);
}
#if defined _ALS_OnPlayerCommandText
#undef OnPlayerCommandText
#else
#define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText zcmd_OnPlayerCommandText
forward zcmd_OnPlayerCommandText(playerid, cmdtext[]);
Az eredeti leírás a forum.sa-mp.com-on található. Készíto: Zeex