Sei sulla pagina 1di 5

CREARE UN SISTEMA DI REGISTRAZIONE CON DINI.

INC

Phanto

1. Premessa 2. Funzioni dellinclude 3. Pianificazione del sistema

1 http://pawnoscripter.forumfree.it

CREARE UN SISTEMA DI REGISTRAZIONE CON DINI.INC

Phanto

1. Guida al dini.inc Premessa


Questa guida stata creata interamente da Phanto e postata originariamente su http://pawnoscripter.forumfree.it E vietata qualsiasi copia e/o modifica parziale e/o intera di qualsiasi contenuto di questa guida. La guida ha il fine di far comprendere agli scripter inesperti come creare un basilare sistema di registrazione con linclude dini di Dracoblue (Ricordate che ormai per obsoleto come sistema, anche se facile da usare.) Iniziamo ora a creare un sistema di registrazione semplice. Si presume che si abbia le basi del linguaggio pawn per comprendere alcuni passaggi.

2. Guida al dini.inc Funzioni dellinclude


Analizziamo ora tutte le funzioni dellinclude (cercate di capire bene cosa fanno): dini_Exists(filename[]) Controlla se esiste un file dini_Remove(filename[]) Cancella un file dini_Create(filename[]) Crea un file dini_Set(filename[],key[],value[]) Setta un valore stringato(Usato ad esempio per password) dini_IntSet(filename[],key[],value) Setta un valore numerico intero dini_Int(filename[],key[]) Returna un valore intero dini_FloatSet(filename[],key[],Float:value) Setta un valore float dini_Float(filename[],key[]) Returna un valore float dini_Bool(filename[],key[]) Returna un valore booleano dini_BoolSet(filename[],key[],value) Setta un valore booleano dini_Unset(filename[],key[]) Rimuove un determinato valore dini_Get(filename[],key[]) Returna un valore stringato dini_Isset(filename[],key[]) Controlla se un valore settato

3. Guida al dini.inc Pianificare il sistema


Prima di iniziare a scriptare, si pianifica pi o meno quello che si vuole fare, in questo caso un sistema di registrazione. Beh ovviamente dobbiamo includere il file dini.inc prima di poter utilizzare le funzioni. #include <dini> Dunque, vogliamo che quando un giocatore entri nel server debba registrarsi per accedere al server, oppure se gi registrato deve mettere una password. Dunque il modo migliore di farlo utilizzare un sistema con dialog. Iniziamo dunque a definire i due dialog, uno per registrarsi e uno per loggarsi. #define DIALOGREG 1060 #define DIALOGLOGIN 1061 Vogliamo ora che questi due dialog vengano visualizzati alla connessione di un player, quindi andremo a inserire i codici nel callback OnPlayerConnect(playerid) Se il player non risulta registrato (quindi non esiste il file) sar visualizzato DIALOGREG altrimenti se registrato DIALOGLOGIN per loggarsi. Andiamo a creare la cartella Utenti in scriptfiles, dove salveremo gli account.

2 http://pawnoscripter.forumfree.it

CREARE UN SISTEMA DI REGISTRAZIONE CON DINI.INC

Phanto

