Portal SAMP
[Ajuda] Bug no sistema de carregamento - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Bug no sistema de carregamento (/showthread.php?tid=2919)



Bug no sistema de carregamento - Apelaum - 22/10/2022

Olá, venho desenvolvendo meu servidor, mas recentemente um problema tem perturbado minha mente, quando um jogador desconecta do servidor e outro entra, este cara que acabou de entrar tem o dinheiro modificado para o mesmo valor do cara que saiu, já analisei o código todo mas não consigo encontrar o problema.
Código:
enum E_PLAYER_DATA
{
    Senha[MAX_PASSWORD],
    UltimoLogin[24],

    pDinheiro,
    pLevel,
    Skin
};

new Player[MAX_PLAYERS][E_PLAYER_DATA];

formatFile(playerid)
Código:
{
Código:
    new Arquivo[440];
Código:
    format(Arquivo, sizeof Arquivo, "Contas/%s.ini", PlayerName(playerid));
Código:
    return Arquivo;
Código:
}

SPRG::SavePlayerData(playerid)
{
    if(Player[playerid][Logado] == true)
    {
        if(Player[playerid][pTutorial] == true)
        {
            if(DOF2::FileExists(formatFile(playerid)))
            {
                format(Player[playerid][UltimoLogin], 24, formatTime());
                Player[playerid][pDinheiro] = GetPlayerMoneyEx(playerid);
                 Player[playerid][pLevel] = GetPlayerScore(playerid);

                DOF2::SetString(formatFile(playerid), "ÚltimoLogin", Player[playerid][UltimoLogin]);
                DOF2::SetInt(formatFile(playerid), "Dinheiro", Player[playerid][pDinheiro]);
                DOF2::SetInt(formatFile(playerid), "Level", Player[playerid][pLevel]);
            }
        }
    }
}

SPRG::CarregarPlayer(playerid)
{
    if(DOF2::FileExists(formatFile(playerid)))
    {
        //Load
        GivePlayerMoneyEx(playerid, [color=#333333][size=small][font=Monaco, Consolas, Courier, monospace]Player[playerid][pDinheiro] = DOF2::GetInt(formatFile(playerid), "Dinheiro")[/font][/size][/color]);
        SetPlayerScore(playerid, [color=#333333][size=small][font=Monaco, Consolas, Courier, monospace]DOF2::GetInt(formatFile(playerid), "Level")[/font][/size][/color]);
    }
}



RE: Bug no sistema de carregamento - Carlos Victor - 22/10/2022

Você precisa resetar as variáveis para não passar pro próximo playerid.

Ex:
Código:
public OnPlayerDisconnect(playerid, reason)
{
    new dummyVars[E_PLAYER_DATA];
    Player[playerid] = dummyVars;
    return 1;
}
Eu basicamente criei uma variável com os valores padrões da enum E_PLAYER_DATA e em seguida setei esses valores padrões na variável do jogador Player, assim ela recebendo os valores padrões da enum.

Você pode também resetar variável por variável, desse jeito:
Código:
public OnPlayerDisconnect(playerid, reason)
{
    Player[playerid][Senha] = EOS;
    Player[playerid][UltimoLogin] = EOS;

    Player[playerid][pDinheiro] = 0;
    Player[playerid][pLevel] = 0;
    Player[playerid][Skin] = 0;
    return 1;
}

E pra facilitar, você também pode criar uma função pra chamar ela pra resetar. resetData(playerid)... Coloca as funções acima dentro da função.


RE: Bug no sistema de carregamento - Apelaum - 22/10/2022

Já fiz isso mas ainda sim esse bug continua, acredito que o bug pode ser por causa da y_hooks ou a include servermoneyGM


RE: Bug no sistema de carregamento - Carlos Victor - 22/10/2022

Bom, remova-os e faça o teste.


RE: Bug no sistema de carregamento - Apelaum - 22/10/2022

Consegui, muito obrigado.
Caso alguém tenha mesmo o problema é só resetar as variáveis no OnPlayerConnect e OnPlayerDisconnect.


RE: Bug no sistema de carregamento - Carlos Victor - 22/10/2022

Boa, é exatamente isso que eu te passei, eu geralmente curto zerar os dados quando o jogador desloga, pra mim fica visualmente e racional fazer isso quando o jogador sai do servidor.


RE: Bug no sistema de carregamento - Apelaum - 22/10/2022

Realmente, fiz isto mas acho que minha GM é contraria de todos kkkkkkkk