[Ajuda] /GMX resetando stats do player
#1

Venho tendo alguns probleminhas com MyQL no samp, e o problema da vez й o seguinte:
Toda vez que dou gmx no servidor, as stats do player sгo resetadas todas para 0 sendo que deveriam ser salvas, usei esse tуpico atualizado e esta quase que identico: https://sampforum.blast.hk/showthread.php?tid=579909

Todas as callbacks, funзхes e publics que sгo usadas no codigo:
PHP код:
CMD:gmx(playeridparams[])
{
    if (
IsPlayerAdmin(playerid) || PlayerInfo[playerid][pAdmin] == 5// Checka se esta logado na RCON e se й admin Dono
    
{
                 
MensagemDesligou 1;
                  new 
string[128];
                
format(stringsizeof(string), "[STAFF][%s] %s ATIVOU O GMX MANUAL!",PlayerInfo[playerid][pCargo], PlayerInfo[playerid][pNome]);
                
format(stringsizeof(string), "[STAFF] SERVIDOR IRБ REINICIAR DENTRO DE 5 SEGUNDOS!");
                
SendClientMessageToAll(COLOR_LIGHTREDstring);
                
SetTimer("TimeToGMX",5000false);
    }
    else
    {
        
SendClientMessage(playerid,COR_VERMELHO"|ERRO| Vocк nгo pode executar este comando!");
    }
    return 
true;
}
forward TimeToGMX(playerid);
public 
TimeToGMX(playerid)
{
    
GameModeInitExitFunc();
}
SR::GameModeInitExitFunc()
{
       foreach(
Playeri)
    {
        
InterpolateCameraPos(i1855.578247, -1356.315795106.570388828.892395, -1470.234985159.14704850000);
        
InterpolateCameraLookAt(i1860.529296, -1355.671020106.302513833.859008, -1469.715087158.89715560000);
        
SetPlayerInterior(i0);
        
TogglePlayerControllable(i0);
        
SetPlayerPos(i1416.6915,-1478.7733,125.3672);
    }
    
SendClientMessageToAll(COLOR_ADMIN"==============================================================================================");
    
SendClientMessageToAll(COLOR_ADMIN"Servidor estб sendo reiniciado e voltarб em alguns segundos! Por Favor, nгo feche o jogo ainda");
    
SendClientMessageToAll(COLOR_ADMIN"==============================================================================================");
    
SetTimer("GameModeExitFunc"10000);
    return 
1;
}
SR::GameModeExitFunc()
{
       foreach(
Playeri)
    {
        
GameTextForPlayer(i"~b~~h~Reiniciando ~r~~h~& ~w~~h~Salvando..."80003);
        
TogglePlayerControllable(i0);
    }
    for(new 
iMAX_TEXT_DRAWSi++)
    {
        
TextDrawDestroy(Text:i);
    }
    
SetTimer("ReiniciarServer"50000);
}
SR::ReiniciarServer()
{
    
GameModeExit();
}
public 
OnGameModeExit()
{
    for(new 
0MAX_PLAYERSi++) SalvarDados(i); // Realizamos um loop na funзгo Funзгo SalvarDados para q salve todas as contas numa posivel queda do servidor
    
mysql_close(IDConexao); // Aqui fechamos a conexгo com o host
    
if(!MensagemDesligou)
    {
        
SendClientMessageToAll(COLOR_ADMIN,"[STAFF] {FFFFFF}Servidor desligado manualmente!");
    }
    return 
1;
}
stock SalvarDados(playerid)
    {
        
//if(PlayerInfo[playerid][pLogado] == false) return 1; // se o player nao estiver logado nгo ira salvar nada
        
PlayerInfo[playerid][pDinheiro] = GetPlayerMoney(playerid);
        new 
Query[350]; // variavel com 350 celulas para salvamento
        
mysql_format(IDConexaoQuerysizeof(Query), "UPDATE `Contas` SET `Nome`='%s',`Level`=%d,`Vitorias`=%d,`Admin`=%d,`Cargo`='%s',`Funcao`='%s',`Skin`=%d,`Matou`=%d,`Morreu`=%d,`Dinheiro`=%d,`Banido`=%d WHERE `ID`=%d",
        
PlayerInfo[playerid][pNome],
        
PlayerInfo[playerid][pLevel],
        
PlayerInfo[playerid][pVitorias],
        
PlayerInfo[playerid][pAdmin],
        
PlayerInfo[playerid][pCargo],
        
PlayerInfo[playerid][pFuncao],
        
PlayerInfo[playerid][pSkin],
        
PlayerInfo[playerid][pMatou],
        
PlayerInfo[playerid][pMorreu],
        
PlayerInfo[playerid][pDinheiro],
        
PlayerInfo[playerid][pBanido],
        
PlayerInfo[playerid][pID]);
        
// formatamos a Query referente a ID da conta (WHERE `ID`=%d) e realizaremos a consulta para atualizar os dados no banco de dados
        
mysql_tquery(IDConexaoQuery"DadosSalvos","d"playerid); // consulta, e enviamos o resultado para a callback DadosSalvos para um DEBUG
        
PlayerInfo[playerid][pLevel] = 0// resetamos as variaveis.
        
PlayerInfo[playerid][pAdmin] = 0;
        
PlayerInfo[playerid][pCargo] = 0;
        
PlayerInfo[playerid][pFuncao] = 0;
        
PlayerInfo[playerid][pMatou] = 0;
        
PlayerInfo[playerid][pMorreu] = 0;
        
PlayerInfo[playerid][pDinheiro] = 0;
        
PlayerInfo[playerid][pVitorias] = 0;
        
PlayerInfo[playerid][pBanido] = 0;
        
PlayerInfo[playerid][pLogado] = false;
        return 
1;
    } 
Obs: usei algumas frescurinhas de servidor RPG, pro GMX ficar mais bonitinho, mais creio que isso nгo esteja influenciando em algo.
Reply
#2

em vez do GameModeExit use o SendRconCommand("Gmx"); ou faзa um loop para salvar todas as contas do servidor.
Reply
#3

Quote:
Originally Posted by Marllun
Посмотреть сообщение
em vez do GameModeExit use o SendRconCommand("Gmx"); ou faзa um loop para salvar todas as contas do servidor.
Mais й na public OnGameModeExit que faz o loop para salvar a conta do player, й akele primeiro for da public.
Reply
#4

Tente
PHP код:
SR::ReiniciarServer() 

    
SendRconCommand("gmx")); 

