Portal SAMP
[Ajuda] Problemas com DOF2_RenameFile - 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] Problemas com DOF2_RenameFile (/showthread.php?tid=3823)



Problemas com DOF2_RenameFile - sabio - 23/07/2023

Eu estava tendo criar um sistema de renomear uma conta in-game com ZCMD, DOF2 e sscanf. Não aparece nenhum erro ou warning na compilação, porém não funciona de jeito nenhum.

Código:
CMD:renomearplayer(playerid, params[])
{
    
    new id, nome, str[256], str1[200], str2[200];

    if(cargoadmin[playerid] < 4)
        return SCM(playerid, -1, MSGPERM);

    if(sscanf(params, "ds[16]", id, nome))
        return SCM(playerid, -1, "{FF0000}[Erro] Use /renomearplayer [id] [novo nome].");

    if(Player[playerid][Logado] == 0)
        return SCM(playerid, -1, "{FF0000}[Erro] Jogador nao conectado.");
    
    if(Player[id][Logado] == 0)
        return SCM(playerid, -1, "{FF0000}[Erro] Jogador nao conectado.");

    if(Trabalhando[playerid] < 1)
        return SCM(playerid, -1, "{FF0000}[Erro] Voce nao esta trabalhando! /tb");

    if(nome < 4 || nome > 16)
        return SCM(playerid, -1, "{FF0000}[Erro] Nome invalido. 4 a 16 caracteres.");

    format(str, sizeof(str), "contas/%s.ini", nome);

    if(DOF2_FileExists(str)) {
        SCM(playerid, -1, "{FF0000}[Erro] Esse nome ja existe no sistema.");
    }
    else {
        DOF2_RenameFile(file(id), str);

        if(pAdmin[id] == true) {

            format(str1, sizeof(str1), "admins/%s.ini", pName(id));
            format(str2, sizeof(str2), "admins/%s.ini", nome);
            DOF2_RenameFile(str1, str2);

        }
    }

    format(str, 256, "Voce teve seu nick renomeado pelo administrador: %s. \n\nNovo nick: ( %s )", pName(playerid), nome);
    SCM(id, -1, str);
    format(str, 256, "renomeou o nick do jogador: %s. para o novo nick: ( %s )", pName(id), nome);
    Admlog(str, 1);

    SetTimerEx("KickTempo", 10000, false, "i", id);
    SCM(id, -1, "Voce teve seu nick alterado e sera kickado para carrega-lo. Nao se esqueca de mudar o nick no samp!");

    DOF2_SaveFile();

    return 1;
}



RE: Problemas com DOF2_RenameFile - White_Blue - 24/07/2023

(23/07/2023 18:01)sabio Escreveu:
Eu estava tendo criar um sistema de renomear uma conta in-game com ZCMD, DOF2 e sscanf. Não aparece nenhum erro ou warning na compilação, porém não funciona de jeito nenhum.

