GTA-Center.com » Forum
http://www.gta-center.com/forums/

[GUIDA]Sscanf & zcmd
http://www.gta-center.com/forums/viewtopic.php?f=40&t=678
Pagina 1 di 1

Autore:  Alby Fire [ 25/01/2011, 15:36 ]
Oggetto del messaggio:  [GUIDA]Sscanf & zcmd

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 QUI
Aggiungete 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 :trollface:

Autore:  Angelo [ 25/01/2011, 15:47 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Bella guida :D

Autore:  Giovanni94m [ 25/01/2011, 15:47 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Grande Alby ottima guida. Davvero molto utile.
Continua così ;)

Autore:  Peppe [ 25/01/2011, 16:06 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Non è vero che è sempre consigliabile lo sscanf.
Ad esempio se si necessita un solo valore intero si può usare tranquillamente e in modo più veloce, senza fare calcoli inutili con lo sscanf, il classico strval, oppure se è solo una stringa usare direttamente la stringa params. In poche parole per quanto riguarda i comandi usate lo sscanf solo quando necessitate di più di un parametro oppure se vi serve il parametro user/bot/player.
Inoltre per vedere se la stringa del params è nulla non utilizzate !strlen(params), poiché non funzionerà dato che nel CallLocalFunction non si possono passare stringhe vuote, ma usate isnull(params) (funzione predefinita nell'include del zcmd), che è applicabile anche in casi normali ed è anche più veloce del classico strlen.
Sullo sscanf hai detto tante, ma tante cazzate e comunque quello nei comando è solo un piccolo caso in cui è utile, poiché ha tantissime utilità, soprattutto nella versione plugin.

Nel complesso la guida è buona per chi di scripting non ci capisce una minchia (PS: non è una critica, non frantendere).

Autore:  Alby Fire [ 25/01/2011, 16:19 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Peppe ha scritto:
Non è vero che è sempre consigliabile lo sscanf.
Ad esempio se si necessita un solo valore intero si può usare tranquillamente e in modo più veloce, senza fare calcoli inutili con lo sscanf, il classico strval, oppure se è solo una stringa usare direttamente la stringa params. In poche parole per quanto riguarda i comandi usate lo sscanf solo quando necessitate di più di un parametro oppure se vi serve il parametro user/bot/player.
Inoltre per vedere se la stringa del params è nulla non utilizzate !strlen(params), poiché non funzionerà dato che nel CallLocalFunction non si possono passare stringhe vuote, ma usate isnull(params) (funzione predefinita nell'include del zcmd), che è applicabile anche in casi normali ed è anche più veloce del classico strlen.
Sullo sscanf hai detto tante, ma tante cazzate e comunque quello nei comando è solo un piccolo caso in cui è utile, poiché ha tantissime utilità, soprattutto nella versione plugin.

Nel complesso la guida è buona per chi di scripting non ci capisce una minchia (PS: non è una critica, non frantendere).

Intendevo dire che io, personalmente, non consiglio di usare a volte lo strlen e a volte lo sscanf, come hai detto tu.
Comunque quel messaggio, "hai detto tante cazzate ma tante cazzate sullo sscanf", guarda che nessuno ha chiesto il tuo parere, qui puoi commentare scrivendo correzioni o impressioni personali non scrivendo "hai detto tante cazzate" :dry: .
Piuttosto fai qualcosa di utile per una volta in tutta la tua vita, posta qui le correzioni di dove vedi degli errori nella mia guida, invece di commentare con termini insulsi e sgradevoli a riguardo, rimarcando il tuo comportamento estremamente infantile (non è una critica eh, non fraintendermi ;) )

Autore:  mitosking [ 25/01/2011, 16:30 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Magnifica Alby ;)... Continua cosi... Adesso ho capito cosa sono sscanf ed zcmd :D.

Autore:  Peppinux AKA Peppe_Stasu [ 25/01/2011, 16:40 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Carina ma si poteva fare meglio e Peppe ha ragione su alcuni punti.
Comunque complimenti ;).

Autore:  Alby Fire [ 25/01/2011, 16:53 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Grazie a tutti :D
Peppinux AKA Peppe_Stasu ha scritto:
Peppe ha ragione su alcuni punti.

Non lo metto in dubbio che abbia fatto degli errori, infatti avrebbe dovuto postare qui le correzioni.

Autore:  Peppe [ 25/01/2011, 17:58 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Alby Fire ha scritto:
Grazie a tutti :D
Peppinux AKA Peppe_Stasu ha scritto:
Peppe ha ragione su alcuni punti.

Non lo metto in dubbio che abbia fatto degli errori, infatti avrebbe dovuto postare qui le correzioni.

E perché avrei dovuto? Hai scritto delle nabbate, punto, non rosicare.

Autore:  Angelo [ 25/01/2011, 18:36 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Per favore cerchiamo di non portare avanti questa discussione. Stop OT per tutti e due.

Autore:  Peppe [ 25/01/2011, 18:43 ]
Oggetto del messaggio:  Re: [GUIDA]Sscanf & zcmd

Angelo ha scritto:
Per favore cerchiamo di non portare avanti questa discussione. Stop OT per tutti e due.

Non stiamo per niente off topic.

Pagina 1 di 1 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/