Questo metodo, chiamato "dcmd", è stato creato da DracoBlue, ed è organizzato meglio, e molto più veloce (anche più di 5 volte). Il succo, sta in questa riga, da inserire ad inizio script:
#define dcmd(%1,%2,%3) if ((strcmp(%3, "/%1", true, %2+1) == 0)&&(((%3[%2+1]==0)&&(dcmd_%1(playerid,"")))||((%3[%2+1]==32)&&(dcmd_%1(playerid,%3[%2+2]))))) return 1
(è una riga sola)
Usarlo è molto semplice, e sarà così:
#define dcmd(%1,%2,%3) if ((strcmp(%3, "/%1", true, %2+1) == 0)&&(((%3[%2+1]==0)&&(dcmd_%1(playerid,"")))||((%3[%2+1]==32)&&(dcmd_%1(playerid,%3[%2+2]))))) return 1 dcmd_lol(const playerid,const params[]) { //QUI IL CODICE return 1; } dcmd_asd(const playerid,const params[]) { //QUI IL CODICE return 1; } public OnPlayerCommandText(playerid, const cmdtext[]) { dcmd(lol,3,cmdtext); dcmd(asd,3,cmdtext); return 0; }
Come vedete è molto semplice: basta mettere la stringa "magica", e si può già usare il sistema. L'uso del comando "dcmd" è questo:
dcmd(nomecomando,lunghezzacomando,cmdtext);
Il nome del comando dev'essere inserito senza il "/" iniziale, e la lunghezza del comando è il numero dei caratteri. Ad esempio login sarà 5, kick sarà 4.
Poi basta creare dei comandi così:
dcmd_nomecomando(const playerid,const params[]) { //Codice return 1; }
Le variabili disponibili sono "playerid" e "params" (i parametri del comando), quindi se se uno fa /kick 5, il parametro "params" sarà 5.
Se invece si vogliono usare più parametri, ad esempio per fare /giveweapon nick arma munizioni (es: /giveweapon >RLZ
dcmd_giveweapon(playerid,params[]) { new idx=0; new nick[256]=strtok(params,idx); new weapon[256]=strtok(params,idx); new amount=strval(strtok(params,idx)); // ECC.... }
In questo caso bisogna usare ancora strtok, ma è molto meglio organizzato e veloce.
Sistema tratto da questo topic e tradotto da me.
-------------
In caso abbiate SA-MP 0.2, usate questa stringa:
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1