Che cosa è ?
Si tratta di un semplice sistema di registrazione e login utilizzando Y_INI e i dialogs
Che cosa è Y_INI?
Y_INI è un include che ti permette di gestire la lettura e la scrittura di un file all'interno di un server sa-mp, è noto anche come "File Manage System" ed il creatore dell'include è Y_Lees. E' un include della YSI Library che contiene altre utili include come y_commands (YCMD) e y_groups
La differeza da questo tipo di FMS e gli altri ?
Si dice sia stato riconosciuto come il piu veloce di tutti gli altri File Manage Systems, come DINI etc.
troverete molte piu informazioni a questo link.
OK. Ma come faccio ad installare Y_INI ?
Semplice, per prima cosa è necessario scaricare Y_INI a questo . Dopo di che estraete il tutto all'interno della cartella del vostro server sa-mp.
I Step
Come primo passo è necessario dichiarare l'include Y_INI sotto l'include <a_samp> come di seguito, dovrete dichiarare anche l'include dubd che servirà per richiamare la funzione con la quale cripteremo la password di ogni utente che si registra, suddetto include lo trovate a questo link:
Quote
#include <a_samp>
#include <YSI\y_ini>
#include <dudb>
#include <YSI\y_ini>
#include <dudb>
II Step
l'include dubd ha una funzione che non viene usata quindi, per evitare eventuali warn dal compiler sotto le nostre dichiarazioni di include mettiamo quanto segue:
Quote
#pragma unused ret_memcpy
III Step
Definiamo i Dialogs con cui l'utente si troverà faccia a faccia e nei quali dovrà digitare le informazioni da questi richiesti.
Quote
#define D_NOME 1
#define D_COGNOME 2
#define D_ETA 3
#define D_PROVENIENZA 4
#define D_ALLINEAMENTO 5
#define D_REGISTRAZIONE 6
#define D_LOGIN 7
#define D_SUC_REG 8
#define D_SUC_LOG 9
#define D_FINE_REG 10
#define D_COGNOME 2
#define D_ETA 3
#define D_PROVENIENZA 4
#define D_ALLINEAMENTO 5
#define D_REGISTRAZIONE 6
#define D_LOGIN 7
#define D_SUC_REG 8
#define D_SUC_LOG 9
#define D_FINE_REG 10
IV Step
Definiamo la directory nella quale verra creato il file.ini dell'utente che si registrerà, ricordo che questa dovrà essere creata nella directory filescripts del vostro server sa-mp, quindi entrate in questa e create una cartella chiamata User o chiamata a seconda di come vorrete che si chiami ma mi raccomando, definitela con la seguente sintassi (la mia cartella in questo caso è Users).
Quote
#define PATH "/Users/%s.ini"
V Step
Definiamo dei colori per i messaggi che imposteremo nelle nostre dialogs.
Quote
#define COL_BIANCO "{FFFFFF}"
#define COL_ROSSO "{FF0000}"
#define COL_VERDE "{00FF22}"
#define COL_LBLUE "{00CED1}"
#define COL_ROSSO "{FF0000}"
#define COL_VERDE "{00FF22}"
#define COL_LBLUE "{00CED1}"
VI Step
Definiamo un contenitore enum che conterrà tutte le variabili che a sua volta conterranno le informazioni dell'utente ed infine settiamo una variabile globale che le incanalerà con la seguente sintassi:
Quote
enum pStats {
sPassword,
sNome[MAX_PLAYER_NAME],
sCognome[MAX_PLAYER_NAME],
sEta,
sProvenienza[MAX_PLAYER_NAME],
sAllineamento[MAX_PLAYER_NAME],
sAdmin,
sScore,
sSoldi,
sMorti,
sUccisioni,
sCampi[MAX_PLAYER_NAME]
}
new statistiche[MAX_PLAYERS][pStats];
sPassword,
sNome[MAX_PLAYER_NAME],
sCognome[MAX_PLAYER_NAME],
sEta,
sProvenienza[MAX_PLAYER_NAME],
sAllineamento[MAX_PLAYER_NAME],
sAdmin,
sScore,
sSoldi,
sMorti,
sUccisioni,
sCampi[MAX_PLAYER_NAME]
}
new statistiche[MAX_PLAYERS][pStats];
VII Step
Ho dichiarato anche una variabile che svolgerà un metodo per sapere se il player ha immesso determinate informazioni, tramite dialogs, o meno.
Quote
new InfoDate[MAX_PLAYERS];
IIX Step
Andremo adesso a creare una funzione che svolgerà il compito di caricare dal file.ini i dati salvati all'interno di esso con delle funzioni che ci offre Y_INI
Quote
forward CaricaUtente_data(playerid,name[],value[]);
public CaricaUtente_data(playerid,name[],value[]){
INI_Int("Password",statistiche[playerid][sPassword]);
INI_String("Nome",statistiche[playerid][sNome],24);
INI_String("Cognome",statistiche[playerid][sCognome],24);
INI_Int("Eta",statistiche[playerid][sEta]);
INI_String("Provenienza",statistiche[playerid][sProvenienza],24);
INI_String("Allineamento",statistiche[playerid][sAllineamento],24);
INI_Int("Admin",statistiche[playerid][sAdmin]);
INI_Int("Score",statistiche[playerid][sScore]);
INI_Int("Soldi",statistiche[playerid][sSoldi]);
INI_Int("Morti",statistiche[playerid][sMorti]);
INI_Int("Uccisioni",statistiche[playerid][sUccisioni]);
INI_String("Campi",statistiche[playerid][sCampi],24);
return 1;
}
public CaricaUtente_data(playerid,name[],value[]){
INI_Int("Password",statistiche[playerid][sPassword]);
INI_String("Nome",statistiche[playerid][sNome],24);
INI_String("Cognome",statistiche[playerid][sCognome],24);
INI_Int("Eta",statistiche[playerid][sEta]);
INI_String("Provenienza",statistiche[playerid][sProvenienza],24);
INI_String("Allineamento",statistiche[playerid][sAllineamento],24);
INI_Int("Admin",statistiche[playerid][sAdmin]);
INI_Int("Score",statistiche[playerid][sScore]);
INI_Int("Soldi",statistiche[playerid][sSoldi]);
INI_Int("Morti",statistiche[playerid][sMorti]);
INI_Int("Uccisioni",statistiche[playerid][sUccisioni]);
INI_String("Campi",statistiche[playerid][sCampi],24);
return 1;
}
IX Step
Andiamo a creare una funzione di immagazzinamento Stock che formatterà una stringa la quale destinazione sarà il PATH che abbiamo dichiarato con il nome del utente registrato grazie alla funzione GetPlayerName.
Quote
stock FileUtente(playerid){
new string[128], nomeplayer[MAX_PLAYER_NAME];
GetPlayerName(playerid,nomeplayer,sizeof(nomeplayer));
format(string,sizeof(string),PATH,nomeplayer);
return string;
}
new string[128], nomeplayer[MAX_PLAYER_NAME];
GetPlayerName(playerid,nomeplayer,sizeof(nomeplayer));
format(string,sizeof(string),PATH,nomeplayer);
return string;
}
X Step
Adesso andiamo a creare all'interno della funzione di callback OnPlayerConnect() delle istruzioni if, che grazie alla funzione fexist() capiranno se il file dell'utente esiste o meno e asseconda di questo "vincolo" eseguiranno delle azioni/funzioni:
Quote
public OnPlayerConnect(playerid)
{
if(fexist(FileUtente(playerid))){
INI_ParseFile(FileUtente(playerid),"CaricaUtente_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid,D_LOGIN,DIALOG_STYLE_PASSWORD,""COL_BIANCO"Log In!",""COL_BIANCO"Bentornato!\nInserisci la password del tuo account per effettuare il Log in!","Log In","Esci");
}else{
ShowPlayerDialog(playerid,D_REGISTRAZIONE,DIALOG_STYLE_PASSWORD,""COL_BIANCO"Registrazione",""COL_BIANCO"Benvenuto!\nInserisci la password per creare il tuo nuovo account!","Registrati","Esci");
}
return 1;
}
{
if(fexist(FileUtente(playerid))){
INI_ParseFile(FileUtente(playerid),"CaricaUtente_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid,D_LOGIN,DIALOG_STYLE_PASSWORD,""COL_BIANCO"Log In!",""COL_BIANCO"Bentornato!\nInserisci la password del tuo account per effettuare il Log in!","Log In","Esci");
}else{
ShowPlayerDialog(playerid,D_REGISTRAZIONE,DIALOG_STYLE_PASSWORD,""COL_BIANCO"Registrazione",""COL_BIANCO"Benvenuto!\nInserisci la password per creare il tuo nuovo account!","Registrati","Esci");
}
return 1;
}
abbiamo visto la funzione INI_ParseFile() e facciamo attenzione ai suoi parametri: FileUtente è il file che abbiamo dichiarato nella funzione stock e "CaricaUtente_%s" non è una stringa.. o quasi, è la funzione CaricaUtente_data() che abbiamo creato poc'anzi e che serve a caricare i parametri del file.ini e viene richiamata all'interno della funzione INI_ParseFile dove _data corrisponde a una stringa ed in questo caso al nome dell'utente, e per questo il parametro s'imposta in tale maniera: INI_ParseFile(FileUtente(playerid),"CaricaUtente_%s" ...) . i parametri .bExtra ed extra servono a far capire che tipo di dati inviare e a chi inviarli.
Messaggio modificato da Galletziz il 05 dicembre 2013 - 16:50