Portal SAMP
[Ajuda] Verificar variável de todos os jogadores - 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] Verificar variável de todos os jogadores (/showthread.php?tid=3561)



Verificar variável de todos os jogadores - KruCz - 01/05/2023

Oi pessoal, boa noite! Tudo bem?

Estou estudando e montando um sistema de celular, e não estou conseguindo localizar o número dos jogadores dentro dos arquivos. Tentei utilizar um loop para identificar o número digitado no sscanf, mas sem sucesso.
A ideia é o jogador utilizar o comando '/ligar [numero]' e, após isso, o código procurar o jogador que possui este mesmo número.

Obs: Os arquivos, no diretório dos números, possui o nome dos jogadores e dentro as strings 'CEL' (número) e 'User' (nick do jogador).

Código PHP:
CMD:ligar(playeridparams[])
{
new 
string[50], telefone;
if(
sscanf(params"i"telefone)) return SCM(playerid, -1"{FF4500}Uso correto: /telefone [número].");
for(new 
0MAX_PLAYERSi++)
{
format(stringsizeof(string), "Numeros/%s.ini"VerNome(i));
if(
DOF2_FileExists(string))
{
if(
DOF2_GetInt(string"User"))
{
format(stringsizeof(string), "Ligando para %s."i);
SCM(playerid, -1string);
}
}
else
{
SCM(playerid, -1"{FF4500}Esse número de telefone não existe.");
}
}
return 
1;




RE: Verificar variável de todos os jogadores - White_Blue - 01/05/2023

Para que salvar o número do jogador em uma pasta diferenciada? Além de ser totalmente sem sentido é complicado na hora de verificar.

Apenas salve como uma string no arquivo de contas do jogador e depois use DOF2_GetString para verificar o número.

Exemplo:
Código PHP:
new File[128];

format(Filesizeof(File), "Contas/%s.ini");
DOF2_SetString(File"Numero""32998854212"); 



RE: Verificar variável de todos os jogadores - KruCz - 01/05/2023

(01/05/2023 22:39)White_Blue Escreveu: Para que salvar o número do jogador em uma pasta diferenciada? Além de ser totalmente sem sentido é complicado na hora de verificar.

Apenas salve como uma string no arquivo de contas do jogador e depois use DOF2_GetString para verificar o número.

Exemplo:
Código PHP:
new File[128];

format(Filesizeof(File), "Contas/%s.ini");
DOF2_SetString(File"Numero""32998854212"); 
Oi White, tudo bem?

O arquivo já está salvando, tudo certinho. Eu estou somente querendo puxar essa informação.
Utilizar o comando "/ligar [numero]" e fazer a verificação de qual usuario.ini possui a variável com o número digitado, senão, não existe.

Obrigado pela atenção!


RE: Verificar variável de todos os jogadores - White_Blue - 02/05/2023

(01/05/2023 23:54)KruCz Escreveu:
(01/05/2023 22:39)White_Blue Escreveu: Para que salvar o número do jogador em uma pasta diferenciada? Além de ser totalmente sem sentido é complicado na hora de verificar.

Apenas salve como uma string no arquivo de contas do jogador e depois use DOF2_GetString para verificar o número.

Exemplo:
Código PHP:
new File[128];

format(Filesizeof(File), "Contas/%s.ini");
DOF2_SetString(File"Numero""32998854212"); 
Oi White, tudo bem?

O arquivo já está salvando, tudo certinho. Eu estou somente querendo puxar essa informação.
Utilizar o comando "/ligar [numero]" e fazer a verificação de qual usuario.ini possui a variável com o número digitado, senão, não existe.

Obrigado pela atenção!

Exatamente por isso que sugeri que salvasse a string no arquivo das contas do jogador. Por que é muito mais fácil de se verificar.


Mesmo assim, aqui está um exemplo usando seu código, veja se resolve:
Código PHP:
CMD:ligar(playerid, const params[]) {
    new 
numberstr[128], msg[128];
    if(
sscanf("d"number)) return SendClientMessage(playerid, -1"Use: /ligar [Número]");
    for(new 
0MAX_PLAYERSi++) {
     
format(strsizeof(str), "Numeros/%s.ini"VerNome(i));
     if(!
DOF2_FileExists(str)) continue; // Caso o arquivo não existir o loop continua
     
format(msgsizeof(msg), "Ligando para %s!"DOF2_GetString(str"User"));
     
SendClientMessage(playerid, -1msg);
    }
    return 
1;




RE: Verificar variável de todos os jogadores - KruCz - 02/05/2023

(02/05/2023 00:08)White_Blue Escreveu:
(01/05/2023 23:54)KruCz Escreveu:
(01/05/2023 22:39)White_Blue Escreveu: Para que salvar o número do jogador em uma pasta diferenciada? Além de ser totalmente sem sentido é complicado na hora de verificar.

Apenas salve como uma string no arquivo de contas do jogador e depois use DOF2_GetString para verificar o número.

Exemplo:
Código PHP:
new File[128];

format(Filesizeof(File), "Contas/%s.ini");
DOF2_SetString(File"Numero""32998854212"); 
Oi White, tudo bem?

O arquivo já está salvando, tudo certinho. Eu estou somente querendo puxar essa informação.
Utilizar o comando "/ligar [numero]" e fazer a verificação de qual usuario.ini possui a variável com o número digitado, senão, não existe.

Obrigado pela atenção!

Exatamente por isso que sugeri que salvasse a string no arquivo das contas do jogador. Por que é muito mais fácil de se verificar.


Mesmo assim, aqui está um exemplo usando seu código, veja se resolve:
Código PHP:
CMD:ligar(playerid, const params[]) {
    new numberstr[128], msg[128];
    if(sscanf("d"number)) return SendClientMessage(playerid, -1"Use: /ligar [Número]");
    for(new 0MAX_PLAYERSi++) {
     format(strsizeof(str), "Numeros/%s.ini"VerNome(i));
     if(!DOF2_FileExists(str)) continue; // Caso o arquivo não existir o loop continua
     format(msgsizeof(msg), "Ligando para %s!"DOF2_GetString(str"User"));
     SendClientMessage(playerid, -1msg);
    }
    return 1;


Não deu certo, ao utilizar o comando '/ligar [numero]' está ligando para todos, e não para o número específico digitado no comando.


RE: Verificar variável de todos os jogadores - agi.exe - 02/05/2023

O seu comando/sistema não tem sentido..

Porque não salvar o numero do jogador dentro da conta dele e quando logar. o numero será armazenado em alguma variável.
Fica bem mais fácil de verificar ! 

EXEMPLO
Código PHP:
CMD:ligar(playeridparams[])
{
    new numero;
    if(sscanf(params,"d",numero)) return Msg(playerid, -1"Use: /ligar [numero]");
    for(new iMAX_PLAYERSi++)
    {   
        
if(!IsPlayerConnected(i)) continue; // não conectado o loop continua
        if(PlayerInfo[i][pNumero] == numero)
        {
            new string[50]; format(string,sizeof(string),"Ligando para %s ...."VerNome(i));
            return true;
        }
    }
    Msg(playerid, -1"O Numero digitado não existe ou fora de area");
    return 1;




RE: Verificar variável de todos os jogadores - Carlos Victor - 03/05/2023

Pra que fazer um looping nas pastas? Isso iria resultar em uma demora gigantesca, é mais viável você armazenar o número de cada jogador em uma variável e na hora que for ligar, fazer um loop e verificar se o número de cada jogador é igual ao número informado.