Portal SAMP
[Ajuda] escolher skin uma unica vez - 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] escolher skin uma unica vez (/showthread.php?tid=4955)



escolher skin uma unica vez - LOS_SANTOS - 15/01/2025

como eu faco aqui para quando um player ja for registrado e ele logar ele ja passa pela public onplayerrequestclass ai ele selecionar a skin e quando ele sair do servidor ele logar novamente nao precisar passar pela selecao de skin novamente ja logar com a skin que ele escolheu antes prq toda vez que logo eu passo pela callback onplayerrequestclass queria que o jogador so precissase passar uma unica vez  me ajudem nisso ou me diga como faco 
Código:
#include a_samp
#include dini
#define DIALOG_REGISTER 0
#define DIALOG_LOGIN 1
main(){}
new Logged[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], file[200];
    GetPlayerName(playerid, name, sizeof(name));
    format(file, sizeof(file), "\\users\\%s.ini", name);
    Logged[playerid] = 0;
    if (!dini_Exists(file))
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar","");
    }
    return 1;
}

public OnPlayerRequestClass(playerid,classid)
{
    if(Logged[playerid] == 1)//se tiver logado
    {
        SetPlayerFacingAngle( playerid, 177.5789 );
        SetPlayerPos(playerid, 1479.2330,-1672.9246,14.0469);
        SetPlayerCameraPos(playerid, 1478.4987,-1678.3760,14.0469);
        SetPlayerCameraLookAt(playerid, 1478.6217,-1675.4032,14.0469);
        return 1;
    }
    else if(Logged[playerid]== 0)//se nao tiver logado
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar","");
        return 1;
    }
    return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])//dialogresponse
{
    if(response == 1) // Se o jogador clicou em "Registrar" ou "Logar"
    {
        if (strlen(inputtext) == 0)
        {
            //SendClientMessage(playerid, vermelho, "»  voce precisa inserir uma senha!");
            if (dialogid == DIALOG_REGISTER)
            {
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
            }
            else if (dialogid == DIALOG_LOGIN)
            {
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar","");
            }
            return 1;
        }
        new name[MAX_PLAYER_NAME], file[200];
        GetPlayerName(playerid, name, sizeof(name));
        format(file, sizeof(file), "\\users\\%s.ini", name);
        if (dialogid == DIALOG_REGISTER) // Registro
        {
            if (strlen(inputtext) < 4) // Verifica se a senha tem no mínimo 4 caracteres
            {
                SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} a senha deve ter no minimo 4 caracteres.");
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar", "");
                return 1;
            }
            dini_Create(file);
            dini_IntSet(file, "password", adler32_hash(inputtext)); // Armazena a senha com hash
            dini_IntSet(file, "cash", 0);
            dini_IntSet(file, "score", 0);
            SendClientMessage(playerid, -1, "{ff0000}»{ffffff} voce se registrou com sucesso");
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar", "");
            return 1;
        }
        else if (dialogid == DIALOG_LOGIN) // Login
        {
            if (!dini_Exists(file)) // Verifica se o arquivo do jogador existe
            {
                SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} o arquivo de usuario nao foi encontrado. Por favor, registre-se.");
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
                return 1;
            }
            if (adler32_hash(inputtext) != dini_Int(file, "password")) // Verifica se a senha esta correta
            {
                SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} senha incorreta! Tente novamente.");
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Senha incorreta! Por favor, tente novamente:", "Logar","");
                return 1;
            }
            Logged[playerid] = 1;
            GivePlayerMoney(playerid, dini_Int(file, "cash"));
            SetPlayerScore(playerid, dini_Int(file, "score"));
            SendClientMessage(playerid, -1, "{ff0000}»{ffffff} voce esta logado com sucesso!");
            return 1;
        }
    }
    return 1;
}

adler32_hash(buf[])
{
   new length=strlen(buf);
   new s1 = 1;
   new s2 = 0;
   new n;
   for (n=0; n<length; n++)
   {
     s1 = (s1 + buf[n]) % 65521;
     s2 = (s2 + s1)     % 65521;
   }
   return (s2 << 16) + s1;
}