Estoy haciendo un juego en game maker con 39dll. no es la primera vez que hago uno... pero esta vez quiero que todo sea mas profesional. por lo tanto compre un vps con linux... gran decepcion me lleve al ver que no puedo ejecutar un server hecho en game maker en un vps ni siquiera con Wine xD.
Por lo tanto estoy haciendo mi server en Java. con una libreria que simula el funcionamiento de la 39dll. hasta ahora me funcionaba muy bien, puedo enviar bytes y strings sin problemas y funciona muy bien. Pero el problema esta en que el server java no puede recibir variables del tipo short o int. las recibe muy mal... le da un valor que no es el correcto.
intente comunicarme con el creador de la libreria pero no hay suerte por ahora.
Entonces se me ocurrio esto: ya que supuestamente una variable del tipo short equivalen a 2 bytes... ¿por que no enviar 2 bytes en vez de 1 short? esto en teoria funcionaria bien. el problema es que no se convertir una variable short en 2 bytes. aqui es donde les pido su ayuda.
¿Como hago para convertir 2 bytes a short y viceversa? Esto va a ser del lado del juego de game maker, por lo tanto tiene que ser en gml. me salvarían el juego si alguien supiera!
Gracias.
Bueno, al final pude resolver mi problema :)
buscando en foros encontraba algunas funciones para hacerlo, pero estaban en otro lenguaje de programacion y no las comprendia del todo.
hasta que en un foro un usuario dijo que un short es solo el resultado de la multiplicacion de 2 bytes. entonces teniendo en cuenta eso me puse a pensar un poco y desarolle estos 2 scripts:
Writeushort
writebyte(argument0 div 256);//divide el numero sin darnos resultado decimal
writebyte(argument0 mod 256);//obtiene el resto de la division
Y Readushort
var1 = readbyte();
var2 = readbyte();
//esto es porque si los bytes superan el valor de 127 se vuelven negativos...
//por ahora no necesito numeros negativos en mi juego
if var1<0{var1+=256}
if var2<0{var2+=256}
return ((var1*256)+var2);//se multiplica la primera variable por 256 y se le suma el resto
(el server simplemente reenvía los bytes tal cual llegan)
Al final era mucho mas sencillo de lo que me esperaba :) ojala le sirva a alguien mas que a mi.
Saludos.