hola amigos de comunidad gm tengo una duda y una curiosidad quisiera saber si puedo hacer que cuando yo hable por el servidor de mi juego que la cosa que yo diga que la diga en una parte que yo quiera por ejemplo yo escribo en el server hola y ese hola quisiera que se pusira en la pantalla pero en una parte de la pantalla. no quisiera que a paresca en el chat del juego por al escribir mucho el mensaje del serve se quitaria yo pienso como otro chat pero donde las persona no podran escribir solo se mandaran los mensajes del server. gracias amigos  :-\ :D

Si ya sabes hacer un chat simplemente usas el mismo método y enviás un mensaje con diferente ID en el buffer para que con esa ID sea recibido en el cliente y simplemente haces un draw_text(x,y,messageAdmin); o como hayas guardado al mensaje recibido.


ok mira lo que tengo en el cliente cliente estos son los codigos :D
scripts
script_initlines
//
//  Initialized the collection of lines for display
//
{
  global.maxline = 7;
  for (i=0; i<global.maxline; i+=1)
  {
    global.line[i] = '';
    global.color[i] = c_black;
  }
}

script_addline
//
//  Adds a line to the display
// argument0 = the test, argument1 = the color
//
{
  for (i=0; i<global.maxline-1; i+=1)
  {
    global.line[i] = global.line[i+1];
    global.color[i] = global.color[i+1];
  }
    global.line[global.maxline-1] = argument0;
    global.color[global.maxline-1] = argument1;
}

script_drawlines
//
//  Draws the collection of lines at the indicated place
//
{
  var xxx,yyy;
  xxx = argument0;
  yyy = argument1;
  draw_set_font(fnt_chat);
  draw_set_halign(fa_left);
  for (i=0; i<global.maxline; i+=1)
  {
    draw_set_alpha(0.7)
    draw_set_color(c_dkgray);
  if global.line[i]!="" && argument2=1
    draw_rectangle(xxx-16,yyy-16,(xxx+3+string_width(global.line[i]+"|")),(yyy+3+string_height(global.line[i]+"|")),0)
    draw_set_alpha(1)
    if global.color[i]=c_black
    global.color[i]=c_white
    drawtext(global.color[i],xxx,yyy,global.line[i]);
    yyy += 20;
  }
}

drawtext
//drawtext(color,x,y,str)
draw_set_color(c_black)
draw_text(argument1+1,argument2+1,argument3)
draw_text(argument1+2,argument2+2,argument3)
if argument0=c_black
draw_set_color(c_white)
else
draw_set_color(argument0)
draw_text(argument1,argument2,argument3)


esos son los scripts
aqui esta el obj_cliente donde esta el chat normal donde uno habla y todo eso donde esta el draw esta el chat
//draws the FPS
d3d_set_projection_ortho(0,0,800,600,0)
draw_set_color(0)
script_drawlines(16,16)
if send=true
  {
   draw_set_alpha(0.5)
  draw_set_color(c_black)
  draw_roundrect(14,142,16+string_width(keyboard_string)+5,159,0)
  draw_set_alpha(1)
  draw_set_color(c_white)
  if blink = true and keyboard_string != ""
  draw_text(16,144,keyboard_string+"|")
  else
  draw_text(16,144,keyboard_string)
  draw_set_color(0)
  }
  d3d_set_projection_ortho(0,0,800,600,0)
draw_text(544,16,"Ping: "+string(ping))
draw_text(466,16,"FPS: "+string(fps))
with(Other)
  {

  }



pero no se si es donde esta el server que tengo que hacer eso de draw_tex lo que me dijiste me inmagino el chat del server esta listo solo es que ese chat que ehhhh puesto pone lo que dice el server si bien pero yo no quiero que lo diga en ese chat si no en lugar que digo

Todo el código que colocas solo serviría para el sistema de chat entre clientes.

Lo que deberías hacer es hacer otro chat aparte para recibir los mensajes del servidor. O más que chat, un panel de anuncios, que solo muestre los mensajes filtrados por un ID que enviaría el server.
A lo que voy es que si no quieres que aparezca en el chat normal, entonces no tienes que tocar nada del código que ya usas, sino hacer un sistema nuevo para mostrar los mensajes especiales que reciba cada cliente, desde el servidor.



ehhhhh si eso mismo es lo que quiero hacer pero no tengo una idea de como hacer si hacerlo de crear otro server para eso ohhhh hacerlo desde mi mismo servidor

Cita de: am3500 en Enero 06, 2015, 05:20:43 AM
ehhhhh si eso mismo es lo que quiero hacer pero no tengo una idea de como hacer si hacerlo de crear otro server para eso ohhhh hacerlo desde mi mismo servidor

Solo bastaría con un solo server, puesto que tener 2 no tiene mucho sentido, creo.
Es como dice Iros, tendrías que filtrar los mensajes por ID, y asignarle un ID especial al mensaje del Servidor. Entonces, ya con ese ID verificas si es un mensaje especial, y de ser así lo despliegas en otro lado que no sea el chat común.



bueno me rindo nececito ayuda nose. demen una ayudita de como puedo hacerlo porque ehhh intentado de todas forma entre al server a ver si podia crearlo desde hay y lo que hice fue un erro quien me ayuda a como hacerlo uno que sea simple pliz

Quizá podría ayudarte si supiera cómo es que implementas el sistema online para recibir los mensajes.
A lo mejor es mas fácil que publiques el engine o un editable para ver cómo se transmiten los mensajes y cómo modificarlo para que cumpla con lo que quieres.





Ah, pues es como dice Iros XD
Tendrías que mandar un mensaje, cambiando la ID, por una "especial", por ejemplo, un valor que sea notorio, que se yo 200.
Luego escribir el mensaje y mandarlo a los clientes, algo como:


clearbuffer();
writebyte(200);
writestring(keyboard_string,true);
with(Client)
{
    sendmessage(tcp);
}


Claro, esto debería adaptarse para que se envie a todos los clientes, y luego deberías leerlo desde el switch que tienen los clientes:

Masomenos algo parecido a esto:



case 200:
    var mensaje;
    mensaje = readstring()
    script_addline2(msg,c_black) // notese que esta funcion es nueva
break;


Ahora, deberías crear otro array (arreglo, vector, como lo conozcas) para alamcenar los mensajes especiales, como lo haría con el chat. Luego dibujarlos de la forma que más te convenga.




Cita de: Black_Cat en Enero 07, 2015, 05:10:09 PM
Ah, pues es como dice Iros XD
Tendrías que mandar un mensaje, cambiando la ID, por una "especial", por ejemplo, un valor que sea notorio, que se yo 200.
Luego escribir el mensaje y mandarlo a los clientes, algo como:


clearbuffer();
writebyte(200);
writestring(keyboard_string,true);
with(Client)
{
    sendmessage(tcp);
}


Claro, esto debería adaptarse para que se envie a todos los clientes, y luego deberías leerlo desde el switch que tienen los clientes:

Masomenos algo parecido a esto:



case 200:
    var mensaje;
    mensaje = readstring()
    script_addline2(msg,c_black) // notese que esta funcion es nueva
break;


Ahora, deberías crear otro array (arreglo, vector, como lo conozcas) para alamcenar los mensajes especiales, como lo haría con el chat. Luego dibujarlos de la forma que más te convenga.



ok pero el primer codigo va en el gmk del server que le manda la informacion a al cliente


tengo un problema el codigo: clearbuffer();
writebyte(200);
writestring(keyboard_string,true);
with(Client)
{
    sendmessage(tcp);
}

eso va en el gmk del server verdad y cuando estoy en el server habro el objeto cliente que esta dentro del server y luego voy al evento step y coloco el codigo asi //vars
var msgSize,msgId;

//check msgS
while(1)
{
/*Trying use udp*/msgSize = receivemessage(Server.serverudp)
/*Trying use tcp*/if msgSize<=0 {msgSize = receivemessage(tcp)}
/*Stop reciveing*/if msgSize<=0 break;
msgId = readbyte();
/*Switching bettwin msgS recived*/
switch(msgId)
  {
    case 2:
    /*Update posetion*/
    var player, value;
    value = readbyte()
    //Stuff :P
    /*Important*/ player = global.players[value]
    //Reciving
    player.x = readshort()
    player.y = readshort()
    player.direction = readshort()
    player.image_blend = readdouble()
    //Sending
    /*imp*/clearbuffer()
    /*imp*/writebyte(5)
    /*imp*/writebyte(value)
    writeshort(player.x)
    writeshort(player.y)
    writeshort(player.direction)
    writedouble (player.image_blend)
    //Send to client
    with(Client)
      {
      sendmessage(tcp)
      }
      break
   
    case 3:
    /*player left*/
    /*imp*/var playerId, username;
    /*imp*/playerId=readbyte()
    /*imp*/username=readstring()
    /*imp*/clearbuffer()
    /*imp*/writebyte(6)
    /*imp*/writebyte(playerId)
    /*imp*/writestring(username,true)
    //Send to client
    with(Client)
      {
      sendmessage(tcp)
      }
    //write in chat
    script_addline(username + " Has left the game.",c_black)
    //Delete the player has left from server
    with(global.players[playerId])
      {
      instance_destroy()
      }
      //Embty the place from server
      global.players[playerId] = -1;
      break
   
     
    case 4:
    //Chat message
    chatmessage = readstring()
    script_addline(chatmessage,c_black)
    clearbuffer()
    writebyte(8)
    writestring(chatmessage,true)
    with(Client)
      {
      sendmessage(tcp)
      }
      break;
     
      clearbuffer();
   writebyte(200);
   writestring(keyboard_string,true);
   with(Client)
   {
    sendmessage(tcp);
   }
  }
}


y ya esta el servidor verdad y ahora el cliente

codigo 2 case 200:
    var mensaje;
    mensaje = readstring()
    script_addline2(msg,c_black) // notese que esta funcion es nueva
break;
entro gmk ahora del cliente  y dentro del cliente habrimos un objeto llamado obj_client
y nosvamos a step y coloque el codigo asi var msgSize, msgId;

while(1)
  {
  msgSize = receivemessage(global.clienttcp)
  if msgSize <= 0 break
  msgId = readbyte()
  ping = 0
  switch(msgId)
    {
    case 1:
    global.myid = readbyte()
    if end_game = true
      {
      clearbuffer()
      writebyte(4)
      writestring(global.username+" can not join.",true)
      sendmessage(global.clienttcp)
      scr_online_gameend();
      exit;
      }
      else
      {
      obj_player.alarm[0]=1
      }
    break
    ////////////////////////////22222222
    case 2:
    show_message("Sorry! the srver is full.")
    if end_game = true
      {
      scr_online_gameend()
      exit
      }
    break
    ////////////////////////////33333333
    case 3:
    var userid, name, user;
    userid = readbyte()
    user = instance_create(obj_player.xstart , obj_player.ystart , Other)
    user.pid = userid
    name = readstring()
    user.username = name
    players[userid] = user
    script_addline(name + " has joined.",c_black)
    break
    ////////////////////////////444444444
    case 4:
    var name, userid;
    userid = readbyte()
    name = readstring()
    user = players[userid]
    user.username = name
    script_addline(name + " has joined.",c_black)
    break
    ///////////////////////////55555555555
    case 5:
    value = readbyte()
    player = players[value]
    player.x = readshort()
    player.y = readshort()
    player.direction = readshort()
    player.image_blend = readdouble()
    break
    /////////////////////////666666666666
    case 6 :
    var playerid, username;
    playerid = readbyte()
    username = readstring()
    script_addline(username + ' has left the game.',c_red)
    with(players[playerid])
      {
      instance_destroy()
      }
    players[playerid] = -1;
    break
    ///////////////////////////777777777777
    case 7:
    show_message('The server has turn off.')
    game_end()
    break
    /////////////////////////8888888888888
    case 8:
    script_addline(readstring(),c_black)
    break
    ////////////////////////9999999999999
    case 9:
    script_addline("Server: "+readstring(),c_fuchsia)
    }
    case 200:
    var mensaje;
    mensaje = readstring()
    script_addline2(msg,c_black) // notese que esta funcion es nueva
    break;
  }
ping+= current_time - deltatime
deltatime = current_time
if ping>timeout
{
show_message("You have timed out.");
game_end();
}

y luego creo el script_addline2
//
//  Adds a line to the display
// argument0 = the test, argument1 = the color
//
{
  for (i=0; i<global.maxline-1; i+=1)
  {
    global.line[i] = global.line[i+1];
    global.color[i] = global.color[i+1];
  }
    global.line[global.maxline-1] = argument0;
    global.color[global.maxline-1] = argument1;
}


ya esta todo y cuando le doy a probar al server todo bien pero cuando le doy a probar al cliente me dice un error como esto
Citar___________________________________________
ERROR in
action number 1
of  Step Event
for object obj_client:

Error in code at line 90:
       case 200:
            ^
at position 11: Case statement only allowed inside switch statement.