Buenas, encontré el plugin de Roccoxx para crear grupos (gremios, clanes, etc), creo que es un code muy bueno, pero se le podría agregar algunas mejoras para que quede más completo.
Por eso agregue fvault para guardar el grupo y también añadí que cuando hables salga el nombre de tu grupo en el chat junto con tu nombre.
([Mi grupo] Internel: Hola)
Esto me da algunos bugs, que prefiero preguntarles a ustedes para solucionarlos y así todos podremos usar el plugin bien cuando alguien lo necesite :3
¿Cuál es el problema?
Son los siguientes:
1) Cuando alguien habla, aparecen 2 mensajes, uno el normal del juego y el otro es el que tiene el tag. ¿Cómo dejo el que tiene tag solamente? [Esa función la llamé chat(id) por siacaso] - Arreglado
2) Cuando se guarda el grupo y me reconecto, el nombre del grupo donde estoy pasa a llamarse [b]
3) Si dejo el grupo y me reconecto, me dice que aun tengo grupo
Son esas 3 cosas que me tienen medio complicado para solucionarlas, si alguien me podría ayudar sería lo mejor xD
saludos
Crédito total a Roccoxx por crear el plugin
Por eso agregue fvault para guardar el grupo y también añadí que cuando hables salga el nombre de tu grupo en el chat junto con tu nombre.
([Mi grupo] Internel: Hola)
Esto me da algunos bugs, que prefiero preguntarles a ustedes para solucionarlos y así todos podremos usar el plugin bien cuando alguien lo necesite :3
Código PHP:
/* PLUGIN ORIGINAL POR Roccoxx, editado por Internel. */
#include <amxmodx>
#include <amxmisc>
#include <fvault>
/*.grupo <nombre> - Crear un grupo con el tag especificado
.add <nombre> - Invitar a el jugador con el tag especifico del grupo
.accept <nombre> - Unirse a un grupo
.leavegroup - Dejar el grupo que se encuentra actualmente */
#define MAX_CHR 20 // max group name lenght
new const nombre_vault[] = "INFO_GRUPOS";
new g_grupo[33], g_nombre[33][33], g_groupname[33][MAX_CHR]
public plugin_init(){
register_plugin("Group", "1.0", "Roccoxx")
register_clcmd("say", "hook_say")
}
public hook_say(id){
if(!is_user_connected(id)) return PLUGIN_HANDLED;
new say[40]
read_args(say, charsmax(say))
if(equal(say, "")) return PLUGIN_HANDLED;
remove_quotes(say[0])
if(say[0] == '.'){
if(say[1] == 'g' && say[2] == 'r' && say[3] == 'u' && say[4] == 'p' && say[5] == 'o')
{
if(g_grupo[id]){
client_print(id, print_center, "Ya tienes un grupo")
return PLUGIN_HANDLED;
}
replace_all(say, charsmax(say), ".grupo ", "")
replace_all(say, charsmax(say), ".grupo", "")
if(strlen(say) > MAX_CHR) client_print(id, print_center, "Nombre muy largo")
else if(equal(say, "")) client_print(id, print_center, "No escribiste Nada")
else{
ChatColor(id, "!gFelicitaciones !teamCreaste el grupo: !y%s",say)
formatex(g_groupname[id], charsmax(g_groupname), say)
format(say, charsmax(say), "[%s] ", say)
add(say ,charsmax(say), g_nombre[id])
//set_user_info(id, "name", say);
//client_cmd(id, "name ^"%s^"", say)
set_task(3.0, "tiene_grupo", id)
}
return PLUGIN_HANDLED;
}
else if(say[1] == 'a' && say[2] == 'd' && say[3] == 'd'){
if(!g_grupo[id]){
client_print(id, print_center, "No tienes un grupo")
return PLUGIN_HANDLED;
}
replace_all(say, charsmax(say), ".add ", "")
replace_all(say, charsmax(say), ".add", "")
new player = cmd_target(id, say, 8);
if(!player) client_print(id, print_center, "Jugador no encontrado")
else if(g_grupo[player]) client_print(id, print_center, "El Jugador Ya pertenece a un Grupo")
else{
static name[33]; get_user_name(id, name, charsmax(name))
ChatColor(id, "!teamInvitacion enviada a !y%s",say)
ChatColor(player, "!g%s !yquiere invitarte a su grupo!",name)
}
return PLUGIN_HANDLED
}
else if(say[1] == 'a' && say[2] == 'c' && say[3] == 'c' && say[4] == 'e' && say[5] == 'p' && say[6] == 't'){
replace_all(say, charsmax(say), ".accept ", "")
replace_all(say, charsmax(say), ".accept", "")
new player = cmd_target(id, say, 8);
if(!player) client_print(id, print_center, "Jugador no encontrado")
else if(!g_grupo[player]) client_print(id, print_center, "El Jugador no tiene un Grupo")
else{
static name[33]; get_user_name(id, name, charsmax(name))
ChatColor(id, "!teamFelicitaciones te uniste al grupo de !y%s",say)
ChatColor(player, "!g%s !ySe ha unido a tu grupo!",name)
formatex(g_groupname[id], charsmax(g_groupname), g_groupname[player])
format(say, charsmax(say), "[%s] ", g_groupname[player])
add(say ,charsmax(say), g_nombre[id])
//set_user_info(id, "name", say);
//client_cmd(id, "name ^"%s^"", say)
set_task(3.0, "tiene_grupo", id)
}
return PLUGIN_HANDLED
}
else if(say[1] == 'l' && say[2] == 'e' && say[3] == 'a' && say[4] == 'v' && say[5] == 'e' && say[6] == 'g'
&& say[7] == 'r' && say[8] == 'o' && say[9] == 'u' && say[10] == 'p'){
if(!g_grupo[id]){
client_print(id, print_center, "No perteneces a ningun grupo")
guardar_grupo(id)
return PLUGIN_HANDLED;
}
g_grupo[id] = false
return PLUGIN_HANDLED
}
}
chat(id)
return PLUGIN_CONTINUE
}
public tiene_grupo(id){
g_grupo[id] = true
get_user_name(id, g_nombre[id], charsmax(g_nombre))
guardar_grupo(id)
}
public client_putinserver(id){
//g_grupo[id] = false
get_user_name(id, g_nombre[id], charsmax(g_nombre))
cargar_grupo(id)
}
public client_disconnect(id)
{
guardar_grupo(id)
}
public client_infochanged(id)
{
new sNewName[33]
get_user_info(id, "name", sNewName, charsmax(sNewName));
if(!equali(sNewName, g_nombre[id]) && g_grupo[id])
{
set_user_info(id, "name", g_nombre[id]);
client_cmd(id, "name ^"%s^"", g_nombre[id]);
ChatColor(id, "!team Atencion: No puedes cambiarte de nombre si perteneces a un !ggrupo!")
}
else if(!equali(sNewName, g_nombre[id])) formatex(g_nombre[id], charsmax(g_nombre), sNewName)
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!y", "^1");
replace_all(msg, 190, "!team", "^3");
replace_all(msg, 190, "!team2", "^0");
if (id) players[0] = id; else get_players(players, count, "ch");
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
public chat(id)
{
new szSaid[ 192 ], szName[35];
read_args( szSaid, sizeof( szSaid ) -1 );
get_user_name(id, szName, 34);
remove_quotes( szSaid );
if(g_grupo[id])
{
ChatColor(id, "!g[%s] !team%s: !y%s", g_groupname[id], szName, szSaid);
return PLUGIN_HANDLED
}
else if(!g_grupo[id])
{
ChatColor(id, "!team%s: !y%s", szName, szSaid);
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public cargar_grupo(id)
{
new data[128], name[32], tiene_grupo[32], nombre_grupo[32]
get_user_name(id, name, charsmax(name))
if(!fvault_get_data(nombre_vault, name, data, sizeof(data) - 1))
{
return 0
}
parse(data, tiene_grupo, charsmax(tiene_grupo), nombre_grupo, charsmax(nombre_grupo))
g_grupo[id] = tiene_grupo[id]
formatex(g_groupname[id], charsmax(g_groupname), nombre_grupo)
ChatColor(id, "Datos Cargados para !team %s", name)
client_print(id, print_console, "Datos Cargados para !team %s", name)
return 1
}
guardar_grupo(id)
{
new data[128], name[32]
get_user_name(id, name, charsmax(name))
formatex(data, charsmax(data), "%s %s %s", name[id], g_grupo[id], g_groupname[id])
client_print(id, print_console, "Datos Guardados para: %s %s %s", name[id], g_grupo[id], g_groupname[id])
fvault_set_data(nombre_vault, name, data)
}
¿Cuál es el problema?
Son los siguientes:
1) Cuando alguien habla, aparecen 2 mensajes, uno el normal del juego y el otro es el que tiene el tag. ¿Cómo dejo el que tiene tag solamente? [Esa función la llamé chat(id) por siacaso] - Arreglado
2) Cuando se guarda el grupo y me reconecto, el nombre del grupo donde estoy pasa a llamarse [b]
3) Si dejo el grupo y me reconecto, me dice que aun tengo grupo
Son esas 3 cosas que me tienen medio complicado para solucionarlas, si alguien me podría ayudar sería lo mejor xD
saludos
Crédito total a Roccoxx por crear el plugin