[Ajuda] Status atualizar sem ter que relogar
#1

Ola pessoal eu tenho um game mode com sistema de registro que salva quando o player sai do serve, eu queria atualizes-se sem ele ter que sai, Entгo como seria?

pawn Код:
//Uma parte do sistema de registro

    new arquivo[40], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, 32);
    format(arquivo, 40, "Contas/%s.ini", name);
    if(dialogid == DIALOG_REGISTRO)
    {
        if(!strlen(inputtext))
        {
            ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "\nDigite sua senha novamente para se registrar!", "Confirma", "Cancelar");
            return 1;
        }
        if(!response)
        {
            Kick(playerid);
            return 1;
        }
        else
        {
            PlayerInfo[playerid][Senha] = TerroR_HashKey(inputtext);
            DOF2_CreateFile(arquivo);
            DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][Senha]);
            DOF2_SetInt(arquivo, "Level", PlayerInfo[playerid][Level] = 2);
            DOF2_SetInt(arquivo, "Admin", PlayerInfo[playerid][Admin] = 0);
            DOF2_SetInt(arquivo, "Dinheiro", PlayerInfo[playerid][Dinheiro] = 1900);
            DOF2_SetInt(arquivo, "Membro", PlayerInfo[playerid][Membro] = 0);
            DOF2_SetInt(arquivo, "Lider", PlayerInfo[playerid][Lider] = 0);
            DOF2_SetInt(arquivo, "Respeito", PlayerInfo[playerid][Respeito] = 0);
            DOF2_SetInt(arquivo, "Tuto", PlayerInfo[playerid][Tuto] = 0);
            DOF2_SetInt(arquivo, "Banco", PlayerInfo[playerid][Banco] = 500);
            DOF2_SetInt(arquivo, "Matou", PlayerInfo[playerid][Matou] = 0);
            DOF2_SetInt(arquivo, "Morreu", PlayerInfo[playerid][Morreu] = 0);
            DOF2_SetInt(arquivo, "Drogas", PlayerInfo[playerid][Drogas] = 0);
            DOF2_SetInt(arquivo, "Profissao", PlayerInfo[playerid][Profissao] = 0);
            DOF2_SaveFile();
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Vocк se cadastrou, agora й sу logar com sua senha registrada!", "Confirma", "Cancelar");
        }
    }
    if(!response)
    {
        Kick(playerid);
        return 1;
    }
    if(dialogid == DIALOG_LOGAR)
    {
        if(!strlen(inputtext))
        {
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "\nDigite sua senha cadastrada para logar!\nSe errar 5 vezes sua conta serб banida!", "Confirma", "Cancelar");
            return 1;
        }
        if(!response)
        {
            Kick(playerid);
            return 1;
        }
//OnPlayerConnect

    new arquivo[40], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, 32);
    format(arquivo, 40, "Contas/%s.ini", name);
    if(DOF2_FileExists(arquivo))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Vocк й Registrado, digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Confirma", "Cancelar");
    }
    else  
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Vocк ainda nгo й Registrado, digite uma senha para se registrar!", "Confirma", "Cancelar");
    }
//Enum de infomarзхes

enum pInfo
{
    Senha,
    Level,
    Admin,
    Dinheiro,
    Membro,
    Lider,
    Respeito,
    Tuto,
    Banco,
    Matou,
    Morreu,
    Drogas,
    Profissao
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new Erro[MAX_PLAYERS];
//OnPlayerDesconnect
    new arquivo[40], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, 32);
    format(arquivo, 40, "Contas/%s.ini", name);
    if(DOF2_FileExists(arquivo))
    {
        DOF2_SetInt(arquivo,"Dinheiro",GetPlayerMoney(playerid));
        DOF2_SetInt(arquivo,"Level",PlayerInfo[playerid][Level]);
        DOF2_SetInt(arquivo,"Admin",PlayerInfo[playerid][Admin]);
        DOF2_SetInt(arquivo,"Membro",PlayerInfo[playerid][Membro]);
        DOF2_SetInt(arquivo,"Lider",PlayerInfo[playerid][Lider]);
        DOF2_SetInt(arquivo,"Respeito",PlayerInfo[playerid][Respeito]);
        DOF2_SetInt(arquivo,"Tuto",PlayerInfo[playerid][Tuto]);
        DOF2_SetInt(arquivo,"Banco",PlayerInfo[playerid][Banco]);
        DOF2_SetInt(arquivo,"Matou",PlayerInfo[playerid][Matou]);
        DOF2_SetInt(arquivo,"Morreu",PlayerInfo[playerid][Morreu]);
        DOF2_SetInt(arquivo,"Drogas",PlayerInfo[playerid][Drogas]);
        DOF2_SetInt(arquivo,"Profissao",PlayerInfo[playerid][Profissao]);
        DOF2_SaveFile();
    }
Como ficaria esse cуdigo?

@EDIT
Para explicar melhor minha duvida irei dar um exemplo

Por exemplo eu do o comando /grana e ganho dinheiro mais sу que os meus status originais nгo atualiza tipo no /rg continua aparecer a contia antiga
Reply
#2

