Admin prefix & ChatColor
#1
Todo empezó a raíz de una cliente, se utilizó como base el código de Juan' Diego'.

A diferencia de los demás este posee posibilidad de chat color y es compatible con otros plugin que agregan información al archivo users.ini.
También se eliminó el task innecesario.

Tiene dos cvars:
Cita:Establece el número de campo en el que se encuentra el prefijo en users.ini
prefix_number <numero>

Activa o desactiva el chat color para admins
prefix_color <numero>


Source:
Código:
#include <amxmodx>
#include <amxmisc>

new gPrefix[33][32];
new gMaxPlayers;

// Punteros
new pNroCampo;
new pChatColor;

public plugin_init()
{
    
    pNroCampo = register_cvar("prefix_number","5");
    pChatColor = register_cvar("prefix_color","1");
    
    register_clcmd("say","cmd_say");
    
    gMaxPlayers = get_maxplayers();
    
}

public client_disconnected(id) {
    borrarPrefijo(id);
}

public borrarPrefijo(id) {
    copy(gPrefix[id], charsmax(gPrefix), "");
}

public cargarPrefijo(id) {
    
    borrarPrefijo(id);
    
    if (is_user_admin(id)) {
        new g_playername[32];
        new g_authid[40];
        new g_ip[20];
        
        // Obtengo los datos del jugador
        get_user_name(id, g_playername, 31 );
        get_user_authid(id, g_authid, 39 );
        get_user_ip(id, g_ip, 19, 1 );

        // Abro el archivo de admins
        new configsdir[64], g_data[160], g_auth[44];
        get_configsdir(configsdir, charsmax(configsdir));
        add(configsdir, charsmax(configsdir), "/users.ini");
        new file = fopen(configsdir, "rt");
        
        new bool: parar = false;
        while(!feof(file) && !parar) {
            fgets(file, g_data, charsmax(g_data));
            trim(g_data);
        
            // La linea es un comentario o esta vacia
            if(!g_data[0] || g_data[0] == ';') continue;
        
            
            // Obtenemos el primer campo
            parse(g_data, g_auth, charsmax(g_auth));
            
            
            
            // Encontre al jugador en el listado de admin
            if(containi(g_playername, g_auth) >= 0 || equal(g_ip, g_auth) || equal(g_authid, g_auth)) {                
                new nro_campo = get_pcvar_num(pNroCampo);
                
                // Copiamos el prefijo al array
                copy(gPrefix[id], charsmax(gPrefix), obtenerCampo(g_data, nro_campo));
                parar = true;
            }
            
        }

        // Cierro el archivo
        fclose(file);
    }
    
        
}


public obtenerCampo(cadena[], nro_campo) {
    /* Devuelve el texto del campo nro_campo */
    
    new prefijo[33];
    
    new i = 0;
    new j = 0;
    new cantidad_comillas = 0;
    new parar = false;
    
    static longitud;
    longitud = strlen(cadena);
    
    while(i < longitud && !parar)  {
        if (cadena[i] == '^"') {
            cantidad_comillas++;
        } else if (nro_campo*2-1 == cantidad_comillas) {
            prefijo[j] = cadena[i];
            j++;
        }
        
        // sigo al siguiente caracter
        i++;
        
        parar =  nro_campo * 2 == cantidad_comillas;
    }
    
    return prefijo;
}
        
public cmd_say(id) {
    static mensaje[140];
    read_args(mensaje, charsmax(mensaje));
    remove_quotes(mensaje);
    
    // El usuario envio un mensaje en blanco
    if(!strlen(mensaje) || mensaje[0] == ' ')
        return PLUGIN_HANDLED
        
    
    // Obtengo los datos del jugador
    new g_playername[32];
    get_user_name(id, g_playername, 31 );
        
    // Envio el mensaje
    new prefijo[111];
    new prefijo_dead[20];
    
    if (!is_user_alive(id)) {
        prefijo_dead = "^1*DEAD*^1";
    }
    
    // El usuario es admin y tiene asignado un prefijo
    if (is_user_admin(id) && strlen(gPrefix[id])) {
        formatex(prefijo, charsmax(prefijo), "%s^4%s ^3%s",prefijo_dead, gPrefix[id], g_playername);
    } else {
        formatex(prefijo, charsmax(prefijo), "%s^3%s", prefijo_dead, g_playername);
    }
    
    // Unimos el prefio con el mensaje a enviar
    if (is_user_admin(id) && get_pcvar_num(pChatColor)) {
        format(mensaje, charsmax(mensaje), "%s^x01 : ^4%s", prefijo, mensaje);
    } else {
        format(mensaje, charsmax(mensaje), "%s^x01 : %s", prefijo, mensaje);
    }
    
    static i, team[11];

    static color[11];
    get_user_team(id, color, charsmax(color));
    
    
    for (i = 1; i <= gMaxPlayers; i++) {
        if (!is_user_connected(i)) continue;
        
        get_user_team(i, team, charsmax(team));
        changeTeamInfo(i, color);
        writeMessage(i, mensaje);
        changeTeamInfo(i, team);
    }
    
    
    return PLUGIN_HANDLED;
}

