Sziasztok. Nemrég kezdtem el foglalkozni a y_ini include fájlal és egy Regisztrációs script tutorialt írtam róla.
Elõször is kezdjük az include hozzáadásával(.pwn fájl elejére): 
#include <YSI\\y_ini>
 Szükségünk lesz még: sscanf, zcmd és dudb include fájlokra is. (parancsok és jelszókhoz) 
#include <dudb>
#include <sscanf2>
#include <zcmd>
 Most definiáljuk a regisztráció és belépés dialogot. 
#define DIALOG_REG 1 //regisztrációs dialog
#define DIALOG_BELEP 2 //belépés dialog
 Definiáljuk a fájlok mentési/beolvasási helyét. 
#define PATH \"/enmodom/%s.ini\" //scriptfiles/enmodom mappát hozzuk létre, és ide fogja menteni a regisztrált játékosok adatait
 Egy enumba tároljuk el a változókat. 
enum iKarakter
{
    pPass, //jelszó
    pCash, //pénzünk
    pKills, //ölések száma
    pDeaths, //halálok száma
    pScore //pontunk
}
new Jatekosinfo[MAX_PLAYERS][iKarakter];
 Létrehozunk egy funkciót a játékos adatainak betöltésére: 
forward Adattoltes_data(playerid,name[],value[]);
public Adattoltes_data(playerid,name[],value[])
{
    INI_Int(\"Password\",Jatekosinfo[playerid][pPass]);
    INI_Int(\"Cash\",Jatekosinfo[playerid][pCash]);
    INI_Int(\"Kills\",Jatekosinfo[playerid][pKills]);
    INI_Int(\"Deaths\",Jatekosinfo[playerid][pDeaths]);
    INI_Int(\"Score\",Jatekosinfo[playerid][pScore]);
    return 1;
}
 Hozzunk létre egy sima stock funkciót: 
stock Jatekosadatok(playerid)
{
new string[128],jatekosnev[MAX_PLAYER_NAME]; //létre hozunk egy szövegtárolót és a játékos nevének is egy tárolót
GetPlayerName(playerid,jatekosnev,sizeof(jatekosnev)); //lekérdezzük a játékos nevét
format(string,sizeof(string),PATH,jatekosnev); //megformáljuk az .ini fájl nevét
return string;
}
 Most megnézzük, ha a játékos csatlakozik, regisztrálva van-e vagy most kell neki. 
public OnPlayerConnect(playerid)
{
    if(fexist(Jatekosadatok(playerid)))//\"fexist\" funkciót használjuk a fájl keresésére, hogy regisztrálva van e már a játékos aki csatlakozott.
    {
        INI_ParseFile(Jatekosadatok(playerid), \"Adattoltes_%s\", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_BELEP, DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Írd be a jelszód a belépéshez\",\"Belép\",\"Bezár\");
    }
    else//ha nincs regisztrálva
    {
        ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT,\"Regisztráció folyamatban\",\"Írj be egy jelszót a regisztrációhoz!\",\"Regisztrálás\",\"Bezár\");
    }
    return 1;
}
 Kialakítjuk a dialogokat: 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REG:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT, \"Regisztráció folyamatban\",\"Helytelen jelszót írtál be.\\nÍrj be egy jelszót a regisztrációhoz\",\"Regisztrálás\",\"Bezár\");
                new INI:File = INI_Open(Jatekosadatok(playerid));//megnyitjuk a játékos fájlját.
                INI_SetTag(File,\"data\");//fájl elõtagát állíthatjuk be
                INI_WriteInt(File,\"Password\",udb_hash(inputtext)); //jelszót elmentjük
                INI_WriteInt(File,\"Cash\",0); //Pénz beállítás
                INI_WriteInt(File,\"Kills\",0); //Ölések száma 
                INI_WriteInt(File,\"Deaths\",0);//Halálozások száma
        INI_WriteInt(File,\"Score\",0);//Pont száma
                INI_Close(File);
                Jatekosinfo[playerid][pCash]=10000; //Megadjuk a kezdõpénzt
            }
        }
        case DIALOG_BELEP:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == Jatekosinfo[playerid][pPass])//Ha a beírt jelszó egyezik a fájlban tároltéval.
                {
                    INI_ParseFile(Jatekosadatok(playerid), \"Adattoltes_%s\", .bExtra = true, .extra = playerid); //betöltjük a játékos adatait a fájlból.
                }
                else //ha nem egyezik a jelszó
                {
                    ShowPlayerDialog(playerid, DIALOG_BELEP, DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Helytelen jelszó.\\nÍrd be a jelszód a belépéshez.\",\"Belép\",\"Bezár\");
                }
                return 1;
            }
        }
    }
    return 1;
}
 Most mentsük el az adatokat, ha a játékos kilép: 
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(Jatekosadatok(playerid));
    INI_SetTag(File,\"data\");
    INI_WriteInt(File,\"Cash\",Jatekosinfo[playerid][pCash]);
    INI_WriteInt(File,\"Kills\",Jatekosinfo[playerid][pKills]);
    INI_WriteInt(File,\"Deaths\",Jatekosinfo[playerid][pDeaths]);
    INI_WriteInt(File,\"Score\",Jatekosinfo[playerid][pScore]);
    INI_Close(File);
    return 1;
}
 Írjuk meg, hogy ha meghal a játékos vagy megöl valakit, akkor növelje a statisztikát 
public OnPlayerDeath(playerid, killerid, reason)
{
    Jatekosinfo[killerid][pKills]++; //Ölések számát megnöveljük 1el
    Jatekosinfo[playerid][pDeaths]++;//Halálozások számát megnöveljük 1el
    return 1;
}
 Pénz használata: 
new Text:penzem; //Textdraw a pénznek
 OnPlayerConnect-hez írjuk be a textdrawra vonatkozó funkciókat: 
        penzem = TextDrawCreate(500,140,\"Cash: 0\");
TextDrawFont(penzem,3);
TextDrawLetterSize(penzem,0.2,1.9);
TextDrawColor(penzem,0x00FF00FF);
TextDrawSetOutline(penzem,true);
TextDrawSetProportional(penzem,true);
TextDrawSetShadow(penzem,1);
 OnPlayerDisconnect-hez: 
TextDrawDestroy(penzem);
 Regisztráció és Belépés után adjuk hozzá a következõ módon: 
SetTimerEx(\"cashupdate\",3500,true,\"i\",playerid); //elindítunk egy timert a pénz frissítésére 3,5mp-enként
TextDrawShowForPlayer(playerid, penzem); //megjelnítjük a textdrawot
 public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REG:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT, \"Regisztráció folyamatban\",\"Helytelen jelszót írtál be.\\nÍrj be egy jelszót a regisztrációhoz\",\"Regisztrálás\",\"Bezár\");
                new INI:File = INI_Open(Jatekosadatok(playerid));//megnyitjuk a játékos fájlját.
                INI_SetTag(File,\"data\");//fájl elõtagát állíthatjuk be
                INI_WriteInt(File,\"Password\",udb_hash(inputtext)); //jelszót elmentjük
                INI_WriteInt(File,\"Cash\",0); //Pénzünk
                INI_WriteInt(File,\"Kills\",0); //Ölések száma
                INI_WriteInt(File,\"Deaths\",0);//Halálozások száma
           INI_WriteInt(File,\"Score\",0);//Pont száma
                INI_Close(File);
      Jatekosinfo[playerid][pCash]=10000;//kezdõpénzt adunk
                SetTimerEx(\"cashupdate\",3500,true,\"i\",playerid); //elindítunk egy timert a pénz frissítésére 3,5mp-enként
      TextDrawShowForPlayer(playerid, penzem); //megjelnítjük a textdrawot
            }
        }
        case DIALOG_BELEP:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == Jatekosinfo[playerid][pPass])//Ha a beírt jelszó egyezik a fájlban tároltéval.
                {
                    INI_ParseFile(Jatekosadatok(playerid), \"Adattoltes_%s\", .bExtra = true, .extra = playerid); //betöltjük a játékos adatait a fájlból.
                    SetTimerEx(\"cashupdate\",3500,true,\"i\",playerid); //elindítunk egy timert a pénz frissítésére 3,5mp-enként
         TextDrawShowForPlayer(playerid, penzem); //megjelnítjük a textdrawot
      }
                else //ha nem egyezik a jelszó
                {
                    ShowPlayerDialog(playerid, DIALOG_BELEP, DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Helytelen jelszó.\\nÍrd be a jelszód a belépéshez.\",\"Belép\",\"Bezár\");
                }
                return 1;
            }
        }
    }
    return 1;
}
 //Pénzfrissítõ funkció 
forward cashupdate(playerid);
public cashupdate(playerid)
{
new penzstring[40];//tároló a pénz kiírására
new enpenzem = Jatekosinfo[playerid][pCash];//változó a pénzünknek
format(penzstring,sizeof(penzstring),\"Cash: %d\",enpenzem); //megformázzuk a szöveget
TextDrawSetString(penzem,penzstring);
return 1;
}
 Most pedig egy alap parancs, hogy megnézzük, hogy tudjuk kezelni a pénzünket. 
CMD:fegyvert(playerid,params[])
{
new ammoam;//töltény változó
new gunid;//fegyver id-nek változó
if(sscanf(params,\"ii\",gunid,ammoam)) return SendClientMessage(playerid,0xAA3333AA,\"Használat: /fegyvert <fegyverid> <töltény>\");//ellenõrizzük, hogy jól írta be a parancsot
if((ammoam*35) > Jatekosinfo[playerid][pCash]) return SendClientMessage(playerid,0xAA3333AA,\"Nincs elég pénzed!\"); //ellenõrizzük van-e elég pénze (töltény 35Pénzbe kerül darabja)
GivePlayerWeapon(playerid,gunid,ammoam);//fegyvert adunk a játékosnak
Jatekosinfo[playerid][pCash]=Jatekosinfo[playerid][pCash]-(ammoam*35);//levonjuk a töltények árát
return 1;
}
 Letöltés teljesbe: 
http://www.solidfiles.com/d/e979b7b1dd/