APLY-ZONE
Bine ai venit vizitatorule, daca vrei sa ai acces la toate resursele forumului trebuie sa detii un cont. Daca nu detii unul deja iti poti face un cont nou aici : http://aply-zone.forumotion.com/register?agreed=true&step=2

Introducere

In jos

Introducere

Mesaj Scris de Versus la data de Dum Aug 11, 2013 9:31 am

Salut eGaming. Am decis sa fac un tutorial login & register folosind Y_INI deoarece unii nu vreti sa va complicati cu mysql. Eu am sa va explic pas cu pas ce trebuie sa faceti ca sa va creeati propriul vostru sistem. Acest tutorial include Y_INI si desigur, login & register cu dialoguri.

Cerinte pentru a urmarii acest tutorial:
-Sa ai cel putin 16 ani ca sa intelegi macar limbajul de programare
-Sa stii cu ce se papa scriptingul si mai ales pawno
-Sa fii atent la fiecare pas

Ce este Y_INI ?

Y_INI este un sistem ce citeste si scrie infor###### intr-un timp foarte rapid. De aceea multi apeleaza la acest sistem creeat de Y_LESS.

Ce aduce nou acest sistem de reading & writer fata de celelalte ?

Y_INI a fost dovedit a fi cel mai rapid cititor de date si cel mai rapid in a scrie o informatie. Dupa cum stim Y_Less este creatorul. Pentru mai multe detalii vizitati aici

Inainte de a incepe tutorialul trebuie sa va instalati include-ul . Odata ce ati descarcat fisierul trebuie sa plasati folderul YSI in pawno/include. apoi desigur introduceti in gamemode printre primele linii " #include <YSI\y_ini> ".

Acum suntem gata sa incepem primul pas, fiti atenti si nu omiteti niciun pas.

Step 1

Definim anumite dialoguri ce ne va ajuta sa creeam login si register

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4

Mai definim niste culori pentru un design mai frumos

#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"

Step 2

Vom folosi o enumerare, pentru a stoca variabilele noastre.

enum pInfo
{
   pPass,
   pCash,
   pAdmin,
   pKills,
   pDeaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Step 3

Acum, vom crea o funcție pentru a încărca datele utilizatorului.

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
   INI_Int("Password",PlayerInfo[playerid][pPass]);
   INI_Int("Cash",PlayerInfo[playerid][pCash]);
   INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
   INI_Int("Kills",PlayerInfo[playerid][pKills]);
   INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
   return 1;
}

Step 4

Acum să creăm o functie de stoc simplu.

stock UserPath(playerid)
{
   new string[128],playername[MAX_PLAYER_NAME];
   GetPlayerName(playerid,playername,sizeof(playername));
   format(string,sizeof(string),PATH,playername);
   return string;
}

Sub stock UserPath adaugati
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
   new length=strlen(buf);
   new s1 = 1;
   new s2 = 0;
   new n;
   for (n=0; n<length; n++)
   {
      s1 = (s1 + buf[n]) % 65521;
      s2 = (s2 + s1)     % 65521;
   }
   return (s2 << 16) + s1;
}

Stocul de mai sus este un simplu "Hasher", și vor fi folosite pentru a codifica parolele utilizatorilor, creditele acordate lui Dracoblue.

Step 5

Vom folosi acum callback-ul "OnPlayerConnect" pentru a verifica dacă jucătorul este înregistrat sau nu.

public OnPlayerConnect(playerid)
{
   if(fexist(UserPath(playerid)))
   {
       INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
       ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
   }
   else
   {
       ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
   }
   return 1;
}

Vom folosi funcția nativ "fexist" pentru a căuta fișierul nostru. Parametrii sunt setati să funcționeze pe stoc-ul pe care l-am creat. Dacă fișierul există, veți primi o "Autentificare" de dialog. Dacă nu, veți primi un dialog de registru.

Step 6

Acum va trebui sa creeam dialogrile pentru login si register

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   switch( dialogid )
   {
       case DIALOG_REGISTER:
       {
           if (!response) return Kick(playerid);
           if(response)
           {
               if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
               new INI:File = INI_Open(UserPath(playerid));
               INI_SetTag(File,"data");
               INI_WriteInt(File,"Password",udb_hash(inputtext));
               INI_WriteInt(File,"Cash",0);
               INI_WriteInt(File,"Admin",0);
               INI_WriteInt(File,"Kills",0);
               INI_WriteInt(File,"Deaths",0);
               INI_Close(File);

               SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
               SpawnPlayer(playerid);
               ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Super! Sistemul tau de login si register merge perfect, dai un relog pt a iti salva datele","Ok","");
           }
       }

       case DIALOG_LOGIN:
       {
           if ( !response ) return Kick ( playerid );
           if( response )
           {
               if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
               {
                   INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                   GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                   ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
               }
               else
               {
                   ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
               }
               return 1;
avatar
Versus
Fondator
Fondator

Mesaje : 151
Puncte : 448
Reputatie : 1
Data de inscriere : 11/08/2013
Localizare : constanta

Vezi profilul utilizatorului

Sus In jos

Re: Introducere

Mesaj Scris de SPeeDStriKe la data de Mier Aug 14, 2013 1:02 pm

Multumim !
avatar
SPeeDStriKe
Membru
Membru

Mesaje : 913
Puncte : 994
Reputatie : 13
Data de inscriere : 12/08/2013
Varsta : 23
Localizare : Bucuresti

Vezi profilul utilizatorului http://aply-zone.hitforum.ro/profile?mode=editprofile

Sus In jos

Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum