GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: ppatrik2012 - 2013. április 14. - 18:53:31

Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 14. - 18:53:31
hellósztok, csináltam enum-mal egy Ölés/Halál dolgot. És nekem az kellene, mert ha ugye most ölök, akkor +1 ölést számlál, ha halok +1 halál.. Na mind1, nekem az kellene, hogy ezt mentse is, még szerver restartkor is.  Elég fontos lenne, mert még alapulóban van pár fontos illetve komoly rendszerem, amihez ez az 1 dolog kellene..
Cím: enum rendszerbeli mentés.
Írta: ZyZu. - 2013. április 14. - 19:01:42
Parancsolj: http://sampforum.hu/index.php?topic=36537.0
Cím: enum rendszerbeli mentés.
Írta: ninjo98 - 2013. április 14. - 19:02:33
Én ebbõl tanultam meg editelni :
http://forum.sa-mp.com/showthread.php?t=348898&highlight=Textdraw+kill
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 14. - 19:56:49
Köszönöm mind2-õtöknek, de valahogy nem akar sikerülni.. Nekem csak annyi kellene igazából ebbõl ZyZu, hogy ha felcsatlakozik létrehozzon egy fájlt a nevével... Onnantól megoldanám, de itt:
new nev[MAX_PLAYER_NAME];
new file[100];
 
public OnPlayerConnect(playerid)
{
        new nev[MAX_PLAYER_NAME];
        new file[100];
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file)) {
        dini_Create(file)
        return 1;
}

 
Így ez a lényeg, de nekem nem a játékos nevével hozza létre a file-t, hanem \"file\" néven, nem értem miért..
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 15. - 19:50:10

enum pInformacio
{
pPenz
}
new pInfo[MAX_PLAYERS][pInformacio];
new nev[MAX_PLAYER_NAME];
new file[128];
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file))
        {
                dini_Create(file)
                dini_Set(file, \"Penz\", \"0\");
        }
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}

 
Tessék. Így létrehozza 0 értékkel akkor, ha nem létezik, és betölti a pPenz tárolóba, ha már létezik.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 15. - 21:12:37
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file))
        {
                dini_Create(file)
                dini_Set(file, \"Penz\", \"0\");
        }
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
          dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
          return 1;
}

 
Köszi, de most én kicsit átírtam, de én egy \"komplett\" rendszert írtam, amit nem publikálnék. Igazából itt van ez a rész... Nekem teljesen így van más kód nevekkel + ugye az értéke megvan adva stb stb.. Minden király, lementi az adatot, de betöltéskor ha már létezik is az a név, akkor az éppen \"Pénz\"-t átírja 0 ára... Pl én hiába írom át 50 ezerre.. Ezt nem értem.
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 16. - 14:12:32
Idézetet írta: ppatrik2012 date=1366053157\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"36181\" data-ipsquote-contentclass=\"forums_Topic

public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file))
        {
                dini_Create(file)
                dini_Set(file, \"Penz\", \"0\");
        }
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
          dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
          return 1;
}

 
Köszi, de most én kicsit átírtam, de én egy \"komplett\" rendszert írtam, amit nem publikálnék. Igazából itt van ez a rész... Nekem teljesen így van más kód nevekkel + ugye az értéke megvan adva stb stb.. Minden király, lementi az adatot, de betöltéskor ha már létezik is az a név, akkor az éppen \"Pénz\"-t átírja 0 ára... Pl én hiába írom át 50 ezerre.. Ezt nem értem.
 
Szivesen.
Én úgy csinálnám, hogy írnék egy alap dialogos regisztrációt, és nem úgy lenne, hogy kapcsolódáskor hozza létre a fájlt, hanem regisztrációkor. Ha pedig már regisztrált, csak beolvasná, és csak belépne egy dialogon át.
 

