Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 0
Nko

pomoc [Pomoc] Ukládání dat hráče

Dotaz

Zdravím, jsem v pawnu začátečník a nedávno jsem si na svůj server přidal login/register systém, ale zjistil jsem, že se mi neukládají data hráče (peníze, úmrtí, zabití, admin level) a nevím si vůbec rady jak bych to mohl opravit. Celý login/register systém jsem udělal na základě tohoto topicu na SA-MP Foru: https://forum.sa-mp.com/showthread.php?t=281736. Popřípadě bych ještě potřeboval vědět, jak uložit pozici hráče. Díky předem všem za pomoc.

Sdílet tento příspěvek


Link to post
Share on other sites

6 odpovědí na tuto otázku

Recommended Posts

  • 0
Author of the topic Odesláno před

Kdyby se někomu nechtěl prohlížet topic, tak zde dodávám ještě kód který mám přímo v pawnu jelikož jsem tam provedl pár změn ale nemyslím si že by měly narušit ukládání dat hráče.

#include <a_samp>
#include <dof2>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

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

public OnFilterScriptExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerConnect(playerid)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    if(DOF2_FileExists(file))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Přihlášení","{FFFFFF}Ahoj! Rádi tě tu opět vidíme, prosím zadej své heslo:","Přihlásit","Zavřít");
    }
    else 
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) Kick(playerid);
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                DOF2_CreateFile(file, inputtext);
                DOF2_SetInt(file, "Kills", 0);
                DOF2_SetInt(file, "Deaths", 0);
                DOF2_SetInt(file, "Money", 5000);
                DOF2_SetInt(file, "AdminLevel", 0);
                DOF2_SaveFile();
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) Kick(playerid);
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                if(DOF2_FileExists(file))
                {
                    if(DOF2_CheckLogin(file,inputtext))
                    {
                        PlayerInfo[playerid][pKills] = DOF2_GetInt(file,"Kills");
                        PlayerInfo[playerid][pDeaths] = DOF2_GetInt(file,"Deaths");
                        PlayerInfo[playerid][pMoney] = DOF2_GetInt(file,"Money");
                        PlayerInfo[playerid][pAdmin] = DOF2_GetInt(file,"AdminLevel");
                        GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
                        return 1;
                    }
                    else
                    {
                        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Nesprávné heslo!","{FFFFFF}Zadal jsi nesprávné heslo! Zadej prosím své heslo:","Přihlásit","Zavřít");
                        return 1;
                    }
                }
            }
        }
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    DOF2_SetInt(file, "Kills",PlayerInfo[playerid][pKills]);
    DOF2_SetInt(file, "Deaths",PlayerInfo[playerid][pDeaths]);
    DOF2_SetInt(file, "Money",PlayerInfo[playerid][pMoney]);
    DOF2_SetInt(file, "AdminLevel",PlayerInfo[playerid][pAdmin]);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;
    PlayerInfo[playerid][pDeaths]++;
    return 1;
}

 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Při ochodu ze serveru (OnPlayerDisconnect()) neuzavíráš ukládání do souboru. Chybí ti:

DOF2_SaveFile();

A taky máš špatně návratové hodnoty (return) ve OnDialogResponse.

Edited by Scydo

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
Author of the topic Odesláno před (upraveno)

Poupravil jsem to tedy ale stále se mi neukládají data, odpojil jsem se ze serveru s 4650$ ale ve složce se mi stále ukazuje 5000$ a při připojení se mi taktéž načte 5000$.

#include <a_samp>
#include <dof2>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

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

public OnFilterScriptExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerConnect(playerid)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    if(DOF2_FileExists(file))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Přihlášení","{FFFFFF}Ahoj! Rádi tě tu opět vidíme, prosím zadej své heslo:","Přihlásit","Zavřít");
    }
    else 
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) Kick(playerid);
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                DOF2_CreateFile(file, inputtext);
                DOF2_SetInt(file, "Kills", 0);
                DOF2_SetInt(file, "Deaths", 0);
                DOF2_SetInt(file, "Money", 5000);
                DOF2_SetInt(file, "AdminLevel", 0);
                DOF2_SaveFile();
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) Kick(playerid);
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                if(DOF2_FileExists(file))
                {
                    if(DOF2_CheckLogin(file,inputtext))
                    {
                        PlayerInfo[playerid][pKills] = DOF2_GetInt(file,"Kills");
                        PlayerInfo[playerid][pDeaths] = DOF2_GetInt(file,"Deaths");
                        PlayerInfo[playerid][pMoney] = DOF2_GetInt(file,"Money");
                        PlayerInfo[playerid][pAdmin] = DOF2_GetInt(file,"AdminLevel");
                        GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
                        return 1;
                    }
                    else
                    {
                        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Nesprávné heslo!","{FFFFFF}Zadal jsi nesprávné heslo! Zadej prosím své heslo:","Přihlásit","Zavřít");
                        return 1;
                    }
                }
            }
        }
    }
    return 0;
}

