Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
20/06/2014, 07:16 PM
(Última modificación: 20/06/2014, 11:54 PM por K.-'.)
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
(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 buenos tutoriales me encataan
Mensajes: 2,870
Temas: 13
Registro en: Oct 2013
Reputación:
24
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
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 694
Temas: 146
Registro en: Nov 2013
Reputación:
11
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; }
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 1,616
Temas: 19
Registro en: Oct 2013
Reputación:
16
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.
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
20/06/2014, 07:34 PM
(Última modificación: 20/06/2014, 07:36 PM por K.-'.)
(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_P...Scripting)
n.n 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 buenos tutoriales me encataan
Mensajes: 1,616
Temas: 19
Registro en: Oct 2013
Reputación:
16
20/06/2014, 07:36 PM
(Última modificación: 20/06/2014, 07:37 PM por alan_el_more.)
(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 //
Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
Mensajes: 694
Temas: 146
Registro en: Nov 2013
Reputación:
11
20/06/2014, 07:39 PM
(Última modificación: 20/06/2014, 07:42 PM por Pipa Roja.)
/* 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)
Mensajes: 2,870
Temas: 13
Registro en: Oct 2013
Reputación:
24
20/06/2014, 07:50 PM
(Última modificación: 20/06/2014, 07:50 PM por [R]ak.)
(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
Mensajes: 694
Temas: 146
Registro en: Nov 2013
Reputación:
11
? enserio ? lol ami me lo paso el 3mcy-daimon-t perdón Rak no sabia que era tullo
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 2,870
Temas: 13
Registro en: Oct 2013
Reputación:
24
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
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
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
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 2,870
Temas: 13
Registro en: Oct 2013
Reputación:
24
(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
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 2,870
Temas: 13
Registro en: Oct 2013
Reputación:
24
20/06/2014, 08:50 PM
(Última modificación: 20/06/2014, 08:51 PM por [R]ak.)
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
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
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
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
20/06/2014, 11:50 PM
(Última modificación: 21/06/2014, 12:08 AM por Mía.)
Código PHP: replace_all(szSay, charsmax(szSay), "%", " ")
Es importante. Si no lo usas algun cliente te podría tumbar el servidor fácilmente...
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 1,182
Temas: 18
Registro en: Oct 2013
Reputación:
16
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.-
Mi unico plugin.
Tutorial de niveles.
Ayudo, pero no de la manera que quieren, si quieren aprender les servirá lo mio, para pedir el codigo en bandeja tienen la sección 'Pedidos'
(09/11/2017, 09:30 PM)SoundBlaster escribió: Espera y llamo a los power rangers para que me digan la linea de error
Mensajes: 2,105
Temas: 196
Registro en: Mar 2014
Reputación:
13
Mensajes: 1,182
Temas: 18
Registro en: Oct 2013
Reputación:
16
(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.-
Mi unico plugin.
Tutorial de niveles.
Ayudo, pero no de la manera que quieren, si quieren aprender les servirá lo mio, para pedir el codigo en bandeja tienen la sección 'Pedidos'
(09/11/2017, 09:30 PM)SoundBlaster escribió: Espera y llamo a los power rangers para que me digan la linea de error
|