Código:
CMD:renomearplayer(playerid, params[])
{
    
    new id, nome, str[256], str1[200], str2[200];

    if(cargoadmin[playerid] < 4)
        return SCM(playerid, -1, MSGPERM);

    if(sscanf(params, "ds[16]", id, nome))
        return SCM(playerid, -1, "{FF0000}[Erro] Use /renomearplayer [id] [novo nome].");

    if(Player[playerid][Logado] == 0)
        return SCM(playerid, -1, "{FF0000}[Erro] Jogador nao conectado.");
    
    if(Player[id][Logado] == 0)
        return SCM(playerid, -1, "{FF0000}[Erro] Jogador nao conectado.");

    if(Trabalhando[playerid] < 1)
        return SCM(playerid, -1, "{FF0000}[Erro] Voce nao esta trabalhando! /tb");

    if(nome < 4 || nome > 16)
        return SCM(playerid, -1, "{FF0000}[Erro] Nome invalido. 4 a 16 caracteres.");

    format(str, sizeof(str), "contas/%s.ini", nome);

    if(DOF2_FileExists(str)) {
        SCM(playerid, -1, "{FF0000}[Erro] Esse nome ja existe no sistema.");
    }
    else {
        DOF2_RenameFile(file(id), str);

        if(pAdmin[id] == true) {

            format(str1, sizeof(str1), "admins/%s.ini", pName(id));
            format(str2, sizeof(str2), "admins/%s.ini", nome);
            DOF2_RenameFile(str1, str2);

        }
    }

    format(str, 256, "Voce teve seu nick renomeado pelo administrador: %s. \n\nNovo nick: ( %s )", pName(playerid), nome);
    SCM(id, -1, str);
    format(str, 256, "renomeou o nick do jogador: %s. para o novo nick: ( %s )", pName(id), nome);
    Admlog(str, 1);

    SetTimerEx("KickTempo", 10000, false, "i", id);
    SCM(id, -1, "Voce teve seu nick alterado e sera kickado para carrega-lo. Nao se esqueca de mudar o nick no samp!");

    DOF2_SaveFile();

    return 1;
}


Refiz o seu comando, dessa forma deve funcionar:

Código PHP:
CMD:renomearplayer(playerid, const params[]) {
    new 
idname[MAX_PLAYER_NAME], fileacc[30], fileadmin[30], str[128];

    if(
cargoadmin[playerid] < 1) return SendClientMessage(playerid, -1"Você não tem permissão.");

    if(
sscanf(params"ds[24]"idname)) return SendClientMessage(playerid, -1"Use: /renomearplayer [id] [nome]");
    else if(
Player[playerid][Logado] == 0) return SendClientMessage(playerid, -1"Você não está logado.");
    else if(
Trabalhando[playerid] == 0) return SendClientMessage(playerid, -1"Você deve estar trabalhando para usar este comando.");
    else if(!
IsValidNickName(name) return SendClientMessage(playerid, -1"Selecione um nick que contenha entre 4 e "#MAX_PLAYER_NAME" caracteres e não contenha nenhum símbolo especial.");
    
    
format(fileacc24"/contas/%s.ini"GetPlayerNameEx(id));

    
DOF2_RenameFile(fileaccname);

    if(
pAdmin[id]) {
     
format(fileadmin24"/admins/%s.ini"GetPlayerNameEx(id));
     
DOF2_RenameFile(fileadminname);
    }

    
format(strsizeof(str), "Seu nome foi renomeado pelo admin: %s[%d].\n\nNovo nome: %s"GetPlayerNameEx(playerid), playeridname);
    
SendClientMessage(id, -1str);
    
SendClientMessage(playerid, -1"Agora você será kickado e lembre-se de trocar para o novo nick para que funcione corretamente!");
 
    
DOF2_SaveFile();

    
SetTimerEx("KickTempo"6500false"d"id);
    return 
1;
}

 
GetPlayerNameEx(playerid) {
      static 
Name[MAX_PLAYER_NAME];
      
GetPlayerName(playeridNameMAX_PLAYER_NAME);
      return 
Name;
}

  
IsValidNickName(const nick[]) {
    if(
strlen(nick) > MAX_PLAYER_NAME || strlen(nick) < 4) return false;
    for(new 
pos 0tamanho strlen(nick); pos tamanhopos++) switch(nick[pos]) {
        case 
'A' .. 'Z''a' .. 'z''$''_''@''['']''('')''.''1''2''3''4''5''6''7''8''9''0': continue;
        default: return 
false;
    }
    return 
true;


Existiam 2 problemas no seu código: Você estava verificando se o jogador é admin de uma forma booleana, o que dependendo do sistema de admin é incorreto, outra coisa é que a variável "name" estava definida como um inteiro quando na verdade deveria ser uma string e fora que haviam diversas verificações redundantes e estava mal organizado.


RE: Problemas com DOF2_RenameFile - sabio - 24/07/2023

Funcionou, obrigado.