DRCMD:teszt(playerid, params[]){SendClientMessage(playerid, 0xFFFFFF, \"Ez egy teszt szöveges üzenet!\");return 1;}
DRCMD:teszt(playerid, params[]){new penz, jatekos;if(sscanf(params, \"dd\", jatekos, penz)) return SendClientMessage(playerid, 0xFFFFFF, \"HASZNÁLAT: /givemoney [játékos id] [pénz]\");else if(penz <= 0) return SendClientMessage(playerid, 0xFFFFFF, \"HIBA: A pénz összeg nem megfelelõ!\");else if(!IsPlayerConnected(jatekos)) return SendClientMessage(playerid, 0xFFFFFF, \"A játékos nem elérhetõ!\");else{format(string, sizeof(string), \"Sikeresen adtál %d$-t a következõ játékosnak: %dID\", penz, jatekos);SendClientMessage(playerid, 0xFFFFFF, string);format(string, sizeof(string), \"Kaptál %d$-t!\", penz);SendClientMessage(jatekos, 0xFFFFFF, string);}return 1;}
DRCMD:te(playerid, params[]){return drcmd_teszt(playerid, params[]);}
DRCMD:parancs(playerid, params[]) DRCMD_parancs(playerid, params[]) drcmd(parancs, playerid, params[]) CMD:parancs(playerid, params[]) COMMAND:parancs(playerid, params[])
if(isnull(params))
Ez gyorsabb mint a ZCMD? Mert ha igen átírom DRCMD-re! :O
DRCMD:tele valami(playerid,params[])
DRCMD:tele valami(playerid,params[]) ilyet lehet?
Mibõl gondolod hogy gyors? Nem látom az eredményeket, de az biztos hogy egyszerû.Feleslegesnek találom a függvénykönyvtár ellenõrzését, és az \'endinput\' irányelvet.Elég lenne ha a_samp.inc függvénykönyvtár alá helyezzük a drcmd-t.Másrészt ha használni szeretném az OnPlayerCommandText eljárást akkor ALS is kéne.
#include <a_samp>#define DRCMD:%1(%2,%3) \\forward drcmd_%1(%2,%3); \\public drcmd_%1(%2,%3)#define DRCMD_%1(%2,%3) \\DRCMD:%1(%2,%3)#define drcmd(%1,%2,%3) \\DRCMD:%1(%2,%3)#define CMD:%1(%2,%3) \\DRCMD:%1(%2,%3)#define COMMAND:%1(%2,%3) \\DRCMD:%1(%2,%3)main() { }public OnGameModeInit(){ #define MAX_TEST (990000)for(new d; d < 10; ++d) print(\" \"); new dcmdtest = GetTickCount(); for(new a; a < MAX_TEST; ++a) OnPlayerDraCommandText(0, \"/drcmd teszt\"); printf(\"# DRCMD in %d\",GetTickCount() - dcmdtest); new zcmdtest = GetTickCount(); for(new a; a < MAX_TEST; ++a) OnPlayerCommandText(0, \"/drcmd teszt\"); printf(\"# ZCMD in %d\",GetTickCount() - zcmdtest); return true;}forward OnPlayerDraCommandText(playerid, cmdtext[]);public OnPlayerDraCommandText(playerid, cmdtext[]){newfunction[32],szokozmeddig = -1;while(++szokozmeddig < strlen(cmdtext)) if((cmdtext[szokozmeddig] == \' \')) break;strmid(function, cmdtext, 1, szokozmeddig);format(function, sizeof(function), \"drcmd_%s\", function);while(cmdtext[szokozmeddig] == \' \') szokozmeddig++;if(funcidx(function) != -1){if(szokozmeddig == strlen(cmdtext)){ return CallLocalFunction(function, \"is\", playerid, \"\\1\");}return CallLocalFunction(function, \"is\", playerid, cmdtext[szokozmeddig]);}return 0;}staticbool:zcmd_g_HasOPCS = false,bool:zcmd_g_HasOPCE = false;#define MAX_FUNC_NAME (32)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]);}
Jó lett, de attól maradok a ZCMD nél megszoktam már.. Az viszont tetszik benne hogy ilyen egyszerûen meg lehet oldani a rövidítéseket.Vagy ilyet lehet ZCMD ben is ?
return cmd_parancs(playerid, params);