public client_infochanged(id) {
    // Task para esperar que se cambie el nombre
    set_task(1.0, "cargarPrefijo", id);
}
    
public changeTeamInfo(player, team[]) {
    message_begin(MSG_ONE, get_user_msgid( "TeamInfo" ), _, player)
    write_byte(player)
    write_string(team)
    message_end()
}

public writeMessage(player, message[]) {
    message_begin(MSG_ONE, get_user_msgid( "SayText" ), {0, 0, 0}, player)
    write_byte(player)
    write_string(message)
    message_end()
}

Nota: se recomienda que este plugin sea el ultimo en ejecutarse, es decir, al final de plugins.ini

Espero les sirva.
Saludos
Empresa líder en la prestación de servicios de hosting, servidores de juegos, servidores de voz y alojamiento web en Argentina.
www.4evergaming.com.ar
Responder
#2
Si usaste como base un plugin que no es tuyo, por qué lo removiste como autor?

Responder
#3
(08/12/2019, 02:49 PM)Skylar escribió: Si usaste como base un plugin que no es tuyo, por qué lo removiste como autor?

Roflmao
Responder
#4
(08/12/2019, 02:49 PM)Skylar escribió: Si usaste como base un plugin que no es tuyo, por qué lo removiste como autor?

A eso se dedican basicamente Whatever
Responder
#5
Lo único que se tomó fueron los stock que andan por internet y la lectura del archivo que no es nada mágico. Solo se lo nombró por si el código se veía alguna coincidencia.

Atentamente,
Departamento de programación 4evergaming-
Empresa líder en la prestación de servicios de hosting, servidores de juegos, servidores de voz y alojamiento web en Argentina.
www.4evergaming.com.ar
Responder
#6
(08/12/2019, 05:57 PM)4evergaming escribió: Lo único que se tomó fueron los stock que andan por internet y la lectura del archivo que no es nada mágico. Solo se lo nombró por si el código se veía alguna coincidencia.

Atentamente,
Departamento de pendejos 4evergaming-

Saludos.
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#7
(08/12/2019, 09:32 PM)Nube. escribió: Aguante solugames e inetgaming ,4ever es una copia ,saludos

Solugames ya no provee servidores para juegos, o eso había leído..
Responder
#8
Lo se. En su momento era buen host cuando estaba mas barato Whatever
Responder
#9
[Imagen: image.png]
Responder
#10
(08/12/2019, 05:57 PM)4evergaming escribió: Copypastie todos los códigos de internet, y los fusione y luego me puse de autor.

Atentamente,
Departamento de programación 4evergaming-

fix*

(Cabe destacar que lo colocó en aportes, osea está bien lo que hizo, si lo hubiera colocado en plugins nuevos, ahí si estaba mal, aparte es un código que fue modificado pero con el simple hecho de que se le agregó varias cosas)
Responder
#11
(08/12/2019, 11:52 PM)Pan Bimbo (? escribió:
(08/12/2019, 05:57 PM)4evergaming escribió: Copypastie los códigos de otros plugins y los fusione y luego me puse de autor.

Atentamente,
Departamento de programación 4evergaming-

fix*

(23/11/2019, 10:27 PM)Cr3470r escribió: Tenés que dejar de intentar ser gracioso, ya te lo dije.
Responder
#12
Código PHP:
prefijo_dead "^1*DEAD*^1"
WhateverWhateverWhateverWhatever
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)