Advertisement
Guest User

Untitled

a guest
Aug 13th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.85 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3.  
  4. new g_maxplayers
  5. new g_msgTeamInfo
  6. new g_msgSayText
  7.  
  8. new g_isconnected[33]
  9. new g_isalive[33]
  10. new g_vip[33]
  11. new g_level[33]
  12. new g_playername[33][32]
  13.  
  14.  
  15. // forward llamada cuando carga el plugin e inicia mapa (1 vez por mapa)
  16. public plugin_init()
  17. {
  18.     // registramos los comandos que utiliza el cliente para mandar los mensajes que saldrán en el chat
  19.     register_clcmd("say", "clcmd_say")
  20.     register_clcmd("say_team", "clcmd_team_say")
  21. }
  22.  
  23. // nuestro chat general se hace aquí
  24. public clcmd_say(id)
  25. {
  26.     static said[191] // creamos la variable que servirá para almacenar todo nuestro string relacionado con el chat
  27.     read_args(said, charsmax(said)) // obtenemos lo que escribimos (ej: say "hola soy yo") ahí obtenemos "hola soy yo"
  28.     remove_quotes(said) // le quitamos las comillas al string
  29.     replace_all(said, charsmax(said), "%", " ") // reemplazamos el % en caso de que alguien lo escriba para evitarnos el famoso bug
  30.    
  31.     // comprobamos que el mensaje sea válido, si no lo es para la función
  32.     if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  33.    
  34.     // variable para almacenar el equipo (la utilizamos después) y otro string para añadir prefijos etc. a lo que dijimos
  35.     static color[11], prefix[91]
  36.     get_user_team(id, color, charsmax(color))
  37.    
  38.     // hacemos uso de nuestro string anterior
  39.     // la primera variable servirá para saber si está vivo el jugador, si no tienen ninguna creada pues utilicen is_user_alive
  40.     // la segunda variable es un ejemplo, por si quieren añadir más cosas, yo le puse el ejemplo de (VIP)
  41.     // tercera variable seguro que la utilizan, la mayoría de los que quieren hacer esto con el chat es para mostrar el nivel de la persona que habla, ni falta decir que g_level es otro ejemplo
  42.     // cuarta variable será el nombre del jugador, si no la tienen cacheada en una variable, pues tendrán que crear una aquí y utilizar get_user_name
  43.     formatex(prefix, charsmax(prefix), "%s%s[Nivel:^x04 %d^x01]^x03 %s", g_isalive[id] ? "^x01" : "^x01*MUERTO* ", g_vip[id] ? "(VIP) " : "", g_level[id], g_playername[id])
  44.    
  45.     // formatex es más rápido, pero aquí conviene utilizar format para no tener que crear 1 variable de más
  46.     // ahora chequeamos que si es admin/VIP (como ejemplo) le ponga lo que dice en verde
  47.     if (is_user_admin(id) || g_vip[id]) format(said, charsmax(said), "^x04%s", said)
  48.     // le añadimos el prefijo a lo que dijo para tenerlo todo en 1 solo string en vez de 2 por separado
  49.     format(said, charsmax(said), "%s^x01 :  %s", prefix, said)
  50.    
  51.     static i, team[11] // variables que utilizaremos para el loop de jugadores, con team obtenemos su equipo porque hará falta cambiarlo para enviar el mensaje con el color correcto de equipo
  52.     for (i = 1; i <= g_maxplayers; i++) // g_maxplayers es otro ejemplo de variable, su valor es get_maxplayers() cacheado en plugin_init
  53.     {
  54.         // otra variable cacheada, si no la tienen utilicen is_user_connected
  55.         // si no está conectado el jugador del loop, paramos y seguimos con otro
  56.         if (!g_isconnected[i]) continue;
  57.        
  58.         // pueden leer el mensaje que se escribió si:
  59.         // es admin el jugador que lo recibirá
  60.         // el que lo envió y el que lo recibirá están los dos vivos
  61.         // el que lo envió y el que lo recibirá están los dos muertos
  62.         // la variable g_isalive ya la expliqué anteriormente
  63.         if (is_user_admin(i) || g_isalive[id] && g_isalive[i] || !g_isalive[id] && !g_isalive[i])
  64.         {
  65.             // obtenemos el equipo del que va a recibir el mensaje
  66.             get_user_team(i, team, charsmax(team))
  67.             // le cambiamos el equipo para que se muestre en el color correcto el ^x03
  68.             changeTeamInfo(i, color)
  69.             // le mandamos el mensaje
  70.             writeMessage(i, said)
  71.             // le dejamos el equipo como lo tenía antes
  72.             changeTeamInfo(i, team)
  73.         }
  74.     }
  75.    
  76.     // importante para que funcionen otros plugins que hookeen el chat con comandos
  77.     return PLUGIN_HANDLED_MAIN;
  78. }
  79.  
  80. // nuestro chat de equipo se hace aquí
  81. public clcmd_team_say(id)
  82. {
  83.     static said[191] // creamos la variable que servirá para almacenar todo nuestro string relacionado con el chat
  84.     read_args(said, charsmax(said)) // obtenemos lo que escribimos (ej: say "hola soy yo") ahí obtenemos "hola soy yo"
  85.     remove_quotes(said) // le quitamos las comillas al string
  86.     replace_all(said, charsmax(said), "%", " ") // reemplazamos el % en caso de que alguien lo escriba para evitarnos el famoso bug
  87.    
  88.     // comprobamos que el mensaje sea válido, si no lo es para la función
  89.     if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  90.    
  91.     // variable para almacenar el equipo (la utilizamos después) y otra variable en la cual le pondremos el nombre de equipo
  92.     static playerTeam, playerTeamName[19]
  93.     playerTeam = get_user_team(id)
  94.     // según el equipo al que pertenezca le ponemos un nombre
  95.     switch (playerTeam)
  96.     {
  97.         case 1: copy (playerTeamName, 6, "Holas") // T
  98.         case 2: copy (playerTeamName, 8, "Adioses") // CT
  99.         default: copy (playerTeamName, 11, "Espectador") // distinto de 1 y 2
  100.     }
  101.    
  102.     // variable para almacenar el equipo (la utilizamos después) y otro string para añadir prefijos etc. a lo que dijimos
  103.     static color[11], prefix[111]
  104.     get_user_team(id, color, charsmax(color))
  105.    
  106.     // hacemos uso de nuestro string anterior
  107.     // la primera variable servirá para saber si está vivo el jugador, si no tienen ninguna creada pues utilicen is_user_alive
  108.     // la segunda variable es el equipo que pusimos antes
  109.     // tercera variable seguro que la utilizan, la mayoría de los que quieren hacer esto con el chat es para mostrar el nivel de la persona que habla, ni falta decir que g_level es otro ejemplo
  110.     // cuarta variable será el nombre del jugador, si no la tienen cacheada en una variable, pues tendrán que crear una aquí y utilizar get_user_name
  111.     formatex(prefix, charsmax(prefix), "%s-%s- [Nivel:^x04 %d^x01]^x03 %s", g_isalive[id] ? "^x01" : "^x01*MUERTO* ", playerTeamName, g_level[id], g_playername[id])
  112.    
  113.     // formatex es más rápido, pero aquí conviene utilizar format para no tener que crear 1 variable de más
  114.     // ahora chequeamos que si es admin/VIP (como ejemplo) le ponga lo que dice en verde
  115.     if (is_user_admin(id) || g_vip[id]) format(said, charsmax(said), "^x04%s", said)
  116.     // le añadimos el prefijo a lo que dijo para tenerlo todo en 1 solo string en vez de 2 por separado
  117.     format(said, charsmax(said), "%s^x01 :  %s", prefix, said)
  118.    
  119.     static i, team[11] // variables que utilizaremos para el loop de jugadores, con team obtenemos su equipo porque hará falta cambiarlo para enviar el mensaje con el color correcto de equipo
  120.     for (i = 1; i <= g_maxplayers; i++) // g_maxplayers es otro ejemplo de variable, su valor es get_maxplayers() cacheado en plugin_init
  121.     {
  122.         // otra variable cacheada, si no la tienen utilicen is_user_connected
  123.         // si no está conectado el jugador del loop, paramos y seguimos con otro
  124.         if (!g_isconnected[i]) continue;
  125.        
  126.         // es del mismo equipo, seguiremos chequeando a ver...
  127.         if (get_user_team(i) == playerTeam)
  128.         {
  129.             // si el que envió el mensaje está vivo y él también, lo podrá leer
  130.             // si el que envió el mensaje está muerto y él también, lo podrá leer
  131.             if (g_isalive[id] && g_isalive[i] || !g_isalive[id] && !g_isalive[i])
  132.             {
  133.                 // obtenemos el equipo del que va a recibir el mensaje
  134.                 get_user_team(i, team, charsmax(team))
  135.                 // le cambiamos el equipo para que se muestre en el color correcto el ^x03
  136.                 changeTeamInfo(i, color)
  137.                 // le mandamos el mensaje
  138.                 writeMessage(i, said)
  139.                 // le dejamos el equipo como lo tenía antes
  140.                 changeTeamInfo(i, team)
  141.             }
  142.         }
  143.     }
  144.    
  145.     // importante para que funcionen otros plugins que hookeen el chat con comandos
  146.     return PLUGIN_HANDLED_MAIN;
  147. }
  148.  
  149. // esta función lo que hace es cambiar el equipo
  150. // player es el index del jugador
  151. // team es el equipo al que cambiará
  152. public changeTeamInfo(player, team[])
  153. {
  154.     // importante que sea MSG_ONE, para asegurarnos de que se envía
  155.     // g_msgTeamInfo es una variable chacheada en plugin_init cuyo valor es get_user_msgid("TeamInfo")
  156.     message_begin(MSG_ONE, g_msgTeamInfo, _, player)
  157.     write_byte(player)
  158.     write_string(team)
  159.     message_end()
  160. }
  161.  
  162. // esta función enviará el mensaje por chat
  163. // player es el index del jugador
  164. // message será el mensaje (string) que se enviará
  165. public writeMessage(player, message[])
  166. {
  167.     // importante que sea MSG_ONE, para asegurarnos de que se envía
  168.     // g_msgSayText es una variable chacheada en plugin_init cuyo valor es get_user_msgid("SayText")
  169.     message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  170.     write_byte(player)
  171.     write_string(message)
  172.     message_end()
  173. }
  174.  
  175. // Stock -counts number of characters in a string-
  176. // es un stock que encontré por ahí y lo modifiqué un poco
  177. stock ValidMessage(text[], maxcount) {
  178.     static len, i, count
  179.     len = strlen(text)
  180.     count = 0
  181.    
  182.     if (!len)
  183.         return false;
  184.    
  185.     for (i = 0; i < len; i++) {
  186.         if (text[i] != ' ') {
  187.             count++
  188.             if (count >= maxcount)
  189.                 return true;
  190.         }
  191.     }
  192.    
  193.     return false;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement