Allied Modders en español
Entendiendo el ChatColor - Versión para impresión

+- Allied Modders en español (https://amxmodx-es.com)
+-- Foro: AMX Mod X - Scripting (https://amxmodx-es.com/Forum-AMX-Mod-X-Scripting)
+--- Foro: Tutoriales / Guias (https://amxmodx-es.com/Forum-Tutoriales-Guias)
+--- Tema: Entendiendo el ChatColor (/Thread-Entendiendo-el-ChatColor)

Páginas: 1 2


Entendiendo el ChatColor - Mía - 16/07/2014

En este tutorial explicaré cada parte del ChatColor con detalles, pues he visto que muchos quieren usarlo sin tener la menor idea de cómo funciona. El principal objetivo no es que quienes lean este tutorial entiendan a la perfección el chatcolor, pero sí que sepan usarlo adecuadamente y dejen de utilizar esos stocks tan horrorosos de chatcolor que andan sueltos por ahí.

Al final del tutorial dejaré una recopilación de diferentes stocks Chatcolor "óptimos", para diferentes usos.

  1. ¿Qué hay en un stock de chatcolor?
    • Veamos un clásico stock chatcolor mal hecho:
      Código PHP:
      stock chatcolor(id, const input[], any:...)
      {
          static 
      countplayers[32], msg[191], msgSayText;
          
      vformat(msg190input3)   
          
          if (!
      msgSayText)
              
      msgSayText get_user_msgid("SayText");

          
      replace_all(msg190"!g""^4")
          
      replace_all(msg190"!y""^1")
          
      replace_all(msg190"!team""^3")
          
          if (
      id)
          {
              
      players[0] = id;
              
      count 1;
          }
          else
              
      get_players(playerscount"c");

          for (new 
      0counti++)
          {
              
      message_begin(MSG_ONE_UNRELIABLEmsgSayText_players[i])
              
      write_byte(players[i]);
              
      write_string(msg);
              
      message_end();
          }



      Las partes del stock

    • Código PHP:
      vformat(msg190input3
      Esta native nos sirve para dar formato a un texto segun una referencia (La referencia es el any:...). Indicamos el string donde obtendremos el texto con el formato, la longitud máxima, el string del texto que se va a formatear y el número del argumento de referencia (la posición del any:...).

    • Código PHP:
      if (!msgSayText)
          
      msgSayText get_user_msgid("SayText"); 
      Aquí se obtiene el ID de los mensajes SayText. Se hace así porque el ID de los mensajes no va a cambiar en medio del juego, no es necesario llamar a la native cada vez que necesitemos este ID, con una vez es suficiente.

    • Código PHP:
      replace_all(msg190"!g""^4"); 
      Esto es algo totalmente inútil a mi parecer, pero muchos lo usan. Simplemente reemplaza todos los '!g' por '^4'. Los mensajes que enviamos por SayText se pueden mostrar en color segun estos carácteres: ^1 (cvar con_color, por defecto amarillo), ^3 (color del team de quien envia el mensaje) y ^4 (color verde).

    • Código PHP:
      get_players(playerscount"c"); 
      Por desgracia esto está presente en muchos stocks de chatcolor, más adelante explicaré por qué no tendría que estar.

    • Código PHP:
      message_begin(MSG_ONE_UNRELIABLEmsgSayText_players[i])
      write_byte(players[i]);
      write_string(msg);
      message_end(); 
      Llegamos a la parte más importante. Esto es el chatcolor, esto envia nuestro mensaje a color, todo lo demás sirve de adorno.

  2. Ahora que conocemos el "verdadero" chatcolor, veamos cómo funciona.
    • Primero, voy a darles una noción básica de los mensajes en HL. Los mensajes son el "lenguaje de comunicación" entre el servidor de HL y los clientes. Lo que hacemos en el stock de chatcolor es enviar un mensaje "SayText". Hay muchos tipos de mensajes que usa HL, conozco 2 que nos pueden imprimir mensajes en el chat, pero "SayText" es el que nos va a permitir mostrar color.
    • Este mensaje tiene 2 argumentos: el "remitente" y el "mensaje". (Sí, como una carta!). El remitente es el índice de un jugador (entre 1 y 32, si usamos 0 el mensaje no tendrá color) (byte) y el mensaje, pues el texto a mostrar ^^ (string).
    • Regresando al tema de los mensajes de HL, los mensajes se pueden enviar a destinos predefinidos por HL. Los principales son: MSG_ONE, MSG_ALL y sus contrapartes en el unreliable channel: MSG_ONE_UNRELIABLE y MSG_BROADCAST. También está MSG_SPEC y otros 4 que no entiendo ni explicaré.

    • Código PHP:
      message_begin(MSG_ONEg_msgSayText_id
      ‪Cuando llamamos a la native message_begin(), le indicamos el destino de nuestro mensaje. Recomiendo usar MSG_ONE_UNRELIABLE y MSG_BROADCAST, ya que la diferencia con sus contrapartes es que estos mensajes se pueden perder en el camino sin generar "daños", mientras si los otros mensajes se pierden (por loss, desconexión) generalmente hacen que el servidor colesione (CRASH).
    • Si ponemos MSG_ONE_UNRELIABLE, tenemos que indicarle un ID de un jugador a quien se va a dirigir el mensaje. Con MSG_BROADCAST, el mensaje va a TODOS O.O, sí, a todos! Por eso no se debería de usar get_players en el stock de chatcolor si con MSG_BROADCAST ya enviamos el mensaje a todos. También podemos usar MSG_SPEC, que enviará el mensaje a los clientes HLTV.
    • message_begin() también nos permite establecer el origen del mensaje, aunque esto no es necesario en absoluto para enviar mensajes de chat.

    • Código PHP:
      write_byte(id
      Vamos otra vez con "SayText". El primer argumento en este mensaje es un byte, que es el ID del jugador que envia el mensaje. El color depende del equipo de este jugador. El id puede ser un jugador no conectado, no tendremos problemas con ello, en este caso el color será el del equipo del último jugador que tuvo ese número de ID.
      DATO (Gracias Destro por la información): Podemos "hacer creer" a los jugadores que el jugador (o entidad) con ID 33, 34, 35, etc pertenece a un equipo, así al utilizar estos IDs en este byte del mensaje obtendremos los colores deseados. (Más info en los stocks).

    • Código PHP:
      write_string(msg
      ‪El segundo argumento es el mensaje, con nuestros códigos de color. El código de color ^3 hace que nuestro mensaje tenga el color del equipo del jugador que envia el mensaje (vease write_byte arriba). Si el jugador no está conectado o está de espectador, nos mostrará gris; si es CT, nos mostrará Azul y si es TT, nos mostrará Rojo.
      Nota: La longitud del mensaje no puede exceder los 189 carácteres, o el servidor colapsará.

    • Código PHP:
      message_end() 
      ‪Luego de haber especificado estos argumentos, enviamos el mensaje con message_end().

  3. Recopilación de Chatcolor
    • Chatcolor simple para mostrar un mensaje a todos los jugadores, sin formato.
      Código PHP:
      stock chatcolor_all(input[])
      {
          static 
      msgSayText;
          
          if (!
      msgSayText)
              
      msgSayText get_user_msgid("SayText");
          
          if (
      strlen(input) >= 190)
              
      input[190] = '^0';
          
          
      message_begin(MSG_BROADCASTmsgSayText);
          
      write_byte(33);
          
      write_string(input);
          
      message_end();


      Modo de uso:
      Código PHP:
      chatcolor_all("^4[AMXX]^1 Bienvenidos a^3 Mi super Server"
      Color verde - ^4
      Color amarillo - ^1
      Color blanco - ^3

    • Chatcolor con formato, para un jugador o para todos.
      Código PHP:
      stock chatcolor(id, const input[], any:...)
      {
          static 
      szMsg[191], msgSayText;
          
          if (!
      msgSayText)
              
      msgSayText get_user_msgid("SayText");
          
          
      vformat(szMsg190input3);

          
      replace_all(szMsg190"!g""^4");
          
      replace_all(szMsg190"!y""^1");
          
      replace_all(szMsg190"!team""^3");
          
          
      message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
          
      write_byte(id id 33);
          
      write_string(szMsg);
          
      message_end();


      Modo de uso:
      Código PHP:
      new name[32]; get_user_name(idname31);
      chatcolor(id"!g[AMXX] !yBienvenido a !teamMi super Server, !g%s"name
      Color verde - !g
      Color amarillo - !y
      Color de team - !team

      Si el index es un ID, el color de !team será el de su equipo. Si el index es 0, el color de !team será blanco.

    • Un "chatcolor" más avanzado y elegante (Printf), permite elegir el color (Hecho por [R]ak - Sacado de aquí). Sólo envia un mensaje a un jugador, no index 0.
      Código PHP:
      enum {

          DEFAULT,

          
      RED,

          
      BLUE,

          
      GRAY,

          
      GREEN

      }



      stock printf(idcolor, const msg[], any:...) {
          

          static 
      Buffer[192], MsgSayTextMsgTeamInfoTeam[11]

          
          if(!
      MsgSayText) {

              
              
      MsgTeamInfo get_user_msgid("TeamInfo")


              
      MsgSayText get_user_msgid("SayText")

              
          }
              

          
      vformat(Buffer[1], charsmax(Buffer) - 1msg4)
          

          static const 
      g_Teams[4][11] = {

              
      "UNASSIGNED",

              
      "TERRORIST",

              
      "CT",

              
      "SPECTATOR"

          
      }
          

          if(
      color) {
              

              if(
      color == GREEN) {

                  
                  
      Buffer[0] = 0x04

               
                  message_begin
      (MSG_ONE_UNRELIABLEMsgSayText_id

              
                  
      write_byte(id

              
                  
      write_string(Buffer)   
              

                  
      message_end()

                  
              }

              else {

                  
                  
      Buffer[0] = 0x03

              
                  get_user_team
      (idTeamcharsmax(Team))

                  
                  
      message_begin(MSG_ONE_UNRELIABLEMsgTeamInfo_id

              
                  
      write_byte(id

              
                  
      write_string(g_Teams[color])   

             
                  
      message_end()

                  
                  
      message_begin(MSG_ONE_UNRELIABLEMsgSayText_id

              
                  
      write_byte(id

              
                  
      write_string(Buffer)   

              
                  
      message_end()

              
                  
      message_begin(MSG_ONE_UNRELIABLEMsgTeamInfo_id

              
                  
      write_byte(id

              
                  
      write_string(Team)   

              
                  
      message_end()
                  
              }

          }

          else {
              
              
      Buffer[0] = 0x01

              
              message_begin
      (MSG_ONE_UNRELIABLEMsgSayText_id

              
              
      write_byte(id

              
              
      write_string(Buffer)   

              
              
      message_end()

          }



      Modo de uso:
      Código PHP:
      printf(id, DEFAULT, "%s Acme Inc.- %s"AUTHORPLUGIN// comun
      printf(idRED"%s Acme Inc.- %s"AUTHORPLUGIN// rojo
      printf(idBLUE"%s Acme Inc.- %s"AUTHORPLUGIN// azul
      printf(idGRAY"%s Acme Inc.- %s"AUTHORPLUGIN// gris
      printf(idGREEN"^%s Acme Inc.- %s"AUTHORPLUGIN// verde 
    • El printf del Panda editado para soportar index 0 (Para todos).
      Código PHP:
      enum {

          DEFAULT,

          
      RED,

          
      BLUE,

          
      GRAY,

          
      GREEN

      }

      stock printf(idcolor, const msg[], any:...) {
          
          static 
      Buffer[192], MsgSayTextMsgTeamInfoTeam[32]
          
          if(!
      MsgSayText) {
              
              
      MsgTeamInfo get_user_msgid("TeamInfo")
              
              
      MsgSayText get_user_msgid("SayText")
              
          }
              
          
      vformat(Buffer[1], charsmax(Buffer) - 1msg4)
          
          static const 
      Teams[2][10] = {
              
      "TERRORIST",
              
      "CT"
          
      }

          switch (
      color) {
              
              case DEFAULT: {
                  
                  
      Buffer[0] = 0x01
              
                  printf_do
      (idid id 33BufferMsgSayText)
              }
              
              case 
      GREEN: {
                  
                  
      Buffer[0] = 0x04
                  
                  printf_do
      (idid id 33BufferMsgSayText)
                  
              }
              
              case 
      GRAY: {
                  
                  
      Buffer[0] = 0x03
                  
                  printf_do
      (id33BufferMsgSayText)
                  
              }
              
              case 
      REDBLUE: {
                  
                  
      Buffer[0] = 0x03
                  
                  
      if (id) {
                      
                      if (
      get_user_team(idTeamcharsmax(Team)) == color) {
                          
                          
      printf_do(ididBufferMsgSayText)
                          
                      }
                      else {
                          
                          
      printf_do(ididTeams[color-1], MsgTeamInfo)
                          
                          
      printf_do(ididBufferMsgSayText)
                          
                          
      printf_do(ididTeamMsgTeamInfo)
                          
                      }
                  
                  }
                  
                  else {
                  
                      static 
      Num;
                      
                      
      get_players(TeamNum"e"Teams[color-1]);
                      
                      if (
      Num) {
                          
                          
      printf_do(idTeam[0], BufferMsgSayText)
                          
                      }
                      else {
                          
                          
      get_players(TeamNum"h");
                          
                          if (!
      Num) {
                              
                              return;
                              
                          }
                          
                          
      Num Team[0];
                          
                          
      get_user_team(NumTeamcharsmax(Team));
                          
                          
      printf_do(NumNumTeams[color-1], MsgTeamInfo)
              
                          
      printf_do(idNumBufferMsgSayText)
              
                          
      printf_do(NumNumTeamMsgTeamInfo)
                          
                      }
                      
                  }
                  
              }
              
          }
      }

      printf_do(idsender, const data[], MsgID) {
          
          
      message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTMsgID_id
              
          
      write_byte(sender
              
          
      write_string(data)   
              
          
      message_end()
          


      Modo de uso: Igual que el anterior.

    • Stock capaz de mostrar el color deseado de una forma más eficiente (lo hice basándome en este, gracias Destro)
      Código PHP:
      // Va al inicio
      enum Colors
      {
          
      Gris 33,
          
      Rojo,
          
      Azul
      }

      // Si ya tienes client_putinserver, solo agregas la linea
      public client_putinserver(id)
      {
          
      set_task(0.2"chatcolor_send_teaminfo"id);
      }

      // Al final o donde quieras
      stock chatcolor(idColors:colormsg[], any:...)
      {
          static 
      szMsg[191], msgSayText;
          
      #define teaminfo_sent(%0) (TeamInfoSent & (1<<%0))
          
          
      if (!msgSayText)
              
      msgSayText get_user_msgid("SayText");
          
          
      vformat(szMsg190msg4);

          
      replace_all(szMsg190"!g""^4");
          
      replace_all(szMsg190"!y""^1");
          
      replace_all(szMsg190"!color""^3");
          
          
      message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
          
      write_byte(color ? (_:color) : 33);
          
      write_string(szMsg);
          
      message_end();
      }

      public 
      chatcolor_send_teaminfo(id)
      {
          if (!
      is_user_connected(id))
              return;
          
          static 
      msgTeamInfo;
          if (!
      msgTeamInfo)
              
      msgTeamInfo get_user_msgid("TeamInfo");
          
          static const 
      pTeams[][] = { """TERRORIST""CT" };
          
          for (new 
      pid 0pid 3pid++)
          {
              
      message_begin(MSG_ONE_UNRELIABLEmsgTeamInfo, .player id)
              
      write_byte(pid+33)
              
      write_string(pTeams[pid])
              
      message_end()
          }

      Modo de uso:
      Código PHP:
      new name[32]; get_user_name(idname31);

      // Saldrá del color del team de "id"
      chatcolor(idid"!g[ZP]!y Hola y bienvenido, !color%s!"name);

      // Color azul
      chatcolor(idAzul"!g[ZP]!y Hola y bienvenido, !color%s!"name);

      // Color rojo
      chatcolor(idRojo"!g[ZP]!y Hola y bienvenido, !color%s!"name);

      // Color gris
      chatcolor(idGris"!g[ZP]!y Hola y bienvenido, !color%s!"name); 
      Color verde - !g
      Color amarillo - !y
      Color definido - !color
Eso es todo amigos Whatever


RE: Entendiendo el ChatColor - Federicomb - 16/07/2014

Buen tutorial. Me diste ideas.

[Imagen: favicon.ico]


RE: Entendiendo el ChatColor - AGustiN - 16/07/2014

Muy buen tutorial.- Proud


RE: Entendiendo el ChatColor - Mía - 20/07/2014

(16/07/2014, 01:52 AM)Federicomb escribió: Buen tutorial. Me diste ideas.

(16/07/2014, 11:34 AM)AGustiN escribió: Muy buen tutorial.- Proud

Gracias a los 2! ^^
PD: BUMP! Muchos tienen que leer esto Whatdone


RE: Entendiendo el ChatColor - Marito - 20/07/2014

Recien lo leo, buen tutorial, no sabia de unas cositas como ^3, Gracias Gran sonrisa... Ya mas adelante lo ponemos en practica Gran sonrisa


RE: Entendiendo el ChatColor - K.-' - 20/07/2014

Como lo uso ? osea para mandar mensajes en verde , amarillo ?

Código PHP:
stock chatcolor_all(input[])
{
    static 
msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
    
    if (
strlen(input) >= 190)
        
input[190] = '^0';
    
    
message_begin(MSG_BROADCASTmsgSayText);
    
write_byte(1);
    
write_string(input);
    
message_end();




RE: Entendiendo el ChatColor - CSAxel - 20/07/2014

(20/07/2014, 04:11 AM)K.- escribió: Como lo uso ? osea para mandar mensajes en verde , amarillo ?

Código PHP:
stock chatcolor_all(input[])
{
    static 
msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
    
    if (
strlen(input) >= 190)
        
input[190] = '^0';
    
    
message_begin(MSG_BROADCASTmsgSayText);
    
write_byte(1);
    
write_string(input);
    
message_end();

Código PHP:
chatcolor_all("Hola a todos"// Le envias el mensaje a todos los que esten en el sv 
Exacto.. Es solo para mensajes en color verde y default

Con este soporta index
Código PHP:
stock chatcolor(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
    
    
vformat(szMsg190input3);
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 1);
    
write_string(szMsg);
    
message_end();

Y soporta los formates en color del team, verde y default.


RE: Entendiendo el ChatColor - K.-' - 20/07/2014

sisi Genius ya se xD pero osea quisiera saber como mandar esos mensajes , ej :

chatcolor_all(id, "!gColor verde !yColor default") osea nose como mandar los mensajes en color..


RE: Entendiendo el ChatColor - Federicomb - 20/07/2014

Una pregunta, no es mejor usar charsmax?

Código PHP:
vformat(msg190input3);

replace_all(msg190"!g""^4"); 

-->

Código PHP:
vformat(msgcharsmax(msg), input3);

replace_all(msgcharsmax(msg), "!g""^4"); 



RE: Entendiendo el ChatColor - cLAANS - 20/07/2014

(20/07/2014, 05:02 AM)Federicomb escribió: Una pregunta, no es mejor usar charsmax?

Código PHP:
vformat(msg190input3);

replace_all(msg190"!g""^4"); 

-->

Código PHP:
vformat(msgcharsmax(msg), input3);

replace_all(msgcharsmax(msg), "!g""^4"); 

Si, tenes razón.

Lo que hace charsmax es no dejar celdas sin uso ..

Saludos,
cLAANS.-


RE: Entendiendo el ChatColor - Mía - 20/07/2014

(20/07/2014, 05:02 AM)Federicomb escribió: Una pregunta, no es mejor usar charsmax?

Código PHP:
vformat(msg190input3);

replace_all(msg190"!g""^4"); 

-->

Código PHP:
vformat(msgcharsmax(msg), input3);

replace_all(msgcharsmax(msg), "!g""^4"); 

No. Es como meter charsmax en get_user_name, la longitud del mensaje no puede exceder a 190 o tendras un lindo crash en tu servidor.


RE: Entendiendo el ChatColor - K.-' - 20/07/2014

mario , me decis como hago el color verde y amarillo ? solo nesesito eso.. osea como mandarlos en un mensaje un ejemplo


RE: Entendiendo el ChatColor - Mía - 20/07/2014

^4 para verde, ^1 amarillo.
EDIT: Ya le puse el !y, !g, y !team Whatdone


RE: Entendiendo el ChatColor - cLAANS - 21/07/2014

Código PHP:
stock chatcolor(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");

    
replace_all(msg190"!g""^4");
    
replace_all(msg190"!y""^1");
    
replace_all(msg190"!team""^3");
    
    
vformat(szMsg190input3);
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();


Código:
msg
->
szMsg

Saludos,
cLAANS.-


RE: Entendiendo el ChatColor - kirito - 21/07/2014

Puedo usar varios stock verdad perdón por mi pregunta estúpida, ustedes se preguntaran porque.. bueno porque quiero que en el cs se muestren el color blanco,verde,amarillo(default),rojo,azul y en los stock que recién vi solo se ve que el blanco esta en un solo stock.


RE: Entendiendo el ChatColor - alan_el_more - 21/07/2014

El gris aparece cuando usas ^3 y estás de espectador o sin equipo.
O usando el stock donde elegis el color que queres usar independientemente del equipo donde estés.


RE: Entendiendo el ChatColor - ivan - 21/07/2014

Buen tuto mario Ar. Me gusta


RE: Entendiendo el ChatColor - Mía - 21/07/2014

(21/07/2014, 02:56 PM)kirito escribió: Puedo usar varios stock verdad perdón por mi pregunta estúpida, ustedes se preguntaran porque.. bueno porque quiero que en el cs se muestren el color blanco,verde,amarillo(default),rojo,azul y en los stock que recién vi solo se ve que el blanco esta en un solo stock.

Whatdone
Parece que sólo viste la parte de recopilación de stocks. Si lees la guia completa entenderás qué necesitas. Si no encuentras un stock para tus necesidades, lo puedes hacer Whatever


RE: Entendiendo el ChatColor - RauliTop - 28/07/2014

el motivo de por qué no se utiliza MSG_BROADCAST para enviar el mensaje a todos los jugadores y se hace con un loop con MSG_ONE_UNRELIABLE es básicamente porque si alguien intenta poner para mandar color de equipo, siendo broadcast se mandará con color gris (de espectador) en vez de con el color del equipo correcto.


RE: Entendiendo el ChatColor - Mía - 28/07/2014

(28/07/2014, 05:33 PM)RauliTop escribió: el motivo de por qué no se utiliza MSG_BROADCAST para enviar el mensaje a todos los jugadores y se hace con un loop con MSG_ONE_UNRELIABLE es básicamente porque si alguien intenta poner para mandar color de equipo, siendo broadcast se mandará con color gris (de espectador) en vez de con el color del equipo correcto.

No RauliTop.
El color dependerá del equipo de quien envía el mensaje (el primer byte del mensaje). Si mandas MSG_BROADCAST y en el byte pones el ID de un terrorista, todos recibirán el mensaje con color Rojo donde corresponde color de team.

EDIT: Si te refieres a que se vea el color del equipo de quien recibe (Algo a lo que no le veo sentido) entonces sería necesario ese bucle.


RE: Entendiendo el ChatColor - RauliTop - 28/07/2014

hace tiempo que hice un test, lo puse así:
write_byte(index? index : 1)

me salía en color gris, supongo porque el jugador no estaba conectado (no había nadie en espectador), que pasaría con 33 o.O

por eso, no tendrá su color de equipo que es lo que precisamente quiere, sino el color del que lo envió


RE: Entendiendo el ChatColor - Mía - 28/07/2014

Quién quiere algo así? O.O

Con cualquier ID fuera de rango en el primer byte obtendrás gris, pero no recomiendo hacer esto (tuve algunos crash haciendo pruebas). Usar 33 es seguro, por eso lo puse en los stocks.


RE: Entendiendo el ChatColor - RauliTop - 29/07/2014

de siempre cuando alguien pone el ^3 en el mensaje a color es para:
si el jugador que lo recibe es T le salga rojo
si es CT le salga azul
y sino gris

con broadcast cuando pongas ^3 en un mensaje con index 0, siempre saldrá el mismo color a todos da igual de que equipo sean


RE: Entendiendo el ChatColor - Mía - 29/07/2014

(29/07/2014, 05:51 AM)RauliTop escribió: de siempre cuando alguien pone el ^3 en el mensaje a color es para:
si el jugador que lo recibe es T le salga rojo
si es CT le salga azul
y sino gris

con broadcast cuando pongas ^3 en un mensaje con index 0, siempre saldrá el mismo color a todos da igual de que equipo sean

Algún ejemplo donde eso sea útil? Yo jamás le vi utilidad a eso, y cuando no entendía cómo funcionaba el chatcolor y usaba esos stocks horribles siempre me molestó eso.
Si el byte es 0 no tendrás ningún color, todo va a salir de amarillo. Usa un index de 1 a 33, entre 1 y 32 obtendrás el color del team del jugador (gris si no está conectado). 33 siempre será gris.


RE: Entendiendo el ChatColor - RauliTop - 05/08/2014

bueno, intentando cambiar el loop de jugadores para utilizar broadcast hice esto:
Código PHP:
fnColorPrint(indexindex2Msg[], any:...) {
    new 
Buffer[190];
    
vformat(Buffercharsmax(Buffer), Msg3)

    
message_begin(index MSG_ONE MSG_BROADCASTg_iMsgSayText_index)
    
write_byte(index2 index2 33)
    
write_string(Buffer)
    
message_end()


el problema es que ahora cuando pongo un %s o %d o algún parámetro al mensaje, se bugea repitiéndose o no mostrando el valor correcto, esto por ejemplo:
Código PHP:
fnColorPrint(0id"^4[SuperMod o.O]^3 %s ^1te dice hola!"g_iUserName[id]) 
se muestra así
Código:
[SuperMod o.O] [SuperMod o.O] ElNombre te dice hola! te dice hola!

eso era en caso de string, en caso de entero muestra un valor no correcto, por ejemplo:
Código PHP:
fnColorPrint(00"^4[...]^1 VAIS A MORIR en:^3 %d segundos"floatround(g_variable)) // g_variable sé que vale 50.0 
se muestra esto:
Código:
[...] VAIS A MORIR en: 4 segundos