// Ezt nem én írtam, innen, a fórumról van. De azért mûködnie kéne, ahogy ránéztem, hiszen én is hasonlót használok.
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>
new File[128];
new PW[64];
new WPW[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
        if(!fexist(File))
        {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Oké\", \"Mégse\");
        }
        else
        {
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad!\", \"Rendben\", \"Mégse\");
        }
       
        return 1;
       
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 1)
        {
                if(!response) Kick(playerid);
               
                        if(strlen(inputtext) == 0)
                        {
                                ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Rendben\", \"Mégsem\");
                                return 0;
                        }
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                        if(!fexist(File))
                        {
                                dini_Create(File);
                               
                                dini_Set(File, \"Pasword\", inputtext);
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad.\", \"Rendben\", \"Mégsem\");
                        }
        }
       
        if(dialogid == 2)
        {
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                if(!response)
                        {
                                Kick(playerid);
                        }
                        format(PW, 64, \"%s\", dini_Get(File, \"Password\"));
                        if(!strcmp(inputtext, PW, false))
                        {
                            SendClientMessage(playerid, -1, \"Sikeres belépés! Nyomj a \'SPAWN\' gombra!\");
                        }
                        else
                        {
                            WPW[playerid] ++;
                                SendClientMessage(playerid, -1, \"Rossz jelszó!\");
                                if(WPW[playerid] == 3)
                            {
                                Kick(playerid);
                                }
                               
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad\", \"Oké\", \"Mégse\");
                        }
        }
        return 1;
}
stock Nev(playerid)
{
        new Neve[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Neve, sizeof(Neve));
        return Neve;
}

 
Szerkeszd át úgy, ahogy kell neked. Ha a játékos nincs még regisztrálva, akkor elõhozza a regisztrációs dialogot, ha pedig már be van, akkor elõhozza a belépés dialogot. Ha ezt használod, akkor itt a megfelelõ adat betöltés:
 
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file)){}
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}

 
Elméletileg így van nálad, tehát Player mappában, a pénz a Penz sorban, szóval akkor ezt nem is kell szerkesztened.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 16. - 15:26:01
Idézetet írta: Dfoglalo date=1366114352\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"36181\" data-ipsquote-contentclass=\"forums_Topic


 
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file))
        {
                dini_Create(file)
                dini_Set(file, \"Penz\", \"0\");
        }
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
          dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
          return 1;
}

 
Köszi, de most én kicsit átírtam, de én egy \"komplett\" rendszert írtam, amit nem publikálnék. Igazából itt van ez a rész... Nekem teljesen így van más kód nevekkel + ugye az értéke megvan adva stb stb.. Minden király, lementi az adatot, de betöltéskor ha már létezik is az a név, akkor az éppen \"Pénz\"-t átírja 0 ára... Pl én hiába írom át 50 ezerre.. Ezt nem értem.
 
Szivesen.
Én úgy csinálnám, hogy írnék egy alap dialogos regisztrációt, és nem úgy lenne, hogy kapcsolódáskor hozza létre a fájlt, hanem regisztrációkor. Ha pedig már regisztrált, csak beolvasná, és csak belépne egy dialogon át.
 

// Ezt nem én írtam, innen, a fórumról van. De azért mûködnie kéne, ahogy ránéztem, hiszen én is hasonlót használok.
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>
new File[128];
new PW[64];
new WPW[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
        if(!fexist(File))
        {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Oké\", \"Mégse\");
        }
        else
        {
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad!\", \"Rendben\", \"Mégse\");
        }
       
        return 1;
       
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 1)
        {
                if(!response) Kick(playerid);
               
                        if(strlen(inputtext) == 0)
                        {
                                ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Rendben\", \"Mégsem\");
                                return 0;
                        }
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                        if(!fexist(File))
                        {
                                dini_Create(File);
                               
                                dini_Set(File, \"Pasword\", inputtext);
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad.\", \"Rendben\", \"Mégsem\");
                        }
        }
       
        if(dialogid == 2)
        {
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                if(!response)
                        {
                                Kick(playerid);
                        }
                        format(PW, 64, \"%s\", dini_Get(File, \"Password\"));
                        if(!strcmp(inputtext, PW, false))
                        {
                            SendClientMessage(playerid, -1, \"Sikeres belépés! Nyomj a \'SPAWN\' gombra!\");
                        }
                        else
                        {
                            WPW[playerid] ++;
                                SendClientMessage(playerid, -1, \"Rossz jelszó!\");
                                if(WPW[playerid] == 3)
                            {
                                Kick(playerid);
                                }
                               
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad\", \"Oké\", \"Mégse\");
                        }
        }
        return 1;
}
stock Nev(playerid)
{
        new Neve[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Neve, sizeof(Neve));
        return Neve;
}

 
Szerkeszd át úgy, ahogy kell neked. Ha a játékos nincs még regisztrálva, akkor elõhozza a regisztrációs dialogot, ha pedig már be van, akkor elõhozza a belépés dialogot. Ha ezt használod, akkor itt a megfelelõ adat betöltés:
 
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file)){}
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}

 
Elméletileg így van nálad, tehát Player mappában, a pénz a Penz sorban, szóval akkor ezt nem is kell szerkesztened.
 
