[TUT] Hookear Say. - K.-' - 20/06/2014
Antes de empezar queria decirles que nose si es la forma correcta de hookear , pero a mi me funciono
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(szSay, charsmax(szSay)) /* =================================== */ /* Removemos las comillas que se forman en el read_args al principio y fin del texto escrito */ remove_quotes(szSay) /* =================================== */ replace_all(szSay, charsmax(szSay), "%", " ") /* Creamos un array estatico para obtener el nombre del jugador */ static szNombre[32] /* =================================== */ /* Obtemeos el nombre del jugador */ get_user_name(id, szNombre, 32) 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", szNombre, g_level[id], szSay) // mensaje que es CT , nombre , level , lo que escribio } else ChatColor(0, "!t[ CT ][ MUERTO ][ %s ][ !gLevel %d !t]!y: %s", szNombre, g_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", szNombre, g_level[id], szSay) // mensaje que es TT , nombre , level , lo que escribio } else ChatColor(0, "!t[ TT ][MUERTO][ %s ][ !gLevel %d !t]!y: %s", szNombre, g_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", szNombre, szSay) } } return PLUGIN_HANDLED // magia para que no aparesca 2 veces el mensaje }
// stock de chatcolor stock ChatColor(const index, const input[], any:...) { new count = 1, players[32], len static msg[192] len = formatex(msg,charsmax( msg ), ""); vformat(msg[len], charsmax(msg), input, 3) msg[191] = '^0'; replace_all(msg, 190, "!g", "^4") // Color Verde replace_all(msg, 190, "!y", "^1") // Color Normal replace_all(msg, 190, "!t", "^3") // Color de Equipo if (index) players[0] = index; 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(); } } } }
yo cuando lo vi ya entendia :3 espero que entiendan ustedes , nose si
esta explicado bien espero que lo disfruten n.n Saludos
Imagen :
edit : ustedes tienen que modificar la variable de su nivel , esa es la que yo uso xD Saludos.
lo queria hacer con variables tipo :
new vivo = is_user_alive(id)
pero me tiraba warning
RE: [TUT] Hookear Say. - [R]ak - 20/06/2014
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
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
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.
RE: [TUT] Hookear Say. - Pipa Roja - 20/06/2014
no es la mejor forma de hacerlo :3 podrias :
Código PHP: public cmdSay(id) { static Text[192]; read_args(Text, charsmax(Text)) remove_quotes(Text) replace_all(Text, charsmax(Text), "%", "")
if(!ValidMessage(Text) || equal(Text, "") || equal(Text, " ")) return PLUGIN_HANDLED; formatex(Message, charsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s", get_user_team(id) == 3 ? "^x01[Espectador] " : !Alive ? "^x01[Muerto] " : "", g_team[id]/* Podrias poner con enum*/, g_playername[id] , g_level[id], Text)
for( new i = 1; i <= g_maxplayers; i++ ) { if(!is_user_connected(i) || is_user_alive(i) != Alive) continue;
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, i) write_byte(id) write_string(Message) message_end() } return PLUGIN_HANDLED_MAIN; }
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(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 ?
RE: [TUT] Hookear Say. - alan_el_more - 20/06/2014
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_Plugins_(AMX_Mod_X_Scripting)
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(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(Text, charsmax(Text)) remove_quotes(Text) replace_all(Text, charsmax(Text), "%", "")
if(!ValidMessage(Text) || equal(Text, "") || equal(Text, " ")) return PLUGIN_HANDLED; formatex(Message, charsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s", get_user_team(id) == 3 ? "^x01[Espectador] " : !Alive ? "^x01[Muerto] " : "", g_team[id]/* Podrias poner con enum*/, g_playername[id] , g_level[id], Text)
for( new i = 1; i <= g_maxplayers; i++ ) { if(!is_user_connected(i) || is_user_alive(i) != Alive) continue;
message_begin(MSG_ONE_UNRELIABLE, get_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 creo que el tut que postee es mas facil que la que tu posteaste
pero la tuya obiamente esta mas optimizada. Saludos :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_Plugins_(AMX_Mod_X_Scripting)
n.n hay corrijo :3
edit : si esta vivo o muerto como le hago ?
RE: [TUT] Hookear Say. - alan_el_more - 20/06/2014
(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(Text, charsmax(Text)) remove_quotes(Text) replace_all(Text, charsmax(Text), "%", "")
if(!ValidMessage(Text) || equal(Text, "") || equal(Text, " ")) return PLUGIN_HANDLED; formatex(Message, charsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s", get_user_team(id) == 3 ? "^x01[Espectador] " : !Alive ? "^x01[Muerto] " : "", g_team[id]/* Podrias poner con enum*/, g_playername[id] , g_level[id], Text)
for( new i = 1; i <= g_maxplayers; i++ ) { if(!is_user_connected(i) || is_user_alive(i) != Alive) continue;
message_begin(MSG_ONE_UNRELIABLE, get_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 //
RE: [TUT] Hookear Say. - Pipa Roja - 20/06/2014
/* 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)
RE: [TUT] Hookear Say. - [R]ak - 20/06/2014
(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(Text, charsmax(Text)) remove_quotes(Text) replace_all(Text, charsmax(Text), "%", "")
if(!ValidMessage(Text) || equal(Text, "") || equal(Text, " ")) return PLUGIN_HANDLED; formatex(Message, charsmax(Message), "%s^x04%s ^x03%s ^x04[lvl: %d]^x01 : %s", get_user_team(id) == 3 ? "^x01[Espectador] " : !Alive ? "^x01[Muerto] " : "", g_team[id]/* Podrias poner con enum*/, g_playername[id] , g_level[id], Text)
for( new i = 1; i <= g_maxplayers; i++ ) { if(!is_user_connected(i) || is_user_alive(i) != Alive) continue;
message_begin(MSG_ONE_UNRELIABLE, get_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(Text, charsmax(Text)) remove_quotes(Text) replace_all(Text, charsmax(Text), "%", "") if(!ValidMessage(Text)) return PLUGIN_HANDLED static Name[32], Alive, Message[192] get_user_name(id, Name, charsmax(Name)) Alive = is_user_alive(id) formatex(Message, charsmax(Message), "^x04%s %s^x03%s^x01 : %s", g_AdminTag[id], get_user_team(id) == SPECT ? "^x01*SPEC* " : !Alive ? "^x01*DEAD* " : "", Name, Text) for( new i = 1; i <= g_MaxPlayers; i++ ) { if(!is_user_connected(i) || is_user_alive(i) != Alive) continue; message_begin(MSG_ONE_UNRELIABLE, g_MsgSayText, _, i) write_byte(id) write_string(Message) message_end() } return PLUGIN_HANDLED; }
ValidMessage(text[]) { static len, i len = strlen(text) if(!len) return false for(i = 0; i < len; i++) { if( text[i] != ' ' ) { return true } }
return false }
ese es de mi plugin TagSay
RE: [TUT] Hookear Say. - Pipa Roja - 20/06/2014
? enserio ? lol ami me lo paso el 3mcy-daimon-t perdón Rak no sabia que era tullo
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(20/06/2014, 07:39 PM)Pipa Roja escribió: /* 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)
no es que me falto , no lo quise hacer
RE: [TUT] Hookear Say. - [R]ak - 20/06/2014
La cantidad maxima de caracteres que puede tener un nombre es 31 osea 32 celdas;
Entiendo q a muchos le resulte facil poner el numero de celdas que tiene un array -1; pero aver; usen charsmax(array); por que después tienen q aumentar/disminuir el tamaño de un array y tienen q cambiarlo en todas las funciones que pusieron su numero a mano; sean prolijos al programar
RE: [TUT] Hookear Say. - mongito100 - 20/06/2014
seria conveniente q aregles todo lo que te dicen...
usa un PLUGIN_HANDLED_MAIN en ves de PLUGIN_HANDLED
Sigo sin entender por q la gente trata de hacer tutoriales cuando no esta capacitada
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(20/06/2014, 08:28 PM)mongito100 escribió: seria conveniente q aregles todo lo que te dicen...
usa un PLUGIN_HANDLED_MAIN en ves de PLUGIN_HANDLED
Sigo sin entender por q la gente trata de hacer tutoriales cuando no esta capacitada
intento arreglar las cosas , pero tanto no entiendo , ya arregle algunas cosas . estoy viendo lo otro.
RE: [TUT] Hookear Say. - [R]ak - 20/06/2014
(20/06/2014, 08:28 PM)mongito100 escribió: seria conveniente q aregles todo lo que te dicen...
usa un PLUGIN_HANDLED_MAIN en ves de PLUGIN_HANDLED
Sigo sin entender por q la gente trata de hacer tutoriales cuando no esta capacitada
ya lo dije en otro post; EXPLICA por que cambiar el tipo de return
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(20/06/2014, 08:42 PM)[R]ak escribió: (20/06/2014, 08:28 PM)mongito100 escribió: seria conveniente q aregles todo lo que te dicen...
usa un PLUGIN_HANDLED_MAIN en ves de PLUGIN_HANDLED
Sigo sin entender por q la gente trata de hacer tutoriales cuando no esta capacitada
ya lo dije en otro post; EXPLICA por que cambiar el tipo de return
lo cambio por que mongito me dice , o obiamente mongito sabe mas que yo :b y tambien corrijo los errores que puedo correjir pero no le veo la diferencia , al final que return dejo ?
cual post ? O.o ?
edit : el de CSAxel de las habilidades ?
RE: [TUT] Hookear Say. - [R]ak - 20/06/2014
Código: #define PLUGIN_CONTINUE 0 /* Results returned by public functions */
#define PLUGIN_HANDLED 1 /* stop other plugins */
#define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */
yo se la diferencia; pero veo muchas veces q dicen cambia X return por X y no explican por que y asi terminan mareando a los q no saben
edit: y si; lo habia dicho en el post de CSAxel
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(20/06/2014, 08:50 PM)[R]ak escribió: Código: #define PLUGIN_CONTINUE 0 /* Results returned by public functions */
#define PLUGIN_HANDLED 1 /* stop other plugins */
#define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */
yo se la diferencia; pero veo muchas veces q dicen cambia X return por X y no explican por que y asi terminan mareando a los q no saben
edit: y si; lo habia dicho en el post de CSAxel
ok haora lo arreglo :3
RE: [TUT] Hookear Say. - mongito100 - 20/06/2014
Cita:/* to use in client_command(), continue all plugins but stop the command */
tan simple como q si registro el say de /verduras en otro plugin si lo toma; si pusiera plugin_handle no lo tomaria salvo q estuviera en la lista de plugins antes
RE: [TUT] Hookear Say. - Mía - 20/06/2014
Código PHP: replace_all(szSay, charsmax(szSay), "%", " ")
Es importante. Si no lo usas algun cliente te podría tumbar el servidor fácilmente...
RE: [TUT] Hookear Say. - K.-' - 20/06/2014
(20/06/2014, 11:50 PM)Mario AR. escribió: Código PHP: replace_all(szSay, charsmax(szSay), "%", " ")
Es impotante. Si no lo usas algun cliente te podría tumbar el servidor fácilmente...
arreglado xD
RE: [TUT] Hookear Say. - cLAANS - 21/06/2014
Puedo poner espacios y saldría mi nombre solo.
Puedo escribir en verde, azul y rojo.
Podrías poner una opción para lo siguiente:
Con la forma que estas hookeando el say si yo estoy vivo y alguien esta muerto nos podremos leer entre los 2 osea totalmente diferente a como es el chat del cs default
¡ Buen aporte !
Saludos,
cLAANS.-
RE: [TUT] Hookear Say. - K.-' - 21/06/2014
(21/06/2014, 03:41 AM)cLAANS escribió: Puedo poner espacios y saldría mi nombre solo.
Puedo escribir en verde, azul y rojo.
Podrías poner una opción para lo siguiente:
Con la forma que estas hookeando el say si yo estoy vivo y alguien esta muerto nos podremos leer entre los 2 osea totalmente diferente a como es el chat del cs default
¡ Buen aporte !
Saludos,
cLAANS.-
es sarcasmo o es lo que yo pienso parecio eso
RE: [TUT] Hookear Say. - cLAANS - 21/06/2014
(21/06/2014, 03:53 AM)K.- escribió: (21/06/2014, 03:41 AM)cLAANS escribió: Puedo poner espacios y saldría mi nombre solo.
Puedo escribir en verde, azul y rojo.
Podrías poner una opción para lo siguiente:
Con la forma que estas hookeando el say si yo estoy vivo y alguien esta muerto nos podremos leer entre los 2 osea totalmente diferente a como es el chat del cs default
¡ Buen aporte !
Saludos,
cLAANS.-
es sarcasmo o es lo que yo pienso parecio eso
No, no es sarcasmo
Saludos,
cLAANS.-
|