case DIALOG_LOGIN: { if(!response) return Kick(playerid); // se clicar em cancelar na dialog login ira kickar o jogador if(!strlen(inputtext)) // se nгo digitar nada ira retornar. { SendClientMessage(playerid, -1, "ERRO:{FFFFFF} Vocк nгo digitou a senha !"); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Digite sua senha:", "Digite sua senha abaixo para logar-se", "Logar", "Voltar"); return 1; } if(!strcmp(PlayerInfo[playerid][pSenha], inputtext, true, 20)) //comparamos a variavel coma senha do player com a senha digitada { // se a comparaзгo for correta vamos realizar a consulta para adicionar os valores contidos na tabela para as variaveis do player. new Query[70]; mysql_format(IDConexao, Query, sizeof(Query), "SELECT * FROM `Contas` WHERE Nome='%s'", PlayerInfo[playerid][pNome]); mysql_tquery(IDConexao, Query, "CarregarContas", "d", playerid); // Formatamos a Query realizamos a consulta e enviamos o resultado para a callback CarregarContas } else { // comparaзгo sem sucesso :: SendClientMessage(playerid, -1, "ERRO:{FFFFFF} Senha incorreta !"); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Digite sua senha:", "Digite sua senha abaixo para logar-se", "Logar", "Voltar"); SendClientMessage(playerid, 0xFF3C41AA, "NO MOMENTO SOMENTE PESSOAL DA {FFFFFF}ADMINISTRAЗГO {FF3C41}ESTA TENDO ACESSO AO SERVIDOR, SERVIDOR EM ALFA, {FFFFFF}CITY OF PARADISE"); } } } return 1; } |
forward CarregarContas(playerid); public CarregarContas(playerid) { // Resultado da consulta do login, adicionamos os valores contidos na tabela para as variaveis do player cache_get_value_int(0, "ID", PlayerInfo[playerid][pID]); cache_get_value_int(0, "Admin", PlayerInfo[playerid][pAdmin]); cache_get_value_int(0, "Level", PlayerInfo[playerid][pLevel]); cache_get_value_int(0, "Sexo", PlayerInfo[playerid][pSexo]); cache_get_value_int(0, "Morreu", PlayerInfo[playerid][pMorreu]); cache_get_value_int(0, "Profissao", PlayerInfo[playerid][pProfissao]); cache_get_value_int(0, "Skin", PlayerInfo[playerid][pSkin]); cache_get_value_int(0, "Dinheiro", PlayerInfo[playerid][pDinheiro]); CarregarDados(playerid); return 1; } |
Vocк tirou OnPlayerDisconnect e lembrou de resetar a variбvel qnd o player sair?
PlayerInfo[playerid][pProfissao] = 0; ou Gari[playerid] = 0; GariTrabalhando[playerid] = 0; faзa isso no disconnect e no connect eu nгo sei como vocк adaptou isso, vc trocou as variбvel do FS qnd adaptou em modulo? |
Na public OnPlayerDisconnect(playerid, reason)
{
SalvarDados(playerid); // Chamamos a funзгo para salvar a conta do player que desconectar
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, Admin=%d, Skin=%d, Sexo=%d, Profissao=%d, Morreu=%d, Dinheiro=%d WHERE ID=%d",
PlayerInfo[playerid][pNome],
PlayerInfo[playerid][pLevel],
PlayerInfo[playerid][pAdmin],
GetPlayerSkin(playerid),
PlayerInfo[playerid][pSexo],
PlayerInfo[playerid][pProfissao],
PlayerInfo[playerid][pMorreu],
PlayerInfo[playerid][pDinheiro],
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][pSexo] = 0;
PlayerInfo[playerid][pMorreu] = 0;
PlayerInfo[playerid][pDinheiro] = 0;
PlayerInfo[playerid][pProfissao] = 0;
PlayerInfo[playerid][pLogado] = false;
return 1;
}
stock CarregarDados(playerid)
{
PlayerInfo[playerid][pLogado] = true;
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pDinheiro]);
SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], 1224.6243,-1815.7311,16.5938, 269.15,0,0,0,0,0,0);
PlayerInfo[playerid][pProfissao];
SpawnPlayer(playerid);
return 1;
}
Entгo pelo o que eu entendi, vocк quer que toda vez que o player entre no servidor, ele pegue a profissгo novamente, entгo nгo й pra salvar a profissгo?
|
Na verdade eu quero q ele nгo tenha que ficar pegando a profissгo, o problema ta o seguinte, o player entra no servidor pega a profissao, quando ele da /q a profissao й salva, e se ele logar novamente, ainda estarб com a mesma profissгo, mais se o servidor Reniciar, ele volta desempregado, e nгo com a profissгo, ou seja, toda vez q o servidor volta, ele tem que pegar a profissгo denovo. pois ela nгo salva se o servidor reniciar ou for fechado.
|
Antes de qualquer servidor reiniciar, ele salva as informaзхes de tudo e todos, faзa o mesmo, porque provavelmente vocк sу esta salvando quando o player desconecta, e quando o servidor reinicia e o player sai do servidor, nгo й considerado como ele tivesse desconectado, entгo se ele pegou a profissгo e nгo saiu antes de reiniciar, provavelmente tudo o que ele fez vai ser perdido.
|
CMD:gmx(playerid)
{
SendClientMessageToAll(-1, "Servidor reniciando voltamos em 1 minutos");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
SalvarDados(playerid);
{
Kick(i);
}
}
}
SendRconCommand("gmx");
return 1;
}
E como posso fazer isso? Pois assim como os servidores grandes, quero programar um GMX pra salvar tudo antes de reniciar.
aqui esta a GMX PHP Code:
|