[/quote]
Egyenlõre nem akarok nagyokba vágni, de azt írtad, hogy az én rendszeremnek mûködnie kéne, pedig amikor fellépek a szerverre 0 ázza a pénzt, hiába volt az elõtt nála vagy 50000... Szal valami bugos.
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 16. - 15:31:07
Idézetet írta: ppatrik2012 date=1366118761\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"36181\" data-ipsquote-contentclass=\"forums_Topic


 

 
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file))
        {
                dini_Create(file)
                dini_Set(file, \"Penz\", \"0\");
        }
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
          dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
          return 1;
}

 
Köszi, de most én kicsit átírtam, de én egy \"komplett\" rendszert írtam, amit nem publikálnék. Igazából itt van ez a rész... Nekem teljesen így van más kód nevekkel + ugye az értéke megvan adva stb stb.. Minden király, lementi az adatot, de betöltéskor ha már létezik is az a név, akkor az éppen \"Pénz\"-t átírja 0 ára... Pl én hiába írom át 50 ezerre.. Ezt nem értem.
 
Szivesen.
Én úgy csinálnám, hogy írnék egy alap dialogos regisztrációt, és nem úgy lenne, hogy kapcsolódáskor hozza létre a fájlt, hanem regisztrációkor. Ha pedig már regisztrált, csak beolvasná, és csak belépne egy dialogon át.
 

