[Pedido] Como que eu faзo pra gerar letras e nъmeros aleatуrios?
#1

Fala pessoal, estou com um dъvida, nгo sei a lуgica pra gerar letras e nъmeros aleatуrios, eu queria que gerasse assim:

ABC-1234

Seria esse padrгo, estou tentando criar um sistema que cada veнculo tenha uma placa. Se alguйm puder me ajudar eu agradeзo <3
Reply
#2

pawn Code:
randomChar() {
  static c[2];
  format(c, 2, "%c", random(26) + 'A');
  return c;
}

new string[9];
format(string, sizeof string, "%s%s%s-%04d", randomChar(), randomChar(), randomChar(), random(10000));
SendClientMessage(playerid, -1, string);

//  Resultado possнvel: JIN-0929
Sei que й horrнvel retornar strings, mas acho que isso nгo vai dar nenhum problema.
Reply
#3

Funcionou, vocк poderia me dar uma pequena base de como seria pra salvar em DOF2? o nome do arquivo com o que gerou.
Reply
#4

pawn Code:
new string[32];
tryagain:
format(string, sizeof string, "veiculos/%s.ini", generateUniquePlaque());
if(!DOF2_FileExists(string)) {
  // Salvar dados;
} else goto tryagain;

generateUniquePlaque() {
  static str[10];
  format(str, sizeof str, "%s%s%s-%04d", randomChar(), randomChar(), randomChar(), random(10000));
  return str;
}

randomChar() {
  static c[2];
  format(c, 2, "%c", random(26) + 'A');
  return c;
}
Reply
#5