OnPlayerConnect(playerid) { new nome[25]; //Queste due variabili consiglio di definirle fuori dale funzioni, perch saranno usate altre volte new stringa[250]; GetPlayerName(playerid,nome,sizeof(nome)); format(stringa,sizeof(stringa),Utenti/%s,nome); if(!dini_Exists(stringa)) //Controlliamo se non esiste il file ShowPlayerDialog(playerid,DIALOGREG,DIALOG_STYLE_INPUT,Registrazione,Benvenuto nel server. Immetti una password per registrarti,Registrati,); else //Se il file esiste ShowPlayerDialog(playerid,DIALOGLOGIN,DIALOG_STYLE_INPUT,Login,Bentornato nel server. Immetti la password per loggarti,Login,); return 1; }

Ora dobbiamo decidere cosa salvare, prima per definiamo un array per ogni player, dove verranno caricati alcuni dati enum InfoGiocatore{Livello,Uccisioni,Morti,Loggato}; new Giocatore[MAX_PLAYERS][InfoGiocatore]; Quali sono le variabili che andremo a salvare? In questa guida andremo a creare un file che salver: -Un valore numerico che rappresenta il livello -Un valore numerico che rappresenta le uccisioni -Un valore numerico che rappresenta i morti -Una stringa per la password Ora andiamo a gestire gli eventi quando ci si registra: OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid==DIALOGREG) { if(!response) return Kick(playerid); //Kicka il player che non si registra if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOGREG,DIALOG_STYLE_INPUT,Registrazione,INSERISCI UNA PASSWORD\n Immetti una password per registrarti,Registrati,); GetPlayerName(playerid,nome,sizeof(nome)); format(stringa,sizeof(stringa),Utenti/%s,nome); dini_Create(stringa); //Creiamo il file per laccount utente dini_IntSet(stringa,Livello,0); dini_IntSet(stringa,Uccisioni,0); dini_IntSet(stringa,Morti,0); dini_Set(stringa,Password,inputtext); ShowPlayerDialog(playerid,DIALOGLOGIN,DIALOG_STYLE_INPUT,Login,Ora sei registrato. Immetti la password per loggarti,Login,); return 1; } . }

3 http://pawnoscripter.forumfree.it

CREARE UN SISTEMA DI REGISTRAZIONE CON DINI.INC


Ora invece abbiamo bisogno dellevento in risposta al dialog per il login.

Phanto

OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { .. //Qui dovrebbe esserci levento per il DIALOGREG if(dialogid==DIALOGLOGIN) { if(!response ) return Kick(playerid); //Kicka il player che non si logga GetPlayerName(playerid,nome,sizeof(nome)); format(stringa,sizeof(stringa),Utenti/%s,nome); new Pass[250]; Pass=dini_Get(stringa,Password); if(strcmp(Pass,inputtext,true) || !strlen(inputtext)) //Controlla se la password corretta { ShowPlayerDialog(playerid,DIALOGLOGIN,DIALOG_STYLE_INPUT,Login,PASSWORD INCORRETTA \nImmetti la password per loggarti,Login,); return 1; } Giocatore[playerid][Livello]=dini_Int(stringa,Livello); //Qui carica i dati del giocatore Giocatore[playerid][Morti]=dini_Int(stringa,Morti); Giocatore[playerid][Uccisioni]=dini_Int(stringa,Uccisioni); Giocatore[playerid][Loggato]=1; //Ci servir per quando si disconnetter return 1; } . }

Ora ci manca solo il salvataggio dati del player. In questo caso faremo che i dati verranno salvati alla disconnessione del player dal server. Andiamo quindi nel callback OnPlayerDisconnect(playerid) OnPlayerDisconnect(playerid) { if(!Giocatore[playerid][Loggato]) return 1; //Se il giocatore non loggato non salva i dati GetPlayerName(playerid,nome,sizeof(nome)); format(stringa,sizeof(stringa),Utenti/%s,nome); dini_IntSet(stringa,Livello,Giocatore*playerid+*Livello+); //Salva tutti i valori che ci interessano dini_IntSet(stringa,Morti,Giocatore*playerid+*Morti+); dini_IntSet(stringa,Uccisioni,Giocatore*playerid+*Uccisioni+); Giocatore[playerid][Loggato]=0; //Cancelliamo lo status loggato per il player return 1; }

4 http://pawnoscripter.forumfree.it

CREARE UN SISTEMA DI REGISTRAZIONE CON DINI.INC

Phanto

Ora dovremmo solo aggiungere nella funzione OnPlayerDeath(playerid,killerid,reason) alcune cose per i dati da salvare OnPlayerDeath(playerid,killerid,reason) { Giocatore[playerid][Morti]++; //Aumentiamo di uno il valore dei dati da salvare Giocatore[killerid][Uccisioni]++; return 1; }

Giocatore[playerid][Livello+ magari lo potete usare per livelli admin basilari per usare comandi e quantaltro.

Grazie per aver letto! Se avete suggerimenti fate riferimento alla discussione originale su http://pawnoscripter.forumfree.it in sezione guide. Cordiali saluti

Phanto
5 http://pawnoscripter.forumfree.it