Uai o comando rg , Pega as Informaзхes do arquivo salvo ?
Reply
#3

Sim.
pawn Код:
CMD:rg(playerid, params[])
{
    Rg(playerid);
    return true;
}
//----------------

Rg(playerid)
{
    new PlayerName[MAX_PLAYER_NAME];
    new String[128];
    format(String, sizeof(String),          "------------------------------------[ Seu RG %s ]-------------------------------------",PlayerName);
    SendClientMessage(playerid, COLOR_GOLD,String);
    format(String, sizeof(String),          "Level: [%d] - Respeito: [%d] - Dinheiro: [%d] - Banco: [%d] - Emprego: [%s]  ",PlayerInfo[playerid][Level], PlayerInfo[playerid][Respeito], PlayerInfo[playerid][Dinheiro], PlayerInfo[playerid][Banco], Profs(playerid), PlayerInfo[playerid][Profissao]);
    SendClientMessage(playerid, Branco,String);
    SendClientMessage(playerid, COLOR_GOLD, "------------------------------------------------------------------------------------");
    return 1;
}
Reply
#4

Vc pode faazer um loop, para que ele atulize durante certo tempo o rg de MAX_PLAYERS
Reply
#5

Essa й a questгo eu ainda nгo sei tudo sobre pawn, E tambйm nгo sei o significado de um loop
Reply
#6

Quote:
Originally Posted by matheus_alcapone
Посмотреть сообщение
Essa й a questгo eu ainda nгo sei tudo sobre pawn, E tambйm nгo sei o significado de um loop
Cуdigo de um Loop:

pawn Код:
for(new i = 0; i < MAX_PLAYERS; i++)
{
     //Codigo
}
Uso do Loop

pawn Код:
GetPlayerName(playerid, Nome, sizeof(Nome));
// Entгo Ficando
GetPlayerName(i, Nome, sizeof(Nome));
Diferenзa:

pawn Код:
Definindo para todos os players a mesma aзгo em vez de um player apenas.
Observaзгo: Hб o Loop normal, e hб o Loop feito com a Include Foreach, que й de maior velocidade:
pawn Код:
Em vez de:

for(new i = 0; i < MAX_PLAYERS; i++)
//Apenas
foreach(i, Player)
Se Nгo me Engano й Isso uma Explicaзгo sobre o Famoso Loop.
Reply
#7

Entendi +/-
Reply
#8

Simplesmente pega as informaзхes do onplayerdisconnect que й a parte que salva, e crie uma public e adicione um set timer, Veja abaixo.
pawn Код:
forward qualquernome(playerid);
public qualquernome(playerid)
{
    static arquivo[40], name[MAX_PLAYER_NAME+1]; // Aqui, usamos static.
    GetPlayerName(playerid, name,sizeof(name));  // MAX_PLAYER_NAME = 24, entгo o valor que que colocaste й invalido.
    format(arquivo, 40, "Contas/%s.ini", name);  // Formatando o nome.
    if(DOF2_FileExists(arquivo))  // caso jб existe, inserir estas informaзхes.
    {
        DOF2_SetInt(arquivo,"Dinheiro",GetPlayerMoney(playerid));
        DOF2_SetInt(arquivo,"Level",PlayerInfo[playerid][Level]);
        DOF2_SetInt(arquivo,"Admin",PlayerInfo[playerid][Admin]);
        DOF2_SetInt(arquivo,"Membro",PlayerInfo[playerid][Membro]);
        DOF2_SetInt(arquivo,"Lider",PlayerInfo[playerid][Lider]);
        DOF2_SetInt(arquivo,"Respeito",PlayerInfo[playerid][Respeito]);
        DOF2_SetInt(arquivo,"Tuto",PlayerInfo[playerid][Tuto]);
        DOF2_SetInt(arquivo,"Banco",PlayerInfo[playerid][Banco]);
        DOF2_SetInt(arquivo,"Matou",PlayerInfo[playerid][Matou]);
        DOF2_SetInt(arquivo,"Morreu",PlayerInfo[playerid][Morreu]);
        DOF2_SetInt(arquivo,"Drogas",PlayerInfo[playerid][Drogas]);
        DOF2_SetInt(arquivo,"Profissao",PlayerInfo[playerid][Profissao]);
        DOF2_SaveFile();
    }
}

//Bom leo, mas como eu ativo isso ??? Simples, utilize um settimer.

new qualquercoisa[MAX_PLAYERS]; // Para todos os jogadores. Topo do Gm.

public OnPlayerConnect(playerid) // colocar o settimer no inicio ou no fim, Apenas para ficar organizado.
{
   qualquercoisa[playerid] = SetTimer("qualquernome",5000,true); // porque true? pois com true irб se repetir. Se quiser, mude o tempo de atualizaзгo.
}
Reply
#9

Nгo funciono. Mais e se eu colocar por rg pegar logo as informaзхes da conta na pasta sera que funciona?
Reply
#10

Se nгo funcionou, й porque fizeste algo de errado, verifique o que fizeste.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)