(Si lo so non ho proprio niente da fare xD)
Ok iniziamo!
Suddividerò il seguente post in 2 parti.
La prima parte sarà dedicata all'illustrazione dei menu che funzionano sia per samp 0.2x che per lo 0.3a
La seconda invece sarà dedicata ai nuovi menu per samp 0.3.
1. MENU SA:MP 0.2x e 0.3a
Per prima cosa andiamo a creare la variabile per il nostro menu:
new Menu: Nome_Variabile;
(consiglio di metterlo a inizio script insieme alle altre variabili

Ora, andiamo a creare il menu ( preferibilmente nell' OnGameModeInit (se gamemode) o nell' OnFilterscriptInit(se filterscript):
Nome_Variabile = CreateMenu("Nome_Menu",1,55,200,100,0);
L'esempio che vedete riporta diversi numeri. 1 55 200 100.. che cosa ci rappresentano?
Il primo ci indica il numero di colonne del menu.
Il secondo e il terzo invece ci indicano la posizione del menu nello schermo secondo le coordinate X , Y.
Il quarto e il quinto ci indicano la larghezza delle colonne.
I numeri ovviamente sono modificabili a libero arbitrio.
Se vogliamo dare un titolo al nostro menù useremo la funzione SetMenuColumnHeader.
SetMenuColumnHeader(Nome_Menu, 0, "Titolo menu");
Attenti che il titolo va tra le virgolette!
Questo farà apparire una scritta a capo del menu. Insomma per abbellire il tuttto xD
Dopo aver definito il menu, occupiamoci di stabilire gli elementi di quest'ultimo:
AddMenuItem(Nome_Menu, 0, "Nome_Opzione");
Ora , con questa riga di comando, facciamo in modo di aggiungere un opzione al nostro menu.
Al posto di Nome_Menu ovviamente metterete il nome del vostro menu.
Il numero 0, ci indica la colonna nella quale andrà inserito l'elemento (vi ricordo che in Pawno non si inizia mai da 1 , ma è compreso anche lo 0)
Sostituite Nome_Opzione con la parola che volete far apparire come opzione nel menu.
Potete andare avanti aggiungendo tanti elementi,quanti ne vorrete (attenzione a non superare il limite per colonna)
Ok finalmente abbiamo il nostro menu!
Ma se volessimo fare in modo che, scelta un opzione, accada qualcosa?
Semplice!
Esiste una funzione chiamata OnPlayerSelectedMenuRow che ci permette ciò!
Ecco un esempio:
public OnPlayerSelectedMenuRow(playerid, row) { new Menu:Corrente = GetPlayerMenu(playerid); if(Corrente == Nome_Menu) { switch(row) { case 0: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 1 } case 1: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 2 } case 2: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 3 } case 3: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 4 } case 4: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 5 } case 5: { //EVENTO DOPO AVER SELEZIONATO L'OPZIONE 6 } }
Ora vi spiegherò brevemente come funziona. Dopo aver constatato che il giocatore sta utilizzando un certo menu, utilizzando la variabile Menu:Corrente, la funzione provvederà a far partire una serie di eventi a seconda di quale riga sia stata selezionata nel menu, attraverso uno SWITCH.
(Non vi sto a spiegare cos'è uno switch perchè per ora non rientra molto nella questione menu.)
Al posto di questi eventi potrete metterci tutto quello che più vi aggrada, che ne so un esplosione su voi stessi LOL
Per mostrare / nascondere un menu a un giocatore usate:
ShowMenuForPlayer(Nome_Menu,playerid);
e
HideMenuForPlayer(Nome_Menu, playerid);
===================================================
2. NUOVI MENU DISPONIBILI CON SA:MP 0.3a
Ecco la seconda parte! Ora provvederò a illustrarvi le nuove funzionalità dei menu in samp 0.3a.
Bisogna dire che in realtà, la novità vera e propria in samp 0.3 consiste nell'innovazione della grafica e della creazione di schede diciamo più moderne.
Attraverso queste schede si possono creare molte utilità come ad esempio un sistema di login migliore graficamente (ci sto lavorando

Per quanto riguarda questi nuovi menu, i programmatori di sa:mp hanno pensato bene di facilitare le cose rimuovendo quelle inutili variabili richieste per i vecchi menu(sono richieste molte meno righe di script e la programmazione è facilitata).
Ok ora possiamo iniziare.
Come detto precedentemente non sono richieste variabili speciali per questo genere di menu.
Iniziamo subito quindi con l'evento vero e proprio:
ShowPlayerDialog(playerid, dialogid, stile, titolo[], info[], bottone1[], bottone2[])
Usando questa funzione, verrà mostrato al player un determinato tipo di scheda (che successivamente vi classificherò per stile).
-Playerid: beh che dire...l'id del giocatore.
-DialogId: va sostituito con un nome a vostra scelta, che ci servirà successivamente all'identificazione del menu quando sceglieremo un oggetto.
-Stile: Esistono 3 tipologie di schede
0 - DIALOG_STYLE_MSGBOX
1 - DIALOG_STYLE_INPUT
2 - DIALOG_STYLE_LIST
Quella che useremo per i menu è la numero 2, quindi sostituite stile con il numero 2.
-Titolo[]:Sostituitelo con il titolo che volete dare alla scheda(Tra "virgolette")
-Info[]: E' la parte più importante della scheda e ci indica ciò che uscirà nel nostro menu. Per dividere un elemento dall'altro in questo menu, è sufficiente usare questa scritta tra un oggetto e l'altro
\n
-Bottone1[]: E' il testo che uscirà scritto sul bottone in basso a sinistra della scheda. Solitamente è "ACCETTA" o "OK" ma voi potete mettere ciò che vi pare xD
-Bottone2[]:E' il testo del bottone in basso a destra della scheda.Solitamente è usato come pulsante per annullare una scelta. Quindi "Esci" o "Annulla"
Ecco un esempio quindi se avete le idee confuse:
ShowPlayerDialog(playerid, DIALOGID, DIALOG_STYLE_LIST, "Lista armi", "D.Eagle - Fucile da Cecchino - Coltello\n D.Eagle - AK-47 - Coltello\n Colt9mm. - M4 - Motosega", "Seleziona", "Esci");
Ok ora abbiamo il nostro menu che esce secondo le condizioni che gli imporrete voi scripters.
Ora dobbiamo fare in modo, come avevamo fatto precedentemente, che quando il giocatore scelga una certa opzione, inizi un evento o comunque una serie di eventi.
Per fare ciò usiamo la funzione OnDialogResponse. Come prima ci avvaleremo del sistema ci "certificazione" diciamo, dell'id del menu.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == ID_ATTRIBUITO_DA_VOI_AL_MENU_PRECEDENTE) { if(response) { if(listitem == 0) { //EVENTO 1 } if(listitem == 1) { //EVENTO2 } if(listitem == 2) { //EVENTO3 } } } }
Cosa fa precisamente OnDialogResponse? Può essere utile in un'infinità di modi ovviamente, ma per quella che cerchiamo di ottenere noi, ossia fare in modo che accada qualcosa quando un giocatore sceglie un elemento del menu, si rivela particolarmente versatile.
Se DialogId è uguale al valore impostato per quel menu che abbiamo creato prima, allora ci garantirà che il menu è proprio quello e potremo essere certi di non confondere il menu che il giocatore userà con un altro dello stesso tipo che magari abbiamo nella GameMode.
Successivamente andiamo a verificare la scelta del giocatore nel menu:
if(ListItem == n°)
Con questo codice potremo scoprire quale oggetto ha scelto e stabilire così gli eventi a seconda delle sua scelta.
Ricordo sempre che le variabili non partono da 1 ma bensì da 0! Quindi il primo elemento sarà LISTITEM == 0!
Spero che la seconda parte sia più interessante della prima

e che questa guida vi aiuti nella programmazione con pawno!
E me ne vado a dormire... OMG 0.54 e domani devo svegliarmi alle 6.00 -.-
Vi saluto..ciao a tutti![COLOR=red]