Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: [Solucionado] Saber el tipo de dato (u8, s8, u16, f16...)  (Leído 411 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kostra

  • Legendario
  • *
  • Puntos: 2476
  • Mensajes: 2.039
  • Agradecido: 89 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Buenas, ando haciendo unos scripts para facilitar la vida un poco más al que pretende hacer un juego online, el caso es que para enviar un paquete de buffer al servidor, hay que indicar qué tipo de dato se envía, con "buffer_u8", "buffer_f16", etc..

Lo que quiero saber es si hay alguna manera de saber qué tipo de estos es una variable, para hacer un script... he visto que hay funciones por ejemplo "is_int32", "is_int64"... pero claro, ahí no hay ni signed/unsigned, ni hay float... entonces investigando en google, vi una manera de sacar cuándo es unsigned, simplemente convirtiendo el número decimal a número binario y simplemente mirar cuántas cifras quedan mirando su "lenght".. pero claro, aquí no entran ni los números con signos ni los decimales... entonces, aquí me he estancado... alguna sugerencia??

Me gustaría crear un script donde le metas un argumento y te devuelva un tipo (con un número que lo identifique o algo)
« última modificación: Noviembre 01, 2019, 09:30:37 am por kostra »

"ola k ase clickarme o k ase"
la imagen no se quita xD
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado kostra

  • Legendario
  • *
  • Puntos: 2476
  • Mensajes: 2.039
  • Agradecido: 89 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Respuesta #1 en: Noviembre 01, 2019, 09:29:55 am
tema resuelro, simplemente me hice un script algo chapuzero mirando si el valor es mayor que tal y menor que tal, un millón de if embedidos en otros ifs embedidos en otros ifs xD para asegurarme de que se elige siempre el buffer más pequeño... e aquí el script por si algún nub como yo lo necesitara algún día:

///buffer_type(value)

var val = argument[0];

if is_string(val) {
    return buffer_string; //string
    exit;
    }
else if is_bool(val) {
    return buffer_bool; //bool
    exit;
    }
else {
    var str = string(val);
    if string_count(".",str) > 0 {
        if val >= 16777216
        && val < 16777216 {
            return buffer_f32; //f32
            exit;
            }
        else {
            return buffer_f64; //f64
            exit;
            }
        }
    else {
        if val < 0 {
            if val >= -128 {
                return buffer_s8; //s8
                exit;
                }
            else if val >= -32768 {
                return buffer_s16; //s16
                exit;
                }
            else if val >= -2147483648 {
                return buffer_s32; //s32
                exit;
                }
            else {
                return buffer_u64; //u64
                exit;
                }
            }
        else {
            if val <= 127 {
                return buffer_s8; //s8
                exit;
                }
            else if val <= 255 {
                return buffer_u8; //u8
                exit;
                }
            else if val <= 32767 {
                return buffer_s16; //s16
                exit;
                }
            else if val <= 2147483647 {
                return buffer_s32; //s32
                exit;
                }
            else if val <= 4294967295 {
                return buffer_u32; //u32
                exit;
                }
            else {
                return buffer_u64; //u64
                }
            }
        }
    }

Nota, he evadido buffer_f16 y buffer_text porque el primero en el manual pone not supported y el segundo leí en otro lugar que tampoco is supported

"ola k ase clickarme o k ase"
la imagen no se quita xD
 
Los siguientes usuarios dieron las gracias a este tema: BssString