Portal SAMP
[Ajuda] Apagar o Nick do arquivo de texto - 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] Apagar o Nick do arquivo de texto (/showthread.php?tid=3466)



Apagar o Nick do arquivo de texto - MarginaL - 24/03/2023

Queria um comando que apagasse o nome de um player que está no arquivo de texto. Pois ele está na lista de nicks que possivelmente está com banimento.
Eu queria saber um cmd para pagar esse nick de lá.

Fulano
Ciclano
Betano


RE: Apagar o Nick do arquivo de texto - White_Blue - 24/03/2023

Use DOF2.

Exemplo:

Código PHP:
#define Banidos "/Banidos/%s.txt"

CMD:removerban(playerid, const params[]) {
    new 
str[32];
    if(
sscanf(params"s[32]"str)) return SendClientMessage(playerid, -1"Use: /removerban [nick]");
    if(
strlen(str) > 32 || strlen(str) < 0) return SendClientMessage(playerid, -1"O nick deve conter entre 0 e 32 caracteres.");
    
RemoveBan(playeridstr);
    return 
1;
}

stock RemoveBan(playerid, const nick[]) {
     new 
string[128];
     
format(stringMAX_PLAYER_NAMEBanidosnick);
     if(
DOF2_FileExists(string)) {
       
SendClientMessage(playerid, -1"Ban inexistente");
       return 
1;
     }
     else {
      
DOF2_RemoveFile(string);
     }
     return 
1;




RE: Apagar o Nick do arquivo de texto - pushline - 24/03/2023

(24/03/2023 12:43)White_Blue Escreveu: Use DOF2.

Exemplo:

Código PHP:
#define Banidos "/Banidos/%s.txt"

CMD:removerban(playerid, const params[]) {
    new str[32];
    if(sscanf(params"s[32]"str)) return SendClientMessage(playerid, -1"Use: /removerban [nick]");
    if(strlen(str) > 32 || strlen(str) < 0) return SendClientMessage(playerid, -1"O nick deve conter entre 0 e 32 caracteres.");
    RemoveBan(playeridstr);
    return 1;
}

stock RemoveBan(playerid, const nick[]) {
     new string[128];
     format(stringMAX_PLAYER_NAMEBanidosnick);
     if(DOF2_FileExists(string)) {
       SendClientMessage(playerid, -1"Ban inexistente");
       return 1;
     }
     else {
      DOF2_RemoveFile(string);
     }
     return 1;


Use str[MAX_PLAYER_NAME + 1] (1 = caracter nulo "\0".));
No sscanf use s[25];

no if ele fez um if redundante, o correto:

Código PHP:
stock RemoveBan(playerid, const nick[]) {
  new string[128];
  format(stringMAX_PLAYER_NAME 1Banidosnick);

  if(!DOF2_FileExists(string)) {
    SendClientMessage(playerid, -1"Banimento inexistente.");
    return 1;
  }

  DOF2_RemoveFile(string);
  SendClientMessage(playerid, -1"Ban removido.");
  return 1;




RE: Apagar o Nick do arquivo de texto - MarginaL - 25/03/2023

Mas não era bem apagar um arquivo, e sim apagar um Nick existente no txt ou ini tanto faz.

Esse comando aqui até ta pegando, porém ele só funciona pro ultimo Nick da lista e depois se for usar de novo ele não pega, só reiniciando o samp-server.

Código PHP:
CMD:removernick(playeridparams[])
{
    if(
PlayerInfo[playerid][pAdmin] < 6)
        return 
SendClientMessage(playeridVermelho"| ERRO | Comando Inválido!");
        
    if(
sscanf(params"s"Textos))
        return 
SendClientMessage(playeridVermelho"| ERRO | Digite: /Removernick [nick]");

    
format(LerContassizeof(LerContas), "Banidos.txt"Textos);
    
DOF2::Unset("Banidos.txt"Textos);
    
DOF2::SaveFile();
    
SendClientMessage(playeridocdsprintf("| ADMIN | Você removeu o nick %s"Textos))
    return 
1;




RE: Apagar o Nick do arquivo de texto - Klyn144 - 25/03/2023

Código PHP:
// Comando para remover um jogador banido da lista de nicks
CMD:unban(playeridparams[]) {
    // Verifica se o jogador tem permissão para usar o comando
    if(!IsPlayerAdmin(playerid)) {
        SendClientMessage(playerid, -1"Você não tem permissão para usar este comando.");
        return 0;
    }

    // Verifica se o comando foi usado corretamente
    if(!strlen(params)) {
        SendClientMessage(playerid, -1"Use: /unban <nick>");
        return 0;
    }

    // Abre o arquivo de nicks banidos
    new file fopen("nicks_banidos.txt""r");

    // Verifica se o arquivo foi aberto com sucesso
    if(file == INVALID_FILE) {
        SendClientMessage(playerid, -1"Erro ao abrir o arquivo de nicks banidos.");
        return 0;
    }

    // Lê o arquivo linha por linha e armazena os nicks em um array
    new bannedNicks[50][MAX_PLAYER_NAME];
    new numBannedNicks 0;
    new line[MAX_PLAYER_NAME 1];
    while(fgets(filelinesizeof(line))) {
        strtok(line"\n");
        format(linesizeof(line), "%s"line);
        format(bannedNicks[numBannedNicks], sizeof(bannedNicks[numBannedNicks]), "%s"line);
        numBannedNicks++;
    }

    // Fecha o arquivo
    fclose(file);

    // Verifica se o nick está na lista de nicks banidos
    new nick[MAX_PLAYER_NAME];
    format(nicksizeof(nick), "%s"params);
    new isBanned false;
    for(new 0numBannedNicksi++) {
        if(!strcmp(bannedNicks[i], nick)) {
            isBanned true;
            break;
        }
    }

    // Se o nick não estiver na lista de nicks banidos, envia uma mensagem de erro
    if(!isBanned) {
        SendClientMessage(playerid, -1"Este nick não está na lista de nicks banidos.");
        return 0;
    }

    // Abre o arquivo novamente, desta vez para escrever
    file fopen("nicks_banidos.txt""w");

    // Verifica se o arquivo foi aberto com sucesso
    if(file == INVALID_FILE) {
        SendClientMessage(playerid, -1"Erro ao abrir o arquivo de nicks banidos.");
        return 0;
    }

    // Escreve os nicks que não são o nick banido no arquivo
    for(new 0numBannedNicksi++) {
        if(strcmp(bannedNicks[i], nick)) {
            fprintf(file"%s\n"bannedNicks[i]);
        }
    }

    // Fecha o arquivo
    fclose(file);

    // Envia uma mensagem de confirmação para o jogador
    SendClientMessage(playerid, -1"O nick %s foi removido da lista de nicks banidos."nick);

    return 1;




RE: Apagar o Nick do arquivo de texto - MarginaL - 25/03/2023

Código PHP:
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22145) : error 035argument type mismatch (argument 2)
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22145) : warning 213tag mismatch
D
:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22146) : error 017undefined symbol "INVALID_FILE"
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22150) : error 017undefined symbol "fgets"
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22150) : warning 202number of arguments does not match definition
D
:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22151) : error 035argument type mismatch (argument 2)
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22153) : error 001expected token"]"but found "-identifier-"
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22153) : warning 215expression has no effect
D
:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22153) : error 001expected token";"but found "]"
D:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22153) : error 029invalid expressionassumed zero
D
:\Arquivos e Programas\A\Nova pasta\Server\gamemodes\GM.pwn(22153) : fatal error 107too many error messages on one line

Compilation aborted
.Pawn compiler 3.2.3664 Copyright (c1997-2006ITB CompuPhase


8 Errors



Vários erro men


RE: Apagar o Nick do arquivo de texto - MarginaL - 26/03/2023

Alguem pra me ajudar ai ?


RE: Apagar o Nick do arquivo de texto - pushline - 27/03/2023

A função "fgets" só existe em C / C++, não tem no Pawn por padrão, use fread().
https://www.open.mp/pt-BR/docs/scripting/functions/fread