Salve, in questa guida vi illustrerò l'utilizzo del zcmd e dello sscanf:
• zcmd:Descrizione: lo zcmd è stato creato da Zeex, con lo scopo di creare un comando:
-Più veloce da creare.
-Più veloce da eseguire(per il server).
-Più leggero.
Installazione: Per utilizzarlo vi basterà scaricare l'include da
QUI, inserire il file .inc nella cartella pawno/includes, ed inserire in cima alla vostra GameMode/FilterScript sotto ad
#include <a_samp>mettete
#include <zcmd>Lo zcmd, come il dcmd, ha il "params" incorporato nella sintassi del comando, per cui non avrete bisogno di utilizzare lo strtok, perciò "params" assumerà il valore di quello che scriverete dopo il comando.
Come Utilizzarlo: lo zcmd possiede la seguente sintassi di utilizzo:
Codice:
CMD:mycommand(playerid, params[])
Il "CMD" può essere anche cambiato in "COMMAND" o in "command", il risultato non cambia.
N.B: lo zcmd non andrà MAI messo sotto l'OnPlayerCommandText , ma andrà messo fra un callback e l'altro, oppure in fondo alla GameMode/FilterScript.
Esempio: lo zcmd può essere usato anche con le variabili "strval" e "strlen" , anche se questo metodo è sconsigliato per motivi che vedrete nella parte dello sscanf della guida:
Codice:
CMD:slap(playerid, params[])
{
new pid;
new Float:X, Float:Y, Float:Z;
pid = strval(params);
GetPlayerPos(pid, Float:X, Float:Y, Float:Z);
SetPlayerPos(playerid, Float:X, Float:Y, Float:Z+15);
return 1;
}
A questo punto avremo creato il nostro comando /slap [ID] assegnando la variabile "pid" al parametro "params" con lo strval.
• sscanf:Descrizione: lo sscanf è stato creato dallo scripter "Y_Less", consiste in una funzione utilizzabile sia nello zcmd che nel dcmd, sotto vi sarà mostrata l'installazione e l'utilizzo.
Installazione: per poterlo utilizzare avrete bisogno del Plugin e dell'Include sscanf v2.0 scaricabile da
QUIAggiungete in cima alla vostra GameMode/FilterScript
sotto ad
#include <a_samp>mettete
#include <sscanf2>Come Utilizzarlo: lo sscanf è una funzione che simula lo strlen e lo strval, creandone una stringa molto più efficiente e specifica in quanto è possibile selezionare il tipo di variabile utilizzata nel comando.
La sintassi è la seguente:
Codice:
if(sscanf(params, "tipo/i variabile/i", nomevariabile))
Fra le "" dove bisognerà inserire il tipo della variabile da utilizzare, dovrete mettere la lettera che indicherà quale tipo di variabile volete utilizzare, questa è la lista di quelle disponibili:
Codice:
s Stringa ciao
i, d Numeri Interi 1, 42, -10
c Caratteri a, o, *
l variabili booleane true, false
b Codici Binari 01001, 01100
h, x Codici Hex(colori) 1A, 0x23
o Codice Ottale 045 12
n Number 42, 0b010, 0xAC, 045
f Float 0.7, -99.5
u Nome/id (players e bot) Y_Less, 0
q Nome Bot/id ShopBot, 27
r Nome Player/id Y_Less, 42
Seguendo questo schema sarà possibile creare ogni tipo di comando.
N.B: Non bisogna MAI omettere oppure mettere a caso l'indicatore, dato che si rischia di buggare la GM, vengono inviati warnings dallo sscanf nella console, il comando non funziona come voluto.
IMPORTANTE: questo schema può essere usato per qualsiasi variabile, bisogna stare attenti però alle variabili di tipo "s", di stringa, perchè oltre ad inserire l'indicatore bisognerà indicare il numero delle celle utilizzate a fianco(per esempio "s[50" se vengono utilizzate 50 celle), oppure non fungerà e darà warning nella console.
Esempi: Codice:
CMD:slap(playerid, params[])
{
new pid;
new Float:X, Float:Y, Float:Z;
if(sscanf(params, "u", pid)) return SendClientMessage(playerid, 0xFF000000, "Uso: /slap [ID/nomeplayer]");
GetPlayerPos(pid, Float:X, Float:Y, Float:Z);
SetPlayerPos(playerid, Float:X, Float:Y, Float:Z+15);
return 1;
}
A questo punto avremo creato il comando /slap [ID/nomeplayer], potremmo usare /goto alby oppure /goto 1, avendo utilizzato come indicatore "u", se avessimo usato "r" potevamo fare solo /goto 1.
Per i comandi con più parametri da inserire, avremo bisogno di inserire più indicatori nei campi dello sscanf, esempio:
Codice:
CMD:sethp(playerid, params[])
{
new Pid, Float:Health;
if(sscanf(params, "uf", Pid, Health)) return SendClientMessage(playerid, 0xFF000000, "Uso: /Sethp [ID/nomeplayer] [vita]");
SetPlayerHealth(Pid, Health);
return 1;
}
Come vedete ho inserito gli indicatori "u" e "f" dove u indica l'ID o il nome del player che andrò ad inserire, ed f indica la vita che andrò a settare al player.
Guida creata da Alby Fire.
Non copiatela ed incollatela in giro senza crediti.
Alla prossima