Nгo funcionou aqui, eu fiz assim:
PHP Code:
CMD:teste(playerid)
{
    
GerarPlaca();
    return 
1;
}
stock GerarPlaca()
{
    new 
str[128];
    
format(strsizeof(str), "Veiculos/%s%s%s-%04d.ini"randomChar(), randomChar(), randomChar(), random(10000));
    if(!
DOF2_FileExists(str))
    {
        
DOF2_CreateFile(str);
    }
    return 
1;

Fica certo assim? estб funcionando...
Reply
#6

Sim, isso mesmo.
Porйm, se houver um arquivo com o mesmo nome, nada serб feito.
pawn Code:
stock GerarPlaca()
{
    new str[128];
    tentar_novamente:
    format(str, sizeof(str), "Veiculos/%s%s%s-%04d.ini", randomChar(), randomChar(), randomChar(), random(10000));

    if(!DOF2_FileExists(str)) //Se o arquivo nгo existir, faзa isso
    {
        DOF2_CreateFile(str);
    }
    else // Se houver um arquivo com o mesmo nome, faзa isso
    {
        goto tentar_novamente; // "goto" quer dizer "vб para", que faz com que o fluxo do programa vб ali pra cima, realizando o cуdigo novamente. Isto acontecerб atй uma placa com um nome ъnico ser gerada.
    }
    return 1;
}
Reply
#7

AAAAAAH daora, valeu <3 vou testar aqui !
Reply
#8

Estб gerando... Valeu mano +REP
Reply
#9

Mano, sу mais uma coisa... eu to fazendo assim:

PHP Code:
CMD:teste(playerid)
{
    new 
veiculo;
    
vehInfo[veiculo][vehModel] = 560;
    
GerarPlaca(veiculo);
    return 
1;
}

stock GerarPlaca(idx)
{
    new 
str[128];
    
tentar_novamente:
    
    for(new 
0MAX_VEHICLEi++)
    {
        
format(strsizeof(str), "Veiculos/%s%s%s-%04d.ini"randomChar(), randomChar(), randomChar(), random(10000));

        if(!
DOF2_FileExists(str)) //Se o arquivo nгo existir, faзa isso
        
{
            
DOF2_CreateFile(str);

            
DOF2_SetInt(str"Modelo"vehInfo[idx][vehModel]);

            
DOF2_SaveFile();
        }
        else 
// Se houver um arquivo com o mesmo nome, faзa isso
        
{
            goto 
tentar_novamente// "goto" quer dizer "vб para", que faz com que o fluxo do programa vб ali pra cima, realizando o cуdigo novamente. Isto acontecerб atй uma placa com um nome ъnico ser gerada.
        
}
    }
    return 
1;

Sу que ta criando 500 arquivos... como devo fazer?
Reply
#10

PHP Code:
stock GerarPlaca(idx)
{
    new 
str[128];
    
tentar_novamente:
    
    for(new 
0MAX_VEHICLEi++)
    {
        
format(strsizeof(str), "Veiculos/%s%s%s-%04d.ini"randomChar(), randomChar(), randomChar(), random(10000));
        if(!
DOF2_FileExists(str)) //Se o arquivo nгo existir, faзa isso
        
{
            
DOF2_CreateFile(str);
            
DOF2_SetInt(str"Modelo"vehInfo[idx][vehModel]);
            
DOF2_SaveFile();
            return 
1// ou break;
        
}
        else 
// Se houver um arquivo com o mesmo nome, faзa isso
        
{
            goto 
tentar_novamente// "goto" quer dizer "vб para", que faz com que o fluxo do programa vб ali pra cima, realizando o cуdigo novamente. Isto acontecerб atй uma placa com um nome ъnico ser gerada.
        
}
    }
    return 
1;

Reply
#11

Funcionou ! Ultima pergunta, prometo kkkk
Se eu quiser colocar sem limite, tipo... eu coloquei no mбximo 500

PHP Code:
#define MAX_VEHICLE 500 
Como eu faria? E teria que mudar alguma coisa no GerarPlaca?
Reply
#12

Nгo entendi pq colocou um loop(for), jб que nгo й usado o 'i', retire o loop(for).
Reply
#13

Nгo tem como "deixar sem limite", veja os limites aqui.
Reply
#14

Quote:
Originally Posted by Felipealves
View Post
Nгo entendi pq colocou um loop(for), jб que nгo й usado o 'i', retire o loop(for).
Viajei... jб retirei aqui, obrigado.

Quote:
Originally Posted by InsaneBR
View Post
Nгo tem como "deixar sem limite", veja os limites aqui.
Sem limite que eu falo й a quantidade de arquivos que pode criar, nгo tem como? Se nгo tiver beleza... acho que nгo vai precisar.
Reply
#15

Sim, hб um limite para criar arquivos dentro de uma pasta, porйm este limite depende do sistema de arquivos de sua mбquina. O FAT32 suporta 65.534 arquivos, jб o NTFS suporta 4.294.967.295.
Reply
#16

Code:
#define MAX_PLACAS 500


new string[32];
tryagain:
format(string, sizeof string, "carros/carro %s.ini", generateUniquePlaque(MAX_PLACAS));
if(!DOF2_FileExists(string))
{
  // Salvar dados;
} else goto tryagain;

generateUniquePlaque(MAX_PLACAS)
{
  static str[10];
  format(str, sizeof str, "%s%s%s-%04d", randomChar(), randomChar(), randomChar(), random(10000));
  MAX_PLACAS ++;
  return str;
}

randomChar()
{
  static c[2];
  format(c, 2, "%c", random(26) + 'A');
  return c;
}
Reply
#17

Quote:
Originally Posted by Lucas-Fc
View Post
Code:
#define MAX_PLACAS 500


new string[32];
tryagain:
format(string, sizeof string, "carros/carro %s.ini", generateUniquePlaque(MAX_PLACAS));
if(!DOF2_FileExists(string))
{
  // Salvar dados;
} else goto tryagain;

generateUniquePlaque(MAX_PLACAS)
{
  static str[10];
  format(str, sizeof str, "%s%s%s-%04d", randomChar(), randomChar(), randomChar(), random(10000));
  MAX_PLACAS ++;
  return str;
}

randomChar()
{
  static c[2];
  format(c, 2, "%c", random(26) + 'A');
  return c;
}
Isso nem vai compilar.
Reply
#18

Code:
randomChar(MAX_PLACAS) // esqueci aqui rs
{
  static c[2];
  format(c, 2, "%c", random(26) + 'A');
  return c;
}
Reply
#19

Esse cуdigo aн estб errado.
Ao criar 1 placa, vocк jб vai passar do limite.

PHP Code:
#define MAX_PLACAS 500
MAX_PLACAS ++; 
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)