Portal SAMP
[Ajuda] Incrementando Dinheiro Ao Logar - 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] Incrementando Dinheiro Ao Logar (/showthread.php?tid=388)



Incrementando Dinheiro Ao Logar - Burunu - 26/11/2020

Olá Pessoal, no meu sistema de cadastro/login possuem as funções de carregar e salvar a conta do player em DOF2. Porém um erro que veio a acontecer, é que  cada vez que o player loga, ele recebe a mais (EX: Cada player começa com 50k, e ao logar ele recebe mais 50k e assim sucessivamente). Ja repassei o código varias vezes porém não acho nada de errado. Se alguém souber e poder me ajudar ficarei agardecido!

Código:
#define Contas "Contas/%s.ini" //armazenamento dos dados na pasta contas//
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
#define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)

#define Dialog_Registro      0 //DIALOG DO REGISTRO
#define Dialog_Login           1 //DIALOG DO LOGIN

enum InfoPlayer{
    Senha,
    Dinheiro
};

new Player[MAX_PLAYERS][InfoPlayer]; //VARIAVEL QUE ARMAZENA OS DADOS DO PLAYER(ENUM)
new Erro[MAX_PLAYERS]; //ARMAZENA O ERRO DA SENHA

Código:
public OnGameModeExit()
{
    DOF2_Exit(); //Finalizando a include DOF2//

    return 1;
}

public OnPlayerRequestClass(playerid, classid){

    if(DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){ //verifica se tem conta ou não

        ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "{B40404}SanAndreas Vida Real |Entrar|", "{FFFFFF}Bem-Vindo(a) de Volta ao Nosso Servidor!\n\nPor Favor Digite a Sua Senha Para Entrar!","Entrar","Sair");

    }else{

        ShowPlayerDialog( playerid, Dialog_Registro, DIALOG_STYLE_PASSWORD, "{B40404}SanAndreas Vida Real |Cadastro|", "{FFFFFF}Seja Muito Bem-Vindo(a) Em Nosso Servidor!\n\nPor Favor Insira uma Senha Segura Para Se Cadastrar!", "Cadastrar","Sair");
    }
   
    InterpolateCameraPos(playerid, 1441.803222, -1725.681884, 14.531348, 1561.565307, -1709.853637, 60.931102, 10000);
    InterpolateCameraLookAt(playerid, 1445.357421, -1728.683471, 16.363838, 1557.271606, -1711.242919, 58.778495, 10000);

    return 1;
}

Código:
public OnPlayerConnect(playerid)
{
    LoadPlayer(playerid); //Carrega a Conta do Player

    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SavePlayer(playerid); //SALVA A CONTA DO PLAYER

    return 1;
}

Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid){
        case Dialog_Registro:{
            if( response ){
            if( strlen( inputtext ) < 5 || strlen( inputtext ) > 20 || !strlen( inputtext ) ){
                  ShowPlayerDialog( playerid, Dialog_Registro ,DIALOG_STYLE_PASSWORD, "SanAndreas Vida Real |Registro|", "Sua Senha Deve Conter No Mínimo 5 Caracteres!\nE No Máximo 20!\nTente Novamente!","Registrar","Sair" );
                return 1;
            }

            // Criar Arquivo E Colocar Os Valores //
            DOF2_CreateFile( GetPlayerArquivo( playerid ) );
            DOF2_SetString( GetPlayerArquivo( playerid ),"Senha", inputtext );
            DOF2_SetInt( GetPlayerArquivo( playerid ), "Dinheiro",50000);
         
            SendClientMessage(playerid, 0x19B519FF, "{FFFFFF}|SanAndreas Vida Real| Registrado Com Sucesso!.");

            ShowPlayerDialog( playerid, Dialog_Login ,DIALOG_STYLE_PASSWORD, "{FFFFFF}SanAndreas Vida Real |Login|", "Digite Sua Senha Registrada Abaixo Para Fazer O Login!","Logar","Sair" );

         }
         
         else Kick( playerid );
    }

    case Dialog_Login:{
        if( response ){
            if( strlen( inputtext ) < 5 || strlen( inputtext ) > 20 || !strlen( inputtext ) ){

                   SendClientMessage( playerid, -1, "{19B519}|SanAndreas Vida_Real|» {FFFFFF}Digite Sua Senha Corretamente!." );
                   ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "|SanAndreas Vida_Real| Login","Digite Sua Senha Para Entrar!","Entrar","Sair");
                return 1;
            }
           
            if( strcmp( inputtext, DOF2_GetString( GetPlayerArquivo( playerid ), "Senha" )) == 0 ){
                LoadPlayer( playerid );
               
                SendClientMessage(playerid, 0x19B519FF, "SanAndreas Vida Real » {FFFFFF}Logado Com Sucesso!.");

            }else{
                Erro[ playerid ] ++; // Aquivo adiciona + 1 a variavel erro...
                if ( Erro[ playerid ] == 5 ){
                    SavePlayer(playerid);
                    Kick ( playerid );
                    } // se a variavel chegar a 5, kicka o player pois ele errou 5 vezes a senha.

                SendClientMessage( playerid, -1, "{FFFFFF}|SanAndreas Vida Real| Digite Sua Senha Corretamente!." );
                ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "|SanAndreas Vida Real Login|","Digite Sua Senha Para Entrar!","Entrar","Sair");

                }

            }else{

             SavePlayer( playerid );
             Kick( playerid );

            }
        }

    }

    return 1;
}

FUNÇÕES
Código:
GetPlayerArquivo(playerid){

    new ArquivoPlayer[ 30 ];
    format( ArquivoPlayer, sizeof( ArquivoPlayer ), Contas, GetPlayerNameEx( playerid ) );
    return ArquivoPlayer;
}

stock GetPlayerNameEx(playerid){

    new Nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Nome, sizeof(Nome));
    return Nome;
}


SavePlayer(playerid){

    if( DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){
        DOF2_CreateFile(GetPlayerArquivo(playerid));

        DOF2_SetInt( GetPlayerArquivo( playerid ), "Dinheiro", GetPlayerMoney( playerid ));
        DOF2_SaveFile();
    }
   
    return 1;
}

LoadPlayer(playerid){
    if( DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){

        Player[ playerid ][ Dinheiro ] = DOF2_GetInt( GetPlayerArquivo( playerid ), "Dinheiro" );
        GivePlayerMoney( playerid, Player[ playerid] [ Dinheiro ] );
    }


    return 1;
}

forward Kicka(p); public Kicka(p) { //KICKAR
    #undef Kick
    Kick(p);
    #define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
    return 1;
}


forward Bana(p); public Bana(p) {//BANIR
    #undef Ban
    Ban(p);
    #define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
    return 1;
}



RE: Incrementando Dinheiro Ao Logar - xbruno1000x - 26/11/2020

GivePlayerMoney( playerid, Player[ playerid] [ Dinheiro ] );

Você armazenou a quantia de dinheiro do player na variavel e toda vez que carrega as infos do player você dá esse valor de novo. Creio que seja isso, pois ele salvou por exemplo 50K inicialmente, e quando você dá essa quantia de novo(Ele já tinha 50k, +50k = 100k), ela provavelmente dobra e salva dobrado.