Enviar respuesta 
[TUT] Hookear Say.
Autor Mensaje
K.-' Sin conexión
Miembro Destacado


Mensajes: 1,409
Registro en: Mar 2014
Reputación: 13
Mensaje: #1
[TUT] Hookear Say.
Antes de empezar queria decirles que nose si es la forma correcta de hookear , pero a mi me funciono Lengua

Fuente : https://forums.alliedmods.net/showthread.php?t=213368

TUT :

Código PHP:
#include <amxmodx> 
#include <cstrike>

public plugin_init() 

    
register_plugin("Hook Say Basic""0.1""Morte"
    
    
/* Registramos comando say del cliente */ 
    
register_clcmd("say""message_saytext"
    
/* =================================== */ 


new 
g_level[33]

public 
message_saytext(id

    
/* Creamos un array estatico - Este tiene un tamaño de 192 porque seria */ 
    /* el máximo de caracteres que se van a poder escribir */ 
    
static szSay[192
    
/* =================================== */ 
    
    /* Obtenemos lo que escribio el jugador */ 
    
read_args(szSaycharsmax(szSay)) 
    
/* =================================== */ 
    
    /* Removemos las comillas que se forman en el read_args al principio y fin del texto escrito  */ 
    
remove_quotes(szSay
    
/* =================================== */
    
    
replace_all(szSaycharsmax(szSay), "%"" "
    
    
/* Creamos un array estatico para obtener el nombre del jugador */ 
    
static szNombre[32
    
/* =================================== */ 
    
    /* Obtemeos el nombre del jugador */ 
    
get_user_name(idszNombre32
    
    switch(
cs_get_user_team(id))
    {
        case 
CS_TEAM_CT// en el caso de que sea CT
        
{
            if(
is_user_alive(id)) // si esta vivo el CT
            
{
                
ChatColor(0"!t[ CT ][ %s ][ !gLevel %d !t]!y: %s"szNombreg_level[id], szSay// mensaje que es CT , nombre , level , lo que escribio
            
}
            else 
ChatColor(0"!t[ CT ][ MUERTO ][ %s ][ !gLevel %d !t]!y: %s"szNombreg_level[id], szSay// lo mismo pero tambien que esta muerto
        
}     // else : si no esta vivo , mejor dicho caso contrario
        
        
case CS_TEAM_T// si es TT
        
{
            if (
is_user_alive(id)) // si esta vivo el TT
            
{
                
ChatColor(0"!t[ TT ][ %s ][ !gLevel %d !t]!y: %s"szNombreg_level[id], szSay// mensaje que es TT , nombre , level , lo que escribio
            
}
            else 
ChatColor(0"!t[ TT ][MUERTO][ %s ][ !gLevel %d !t]!y: %s"szNombreg_level[id], szSay// lo mismo pero te muestra que estas muerto.
        
// else : si no esta vivo , mejor dicho caso contrario 
        
        
case CS_TEAM_SPECTATOR:
        {
            
ChatColor(0"!t[ Spectator ][ %s ]!y: %s"szNombreszSay)
        }
    } 
    return 
PLUGIN_HANDLED // magia para que no aparesca 2 veces el mensaje
}

// stock de chatcolor
stock ChatColor(const index, const input[], any:...)
{    
    new 
count 1players[32], len
    
static msg[192]
    
    
len formatex(msg,charsmaxmsg ), "");
    
vformat(msg[len], charsmax(msg), input3)
    
msg[191] = '^0';
    
    
replace_all(msg190"!g""^4"// Color Verde
    
replace_all(msg190"!y""^1"// Color Normal
    
replace_all(msg190"!t""^3"// Color de Equipo
    
    
if (indexplayers[0] = index; else get_players(playerscount"ch")
    {
        for (new 
0counti++)
        {
            if (
is_user_connected(players[i]))
            {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i])
                
write_byte(players[i]);
                
write_string(msg);
                
message_end();
            }
        }
    }


yo cuando lo vi ya entendia :3 espero que entiendan ustedes , nose si
esta explicado bien Lengua espero que lo disfruten n.n Saludos

Imagen :

Image

edit : ustedes tienen que modificar la variable de su nivel , esa es la que yo uso pacman xD Saludos.

lo queria hacer con variables tipo :

new vivo = is_user_alive(id)

pero me tiraba warning

(10/10/2014 06:38 PM)RauliTop escribió:  
(10/10/2014 04:40 PM)ivan escribió:  no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos :thatswhatshesaid:tutoriales Proud me encataan Whatever
(Este mensaje fue modificado por última vez en: 20/06/2014 11:54 PM por K.-'.)
20/06/2014 07:16 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[R]ak Sin conexión
Miembro Pandawan


Panda Plugin developer Donador Plugin popular
Mensajes: 633
Registro en: Oct 2013
Reputación: 22
Mensaje: #2
RE: [TUT] Hookear Say.
El máximo de caracteres que puede escribir un player es 191 por ende la cantidad maximas de celdas serian 192

Tenes que remplazar si el player escribe "%" por ""

Tenes que chequear que el player escribiera algo y si escribió algo no sean solo espacios

Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

Image
Link
20/06/2014 07:23 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
K.-' Sin conexión
Miembro Destacado


Mensajes: 1,409
Registro en: Mar 2014
Reputación: 13
Mensaje: #3
RE: [TUT] Hookear Say.
arreglado.

en la segunda decis esto :

ChatColor(0, "!t[ TT ][ %s ][ !gLevel %d !t]!y: %s", szNombre, g_level[id], szSay) ?

en la tercera como hago que si escribe espacios directamente no haga nada , recien probe escribiendo espacios y lo mostraba en el say escribiendo nada.

(10/10/2014 06:38 PM)RauliTop escribió:  
(10/10/2014 04:40 PM)ivan escribió:  no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos :thatswhatshesaid:tutoriales Proud me encataan Whatever
20/06/2014 07:29 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pipa Roja Sin conexión
Miembro Sr.


Trebol purpura
Mensajes: 597
Registro en: Nov 2013
Reputación: 11
Mensaje: #4
RE: [TUT] Hookear Say.
no es la mejor forma de hacerlo :3 podrias :
Código PHP:
public cmdSay(id)
{
    static 
Text[192]; read_args(Textcharsmax(Text))
    
remove_quotes(Text)
    
replace_all(Textcharsmax(Text), "%""")

    if(!
ValidMessage(Text) || equal(Text"") || equal(Text" "))
    return 
PLUGIN_HANDLED;
    
    
formatex(Messagecharsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s"get_user_team(id) == "^x01[Espectador] " : !Alive "^x01[Muerto] " ""g_team[id]/* Podrias poner con enum*/g_playername[id] , g_level[id], Text)

    for( new 
1<= g_maxplayersi++ ) 
    {
        if(!
is_user_connected(i) || is_user_alive(i) != Alive) continue;

        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _i)
        
write_byte(id)
        
write_string(Message)
        
message_end()
    }
    return 
PLUGIN_HANDLED_MAIN;


20/06/2014 07:31 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
K.-' Sin conexión
Miembro Destacado


Mensajes: 1,409
Registro en: Mar 2014
Reputación: 13
Mensaje: #5
RE: [TUT] Hookear Say.
(20/06/2014 07:23 PM)[R]ak escribió:  El máximo de caracteres que puede escribir un player es 191 por ende la cantidad maximas de celdas serian 192

Tenes que remplazar si el player escribe "%" por ""

Tenes que chequear que el player escribiera algo y si escribió algo no sean solo espacios

edit : si el player escribe '%' en say se muestra el % ej :

Kira : %

que pasaria ? si lo dejo asi ?

(10/10/2014 06:38 PM)RauliTop escribió:  
(10/10/2014 04:40 PM)ivan escribió:  no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos :thatswhatshesaid:tutoriales Proud me encataan Whatever
20/06/2014 07:32 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
alan_el_more Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 986
Registro en: Oct 2013
Reputación: 16
Mensaje: #6
RE: [TUT] Hookear Say.
Estas llamando cs_get_user_team tres veces innecesariamente cuando podes llamarlo una vez de la siguiente forma:

Código PHP:
new iPlayerTeam cs_get_user_team(id)
    
switch(
iPlayerTeam)
{
    case 
CS_TEAM_CT//
    
case CS_TEAM_T//
    
case CS_TEAM_SPECTATOR//


Fuente: https://wiki.alliedmods.net/Optimizing_P...Scripting)


Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
20/06/2014 07:33 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
K.-' Sin conexión
Miembro Destacado


Mensajes: 1,409
Registro en: Mar 2014
Reputación: 13
Mensaje: #7
RE: [TUT] Hookear Say.
(20/06/2014 07:31 PM)Pipa Roja escribió:  no es la mejor forma de hacerlo :3 podrias :
Código PHP:
public cmdSay(id)
{
    static 
Text[192]; read_args(Textcharsmax(Text))
    
remove_quotes(Text)
    
replace_all(Textcharsmax(Text), "%""")

    if(!
ValidMessage(Text) || equal(Text"") || equal(Text" "))
    return 
PLUGIN_HANDLED;
    
    
formatex(Messagecharsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s"get_user_team(id) == "^x01[Espectador] " : !Alive "^x01[Muerto] " ""g_team[id]/* Podrias poner con enum*/g_playername[id] , g_level[id], Text)

    for( new 
1<= g_maxplayersi++ ) 
    {
        if(!
is_user_connected(i) || is_user_alive(i) != Alive) continue;

        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _i)
        
write_byte(id)
        
write_string(Message)
        
message_end()
    }
    return 
PLUGIN_HANDLED_MAIN;


esa puede ser la mejor forma pero me quedo con la mia que la entiendo mas Lengua creo que el tut que postee es mas facil que la que tu posteaste
pero la tuya obiamente esta mas optimizada. Saludos Gran sonrisa :3 y gracias
por dar tu opinion n.n

(20/06/2014 07:33 PM)alan_el_more escribió:  Estas llamando cs_get_user_team tres veces innecesariamente cuando podes llamarlo una vez de la siguiente forma:

Código PHP:
new iPlayerTeam cs_get_user_team(id)
    
switch(
iPlayerTeam)
{
    case 
CS_TEAM_CT//
    
case CS_TEAM_T//
    
case CS_TEAM_SPECTATOR//


Fuente: https://wiki.alliedmods.net/Optimizing_P...Scripting)

n.n Whatever hay corrijo :3

edit : si esta vivo o muerto como le hago ?

(10/10/2014 06:38 PM)RauliTop escribió:  
(10/10/2014 04:40 PM)ivan escribió:  no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos :thatswhatshesaid:tutoriales Proud me encataan Whatever
(Este mensaje fue modificado por última vez en: 20/06/2014 07:36 PM por K.-'.)
20/06/2014 07:34 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
alan_el_more Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 986
Registro en: Oct 2013
Reputación: 16
Mensaje: #8
RE: [TUT] Hookear Say.
(20/06/2014 07:31 PM)Pipa Roja escribió:  no es la mejor forma de hacerlo :3 podrias :
Código PHP:
public cmdSay(id)
{
    static 
Text[192]; read_args(Textcharsmax(Text))
    
remove_quotes(Text)
    
replace_all(Textcharsmax(Text), "%""")

    if(!
ValidMessage(Text) || equal(Text"") || equal(Text" "))
    return 
PLUGIN_HANDLED;
    
    
formatex(Messagecharsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s"get_user_team(id) == "^x01[Espectador] " : !Alive "^x01[Muerto] " ""g_team[id]/* Podrias poner con enum*/g_playername[id] , g_level[id], Text)

    for( new 
1<= g_maxplayersi++ ) 
    {
        if(!
is_user_connected(i) || is_user_alive(i) != Alive) continue;

        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _i)
        
write_byte(id)
        
write_string(Message)
        
message_end()
    }
    return 
PLUGIN_HANDLED_MAIN;


No

Código PHP:
new iAlive
iAlive 
is_user_alive(id)

if(
iAlive)
//
else
// 


Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
(Este mensaje fue modificado por última vez en: 20/06/2014 07:37 PM por alan_el_more.)
20/06/2014 07:36 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pipa Roja Sin conexión
Miembro Sr.


Trebol purpura
Mensajes: 597
Registro en: Nov 2013
Reputación: 11
Mensaje: #9
RE: [TUT] Hookear Say.
/* Registramos comando say del cliente */
register_clcmd("say", "message_saytext")
/* =================================== */


te falto
register_clcmd("say_team", "message_saytext")


c&p esto es lo mismo que publico LuKks solo cambiaste las variables y editaste los textos y pusiste get_user_team ademas de que lo ayas puesto de la peor forma( la llamas mucho)

(Este mensaje fue modificado por última vez en: 20/06/2014 07:42 PM por Pipa Roja.)
20/06/2014 07:39 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[R]ak Sin conexión
Miembro Pandawan


Panda Plugin developer Donador Plugin popular
Mensajes: 633
Registro en: Oct 2013
Reputación: 22
Mensaje: #10
RE: [TUT] Hookear Say.
(20/06/2014 07:36 PM)alan_el_more escribió:  
(20/06/2014 07:31 PM)Pipa Roja escribió:  no es la mejor forma de hacerlo :3 podrias :
Código PHP:
public cmdSay(id)
{
    static 
Text[192]; read_args(Textcharsmax(Text))
    
remove_quotes(Text)
    
replace_all(Textcharsmax(Text), "%""")

    if(!
ValidMessage(Text) || equal(Text"") || equal(Text" "))
    return 
PLUGIN_HANDLED;
    
    
formatex(Messagecharsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s"get_user_team(id) == "^x01[Espectador] " : !Alive "^x01[Muerto] " ""g_team[id]/* Podrias poner con enum*/g_playername[id] , g_level[id], Text)

    for( new 
1<= g_maxplayersi++ ) 
    {
        if(!
is_user_connected(i) || is_user_alive(i) != Alive) continue;

        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _i)
        
write_byte(id)
        
write_string(Message)
        
message_end()
    }
    return 
PLUGIN_HANDLED_MAIN;


No

Código PHP:
new iAlive
iAlive 
is_user_alive(id)

if(
iAlive)
//
else
// 

me lo copio casi todo de algun plugin mio por q yo lo arme asi;

Código PHP:
public cmdSay(id)
{
    static 
Text[192]
    
read_args(Textcharsmax(Text))
    
remove_quotes(Text)
    
    
replace_all(Textcharsmax(Text), "%""")
    
    if(!
ValidMessage(Text))
        return 
PLUGIN_HANDLED
    
    
static Name[32], AliveMessage[192]
    
get_user_name(idNamecharsmax(Name))
    
    
Alive is_user_alive(id)
    
    
formatex(Messagecharsmax(Message), "^x04%s %s^x03%s^x01 : %s"g_AdminTag[id], get_user_team(id) == SPECT "^x01*SPEC* " : !Alive "^x01*DEAD* " ""NameText)
    
    for( new 
1<= g_MaxPlayersi++ ) {
        if(!
is_user_connected(i) || is_user_alive(i) != Alive)
            continue;
        
        
message_begin(MSG_ONE_UNRELIABLEg_MsgSayText_i)
        
write_byte(id)
        
write_string(Message)
        
message_end()
    }
    
    return 
PLUGIN_HANDLED;
}

ValidMessage(text[]) {
    static 
leni
    len 
strlen(text)
    
    if(!
len)
        return 
false
    
    
for(0leni++) {
        if( 
text[i] != ' ' ) {
            return 
true
        
}
    }

    return 
false


ese es de mi plugin TagSay

Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

Image
Link
(Este mensaje fue modificado por última vez en: 20/06/2014 07:50 PM por [R]ak.)
20/06/2014 07:50 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS