Ghecco

Sistema registrazione dini2

Nov 24th, 2020 (edited)
98
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Sistema Registrazione dini2.inc */
  2.  
  3. //includes
  4. #include <a_samp>
  5. #include <dini2> // Versione migliorata del dini
  6.  
  7. //defines
  8. #define USER_PATH               ("Utenti/%s.ini") // User PATH
  9. #define LOGIN_ATTEMPS           (3) // Tentativi massimi
  10.  
  11. //dialogs
  12. #define DIALOG_REGISTER         (1)
  13. #define DIALOG_LOGIN            (2)
  14.  
  15. //variables
  16. enum userinfo
  17. {
  18.  
  19.     password[10],
  20.     bool:logged, // non verrà salvata
  21.     bool:banned,
  22.     kills,
  23.     deaths,
  24.     Float:x, Float:y, Float:z, virtualworld, interior
  25. };
  26. new user[MAX_PLAYERS][userinfo];
  27.  
  28.  
  29.  
  30. //main
  31. main(){}
  32.  
  33. public OnGameModeInit()
  34. {
  35.     print("Sistema Registrazione Dini caricato con successo.");
  36. }
  37.  
  38. //callbacks
  39.  
  40. public OnPlayerConnect(playerid)
  41. {
  42.     new userpath[31];
  43.     format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // formatta la variabile userpath con l'userpath del player
  44.    
  45.     // Se NON esiste il file con estensione .ini in Scriptfiles/Utenti mostra la dialog di registrazione
  46.     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");
  47.     else // se ESISTE il file nella directory
  48.     {
  49.         format(user[playerid][password], 15, "%s", dini_Get(userpath, "password")); // Formatta la password compilandola nell'enumeratore all'interno della variabile user del playerid
  50.         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
  51.     }
  52.     return 1;
  53. }
  54.  
  55. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  56. {
  57.     switch(dialogid)
  58.     {
  59.         case DIALOG_REGISTER: // Dialog registrazione
  60.         {
  61.             if(!response) Kick(playerid); // Se preme 'Esci', lo kicka
  62.  
  63.             // se la password inserita è minore di 3 oppure maggiore di 15, ripresenta la dialog della registrazione
  64.             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");
  65.            
  66.             else //sennò lo registra
  67.             {
  68.                 new userpath[31];
  69.                 format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // ottiene l'userpath formattando la variabile
  70.  
  71.                 dini_Create(userpath); // crea il file nella directory specificata, e col nome del player
  72.                 format(user[playerid][password], 15, "%s", inputtext); // salva la password inserita nel enumeratore della variabile in base al playerid
  73.                 SaveUserFile(playerid); // salva le informazioni sul file
  74.  
  75.                 SendClientMessage(playerid, -1, "Ti sei registrato con successo, sarai automaticamente loggato");
  76.                 user[playerid][logged] = true; // Settiamo la variabile logged a true ( vero )
  77.                 SpawnPlayer(playerid); // il player spawnerà
  78.             }
  79.         }
  80.         case DIALOG_LOGIN:
  81.         {
  82.             if(!response) Kick(playerid); // Se preme 'Esci', lo kicka
  83.             if(strcmp(inputtext, user[playerid][password], true)) // se cioè che scrive(inputtext) e la password precedentemente caricata non sono uguali
  84.             {
  85.                 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".
  86.                 tentativi++, SetPVarInt(playerid, "login_attemps", tentativi); // Aggiunge +1 ai tentativi rimasti
  87.                 // Se i tentativi sono più di dei LOGIN_ATTEMPS (del massimo dei tentativi del login) lo kicka.
  88.                 if(tentativi > LOGIN_ATTEMPS) return Kick(playerid);
  89.                 format(str_error, sizeof(str_error), "Hai inserito una password errata\ntentativo %d/%d", tentativi, LOGIN_ATTEMPS); // formatta la stringa mostrando i tentativi
  90.                 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Bentornato, effettua il login !", str_error, "Accedi", "Esci"); // rimostra il dialog login
  91.             }
  92.             else // INVECE se le password sono uguali
  93.             {
  94.                 DeletePVar(playerid, "login_attemps"); // resetta la variabili dei tantivi di login
  95.                 LoadUserFile(playerid); // carica gli enumeratori alla variabile del proprio playerid
  96.        
  97.                 if(user[playerid][banned]) Kick(playerid);// Se l'account risulta bannato il player verrà kickato
  98.  
  99.                 // sennò lo stessa loggato, e lo spawn
  100.                 user[playerid][logged] = true;
  101.                 SpawnPlayer(playerid);
  102.             }
  103.         }
  104.     }
  105.     return 0;
  106. }
  107.  
  108. public OnPlayerSpawn(playerid)
  109. {
  110.     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
  111.     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
  112.     return 1;
  113. }
  114.  
  115. public OnPlayerDeath(playerid, killerid, reason)
  116. {
  117.     user[playerid][deaths] ++; // aggiunge +1 alla vittimma
  118.     if(killerid != INVALID_PLAYER_ID) user[killerid][kills] ++; // se killerid è stato un player, gli assegna a quel player +1 alle sue kills
  119.     return 1;
  120. }
  121.  
  122. public OnPlayerDisconnect(playerid, reason)
  123. {
  124.     if(user[playerid][logged]) // Se il player è loggato
  125.     {
  126.         // ottiene la posizione, virtualworld, e interior compilando l'enum presente nella variabile del proprio playerID
  127.         GetPlayerPos(playerid, user[playerid][x], user[playerid][y], user[playerid][z]);
  128.         user[playerid][virtualworld] = GetPlayerVirtualWorld(playerid);
  129.         user[playerid][interior] = GetPlayerInterior(playerid);
  130.         SaveUserFile(playerid); //richiama la funzione che salva le informazioni nel file
  131.         new clear_enum[userinfo];
  132.         user[playerid] = clear_enum; // resetta l'enum della variabile del playerid
  133.     }
  134. }
  135.  
  136. //stocks
  137.  
  138. GetUserPath(playerid)
  139. {
  140.     new playername[MAX_PLAYER_NAME], str_ret[31];
  141.  
  142.     GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
  143.     format(str_ret, sizeof(str_ret), USER_PATH, playername); // assegna il playername formulando il PATH
  144.  
  145.     return str_ret; // returna la stringa formattata col path
  146. }
  147.  
  148. SaveUserFile(playerid)
  149. {
  150.     new userpath[31];
  151.     format(userpath, sizeof(userpath), "%s", GetUserPath(playerid));  // ottiene l'userpath nella variabile
  152.  
  153.     // assegna le informazioni presenti nell enumeratore della variabile del playerid sul file
  154.     dini_Set(userpath, "password", user[playerid][password]);
  155.     dini_BoolSet(userpath, "banned", user[playerid][banned]);
  156.     dini_IntSet(userpath, "kills", user[playerid][kills]);
  157.     dini_IntSet(userpath, "deaths", user[playerid][deaths]);
  158.     dini_FloatSet(userpath, "x", user[playerid][x]);
  159.     dini_FloatSet(userpath, "y", user[playerid][y]);
  160.     dini_FloatSet(userpath, "z", user[playerid][z]);
  161.     dini_IntSet(userpath, "virtualworld", user[playerid][virtualworld]);
  162.     dini_IntSet(userpath, "interior", user[playerid][interior]);
  163.  
  164.     return 1;
  165. }
  166.  
  167. LoadUserFile(playerid)
  168. {
  169.     new userpath[31];
  170.     format(userpath, sizeof(userpath), "%s", GetUserPath(playerid)); // ottiene l'userpath nella variabile
  171.  
  172.     // ottiene le informazioni dal file e le immagazzina nell enumeratore presente nella variabile del playerid
  173.     user[playerid][banned] = dini_Bool(userpath, "banned");
  174.     user[playerid][kills] = dini_Int(userpath, "kills");
  175.     user[playerid][deaths] = dini_Int(userpath, "deaths");
  176.     user[playerid][x] = dini_Float(userpath, "x");
  177.     user[playerid][y] = dini_Float(userpath, "y");
  178.     user[playerid][z] = dini_Float(userpath, "z");
  179.     user[playerid][virtualworld] = dini_Int(userpath, "virtualworld");
  180.     user[playerid][interior] = dini_Int(userpath, "interior");
  181.     return 1;
  182. }
  183.  
RAW Paste Data