08/12/2019, 01:59 AM
(Última modificación: 09/12/2019, 11:30 PM por 4evergaming. Edited 4 times in total.)
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:
Source:
Nota: se recomienda que este plugin sea el ultimo en ejecutarse, es decir, al final de plugins.ini
Espero les sirva.
Saludos
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
www.4evergaming.com.ar