[ReAPI] Mute Menu
#1
[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_maxPlayersg_iConnected;

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
g_maxPlayers get_maxplayers();

    
register_clcmd("say /mute""muteMenu");
}

public 
client_putinserver(id)
{
    
SetPlayerBit(g_iConnectedid);
}

public 
client_disconnected(id)
{
    
ClearPlayerBit(g_iConnectedid);
}

public 
muteMenu(id)
{
    if(!
is_user_connected(id))
        return 
PLUGIN_HANDLED;

    static 
iMenuszTitle[32], szText[64], szIndex16 ], bool:i_CanHear;
    
formatex(szTitlecharsmax(szTitle), "\r[ReAPI] \wMute Menu");

    
iMenu menu_create(szTitle"muteMenu_Handler");
    for(new 
1<= g_maxPlayersi++)
    {
        if(!
GetPlayerBit(g_iConnectedi))
            continue;
        if(
== id)
            continue;
        static 
szName[33];
        
get_user_name(iszNamecharsmax(szName));
        
i_CanHear rg_get_can_hear_player(idi);
        
formatex(szTextcharsmax(szText), "\y[\w%s\y]    \r[\w%s\r]"szNamei_CanHear "ON" "OFF");
        
formatex(szIndexcharsmax(szIndex), "%d#%d"iget_user_userid(i));

        
menu_additem(iMenuszTextszIndex);
    }
    
menu_setprop(iMenuMPROP_BACKNAME"Atrás");
    
menu_setprop(iMenuMPROP_NEXTNAME"Siguiente");
    
menu_setprop(iMenuMPROP_EXITNAME"Salir");
    
menu_display(idiMenu);
    return 
PLUGIN_HANDLED;
}


public 
muteMenu_Handler(idiMenuiItem)
{
    if((
iItem == MENU_EXIT) || !GetPlayerBit(g_iConnectedid))
    {
        
menu_destroyiMenu );
        
        return 
PLUGIN_HANDLED;
    }
    
    new 
szInfo[16], szTarget[4], szUserId[8];
    
    new 
iNumiTargetiUserId;
    
    
menu_item_getinfo(iMenuiItemiNumszInfocharsmax(szInfo), __iNum);
    
menu_destroyiMenu );
    
    
strtok(szInfoszTargetcharsmax(szTarget), szUserIdcharsmax(szUserId), '#');
    
    
iTarget str_to_num(szTarget);
    
iUserId str_to_num(szUserId);

    if (!
GetPlayerBit(g_iConnectediTarget) || (get_user_userid(iTarget) != iUserId)) 
    {
        
client_print_color(idprint_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(idiTarget);
    
get_user_name(iTargetszNamecharsmax(szName));
    switch(
i_CanHear)
    {
        case 
true:
        {
            
rg_set_can_hear_player(idiTargetfalse);
            
client_print_color(idprint_team_default"^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!"szName);
        }
        case 
false:
        {
            
rg_set_can_hear_player(idiTargettrue);
            
client_print_color(idprint_team_default"^4[ReAPI]^1 Has ^4desmuteado^1 al jugador ^4%s^1!"szName);
        }
    }
    
muteMenu(id);
    return 
PLUGIN_HANDLED;

Responder
#2
Código PHP:
switch(i_CanHear)
{
    case 
true:
    {
        
rg_set_can_hear_player(idiTargetfalse);
        
client_print_color(idprint_team_default"^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!"szName);
    }
    case 
false:
    {
        
rg_set_can_hear_player(idiTargettrue);
        
client_print_color(idprint_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(idiTargetfalse);

else
    
rg_set_can_hear_player(idiTargettrue);

client_print_color(idprint_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)
Responder
#3
(16/03/2021, 09:23 PM)[N]drs escribió:
Código PHP:
if(i_CanHear)
    
rg_set_can_hear_player(idiTargetfalse);

else
    
rg_set_can_hear_player(idiTargettrue);

client_print_color(idprint_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++)
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#4
(16/03/2021, 09:23 PM)[N]drs escribió:
Código PHP:
switch(i_CanHear)
{
    case true:
    {
        rg_set_can_hear_player(idiTargetfalse);
        client_print_color(idprint_team_default"^4[ReAPI]^1 Has ^4muteado^1 al jugador ^4%s^1!"szName);
    }
    case false:
    {
        rg_set_can_hear_player(idiTargettrue);
        client_print_color(idprint_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(idiTargetfalse);

else
 
rg_set_can_hear_player(idiTargettrue);

client_print_color(idprint_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
Mario
Responder
#5
Muy bueno, gracias por el aporte. Una pregunta... porque ocupas esto así:

Código PHP:
public client_putinserver(id)
{
    
SetPlayerBit(g_iConnectedid);
}

public 
client_disconnected(id)
{
    
ClearPlayerBit(g_iConnectedid);


en vez de colocarlo como true y false?, tiene algún beneficio hacerlo así?
Gracias <3
Responder
#6
(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_iConnectedid);
}

public 
client_disconnected(id)
{
    ClearPlayerBit(g_iConnectedid);


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
Responder
#7
podrias agregar para que un administrador pueda mutear a un jugador
Pawn Básico no critiquen xD  Approved

Responder
#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
Responder
#9
(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  Approved

Responder
#10
como se le podria agregar un mute global para que todos dejemos de escuchar a ese jugador muteado
Pawn Básico no critiquen xD  Approved

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)