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; 
}
  
 
 
 
RE: escolher skin uma unica vez - Cifra Modder -  16/01/2025
 
 
 (15/01/2025 01:22)LOS_SANTOS Escreveu:  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; 
}
   
Você precisa salvar uma variável do tipo bool na conta do jogador. Depois é só você verificar se o Player está com o valor da variável 'TemSkin' true (verdadeiro). 
 
Ex: 
 
Código: public OnPlayerRequestClass(playerid, classid) 
{ 
    // Condição 
    If(InfoConta[playerid][TemSkin] == false) // se o jogador não tiver a skin. 
    { 
        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); 
        } 
        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; 
}
  
 
 
 
RE: escolher skin uma unica vez - xbruno1000x -  16/01/2025
 
 
Me parece que você não está salvando o campo skin no arquivo do jogador. Primeiro precisa implementar isso, senão não terá como recuperar o valor escolhido pelo jogador.
 
 
 
 |