01.06.2018, 15:02
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:
Obs: usei algumas frescurinhas de servidor RPG, pro GMX ficar mais bonitinho, mais creio que isso nгo esteja influenciando em algo.
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(playerid, params[])
{
if (IsPlayerAdmin(playerid) || PlayerInfo[playerid][pAdmin] == 5) // Checka se esta logado na RCON e se й admin Dono
{
MensagemDesligou = 1;
new string[128];
format(string, sizeof(string), "[STAFF][%s] %s ATIVOU O GMX MANUAL!",PlayerInfo[playerid][pCargo], PlayerInfo[playerid][pNome]);
format(string, sizeof(string), "[STAFF] SERVIDOR IRБ REINICIAR DENTRO DE 5 SEGUNDOS!");
SendClientMessageToAll(COLOR_LIGHTRED, string);
SetTimer("TimeToGMX",5000, false);
}
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(Player, i)
{
InterpolateCameraPos(i, 1855.578247, -1356.315795, 106.570388, 828.892395, -1470.234985, 159.147048, 50000);
InterpolateCameraLookAt(i, 1860.529296, -1355.671020, 106.302513, 833.859008, -1469.715087, 158.897155, 60000);
SetPlayerInterior(i, 0);
TogglePlayerControllable(i, 0);
SetPlayerPos(i, 1416.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", 1000, 0);
return 1;
}
SR::GameModeExitFunc()
{
foreach(Player, i)
{
GameTextForPlayer(i, "~b~~h~Reiniciando ~r~~h~& ~w~~h~Salvando...", 8000, 3);
TogglePlayerControllable(i, 0);
}
for(new i; i < MAX_TEXT_DRAWS; i++)
{
TextDrawDestroy(Text:i);
}
SetTimer("ReiniciarServer", 5000, 0);
}
SR::ReiniciarServer()
{
GameModeExit();
}
public OnGameModeExit()
{
for(new i = 0; i < MAX_PLAYERS; i++) 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(IDConexao, Query, sizeof(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(IDConexao, Query, "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;
}