Mensajes: 144
Temas: 4
Registro en: Mar 2018
Reputación:
8
16/03/2021, 06:31 PM
(Última modificación: 22/03/2021, 10:50 PM por GabsHp. Edited 2 times in total.)
[ReAPI] Mute Menu
Simple y sencillo. Un sistema para mutear jugadores mediante un menú usando ReAPI.
El muteo es individual, tú podrás seleccionar a que jugador deseas dejar de escuchar, sin afectar a los demás.
Requerimentos:
Que el servidor tenga ReHLDS y ReGame (Desconozco si ReGame pueda funcionar aparte sin el ReHLDS).
Código PHP: /* Sublime AMXX Editor v3.0.0-beta */
#include <amxmodx> #include <amxmisc> #include <reapi>
#define PLUGIN "[ReAPI] Mute Menu" #define VERSION "1.0" #define AUTHOR "GabsHp"
//Creditos // g0ze: correción del userid
#define GetPlayerBit(%1,%2) (%1 & (1 << (%2 & 31))) #define SetPlayerBit(%1,%2) %1 |= (1 << (%2 & 31)) #define ClearPlayerBit(%1,%2) %1 &= ~(1 << (%2 & 31))
new g_maxPlayers, g_iConnected;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); g_maxPlayers = get_maxplayers();
register_clcmd("say /mute", "muteMenu"); }
public client_putinserver(id) { SetPlayerBit(g_iConnected, id); }
public client_disconnected(id) { ClearPlayerBit(g_iConnected, id); }
public muteMenu(id) { if(!is_user_connected(id)) return PLUGIN_HANDLED;
static iMenu, szTitle[32], szText[64], szIndex[ 16 ], bool:i_CanHear; formatex(szTitle, charsmax(szTitle), "\r[ReAPI] \wMute Menu");
iMenu = menu_create(szTitle, "muteMenu_Handler"); for(new i = 1; i <= g_maxPlayers; i++) { if(!GetPlayerBit(g_iConnected, i)) continue; if(i == id) continue; static szName[33]; get_user_name(i, szName, charsmax(szName)); i_CanHear = rg_get_can_hear_player(id, i); formatex(szText, charsmax(szText), "\y[\w%s\y] \r[\w%s\r]", szName, i_CanHear ? "ON" : "OFF"); formatex(szIndex, charsmax(szIndex), "%d#%d", i, get_user_userid(i));
menu_additem(iMenu, szText, szIndex); } menu_setprop(iMenu, MPROP_BACKNAME, "Atrás"); menu_setprop(iMenu, MPROP_NEXTNAME, "Siguiente"); menu_setprop(iMenu, MPROP_EXITNAME, "Salir"); menu_display(id, iMenu); return PLUGIN_HANDLED; }
public muteMenu_Handler(id, iMenu, iItem) { if((iItem == MENU_EXIT) || !GetPlayerBit(g_iConnected, id)) { menu_destroy( iMenu ); return PLUGIN_HANDLED; } new szInfo[16], szTarget[4], szUserId[8]; new iNum, iTarget, iUserId; menu_item_getinfo(iMenu, iItem, iNum, szInfo, charsmax(szInfo), _, _, iNum); menu_destroy( iMenu ); strtok(szInfo, szTarget, charsmax(szTarget), szUserId, charsmax(szUserId), '#'); iTarget = str_to_num(szTarget); iUserId = str_to_num(szUserId);
if (!GetPlayerBit(g_iConnected, iTarget) || (get_user_userid(iTarget) != iUserId)) { client_print_color(id, print_team_default, "^4[ReAPI]^1 El jugador al que seleccionaste ya no está conectado!"); muteMenu(id); return PLUGIN_HANDLED; } static szName[32], bool:i_CanHear; i_CanHear = rg_get_can_hear_player(id, iTarget); get_user_name(iTarget, szName, charsmax(szName)); switch(i_CanHear) { case true: { rg_set_can_hear_player(id, iTarget, false); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!", szName); } case false: { rg_set_can_hear_player(id, iTarget, true); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4desmuteado^1 al jugador ^4%s^1!", szName); } } muteMenu(id); return PLUGIN_HANDLED; }
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
16/03/2021, 09:23 PM
(Última modificación: 16/03/2021, 09:28 PM por [N]drs. Edited 1 time in total.)
Código PHP: switch(i_CanHear) { case true: { rg_set_can_hear_player(id, iTarget, false); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!", szName); } case false: { rg_set_can_hear_player(id, iTarget, true); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4desmuteado^1 al jugador ^4%s^1!", szName); } }
Código PHP: if(i_CanHear) rg_set_can_hear_player(id, iTarget, false);
else rg_set_can_hear_player(id, iTarget, true);
client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4%s^1 al jugador ^4%s^1!", i_CanHear ? "muteado" : "desmuteado", szName);
Por qué estás comparando los userid si lo puedes hacer con el id? (Pensativo)
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
16/03/2021, 09:34 PM
(Última modificación: 16/03/2021, 09:39 PM por Hinami. Edited 2 times in total.)
(16/03/2021, 09:23 PM)[N]drs escribió: Código PHP: if(i_CanHear) rg_set_can_hear_player(id, iTarget, false);
else rg_set_can_hear_player(id, iTarget, true);
client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4%s^1 al jugador ^4%s^1!", i_CanHear ? "muteado" : "desmuteado", szName);
Por qué estás comparando los userid si lo puedes hacer con el id? (Pensativo)
no veo el cambio.
si usas ternero usalo en el anterior, también podrías negar i_CanHear dentro de rg_set_can_hear_player y el otro, no veo un cambio significativo.
buen aporte gabs siempre humilde.
for(new i = 1; i <= g_maxPlayers; i++)
Mensajes: 144
Temas: 4
Registro en: Mar 2018
Reputación:
8
16/03/2021, 10:17 PM
(Última modificación: 16/03/2021, 10:18 PM por GabsHp.)
(16/03/2021, 09:23 PM)[N]drs escribió: Código PHP: switch(i_CanHear) { case true: { rg_set_can_hear_player(id, iTarget, false); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!", szName); } case false: { rg_set_can_hear_player(id, iTarget, true); client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4desmuteado^1 al jugador ^4%s^1!", szName); } }
Código PHP: if(i_CanHear) rg_set_can_hear_player(id, iTarget, false);
else rg_set_can_hear_player(id, iTarget, true);
client_print_color(id, print_team_default, "^4[ReAPI]^1 Has ^4%s^1 al jugador ^4%s^1!", i_CanHear ? "muteado" : "desmuteado", szName);
Por qué estás comparando los userid si lo puedes hacer con el id? (Pensativo)
Lo de reemplazar el switch no cambia nada, solo ahorrarte lineas y eso creo que ya es más a la costumbre de cada quien. Y lo de los id's es para evitar mezclar id's cuando los jugadores se desconectan.
(16/03/2021, 09:34 PM)Hypnotize escribió: no veo el cambio.
si usas ternero usalo en el anterior, también podrías negar i_CanHear dentro de rg_set_can_hear_player y el otro, no veo un cambio significativo.
buen aporte gabs siempre humilde.
for(new i = 1; i <= g_maxPlayers; i++)
Gracias, ya sabes que no se me da mucho esto pero trato de aprender y aportar algo jajaja
Ahí reviso lo del for
Mensajes: 78
Temas: 21
Registro en: Aug 2014
Reputación:
0
Muy bueno, gracias por el aporte. Una pregunta... porque ocupas esto así:
Código PHP: public client_putinserver(id) { SetPlayerBit(g_iConnected, id); }
public client_disconnected(id) { ClearPlayerBit(g_iConnected, id); }
en vez de colocarlo como true y false?, tiene algún beneficio hacerlo así?
Gracias <3
Mensajes: 144
Temas: 4
Registro en: Mar 2018
Reputación:
8
(16/03/2021, 10:46 PM)iZeus escribió: Muy bueno, gracias por el aporte. Una pregunta... porque ocupas esto así:
Código PHP: public client_putinserver(id) { SetPlayerBit(g_iConnected, id); }
public client_disconnected(id) { ClearPlayerBit(g_iConnected, id); }
en vez de colocarlo como true y false?, tiene algún beneficio hacerlo así?
Gracias <3
Es funcional a la hora de tener que usar booleanos, es para lo que yo lo uso.
(27/04/2014, 12:38 PM)Neeeeeeeeeel.- escribió: Depende como uses los bits rocccox, si creas una variable y usas un solo bit, es al pedo ya que estas desperdiciando 31bits que estan reservados en memoria para esa variable.
No sé explicarlo muy bien pero hay un thread donde hablan sobre eso, te recomiendo leerlo, ahí explican la importancia de usar bits.
https://amxmodx-es.com/Thread-TUT-Llaves...les-y-char
Mensajes: 200
Temas: 56
Registro en: Oct 2020
Reputación:
1
podrias agregar para que un administrador pueda mutear a un jugador
Pawn Básico no critiquen xD
Mensajes: 144
Temas: 4
Registro en: Mar 2018
Reputación:
8
(25/03/2021, 11:30 PM)Meliodas escribió: podrias agregar para que un administrador pueda mutear a un jugador
No sería óptimo, es mejor así. Si no quieres escuchar a alguien pues simplemente lo muteas XD
Mensajes: 200
Temas: 56
Registro en: Oct 2020
Reputación:
1
(25/03/2021, 11:32 PM)GabsHp escribió: No sería óptimo, es mejor así. Si no quieres escuchar a alguien pues simplemente lo muteas XD
pero si el jugador lo hace por joder y el usuario no sabe y no quiere pues un administrador podria mutear a esa personas para todos y seria una opcion buena
Pawn Básico no critiquen xD
Mensajes: 200
Temas: 56
Registro en: Oct 2020
Reputación:
1
como se le podria agregar un mute global para que todos dejemos de escuchar a ese jugador muteado
Pawn Básico no critiquen xD
|