Portal SAMP
[Ajuda] Como posso fazer isso? - 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] Como posso fazer isso? (/showthread.php?tid=2930)



Como posso fazer isso? - BatataDoce - 25/10/2022

Bom dia, estava com a ideia de fazer um sistema bancário, mas pretendia cada player tivesse um número de conta diferente, como que posso criar esses números de conta de forma random sem que eles possam ficar repetidos?


RE: Como posso fazer isso? - xbruno1000x - 25/10/2022

Se estiver usando mysql, pode usar o auto increment. Se estiver usando DOF2, você deverá criar o arquivo com o número da conta, daí é só verificar se o arquivo da conta já existe com DOF2_FileExists.


RE: Como posso fazer isso? - Carlos Victor - 25/10/2022

Exatamente como o Bruno disse, eu recentemente desenvolvi um sistema parecido mas para RG & CPF em DOF2, mas abandonei o projeto por justamente ser DOF2, eu estou refazendo ele em SQLite, enfim... Irei deixar o código abaixo:

Código:
stock givePlayerRG(playerid)
{
    new value[10], arquivo[64];
    format(value, sizeof(value), "%d", randomEx(000000000, 999999999)); //Aqui gera um número aleatório

    if(strlen(value) != 9)    // Aqui eu verifico se o número gerado tem 9 caracteres que é o que um RG padrão deve ter 000000006 (00.000.000-6)
        return givePlayerRG(playerid); // Se não tiver, gera novamente.

    format(arquivo, sizeof(arquivo), "Verifications/RG/%s.ini", value); // Aqui eu verifico na pasta "Verifications/RG" se ja existe um RG identifoco
    if(DOF2_FileExists(arquivo)) // Se sim
        return givePlayerRG(playerid); // Gera novamente

    DOF2_CreateFile(arquivo); // Se passar por todas as verificações acima, significa que está ok
    DOF2_SaveFile(); // Crio e salvo o RG na pasta, ai é só você setar pro jogador


    // O sistema é sobre RG, mas tu pode modificar e seguir a mesma base do sistema.
    return 1;
}

Vou deixar também, um código que eu usava muito, pra formatar essa string em um RG como nós geralmente vê, no caso do sistema, ele salva o rg inteiro, sem a formatação ou seja ele salva assim: 128532938 e pra formatar é só usar a função abaixo pra deixar ele: 12.853.293-8

Código:
stock formatRG(const text[])
{
    static sub[14];
    format(sub, sizeof sub, text);

    // 01.234.567-8
    // 012345678

    strins(sub, ".", 2);
    strins(sub, ".", 6);
    strins(sub, "-", 10);

    return sub;
}
O modo de uso é formatRG(string)