Reply
#5

Quote:
Originally Posted by NelsonC
Посмотреть сообщение
Tente
PHP код:
SR::ReiniciarServer() 

    
SendRconCommand("gmx")); 

Continua resetando o status dos players
Reply
#6

Aconselho vocк usar o Salvamento em OnPlayerDisconnect, possнvelmente assim resolva. E coloca pra salvar conta somente de quem estб Logado (playerid)
Reply
#7

Quote:
Originally Posted by zNaKa
Посмотреть сообщение
Aconselho vocк usar o Salvamento em OnPlayerDisconnect, possнvelmente assim resolva. E coloca pra salvar conta somente de quem estб Logado (playerid)
Mais no gmx todos os players sгo desconectados?
Reply
#8

esse й o problema , geralmente pode desconectar o jogador, logo valor de tudo q for salvar vai ser 0 , entгo vai salvar como 0

Agora se jogador desconecta e salva й maior garantia q vai salvar.
Reply
#9

Quote:
Originally Posted by zNaKa
Посмотреть сообщение
esse й o problema , geralmente pode desconectar o jogador, logo valor de tudo q for salvar vai ser 0 , entгo vai salvar como 0

Agora se jogador desconecta e salva й maior garantia q vai salvar.
PHP код:
public OnPlayerDisconnect(playeridreason)
{
    
SalvarDados(playerid); // Chamamos a funзгo para salvar a conta do player que desconectar
    
return 1;

Tanto na public OnGameModeExit quanto na OnPlayerDisconnect chama a funзaх de salvamento.
Reply
#10

Tira da OnGameModeExit deixa somente no OnPlayerDisconnect
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)