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.
ohhhhhhhhhhhhhhhh voy a probar gracias
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.
ok te dare el example
http://www.4shared.com/rar/VAWhlT_S/39dll_tutorial__BY_ManGameMake.html? este es el link del example la contraseña del libro rar es = ManGameMakerForYou
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
ok ya lo entendi voy aprobar aver
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.
Eso es porque tienes errores de sintaxis, metiste el "case 200:" justo despues de "case 9:" sin usar el break y hay una llave que está tambien por ahí entrometida XD