Exemplo:
printf("O RG %s formatado é: %s", "128532938", formatRG("128532938")

Saída: O RG 128532938 formatado é: 12.853.293-8


RE: Como posso fazer isso? - BatataDoce - 25/10/2022

(25/10/2022 12:27)xbruno1000x Escreveu: Se estiver usando mysql, pode usar o auto increment. Se estiver usando DOF2, você deverá criar o arquivo com o número da conta, daí é só verificar se o arquivo da conta já existe com DOF2_FileExists.

Ok, mas eu to confuso como que posso fazer uma verificação com o nome do arquivo como por exemplo:

No meu servidor, uso DOF2, cada arquivo de conta registrada fica num arquivo vulgo o nome do arquivo é o nome do player, como posso verificar todas as pastas criadas apartir do nick para ver se não existe número da conta já criada?

Único método q conheço é por loop, mas o retorno do loop é números, ent como posso fazer uma verificação com loop nesse caso?

não sei se deu pra entender a minha dúvida, mas resumidamente é como posso verificar todas as pastas criadas só pelo nick dos players registrados


RE: Como posso fazer isso? - xbruno1000x - 25/10/2022

(25/10/2022 13:28)BatataDoce Escreveu:
(25/10/2022 12:27)xbruno1000x Escreveu: Se estiver usando mysql, pode usar o auto increment. Se estiver usando DOF2, você deverá criar o arquivo com o número da conta, daí é só verificar se o arquivo da conta já existe com DOF2_FileExists.

Ok, mas eu to confuso como que posso fazer uma verificação com o nome do arquivo como por exemplo:

No meu servidor, uso DOF2, cada arquivo de conta registrada fica num arquivo vulgo o nome do arquivo é o nome do player, como posso verificar todas as pastas criadas apartir do nick para ver se não existe número da conta já criada?

Único método q conheço é por loop, mas o retorno do loop é números, ent como posso fazer uma verificação com loop nesse caso?

não sei se deu pra entender a minha dúvida, mas resumidamente é como posso verificar todas as pastas criadas só pelo nick dos players registrados

Sendo mais preciso no que você precisará fazer:

Já existe uma pasta para as contas dos jogadores. Você irá criar uma pasta somente para as contas bancárias, onde o nome dos arquivos serão os números de conta bancária. Para identificar o proprietário da conta, basta você salvar o número da conta bancária no arquivo da conta do jogador.

Logo, dentro do arquivo do jogador vai ficar um campo assim:
ContaBancaria = xxxxxxx

Dentro do arquivo xxxxxxx vão ficar os dados da conta:
Saldo = 0 e afins...

Acredito ter sido claro agora.


RE: Como posso fazer isso? - Carlos Victor - 25/10/2022

É só você criar uma pasta, criar o arquivo lá e verificar como o código que eu mandei.


RE: Como posso fazer isso? - BatataDoce - 25/10/2022

Bem, fiz como vcs falaram e utilizei o código do Carlos como base, agr o servidor tá fechando quando a stock é chamado =/

Código PHP:
stock CriadorBancario(playerid)
{
    new 
cnt 1000 random(7999);
    
printf("%d",cnt);
    new 
arquivo[100];
    
format(arquivo,sizeof(arquivo),"Verifications/Conta_Banco/%s.ini",cnt);
    if(
DOF2_FileExists(arquivo)) return CriadorBancario(playerid);
    if(!
DOF2_FileExists(arquivo))
    {
        print(
"arquivo n existe");
        
DOF2_CreateFile(arquivo);
        print(
"arquivo criado");
        
DOF2_SetString(arquivo,"Nick"Nome(playerid));
        print(
"arquivo setado");
        
DOF2_SaveFile();
        print(
"arquivo salvado");

        
format(arquivo,sizeof(arquivo),"| Banco | Conta criada com sucesso em nosso sistema Sr.%s",Nome(playerid));
        
SendClientMessage(playerid,0x0080FFFF,arquivo);
        
format(arquivo,sizeof(arquivo),"| Banco | Número da sua conta é %s",cnt);
        
SendClientMessage(playerid,0x0080FFFF,arquivo);


        
format(arquivo,sizeof(arquivo),"Contas/%s.ini",Nome(playerid));
        
DOF2_SetInt(arquivo,"Banco:",pinfo [playerid] [tembanco]);
        
DOF2_SetInt(arquivo,"Conta:",cnt);
        
DOF2_SaveFile();
    }

    return 
1;

 utilizei print pra tentar descobrir achar onde exatamente o servidor fechava e foi quando o arquivo era criado (DOF2_CreateFile), mas único jeito que conheço pra fazer servidor fechar é quando a pasta não existe, mas as pastas estão criadas já .-.

(25/10/2022 21:57)BatataDoce Escreveu: Bem, fiz como vcs falaram e utilizei o código do Carlos como base, agr o servidor tá fechando quando a stock é chamado =/

Código PHP:
stock CriadorBancario(playerid)
{
    new 
cnt 1000 random(7999);
    
printf("%d",cnt);
    new 
arquivo[100];
    
format(arquivo,sizeof(arquivo),"Verifications/Conta_Banco/%s.ini",cnt);
    if(
DOF2_FileExists(arquivo)) return CriadorBancario(playerid);
    if(!
DOF2_FileExists(arquivo))
    {
        print(
"arquivo n existe");
        
DOF2_CreateFile(arquivo);
        print(
"arquivo criado");
        
DOF2_SetString(arquivo,"Nick"Nome(playerid));
        print(
"arquivo setado");
        
DOF2_SaveFile();
        print(
"arquivo salvado");

        
format(arquivo,sizeof(arquivo),"| Banco | Conta criada com sucesso em nosso sistema Sr.%s",Nome(playerid));
        
SendClientMessage(playerid,0x0080FFFF,arquivo);
        
format(arquivo,sizeof(arquivo),"| Banco | Número da sua conta é %s",cnt);
        
SendClientMessage(playerid,0x0080FFFF,arquivo);


        
format(arquivo,sizeof(arquivo),"Contas/%s.ini",Nome(playerid));
        
DOF2_SetInt(arquivo,"Banco:",pinfo [playerid] [tembanco]);
        
DOF2_SetInt(arquivo,"Conta:",cnt);
        
DOF2_SaveFile();
    }

    return 
1;

 utilizei print pra tentar descobrir achar onde exatamente o servidor fechava e foi quando o arquivo era criado (DOF2_CreateFile), mas único jeito que conheço pra fazer servidor fechar é quando a pasta não existe, mas as pastas estão criadas já .-.
  Problema resolvido já, substitui o %s por %d e funcionou


RE: Como posso fazer isso? - Carlos Victor - 26/10/2022

Show amigo! Se quiser me chamar no Discord pra tentar otimizar o código, fique a vontade.