// Ezt nem én írtam, innen, a fórumról van. De azért mûködnie kéne, ahogy ránéztem, hiszen én is hasonlót használok.
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>
new File[128];
new PW[64];
new WPW[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
        if(!fexist(File))
        {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Oké\", \"Mégse\");
        }
        else
        {
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad!\", \"Rendben\", \"Mégse\");
        }
       
        return 1;
       
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 1)
        {
                if(!response) Kick(playerid);
               
                        if(strlen(inputtext) == 0)
                        {
                                ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Regisztráció\", \"Írj be egy tetszõleges jelszót!\", \"Rendben\", \"Mégsem\");
                                return 0;
                        }
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                        if(!fexist(File))
                        {
                                dini_Create(File);
                               
                                dini_Set(File, \"Pasword\", inputtext);
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad.\", \"Rendben\", \"Mégsem\");
                        }
        }
       
        if(dialogid == 2)
        {
                        format(File, sizeof(File), \"User/%s.ini\", Nev(playerid));
                if(!response)
                        {
                                Kick(playerid);
                        }
                        format(PW, 64, \"%s\", dini_Get(File, \"Password\"));
                        if(!strcmp(inputtext, PW, false))
                        {
                            SendClientMessage(playerid, -1, \"Sikeres belépés! Nyomj a \'SPAWN\' gombra!\");
                        }
                        else
                        {
                            WPW[playerid] ++;
                                SendClientMessage(playerid, -1, \"Rossz jelszó!\");
                                if(WPW[playerid] == 3)
                            {
                                Kick(playerid);
                                }
                               
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Belépés\", \"Írd be a jelszavad\", \"Oké\", \"Mégse\");
                        }
        }
        return 1;
}
stock Nev(playerid)
{
        new Neve[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Neve, sizeof(Neve));
        return Neve;
}

 
Szerkeszd át úgy, ahogy kell neked. Ha a játékos nincs még regisztrálva, akkor elõhozza a regisztrációs dialogot, ha pedig már be van, akkor elõhozza a belépés dialogot. Ha ezt használod, akkor itt a megfelelõ adat betöltés:
 
public OnPlayerConnect(playerid)
{
        GetPlayerName(playerid,nev,sizeof(nev));
        format(file,sizeof(file),\"/Player/%s.ini\",nev);
        if(!dini_Exists(file)){}
        else
        {
                dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]);
        }
        return 1;
}

 
Elméletileg így van nálad, tehát Player mappában, a pénz a Penz sorban, szóval akkor ezt nem is kell szerkesztened.
 
[/quote]
Egyenlõre nem akarok nagyokba vágni, de azt írtad, hogy az én rendszeremnek mûködnie kéne, pedig amikor fellépek a szerverre 0 ázza a pénzt, hiába volt az elõtt nála vagy 50000... Szal valami bugos.
 
[/quote]
Az ettõl volt:
 
dini_Set(file, \"Penz\", \"0\");

 
Én olyat használok, ahol a regisztrációval hozza létre, és csak betölti, tehát nem hozza létre belépéskor. Ezért nem tudhattam, hogy mindig átállítja 0-ra. Amit nem értek, hiszen elméletileg csak akkor kellene beállítani 0-ra, amikor nem létezik a fájl.
 

        if(!dini_Exists(file)) // Ha nem (! a tagadás) létezik a file, akkor csinálja ezeket.
        {
                dini_Create(file) // Létrehozza,
                dini_Set(file, \"Penz\", \"0\"); // átírja.
        }
        else // De ha létezik,
        {
               dini_IntSet(file, \"Penz\", pInfo[playerid][pPenz]); // beállítja a fájlban található Penz sor értékét a pPenz tárolóba, méghozzá az adott playernek.
        }

 
Ez az elmélet, de valamiért átállítja mindig - ezek szerint. Alapból nem hibás a kód, tehát én sem értem a dolgot.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 16. - 15:56:23
Ez gáz, mert én sem tudom mi lehet.. Valaki? Ötlet?
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 16. - 16:24:40
Egyszer úgyis beraknád a reget... Szóval szerintem most.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 16. - 20:38:15
Igen, de elõször megakarok tanulni egy normál szinten scriptelni, dini használat.. Stb stb.. Nem copy módot akarok. De ebben a cuccban tudna valaki segíteni?
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 17. - 13:28:41
Az egyáltalán nem copy, ha írsz egy dialogos reget. De mivel ugyanazt készítenéd el, mint amit publikáltak a fórumon, könnyebb a dolgod azt átírni. És az is full dini (meg dialog), tehát tanulod vele a szkriptelést, meg a dini használatát is.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 17. - 14:05:06
mind1, egyenlõre nincs szükségem reg rendszerre.
Cím: enum rendszerbeli mentés.
Írta: Dfoglalo - 2013. április 17. - 17:23:21
Pedig ugyanazt csinálja, mint amikor feljön a szeróra, és létrehozza a fájlt, csak legalább kicsit biztonságosabb a jelszó miatt :D Nem tudják ellopni így a másik cuccait, ennyi. Na mind1, te tudod, én csak ajánlottam.
Nyilván ezen már nincs mit vitázni, zárjuk le ezt a beszélgetést a regrõl.
Cím: enum rendszerbeli mentés.
Írta: ppatrik2012 - 2013. április 19. - 12:37:50
Igen, de az eredeti gondban valaki tudna segíteni? Fontos lenne.

Dupla hozzászólás automatikusan összefûzve. ( 2013. április 19. - 19:51:57 )

Megoldottam, nagy nehezen rájöttem hogy mivan és logalizáltam azt xd Köszönöm mindenkinek aki segített/próbált segíteni!