Szerző Téma: [Leírás]Egyszerû regisztrációs rendszer  (Megtekintve 7055 alkalommal)

[Leírás]Egyszerû regisztrációs rendszer
« Dátum: 2012. április 06. - 21:03:13 »
+3 Show voters
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/
« Utoljára szerkesztve: 2012. április 26. - 14:16:16 írta mr_rich »

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #1 Dátum: 2012. április 08. - 11:00:29 »
0 Show voters
Szép leírás, kezdõknek nagyon hasznos lehet!  ;)

Kovacs_Bela

  • Vendég
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #2 Dátum: 2012. április 08. - 18:21:58 »
0 Show voters
Ja! Fõleg hogy én nem értettem belõle semmit! XD.. lehet  azért mert haladó vagyok?xD

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #3 Dátum: 2012. április 25. - 15:12:14 »
0 Show voters
: ) Valaki adna nekem egy Linket ahonnan letölthetném a YSI/y_ini includé-t ? mert sehonnan nemtalálom :(

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #4 Dátum: 2012. április 25. - 16:52:22 »
0 Show voters
a ysi-re keress rá..
www.google.com  - \"google a barátod\"

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #5 Dátum: 2012. április 25. - 17:55:59 »
0 Show voters
Jó már nemkell .
am  a Script tele van Hibákkal

[PlayZone]Rulexface

  • Vendég
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #6 Dátum: 2012. április 25. - 17:59:41 »
+1 Show voters
Idézetet írta: Neax_Neax date=1335369359\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19734\" data-ipsquote-contentclass=\"forums_Topic
Jó már nemkell .
am  a Script tele van Hibákkal
 
Ahoz hogy letudt fordítani hibamentesen éppen kell a letöltött cucc is a szerverbe te.. istenek emberiség

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #7 Dátum: 2012. április 25. - 18:33:55 »
0 Show voters
-.-
 megvan minden nem az #include-kkal van a baj hanem a sorokkal .
pl : jatekosinfo \"

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #8 Dátum: 2012. április 26. - 13:01:40 »
0 Show voters
A leírás igényesen legyen leírva, ne úgy hogy \'hogy ezt másold ide, oda, amoda\', \'ezt hagyd békén\' stb![/quote]
Innen idézve. Amit te írtál az inkább leírás, mint tutorial. Egy kezdõ ebbõl kb. semmit nem fog érteni...

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #9 Dátum: 2012. április 26. - 15:55:25 »
0 Show voters
Pl: Én most kezdtem a Scriptelést (már Tudok 45% -ban Kb ) És ebbol nemértek semmit sem :(

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #10 Dátum: 2012. április 26. - 16:10:05 »
0 Show voters
Nem csoda, mivel sehol semmi magyarázat, elõzetes ismeret nélkül nem csoda, ha valaki nem igazán érti.

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #11 Dátum: 2012. április 26. - 18:54:45 »
0 Show voters
Segitenél nekem akkor ? Lécci

Nem elérhető Caesar

  • 109
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #12 Dátum: 2012. június 09. - 20:13:40 »
0 Show voters
Jol leirtad az lenne a kérdésem hogy lehet e keresztezni egy driftszámlálóüval az adatok mentését hogy a drift pontot mentse ?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Leírás]Egyszerû regisztrációs rendszer
« Válasz #13 Dátum: 2012. június 09. - 21:19:06 »
0 Show voters
Csak egy észrevétel.
Jelen esetben ha valaki meghal úgy, hogy nem játékos ölte meg (killerid = INVALID_PLAYERI_ID), akkor túlcsordulás lesz, mivel a Jatekosinfo elsõ cella mérete MAX_PLAYERS, de viszont itt 65535 lesz. (pKills-re értednõ..)

[Leírás]Egyszerû regisztrációs rendszer
« Válasz #14 Dátum: 2012. augusztus 25. - 21:37:27 »
0 Show voters
Nem értem mi a baj, beraktam(és meg is írtam), mind2 próbálkozásnál betölt, nem hoz be semmit csak a  skinválasztót a betöltõhelynél, és ha rámegyek hogy spawn, elkezd villogni a képernyõ és azt irja: \"stay within the worlds\" vagy valami hasonló..

Dupla hozzászólás automatikusan összefûzve. ( 2012. augusztus 26. - 18:38:22 )

És hogyha én a sima pénzel akarom megoldani? Arról tudnál írni?
« Utoljára szerkesztve: 2012. augusztus 26. - 18:38:22 írta Extasy449 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal