їMe ayudan a hacer esto?
#1

Hola estuve intentando hacer que al banear a un usuario se guardara el nombre del jugador baneado en un archivo .txt,
їme ayudan por favor?
pawn Код:
stock Baneado(playerid)
{
    new Texto[64], File:ban = fopen("/baneados.txt", io_write);
   
    if(ban)
    {
        format(Texto, sizeof(Texto), "%s\r\n",NombreJugador(playerid));
        fwrite(ban, Texto);
        fclose(ban);
    }
    return 1;
}
pawn Код:
CMD:ban(playerid, params[])
{
    new Texto[64], id, razon[64];
    if(Informacion[playerid][pAdmin] >= 3)
    {
        if(sscanf(params, "us[64]",id,razon)) return SendClientMessage(playerid, -1, "/ban (ID) (Razуn)");
        {
            if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Usuario no conectado");
            {
                format(Texto, sizeof(Texto), "El usuario %s fue baneado por un administrador, Razуn: %s",NombreJugador(id),razon);
                SendClientMessageToAll(-1, Texto);
                Ban(id);
                Baneado(id);
            }
        }
    } else SendClientMessage(playerid, -1, "No eres administrador");
    return 1;
}
їMe ayudan a hacerlo y enseсarme a como utilizarlo correctamente?, desde ya muchas gracias.
Reply
#2

mira si te sirve esto..

pawn Код:
CMD:ban(playerid, params[])
{
    new Texto[64], id, razon[64];
    if(Informacion[playerid][pAdmin] >= 3)
    {
        if(sscanf(params, "us[64]",id,razon)) return SendClientMessage(playerid, -1, "/ban (ID) (Razуn)");
        {
            if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Usuario no conectado");
            {
                format(Texto, sizeof(Texto), "El usuario %s fue baneado por un administrador, Razуn: %s",NombreJugador(id),razon);
                SendClientMessageToAll(-1, Texto);
                new pAKA[256]; pAKA = dini_Get("ladmin/config/banLog.txt",id);
                Ban(id);
                Baneado(id);
            }
        }
    } else SendClientMessage(playerid, -1, "No eres administrador");
    return 1;
}
pawn Код:
new pAKA[256]; pAKA = dini_Get("ladmin/config/banLog.txt",tmp);
Reply
#3

Solo algunas correcciones, lo demбs estб perfecto, bien echo.

pawn Код:
CMD:ban(playerid, params[])
{
    new Texto[128], id, razon[64]; // aumentado el tamaсo de 'Texto'
    if(Informacion[playerid][pAdmin] >= 3)
    {
            if(sscanf(params, "us[64]",id,razon)) return SendClientMessage(playerid, -1, "/ban (ID) (Razуn)");
            // retiradas llaves sobrantes
            if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Usuario no conectado");
                format(Texto, sizeof(Texto), "El usuario %s fue baneado por un administrador, Razуn: %s",NombreJugador(id),razon);
                SendClientMessageToAll(-1, Texto);
                Baneado(id);
                Ban(id); // cambiado el orden de la funciуn, se ejecuta de arriba a abajo
    }
    else SendClientMessage(playerid, -1, "No eres administrador");
    return 1;
}
pawn Код:
stock Baneado(playerid)
{
    new Texto[64], File:ban = fopen("/baneados.txt", io_append ); // Es append para no borrar el usuario anterior

    if(ban)
    {
        format(Texto, sizeof(Texto), "%s\r\n",NombreJugador(playerid));
        fwrite(ban, Texto);
        fclose(ban);
    }
    return 1;
}
Reply
#4

Vale, muchas gracias, tengo una duda mбs.

їComo puedo hacer que los nombres de los usuarios baneados aparezcan en un dialog si yo pongo /usuariosbaneados?
Reply
#5

Tienes que hacer que lea el archivo donde guardas los nombres y mostrarlos en el dialog.
Reply
#6

Puedes acomodar tus archivos asн: Crear una carpeta en scriptfiles llamada Bans o como quieras, y ahн pones los nombre de los usuarios prohibidos. Luego un archivo en scriptfiles en donde guardarбs los nombres de los prohibidos.

Una manera en la que puedes guiarte:

pawn Код:
#define BAN_LIST_DIRECTION "Bans/%s.txt"

stock AddPlayerInBanList(playerid)
{
    new str[30];
    format(str, sizeof(str), BAN_LIST_DIRECTION, NombreJugador(playerid));
    new File:INI = fopen(str, io_write);
    fclose(INI);

    INI = fopen("Ban_List.txt", io_append);
    format(str, 27, "%s\n" NombreJugador(playerid));
    fwrite(INI, str);
    fclose(INI);
    return 1;
}


stock GetBans()
{
    new str[300]; // A tu gusto.
    new const File:INI = fopen("Ban_List.txt", io_read);
    fread(INI, str);
    fclose(INI);
    return str;
}


CMD:ban_list(playerid)
{
    return ShowPlayerDialog(playerid, BAN_LIST, DIALOG_STYLE_MSGBOX, "Lista", GetBans(), "Aceptar", "");
}

Saludos.
Reply
#7

Asi podemos hacerlo, he explicado dentro del cуdigo para que te guies.
pawn Код:
CMD:baneados(playerid, params[])
{
new File:bl = fopen("/baneados.txt", io_read); // abrimos el archivo en modo Read con el identificador de bl
new lista[2][24], ListaGeneral[128]; // creamos un Array para almacenar la lista y uno para cada nombre
while(fread(bl, lista[0])) //Leemos el archivo una linea a la vez y vamos guardando el contenido
{
format(lista[1], strlen(lista[0]), "\n%s", lista[0]); // asi pones \n para que valla uno arriba del otro
strcat(ListaGeneral, lista[1]); // usamos strcat para ir dejando en ListaGeneral cada nombre
}
fclose(bl); // Cerramos el archivo
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_MSGBOX, "Baneados", ListaGeneral, "Aceptar", ""); // mostramos dialogo
return 1;
}
Reply
#8

Quote:
Originally Posted by MelvinH
Посмотреть сообщение
Asi podemos hacerlo, he explicado dentro del cуdigo para que te guies.
pawn Код:
CMD:baneados(playerid, params[])
{
new File:bl = fopen("/baneados.txt", io_read); // abrimos el archivo en modo Read con el identificador de bl
new lista[2][24], ListaGeneral[128]; // creamos un Array para almacenar la lista y uno para cada nombre
while(fread(bl, lista[0])) //Leemos el archivo una linea a la vez y vamos guardando el contenido
{
format(lista[1], strlen(lista[0]), "\n%s", lista[0]); // asi pones \n para que valla uno arriba del otro
strcat(ListaGeneral, lista[1]); // usamos strcat para ir dejando en ListaGeneral cada nombre
}
fclose(bl); // Cerramos el archivo
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_MSGBOX, "Baneados", ListaGeneral, "Aceptar", ""); // mostramos dialogo
return 1;
}
Siendo que tu manera es la mas lenta y no funcionarнa en un servidor con su tiempo de apertura...
Reply
#9

No es recomendable hacer un comando como /usuariosbaneados, cuando tienes un archivo con miles de usuarios listados y usas el comando el servidor se pausara por un tiempo infinitivo ya que no puedes leer un archivo empezando en una linea definida.
Reply
#10

Aporte una posible soluciуn para lo que el usuario requerнa.

Enzo: Si solo usas fread de esa manera, en el dialogo saldria algo como:

Quote:

Nombre1Nombre2Nombre3...

Por supuesto que no es recomendable hacerlo de esa manera, lo ideal serнa en una DB (DataBase como MySQL o SQlite), todo depende de a cuantos usuarios pretendas banear en el servidor.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)