public OnPlayerDisconnect(playerid, reason)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    DOF2_SetInt(file, "Kills",PlayerInfo[playerid][pKills]);
    DOF2_SetInt(file, "Deaths",PlayerInfo[playerid][pDeaths]);
    DOF2_SetInt(file, "Money",PlayerInfo[playerid][pMoney]);
    DOF2_SetInt(file, "AdminLevel",PlayerInfo[playerid][pAdmin]);
    DOF2_SaveFile();
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;
    PlayerInfo[playerid][pDeaths]++;
    return 1;
}

Přidal jsem DOF2_SaveFile(); a upravil hodnotu return u OnDialogResponse.

Edited by 3nK0

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
DOF2_SetInt(file, "Money",GetPlayerMoney(playerid));

Musíš někde ty peníze ukládat.. Ty ukládáš pouze to, kolik už ten hráč má v PlayerInfo[playerid][pMoney] (což je těch 5000 dokud to neaktualizuješ pomocí GetPlayerMoney)

Edited by DNLS

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
Author of the topic Odesláno před

Ahoj, problém s ukládáním peněz hráče jsem díky DNLS vyřešil, ale stále mi zbývá ukládání úmrtí a zabití.

Kód:

#include <a_samp>
#include <dof2>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

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

public OnFilterScriptExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerConnect(playerid)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    if(DOF2_FileExists(file))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Přihlášení","{FFFFFF}Ahoj! Rádi tě tu opět vidíme, prosím zadej své heslo:","Přihlásit","Zavřít");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) Kick(playerid);
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registrování","{FFFFFF}Ahoj! Vidíme že jsi zde nový, prosím zadej své heslo:","Registrovat","Zavřít");
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                DOF2_CreateFile(file, inputtext);
                DOF2_SetInt(file, "Kills", 0);
                DOF2_SetInt(file, "Deaths", 0);
                DOF2_SetInt(file, "Money", 5000);
                DOF2_SetInt(file, "AdminLevel", 0);
                DOF2_SaveFile();
                SetPlayerPos(playerid, 1682.8357,-2240.7712,13.5469);
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) Kick(playerid);
            if(response)
            {
                new file[64];
                GetPlayerName(playerid,file,sizeof(file));
                format(file,sizeof(file),DOF2_File(file));
                if(DOF2_FileExists(file))
                {
                    if(DOF2_CheckLogin(file,inputtext))
					{
                        PlayerInfo[playerid][pKills] = DOF2_GetInt(file,"Kills");
                        PlayerInfo[playerid][pDeaths] = DOF2_GetInt(file,"Deaths");
                        PlayerInfo[playerid][pMoney] = DOF2_GetInt(file,"Money");
                        PlayerInfo[playerid][pAdmin] = DOF2_GetInt(file,"AdminLevel");
                        GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
                        return 1;
                    }
                    else
                    {
                        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Nesprávné heslo!","{FFFFFF}Zadal jsi nesprávné heslo! Zadej prosím své heslo:","Přihlásit","Zavřít");
                        return 1;
                    }
                }
            }
        }
    }
    return 0;
}

public OnPlayerDisconnect(playerid, reason)
{
    new file[64];
    GetPlayerName(playerid,file,sizeof(file));
    format(file,sizeof(file),DOF2_File(file));
    DOF2_SetInt(file, "Kills",PlayerInfo[playerid][pKills]);
    DOF2_SetInt(file, "Deaths",PlayerInfo[playerid][pDeaths]);
    DOF2_SetInt(file, "Money",GetPlayerMoney(playerid));
    DOF2_SetInt(file, "AdminLevel",PlayerInfo[playerid][pAdmin]);
    DOF2_SaveFile();
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;
    PlayerInfo[playerid][pDeaths]++;
    return 1;
}

 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
On 19. 6. 2020 at 12:22, Nko said:

public OnPlayerDeath(playerid, killerid, reason) { PlayerInfo[killerid][pKills]++; PlayerInfo[playerid][pDeaths]++; return 1; }

Skôr, než sa pokúsiš o PlayerInfo[killerid][pKills]++, by si mal overiť, či killerid nie je INVALID_PLAYER_ID. Inak ti to spadne kvôli neplatnému prístupu do poľa (PlayerInfo[INVALID_PLAYER_ID][pKills], teda PlayerInfo[65535][pKills]) a nezvýši sa ti ani počet smrtí.

Edited by DuFF

Sdílet tento příspěvek


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Odpovědět na dotaz...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Obnovili jsme váš původní obsah (obsah napsaný před zavřením).   Smazat obnovený obsah

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...