Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Sistema Registrazione dini2.inc */
- //includes
- #include <a_samp>
- #include <dini2> // Versione migliorata del dini
- //defines
- #define USER_PATH ("Utenti/%s.ini") // User PATH
- #define LOGIN_ATTEMPS (3) // Tentativi massimi
- //dialogs
- #define DIALOG_REGISTER (1)
- #define DIALOG_LOGIN (2)
- //variables
- enum userinfo
- {
- password[10],
- bool:logged, // non verrà salvata
- bool:banned,
- kills,
- deaths,
- Float:x, Float:y, Float:z, virtualworld, interior
- };
- new user[MAX_PLAYERS][userinfo];
- //main
- main(){}
- public OnGameModeInit()
- {
- print("Sistema Registrazione Dini caricato con successo.");
- }
- //callbacks
- public OnPlayerConnect(playerid)
- {
- new userpath[31];
- format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // formatta la variabile userpath con l'userpath del player
- // Se NON esiste il file con estensione .ini in Scriptfiles/Utenti mostra la dialog di registrazione
- if(!dini_Exists(userpath)) ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Benvenuto, effettua la registrazione !", "Non ti sei ancora registrato !\nInserisci una password ( immetti da 3-15 caratteri ). ", "Registrati", "Esci");
- else // se ESISTE il file nella directory
- {
- format(user[playerid][password], 15, "%s", dini_Get(userpath, "password")); // Formatta la password compilandola nell'enumeratore all'interno della variabile user del playerid
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Bentornato, effettua il login !", "Ti sei già registrato !\nInserisci la tua password !", "Accedi", "Esci"); // mostra la dialog di login
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DIALOG_REGISTER: // Dialog registrazione
- {
- if(!response) Kick(playerid); // Se preme 'Esci', lo kicka
- // se la password inserita è minore di 3 oppure maggiore di 15, ripresenta la dialog della registrazione
- if(strlen(inputtext) < 3 || strlen(inputtext) > 15) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Benvenuto, effettua la registrazione !", "Non ti sei ancora registrato !\nInserisci una password ( immetti da 3-15 caratteri ).\n Rispetta la quantità dei caratteri! ", "Okay", "Esci");
- else //sennò lo registra
- {
- new userpath[31];
- format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // ottiene l'userpath formattando la variabile
- dini_Create(userpath); // crea il file nella directory specificata, e col nome del player
- format(user[playerid][password], 15, "%s", inputtext); // salva la password inserita nel enumeratore della variabile in base al playerid
- SaveUserFile(playerid); // salva le informazioni sul file
- SendClientMessage(playerid, -1, "Ti sei registrato con successo, sarai automaticamente loggato");
- user[playerid][logged] = true; // Settiamo la variabile logged a true ( vero )
- SpawnPlayer(playerid); // il player spawnerà
- }
- }
- case DIALOG_LOGIN:
- {
- if(!response) Kick(playerid); // Se preme 'Esci', lo kicka
- if(strcmp(inputtext, user[playerid][password], true)) // se cioè che scrive(inputtext) e la password precedentemente caricata non sono uguali
- {
- new str_error[100], tentativi = GetPVarInt(playerid, "login_attemps"); // crea due variabili, una destinata al messaggio e l'altra getta il valore della pvar "login_tentativi".
- tentativi++, SetPVarInt(playerid, "login_attemps", tentativi); // Aggiunge +1 ai tentativi rimasti
- // Se i tentativi sono più di dei LOGIN_ATTEMPS (del massimo dei tentativi del login) lo kicka.
- if(tentativi > LOGIN_ATTEMPS) return Kick(playerid);
- format(str_error, sizeof(str_error), "Hai inserito una password errata\ntentativo %d/%d", tentativi, LOGIN_ATTEMPS); // formatta la stringa mostrando i tentativi
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Bentornato, effettua il login !", str_error, "Accedi", "Esci"); // rimostra il dialog login
- }
- else // INVECE se le password sono uguali
- {
- DeletePVar(playerid, "login_attemps"); // resetta la variabili dei tantivi di login
- LoadUserFile(playerid); // carica gli enumeratori alla variabile del proprio playerid
- if(user[playerid][banned]) Kick(playerid);// Se l'account risulta bannato il player verrà kickato
- // sennò lo stessa loggato, e lo spawn
- user[playerid][logged] = true;
- SpawnPlayer(playerid);
- }
- }
- }
- return 0;
- }
- public OnPlayerSpawn(playerid)
- {
- if(user[playerid][x] == 0 && user[playerid][y] == 0 && user[playerid][z] == 0) SetPlayerPos(playerid, 234, 344, 3); // Se tutte e 3 le posizioni sono vuote, quindi è il primo log in lo stessa ad una posizione prestabilita
- else SetPlayerPos(playerid, user[playerid][x], user[playerid][y], user[playerid][z]), SetPlayerVirtualWorld(playerid, user[playerid][virtualworld]), SetPlayerInterior(playerid, user[playerid][interior]); // Sennò setta la posizione, virtualword, interior presenti nelle variabili, precedenemente caricati
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- user[playerid][deaths] ++; // aggiunge +1 alla vittimma
- if(killerid != INVALID_PLAYER_ID) user[killerid][kills] ++; // se killerid è stato un player, gli assegna a quel player +1 alle sue kills
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(user[playerid][logged]) // Se il player è loggato
- {
- // ottiene la posizione, virtualworld, e interior compilando l'enum presente nella variabile del proprio playerID
- GetPlayerPos(playerid, user[playerid][x], user[playerid][y], user[playerid][z]);
- user[playerid][virtualworld] = GetPlayerVirtualWorld(playerid);
- user[playerid][interior] = GetPlayerInterior(playerid);
- SaveUserFile(playerid); //richiama la funzione che salva le informazioni nel file
- new clear_enum[userinfo];
- user[playerid] = clear_enum; // resetta l'enum della variabile del playerid
- }
- }
- //stocks
- GetUserPath(playerid)
- {
- new playername[MAX_PLAYER_NAME], str_ret[31];
- GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
- format(str_ret, sizeof(str_ret), USER_PATH, playername); // assegna il playername formulando il PATH
- return str_ret; // returna la stringa formattata col path
- }
- SaveUserFile(playerid)
- {
- new userpath[31];
- format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // ottiene l'userpath nella variabile
- // assegna le informazioni presenti nell enumeratore della variabile del playerid sul file
- dini_Set(userpath, "password", user[playerid][password]);
- dini_BoolSet(userpath, "banned", user[playerid][banned]);
- dini_IntSet(userpath, "kills", user[playerid][kills]);
- dini_IntSet(userpath, "deaths", user[playerid][deaths]);
- dini_FloatSet(userpath, "x", user[playerid][x]);
- dini_FloatSet(userpath, "y", user[playerid][y]);
- dini_FloatSet(userpath, "z", user[playerid][z]);
- dini_IntSet(userpath, "virtualworld", user[playerid][virtualworld]);
- dini_IntSet(userpath, "interior", user[playerid][interior]);
- return 1;
- }
- LoadUserFile(playerid)
- {
- new userpath[31];
- format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // ottiene l'userpath nella variabile
- // ottiene le informazioni dal file e le immagazzina nell enumeratore presente nella variabile del playerid
- user[playerid][banned] = dini_Bool(userpath, "banned");
- user[playerid][kills] = dini_Int(userpath, "kills");
- user[playerid][deaths] = dini_Int(userpath, "deaths");
- user[playerid][x] = dini_Float(userpath, "x");
- user[playerid][y] = dini_Float(userpath, "y");
- user[playerid][z] = dini_Float(userpath, "z");
- user[playerid][virtualworld] = dini_Int(userpath, "virtualworld");
- user[playerid][interior] = dini_Int(userpath, "interior");
- return 1;
- }
Add Comment
Please, Sign In to add comment