Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

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!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - dixon

Páginas: 1 2 3 ... 14
1
General / Historias: Game maker inmortal
« en: Noviembre 22, 2021, 03:17:23 am »

2
Desarrollo de Scripts / draw_text_ext_html5(x,y,str,w);
« en: Noviembre 05, 2021, 03:36:22 am »
Autor del script: Reyes Dávila
Nombre del script: draw_text_ext_html5(x,y,str,w);
Breve descripción de su función: Ajusta un texto al ancho indicado al exportar a html5.
Versiones usadas: Game maker html5, debe funcionar en studio.
Version del script: 1

Código del script
Código: [Seleccionar]
//draw_text_ext_html5(x,y,str,w);
//Para crear textos ajustados a un ancho al exportar a html5.
//Serial del script: _WXP2F

posicion_x_WXP2F=argument0;
posicion_y_WXP2F=argument1;
string_x_WXP2F=argument2;
ancho_x_WXP2F=argument3;

length_x_WXP2F=string_length(string_x_WXP2F);
length_x_prev_WXP2F=length_x_WXP2F;
index_WXP2F=1;
count_WXP2F=1;
width_min_WXP2F=string_width("X");
for(i_WXP2F=1;i_WXP2F<=length_x_WXP2F;i_WXP2F+=1)
{

copy_x_WXP2F=string_copy(string_x_WXP2F,index_WXP2F,count_WXP2F);
width_x_WXP2F=string_width(copy_x_WXP2F);

count_x_WXP2F=string_count(" ",copy_x_WXP2F);
c1_WXP2F=(width_x_WXP2F>ancho_x_WXP2F);
c2_WXP2F=(ancho_x_WXP2F>width_min_WXP2F);
c3_WXP2F=(i_WXP2F>1);
c4_WXP2F=(length_x_WXP2F<length_x_prev_WXP2F*2);
c5_WXP2F=(count_x_WXP2F);

if(c1_WXP2F and c2_WXP2F and c3_WXP2F and c4_WXP2F and c5_WXP2F)
{

index_WXP2F=i_WXP2F;count_WXP2F=1;
copy_x2_WXP2F=string_copy(string_x_WXP2F,index_WXP2F,count_WXP2F);
while(copy_x2_WXP2F!=" " and i_WXP2F>2)
    {
        i_WXP2F-=1;
        index_WXP2F=i_WXP2F;count_WXP2F=1;
        copy_x2_WXP2F=string_copy(string_x_WXP2F,index_WXP2F,count_WXP2F);
    }

string_x_WXP2F=string_insert(chr(35),string_x_WXP2F,i_WXP2F+1);
length_x_WXP2F+=1;
index_WXP2F=i_WXP2F+3;
count_WXP2F=0;
}

count_WXP2F+=1;
}

draw_text(posicion_x_WXP2F,posicion_y_WXP2F,string_x_WXP2F);


Detalles:
La función original draw_text_ext(x,y,str,sep,w) no funciona al exportar a html5 por esta causa se ha creado este script como sustituto, el cual en su primera versión no emplea el argumento “sep” que hace referencia a la separación de las líneas.

Mejoras a futuro:
1. Agregar el argumento sep.
2. Correcciones internas.
3. Mejorar precisión.
4. Crear conjunto de script para el control de textos que permita medir el alto de los párrafos con gran precisión al exportar en html5.

3
General / Re: Concepción de juego
« en: Octubre 26, 2021, 07:10:25 pm »








4
Desarrollo de Scripts / ini_file(str)
« en: Octubre 06, 2021, 08:49:03 pm »
Autor del script: Reyes Dávila
Nombre del script: ini_file(str)
Breve descripción de su función: Habilita a game maker 4.3 para trabajar con archivos ini de igual manera como en las versiones superiores.
Versiones usadas: Solo para game maker 4.3.
Version del script: 1

Código del script

Código: [Seleccionar]
///ini_file(str);
//Script para game maker 4.3, para abrir archivos ini.
//Serial del script: 123

str_in_123=argument0;
str_length_123=string_length(str_in_123);

//Escaneando string
funcion_encontrada_123=0;

str_pos_123=string_pos("(",str_in_123);//Posicion del primer paréntesis
for(i=str_pos_123;i<=str_length_123;i+=1)
{
str_copy_123=string_copy(str_in_123,i,1);
if(str_copy_123="(")
{
//Copiando nombre de funcion
funcion_str_123="";
continuar_123=1;
str_copy_123="";
for(i2=i-1;i2>=1 and continuar_123;i2-=1)
{
str_copy_2_123=string_copy(str_in_123,i2,1);
if(ord(str_copy_2_123)<=65 || ord(str_copy_2_123)>=122)
{
//Deteniendo el proceso.
continuar_123=0
}
else
{
//Copiando caracter.
funcion_str_123=string(str_copy_2_123)+string(funcion_str_123);
}
}

//Funcion encontrada
funciones_posibles='ini_close(,ini_key_delete(,ini_key_exists(,ini_open(,
ini_open_from_string(,ini_read_real(,ini_read_string(,ini_section_delete(,ini_section_exists(,ini_write_real(,ini_write_string(,';
str_count_123=string_count(funcion_str_123+string("("),funciones_posibles);
if(str_count_123=1)
{
funcion_encontrada_123+=1;
funcion_123[funcion_encontrada_123,0]=funcion_str_123;

//Verificando que la primera funcion sea ini_open(str);
c1_123=(funcion_123[1,0]="ini_open");
c2_123=(funcion_123[1,0]="ini_open_from_string");
//if(!c1_123 and !c2_123){show_message("Falta funcion: ini_open(name) o ini_open_from_string(string)")}
}

/////////////////Copiando argumentos de la funcion
index_123=i;
//length_123=string_length(str_in_123)-index_123+1;
length_123=string_length(str_in_123);

continuar_123=1;
count_comillas_123=0;
count_comillas2_123=0;
pos_parentesis_cierre=1;

//Encontrando el parentesis correcto de cierre de la función.
for(i2=index_123;i2<length_123 and continuar_123;i2+=1)
{
//Esto se hace para no tomar en cuenta los parentesis
//Que se encuentren dentro de comillas.
index_123=i2;count_123=1;
str_ram2_123=string_copy(str_in_123,index_123,count_123);
if(str_ram2_123="'"){count_comillas_123+=1}
if(str_ram2_123='"'){count_comillas2_123+=1}
c1_123=(frac(count_comillas_123/2)=0);
c2_123=(frac(count_comillas2_123/2)=0);
c3_123=(str_ram2_123=")");
if(c1_123 and c2_123 and c3_123)
{
pos_parentesis_cierre=i2;
continuar_123=0;
}
}

index_123=i+1;
count_123=pos_parentesis_cierre-index_123;
str_ram_123=string_copy(str_in_123,index_123,count_123);

//Describiendo a los argumentos
count_123=string_count(",",str_ram_123);
count2_123=string_count(".",str_ram_123);
length_123=string_length(str_ram_123);
str_inicial_123=string_copy(str_ram_123,1,1);
str_final_123=string_copy(str_ram_123,length_123,1);

//Condiciones para las funciones
if(funcion_123[funcion_encontrada_123,0]="ini_close"){argumentos_123=0;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_key_delete"){argumentos_123=2;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_key_exists"){argumentos_123=2;devolucion_123="binario"}
if(funcion_123[funcion_encontrada_123,0]="ini_open"){argumentos_123=1;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_open_from_string"){argumentos_123=1;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_read_real"){argumentos_123=3;devolucion_123="real"}
if(funcion_123[funcion_encontrada_123,0]="ini_read_string"){argumentos_123=3;devolucion_123="string"}
if(funcion_123[funcion_encontrada_123,0]="ini_section_delete"){argumentos_123=1;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_section_exists"){argumentos_123=1;devolucion_123="binario"}
if(funcion_123[funcion_encontrada_123,0]="ini_write_real"){argumentos_123=3;devolucion_123="none"}
if(funcion_123[funcion_encontrada_123,0]="ini_write_string"){argumentos_123=3;devolucion_123="none"}


//Asignando cantidad de argumento a funciones.

funcion_123[funcion_encontrada_123,1]=argumentos_123;
//Asignando tipo de respuesta, salida o return.
funcion_123[funcion_encontrada_123,2]=devolucion_123;

//Para las funciones con un argumento
if(argumentos_123=1)
{
//Asignando argumento a la posicion correcta
funcion_123[funcion_encontrada_123,3]=str_ram_123;
}

//Para las funciones con más de un argumento.
analizando_argumento_123=3;
if(argumentos_123>1)
{
for(i3=1;i3<=argumentos_123;i3+=1)
{
//Extrayendo argumentos.
continuar_123=1;
count_comillas_123=0;
count_comillas2_123=0;
length_123=string_length(str_ram_123);

if(i3<argumentos_123)
{
for(i2=1;i2<=length_123 and continuar_123;i2+=1)
{
index_123=i2;count_123=1;
str_ram2_123=string_copy(str_ram_123,index_123,count_123);
if(str_ram2_123="'"){count_comillas_123+=1}
if(str_ram2_123='"'){count_comillas2_123+=1}
c1_123=(frac(count_comillas_123/2)=0);
c2_123=(frac(count_comillas2_123/2)=0);
c3_123=(str_ram2_123=",");

if(c1_123 and c2_123 and c3_123)
{
continuar_123=0;
index_123=1;count_123=i2-1;
funcion_123[funcion_encontrada_123,analizando_argumento_123]=string_copy(str_ram_123,index_123,count_123);

index_123=count_123+2;count_123=string_length(str_ram_123)-index_123+1;
str_ram_123=string_copy(str_ram_123,index_123,count_123);
analizando_argumento_123+=1;
}
}

}//if(i3<argumentos_123)
else
{
//Asignando argumento y borrando comillas
funcion_123[funcion_encontrada_123,analizando_argumento_123]=str_ram_123;
}
}
}

////////////////////////////////Buscando variable de salida.
if(funcion_123[funcion_encontrada_123,2]!="none")
{
posicion_variable_123=funcion_123[funcion_encontrada_123,1]+3;
funcion_123[funcion_encontrada_123,1]+=1;
iniciar_copia_123=0;
igualdad_encontrada_123=0;

//Asignando variable de salida.
str_capture_123="";
continuar_123=1;
for(i2=i;i2>1 and continuar_123;i2-=1)
{
str_ram2_123=string_copy(str_in_123,i2,1);

//Iniciar copia
c1=(str_ram2_123=chr(ord("=")));
c2=(str_ram2_123!=chr(ord("=")));//Para iniciar copia;
c3=(ord(str_ram2_123)=59 || ord(str_ram2_123)=41 || ord(str_ram2_123)=13 || ord(str_ram2_123)=10);//Finalizar copia;

if(c1){igualdad_encontrada_123=1}
if(igualdad_encontrada_123 and c2){iniciar_copia_123=1}

//Finalizando copia
if(c3)
{
//Finalizando copia
continuar_123=0;
iniciar_copia_123=0;
igualdad_encontrada_123=0;
}

if(iniciar_copia_123)
{
//Copiando
str_capture_123=string(str_ram2_123)+string(str_capture_123);
}
}


///Integrando al array el nombre de la variable de salida
funcion_123[funcion_encontrada_123,posicion_variable_123]=str_capture_123;
}


//////////////////////////FIN Buscando variable de salida.

//Posicionando al final de la funcion, despues del parentesis
index_123=i+string_length(str_ram_123)+2;
count_123=string_length(str_in_123)-index_123+1;
str_in_123=string_copy(str_in_123,index_123,count_123);
str_length_123=string_length(str_in_123);
i=1;

}//Fin if(str_copy_123="(")
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
////////////////Analizando archivo ini

//Analizando funcion por funcion
archivo_ini_123="";

for(i=1;i<=funcion_encontrada_123;i=i+1)
{
//Funciones para leer archivo ini
if(funcion_123[i,0]="ini_open" || funcion_123[i,0]="ini_open_from_string")
{
///Leyendo archivo ini desde file
if(funcion_123[i,0]="ini_open")
{
//Verificando argumento
c1=string_count("'",funcion_123[i,3]);
c2=string_count('"',funcion_123[i,3]);

if(c1 || c2)
{
//Para abrir archivo desde string con comillas
abrir_archivo_123=string_replace_all(funcion_123[i,3],"'","");
abrir_archivo_123=string_replace_all(abrir_archivo_123,'"',"");
file_open_read(abrir_archivo_123);
ubicacion_archivo_ini_123=abrir_archivo_123;
}
else
{
//Para abrir archivo desde variable
str_xx_123="file_open_read([x])";
str_xx_123=string_replace(str_xx_123,"[x]",funcion_123[i,3]);
execute_string(str_xx_123);

str_xx_123="ubicacion_archivo_ini_123=[x]";
str_xx_123=string_replace(str_xx_123,"[x]",funcion_123[i,3]);
execute_string(str_xx_123);
}

while(!file_eof())
{
archivo_ini_123=archivo_ini_123+file_read_string()+chr(13)+chr(10);
file_readln();
}
file_close();
}

//Leyendo string ini
if(funcion_123[i,0]="ini_open_from_string")
{
archivo_ini_123=funcion_123[i,3];
ubicacion_archivo_ini_123="string";
}

//Corrigiendo final de string ini
index=string_length(archivo_ini_123);
count=1;
x1=string_copy(archivo_ini_123,index,count);
while(x1=chr(13) || x1=chr(10))
{
str=archivo_ini_123;
index=1;
count=string_length(archivo_ini_123)-1;
archivo_ini_123=string_copy(str,index,count);
index=string_length(archivo_ini_123);
count=1;
x1=string_copy(str,index,count);
}
archivo_ini_123+=chr(13)+chr(10);

/////////////////////////////////////////////////////////////
//Archivo ini para ini_key_delelete, ini_section_delete,
//ini_real_write, ini_string_write.
//archivo_ini_real_123.
//Separando linea por linea
archivo_ini_real_123=archivo_ini_123;
count_lineas_123=string_count(chr(13)+chr(10),archivo_ini_real_123);
for(i4=0;i4<count_lineas_123;i4=i4+1)
{
pos_x_123=string_pos(chr(13)+chr(10),archivo_ini_real_123);
index=1;
count=pos_x_123-1;
linea_ini[i4]=string_copy(archivo_ini_real_123,index,count);
index=count+3;
count=string_length(archivo_ini_real_123)-index+1;
archivo_ini_real_123=string_copy(archivo_ini_real_123,index,count);

//Quitando espacios en blanco del inicio
str=linea_ini[i4];//Entrada
index=1;count=1;
str_ram_x=string_copy(str,index,count);
while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
{
index=2;
count=string_length(str)-1;
str=string_copy(str,index,count);
index=1;count=1;
str_ram_x=string_copy(str,index,count);
}
linea_ini[i4]=str;//Salida
}
lineas_ini_123=i4;
///////////////////////////////////////////////////////////

//Corrigiendo saltos de linea
str=archivo_ini_123;
substr=chr(13)+chr(10)+chr(13)+chr(10);
while(string_count(substr,str))
{
newstr=chr(13)+chr(10);
archivo_ini_123=string_replace_all(str,substr,newstr);
str=archivo_ini_123;
}

//Analizando archivo ini.
secciones_123=string_count("[",archivo_ini_123);//Cantidad de secciones
i2=1;

for(i2=1;i2<=secciones_123;i2=i2+1)
{
//Obteniendo nombre de funcion
pos_123=string_pos("[",archivo_ini_123);//Buscando corchete de apertura.
pos2_123=string_pos("]",archivo_ini_123);//Buscando corchete de cierre.
index=pos_123+1;
count=pos2_123-pos_123-1;
seccion_ini_123[i2,0]=string_copy(archivo_ini_123,index,count);

//Recortando archivo ini
length_123=string_length(archivo_ini_123);
index=pos2_123+1;
count=length_123-index+1;
archivo_ini_123=string_copy(archivo_ini_123,index,count);

//Quitando caracteres del inicio
//Corrigiendo saltos de linea
str=archivo_ini_123;
index=1;count=1;
str_ram_x=string_copy(str,index,count);
while(str_ram_x=chr(10) || str_ram_x=chr(13))
{
index=2;
count=string_length(archivo_ini_123)-1;
archivo_ini_123=string_copy(str,index,count);
index=1;count=1;
str=archivo_ini_123;
str_ram_x=string_copy(str,index,count);
}


//Buscando corchete posterior
pos_123=string_pos("[",archivo_ini_123);//Buscando corchete de apertura.
pos2_123=string_pos("]",archivo_ini_123);//Buscando corchete de cierre.

//si ya no hay mas secciones
secciones_restantes_123=string_count("[",archivo_ini_123);
if(secciones_restantes_123=0)
{
pos_123=string_length(archivo_ini_123)+1;
}

//Buscando cantidad de claves.
index=1;count=pos_123-1;
string_posterior_123=string_copy(archivo_ini_123,index,count);
claves_123=string_count("=",string_posterior_123);
seccion_ini_123[i2,1]=claves_123;

//Extrayendo las claves y valores
for(i3=1;i3<=claves_123;i3=i3+1)
{
index=1;
count=string_pos("=",string_posterior_123)-1;
clave_x_123=string_copy(string_posterior_123,index,count);
index=count+2;
count=length_123-index+1;
string_posterior_123=string_copy(string_posterior_123,index,count);

index=1;
count=string_pos(chr(10),string_posterior_123)-2;
valor_x_123=string_copy(string_posterior_123,index,count);

//Corrigiendo espacios en blanco
//Quitando espacios en blanco
index_x2=1;
count_x2=1;
string_xy_123=string_copy(valor_x_123,index_x2,count_x2);
while(string_xy_123=chr(32))
{
index_x2=2;
count_x2=string_length(valor_x_123)-index_x2+1;
valor_x_123=string_copy(valor_x_123,index_x2,count_x2);
index_x2=1;
count_x2=1;
string_xy_123=string_copy(valor_x_123,index_x2,count_x2);
}

index=count+3;
count=length_123-index+2;
string_posterior_123=string_copy(string_posterior_123,index,count);

//////////////////Limpiando claves

//Quitando espacio inicial
str=clave_x_123;
index=1;count=1;
x1=string_copy(str,index,count);
while(x1=chr(32))
{
index=2;
count=string_length(clave_x_123)-1;
clave_x_123=string_copy(str,index,count);
str=clave_x_123;
index=1;count=1;
x1=string_copy(str,index,count);
}

//Quitando espacio final
str=clave_x_123;
index=string_length(str);count=1;
x1=string_copy(str,index,count);
while(x1=chr(32))
{
index=1;
count=string_length(clave_x_123)-1;
clave_x_123=string_copy(str,index,count);
str=clave_x_123;
index=string_length(str);count=1;
x1=string_copy(str,index,count);
}

//Almacenando clave y valor
seccion_ini_123[i2,i3+1]=clave_x_123;
seccion_ini_123[i2,i3+1+claves_123]=valor_x_123;

}//fin for(i3=1;i3<=claves_123;i3=i3+1)

}//fin for(i2=1;i2<=secciones;i2=i2+1)

}//fin if(funcion_123[i,0]="ini_open".....

///////////Devoliendo valores en variables
///Comparando funciones

//////////////////////////////////Funcion Clave existe
seccion_buscada_123="";
clave_buscada_123="";
seccion_existe_123=0;
clave_existe_123=0;
variable_salida_123="";
str_salida_123="";
continuar_123=1;
numero_seccion_123=0;
numero_clave_123=0;
argumento3_123="";
valor_123="";
argumentos_123=-1;

if(funcion_123[i,0]="ini_key_exists")
{
argumentos_123=2;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
variable_salida_123=funcion_123[i,5];
}

if(funcion_123[i,0]="ini_section_exists")
{
argumentos_123=1;
seccion_buscada_123=funcion_123[i,3];
variable_salida_123=funcion_123[i,4];
}

if(funcion_123[i,0]="ini_read_real")
{
argumentos_123=3;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
argumento3_123=funcion_123[i,5];
variable_salida_123=funcion_123[i,6];
}


if(funcion_123[i,0]="ini_read_string")
{
argumentos_123=3;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
argumento3_123=funcion_123[i,5];
variable_salida_123=funcion_123[i,6];

}

if(funcion_123[i,0]="ini_key_delete")
{
argumentos_123=2;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
}

if(funcion_123[i,0]="ini_section_delete")
{
argumentos_123=1;
seccion_buscada_123=funcion_123[i,3];
}

if(funcion_123[i,0]="ini_write_string")
{
argumentos_123=3;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
argumento3_123=funcion_123[i,5];
}

if(funcion_123[i,0]="ini_write_real")
{
argumentos_123=3;
seccion_buscada_123=funcion_123[i,3];
clave_buscada_123=funcion_123[i,4];
argumento3_123=funcion_123[i,5];
}
///Asignando valores correctos a argumentos
//Cambiando valores entre valores de strings y valores de variables.

//Organizando argumentos
for(i2=1;i2<=argumentos_123;i2=i2+1)
{
//Entrada principal
if(i2=1){str_entrada_123=seccion_buscada_123};
if(i2=2){str_entrada_123=clave_buscada_123};
if(i2=3){str_entrada_123=argumento3_123;};

if(string_length(str_entrada_123))
{
c1=string_count("'",str_entrada_123);
c2=string_count('"',str_entrada_123);
if(c1 || c2)
{
str_entrada_123=string_replace_all(str_entrada_123,"'","");
str_entrada_123=string_replace_all(str_entrada_123,'"',"");
}
else
{
str_ram_x_123="str_entrada_123="+string(str_entrada_123);
execute_string(str_ram_x_123);
}



//Quitando espacios en blanco iniciales.
str=str_entrada_123;//Entrada
index=1;count=1;
str_ram_x=string_copy(str,index,count);
while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
{
index=2;
count=string_length(str)-1;
str=string_copy(str,index,count);
index=1;count=1;
str_ram_x=string_copy(str,index,count);
}
str_entrada_123=str;//Salida

//Quitando espacios en blanco finales.
str=str_entrada_123;//Entrada
index=string_length(str);count=1;
str_ram_x=string_copy(str,index,count);
while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
{
index=1;
count=string_length(str)-1;
str=string_copy(str,index,count);
index=string_length(str);count=1;
str_ram_x=string_copy(str,index,count);
}
str_entrada_123=str;//Salida


}

//Salida principal
if(i2=1){seccion_buscada_123=str_entrada_123};
if(i2=2){clave_buscada_123=str_entrada_123};
if(i2=3){argumento3_123=str_entrada_123};

}//Fin for(i2=1;i2<=funcion_123[i2,1];i2=i2+1)
//Fin organizando argumentos


//Verificando que existe la seccion
for(i2=1;i2<=secciones_123 and continuar_123;i2=i2+1)
{
if(seccion_ini_123[i2,0]=seccion_buscada_123)
{
seccion_existe_123=1;
numero_seccion_123=i2;
continuar_123=0;
}
}


//Buscando clave
if(seccion_existe_123)
{
claves_123=seccion_ini_123[numero_seccion_123,1];
continuar_123=1;
for(i3=1;i3<=claves_123 and continuar_123;i3=i3+1)
{
if(seccion_ini_123[numero_seccion_123,i3+1]=clave_buscada_123)
{
clave_existe_123=1;
numero_clave_123=i3+1;
continuar_123=0;
}
}
}

//Mostrando respuesta
if(string_length(variable_salida_123))
{
str_salida_123=string(variable_salida_123)+"=";
if(funcion_123[i,0]="ini_key_exists"){str_salida_123+=string(clave_existe_123)}
if(funcion_123[i,0]="ini_section_exists"){str_salida_123+=string(seccion_existe_123)}
if(funcion_123[i,0]="ini_read_real")
{
if(clave_existe_123)
{
agumentos_x_123=seccion_ini_123[numero_seccion_123,1];
valor_123=seccion_ini_123[numero_seccion_123,numero_clave_123+agumentos_x_123];
str_salida_123+="real(string_digits(valor_123))";
}
else
{
str_salida_123+=string(argumento3_123);
}
}

if(funcion_123[i,0]="ini_read_string")
{
if(clave_existe_123)
{
agumentos_x_123=seccion_ini_123[numero_seccion_123,1];
valor_123=seccion_ini_123[numero_seccion_123,numero_clave_123+agumentos_x_123];
str_salida_123+="valor_123";
}
else
{
str_salida_123+="'"+string(argumento3_123)+"'";
}
}

execute_string(str_salida_123);
}





//////////////////////////////////////////////////////////////////////////
//Para las funciones ini_key_delete, ini_section_delete, ini_real_write, ini_string_write

c1=funcion_123[i,0]="ini_section_delete";
c2=funcion_123[i,0]="ini_key_delete";
c3=funcion_123[i,0]="ini_write_real";
c4=funcion_123[i,0]="ini_write_string";

if(c1 || c2 || c3 || c4)
{
seccion_encontrada_123=0;
linea_seccion_123=-1;

buscar_clave_123=1;
if(funcion_123[i,0]="ini_section_delete"){buscar_clave_123=0;}
//clave_buscada_123;
clave_encontrada_123=0;
linea_clave_123=-1;

buscar_linea_vacia_123=0;
if(funcion_123[i,0]="ini_section_delete"){buscar_linea_vacia_123=1;}
linea_vacia_123=-1;

//Buscando las lineas de las claves.
//Analizando archivo ini
//Leer linea por linea
//Buscando seccion
//Buscar posicion de la seccion
seccion_buscada_123="["+string(seccion_buscada_123)+"]";
continuar_x_123=1;
for(i4=0;i4<lineas_ini_123 and continuar_x_123;i4=i4+continuar_x_123)
{
index=1;
count=string_length(seccion_buscada_123);
str_123=string_copy(linea_ini[i4],index,count);
if(str_123=seccion_buscada_123)
{
//Encontrar la linea de la seccion
seccion_encontrada_123=1;
linea_seccion_123=i4;
continuar_x_123=0;
}
}


//Buscar clave si se encuentra la seccion
//Buscar linea de la clave
c1=buscar_clave_123;
c2=seccion_encontrada_123;
if(c1 and c2)
{
str_123="";
continuar_x_123=1
for(i5=linea_seccion_123;i5<lineas_ini_123 and continuar_x_123;i5=i5+1)
{
//clave_buscada_123
index=1;
count=string_length(clave_buscada_123);
str_123=string_copy(linea_ini[i5],index,count);
if(str_123=clave_buscada_123)
{
clave_encontrada_123=1;
linea_clave_123=i5;
continuar_x_123=0;
}
}
//Buscando linea de la clave
}

//Buscando linea vacia para ini_section_delete
c1=buscar_linea_vacia_123;
if(c1)
{
continuar_i5_123=1;
for(i5=linea_seccion_123+1;i5<lineas_ini_123 and continuar_i5_123;i5=i5+continuar_i5_123)
{
c1=(string_length(linea_ini[i5])=0);
c2=(linea_vacia_123=-1);
if(c1 and c2)
{
//Encontrar la linea de la seccion
continuar_i5_123=0;//break
}
}
linea_vacia_123=i5;
}

//Reemplazar linea con clave y valor
//Crear lineas del nuevo archivo ini
if(clave_encontrada_123)
{
if(funcion_123[i,0]="ini_write_string")
{
clave_x_123=clave_buscada_123;
valor_x_123=argumento3_123;
linea_ini[linea_clave_123]=string(clave_x_123)+" = "+string(valor_x_123);
}

if(funcion_123[i,0]="ini_write_real")
{
clave_x_123=clave_buscada_123;
valor_x_123=argumento3_123;
linea_ini[linea_clave_123]=string(clave_x_123)+" = "+string(valor_x_123);
}

if(funcion_123[i,0]="ini_key_delete")
{
lineas_ini_123=lineas_ini_123-1;
for(i6=linea_clave_123;i6<lineas_ini_123;i6=i6+1)
{
linea_ini[i6]=linea_ini[i6+1];
}
}
}

if(seccion_encontrada_123)
{
if(funcion_123[i,0]="ini_section_delete")
{
resta_123=linea_vacia_123-linea_seccion_123+1;
lineas_ini_123=lineas_ini_123-resta_123;
for(i6=linea_seccion_123;i6<lineas_ini_123;i6=i6+1)
{
linea_ini[i6]=linea_ini[i6+resta_123];
}
}
}

//Redactando archivo ini
//Crear un nuevo archivo ini
//Redactar linea por linea

//Creando nuevo archivo ini
archivo_ini_123="";
for(i5=0;i5<lineas_ini_123;i5=i5+1)
{
archivo_ini_123+=linea_ini[i5]+chr(13)+chr(10);
}

if(ubicacion_archivo_ini_123!="string")
{
file_open_write(ubicacion_archivo_ini_123);
for(i6=0;i6<lineas_ini_123;i6=i6+1)
{
file_write_string(linea_ini[i6]);
file_writeln();

}
file_close();
}


}//if(c1 || c2 || c3 || c4)








}//for(i=1;i<=funcion_encontrada_123;i+=1)








return str_in_123;

////Caracteres que intervienen en el proceso:
//Espacio en blanco: chr(32).
//" Comillas dobles, comilla tipográfica: chr(34).
//' Comillas simples: chr(39).

//( Paréntesis de apertura: chr(40).
//) Paréntesis de cierre: chr(41).
//, Coma: chr(44).
//. Punto: chr(46).
// "/" Barra: chr(47).
//0 Numero 0: chr(48).
//9 Número 9: chr(57).


//; Punto y coma: chr(59).

//= Signo de igualdad: chr(61).

//A Letra A mayúscula: chr(65).
//Z Letra Z mayúscula: chr(90).

//_ Línea baja, piso: chr(95).

//a Letra A minúscula: chr(97).
//z Letra Z minúscula: chr(122).

//á Letra A con tilde: chr(225).
//ú Letra U con tilde: chr(250).


//Funciones ini
//ini_close();
//ini_key_delete(section, key);
//ini_key_exists(section, key);
//ini_open(name);
//ini_open_from_string(string);
//ini_read_real(section, key, default);
//ini_read_string(section, key, default);
//ini_section_delete(section);
//ini_section_exists(section);
//ini_write_real(section, key, value);
//ini_write_string(section, key, value);

Detalles:
ini_file(str) en su primera versión es un script exclusivo de game maker 4.3 el cual le permite administrar archivos ini de igual modo que en las versiones superiores. Este script recibe como argumento una cadena que contiene las funciones necesarias para trabajar con este tipo de archivos.

Modo de uso:
1. Crear script: Con el código entregado se creará un script el cual deberá ser llamado ini_file.
2. Usar script: ini_file(str), dentro de str deberás colocar una cadena que contenga las funciones básicas para administración de archivos ini.

Ejemplo:
Código: [Seleccionar]

ini_file('   

ini_open("archivo_ini.ini");
ini_write_real("Usuario_1","clave",2112);
ini_close();

');



Mejoras a futuro:
1. Aumentar compatibilidad: Permitir que este script pueda ser usado en versiones superiores para que se pueda trabajar con ini_open_from_string(str) en todas las versiones.

Metas propuestas:
Tengo el objetivo de crear un editor html5 muy básico de video juegos y para lograrlo necesitaré cumplir las siguientes metas:



Bueno eso es todo, saludos.


5
Preguntas y respuestas / Re: Problemas con el movimiento con un juego sencillo
« en: Septiembre 19, 2021, 08:27:24 am »
Hola, gusto en salidarlo...

Cambia el numero uno "1" por la letra v. En tu script estas usando la letra v para definir velocidad y posiblemente la velocidad de movimiento sea mayor que uno, por lo tanto la distancia de colision no debería se uno sinó que debería ser mayor que la velocidad o igual.

Te quedaría algo como esto:

Código: [Seleccionar]
if keyboard_check(vk_right) && place_free(x+v,y)
{
direction = 0;
speed = v;
}

if keyboard_check(vk_up) && place_free(x,y-v)
{
direction = 90;
speed = v;
}   

if keyboard_check(vk_left) && place_free(x-v,y)
{
direction = 180;
speed = v;
}

if keyboard_check(vk_down) && place_free(x,y+v)
{
direction = 270;
speed = v;
}


Para moverte diagonalmente puedes sumarle o restarle 45 grados a las direcciones, dependiendo de la tecla que se presione, ejemplo:

Código: [Seleccionar]
if keyboard_check(vk_right) && place_free(x+v,y)
{
direction = 0;
if (keyboard_check(vk_up)) {diection=direction+45}
speed = v;
}

6
Desarrollo de Scripts / tabla_array_ini(tabla_string);
« en: Septiembre 11, 2021, 08:47:20 pm »
Autor del script: Reyes Dávila
Nombre del script: tabla_array_ini()
Breve descripción de su función: Recibe como argumento una tabla de Microsoft Word y genera un string con formato de archivo ini.
Versiones usadas: Game maker 4.3, Game maker html5, Game maker studio. Debería funcionar en todas las versiones superiores a Game maker 4.3. Lamentablemente no funciona en game maker studio 2, pero realmente no se requiere su implementacion ya que si lo que queremos es obtener archivos ini lo podemos hacer desde la web html5.
Version del script: 4

Mejoras realizadas:

Versión 4
7/10/2021
*Anidacion de claves: Ahora pueden crearse claves anidadas. Puede ser útil para:
1. Organizar facilmente juegos de preguntas donde las preguntas puedan ser audibles y/o requieran algún material de apoyo como un video de youtube.

2. Organizar dialogos aleatorios: Para crear personajes que hablen libremente y escojan ellos mismos lo que van a decir mediante un random.

Debemos tomar en cuenta que el objetivo del script es organizar fácilmente gran cantidad de información diversa en archivos ini. Si se domina correctamente la estructura de tabla se pueden crear archivos ini bastante organizados lo cual nos permitiría crea fácilmente juegos con estructuras complejas.

Será necesario que les cree uno o varios tutoriales para enseñarles a usar la estructura de tabla, los resultados que he obtenido son muy buenos.

Versión 3
*Corregido error en game maker studio.
*Corregido error al exportar a html5.

Versión 2
*Ahora no se requiere una columna especial. Reconoce tablas de Microsoft Word Correctamente.
*Se pueden crear secciones con nombres distintos. Reconoce diversas tablas dentro de la tabla principal.

Html5
En la siguiente web verán el funcionamiento del script y podrán crear su archivo ini a partir de una tabla de microsoft word.
https://dixonysusjuegoseducativos.000webhostapp.com/_practica_game/tabla_ini/ver_01/index.html

Código del script:

Código: [Seleccionar]
///tabla_ini(str);
//Este script transforma el contenido de una tabla de Microsoft Word en formato ini.
//En str debe colocarse la tabla especial de Microsoft Word.

//Al crear la tabla en Microsoft Word se deberá tomar en cuenta:
//1. No usar tabulaciones dentro de celdas,(Produce error).
//2. No usar caracter numeral # dentro de celdas. Para comentar usar ;.
//3. No usar espacios en blanco para definir secciones, puede usar Línea baja "_".
//4. No iniciar una tabla con un comentario en la primera fila.
//5. No iniciar una tabla con una linea vacia en la primera fila.

//Características del sistema
//1. La primera columna a la izquierda serán las secciones del formato ini.
//2. Las siguientes columnas serán las claves y valores.

tabla=argument0;


//Determinando el tipo de tabla
tabla_tipo=1;
str_ram=string_count(chr(9)+chr(13)+chr(10),tabla);
if(str_ram=0){
tabla_tipo=2;

c1=(string_count(chr(35),tabla)=0);
chr_10=string_count(chr(10),tabla);
chr_9=string_count(chr(9),tabla);
c2=(frac(chr_9/chr_10)=0);

if(c1 and c2)
{
tabla=string_replace_all(tabla,chr(10),chr(9)+chr(13)+chr(10));
}
else
{
tabla_tipo=3;
tabla=string_replace_all(tabla,chr(13)+chr(10),chr(9)+chr(13)+chr(10));
}

}

////////////////Corrigiendo tabla
/////Quitando inicio de tabla
//Para game maker 4 desde script
string_inicio=chr(13)+chr(10);
index=1;count=string_length(string_inicio);
c2=(string_copy(tabla,index,count)=string_inicio);
if(c2)
{
index=count+1;
count=string_length(tabla)-index;
tabla=string_copy(tabla,index,count);
}


///Cadenas separadoras de filas de tabla:
//Game maker 4, desde script: 9,13,10.
//Game maker 4 desde file: "";
//Game maker html5 desde script: 35.
//Game maker html5 desde get_string(): 32.


////////////Determinando finales de linea.
//Solo para game maker studio y html5
if(tabla_tipo=2)
{
length=string_length(tabla);
columnas=0;
count_chr_9=0;
pos_chr_9=1;
for(i=1;i<=length;i+=1)
{
    str_chr=string_copy(tabla,i,1);
    if(str_chr=chr(9))
    {
        count_chr_9+=1;

//Para detectar final de linea con cantidad de columnas
continuar=(columnas=0);
if(columnas){continuar=(frac(count_chr_9/columnas)=0)}

        for(i2=i;i2>pos_chr_9 and continuar;i2-=1)
        {
           str_chr_2=string_copy(tabla,i2,1);
           if(str_chr_2=chr(35) || str_chr_2=chr(32))
           {
if(columnas=0){columnas=count_chr_9};//Cantidad de columnas

chr_index=i2;

//Modificando tabla
index=1;count=chr_index-1;
tabla11=string_copy(tabla,index,count);
index=count+2;count=string_length(tabla)-index+1;
tabla12=string_copy(tabla,index,count);
tabla=tabla11+tabla12;
tabla=string_insert(chr(9)+chr(13)+chr(10),tabla,chr_index);
length=string_length(tabla);

continuar=0;//finalizando ciclo
           }

        }
        pos_chr_9=i;

    }

}
}//fin if(tabla_tipo=2)



//Corrigiendo final de tabla
index=string_length(tabla);count=1;
str_x=string_copy(tabla,index,count);
c1=(str_x=chr(9) || str_x=chr(13) || str_x=chr(10) || str_x=chr(32) || str_x=chr(35));
while(c1)
{
index=1;
count=string_length(tabla)-1;
tabla=string_copy(tabla,index,count);
index=string_length(tabla);count=1;
str_x=string_copy(tabla,index,count);
c1=(str_x=chr(9) || str_x=chr(13) || str_x=chr(10) || str_x=chr(32) || str_x=chr(35));
}
tabla+=chr(9)+chr(13)+chr(10);


//Determinando finales de línea de manera adecuada.
string01=chr(13)+chr(9)+chr(13)+chr(10);
string02=chr(9)+chr(13)+chr(10);
string_correcto=string(chr(9))+string("[fin]");
//if(string_count(string01,tabla))
{
tabla=string_replace_all(tabla,string01,string_correcto);
tabla=string_replace_all(tabla,string02,string_correcto);
}
////////////Fin  corrigiendo tabla



//Cantidad de filas
filas=string_count("[fin]",tabla);//Cantidad de filas.

//Extrayendo filas
for(i=1;i<=filas;i+=1)
{
//Clasificando filas
count=string_pos("[fin]",tabla)-1;
index=1;
fila[i]=string_copy(tabla,index,count);
count+=5;
tabla=string_delete(tabla,index,count);
}

//Identificando cantidad de columnas
columnas=string_count(chr(9),fila[1]);

//Identificando celdas
for(i=1;i<=filas;i+=1)
{
for(i2=1;i2<=columnas;i2+=1)
{
index=1;
count=string_pos(chr(9),fila[i])-1;
celda[i2,i]=string_copy(fila[i],index,count);
index=count+2;
count=string_length(fila[i])-index+1;
fila[i]=string_copy(fila[i],index,count);
}
}


//Identificador de filas
seccion_principal=0;
seccion_concatenada=0;

for(i=1;i<=filas;i+=1)
{
//Verificando si la primera celda de la primera columna está vacia
primera_celda_vacia=0;
if(string_length(celda[1,i])=0){primera_celda_vacia=1}

//Verficando todas las celdas están vacías
todas_celdas_vacias=1;
columnas_ram="";
for(i2=1;i2<=columnas;i2+=1)
{
columnas_ram+=string(celda[i2,i]);
}
if(string_length(columnas_ram)){todas_celdas_vacias=0}

fila_tipo[i]="";
if(fila_tipo[i]="" and celda[1,i]=string(chr(59))){fila_tipo[i]="comentario chr(59)"}
if(fila_tipo[i]="" and celda[1,i]=string(chr(35))){fila_tipo[i]="comentario chr(35)"}
if(fila_tipo[i]="" and !todas_celdas_vacias and seccion_principal=0){fila_tipo[i]="seccion principal";seccion_principal=1}

if(fila_tipo[i]="" and !todas_celdas_vacias and seccion_principal=1){fila_tipo[i]="seccion concatenada";seccion_concatenada+=1;}
if(fila_tipo[i]="seccion concatenada" and primera_celda_vacia and seccion_concatenada>1){fila_tipo[i]="clave anidada"}

if(fila_tipo[i]="" and todas_celdas_vacias){fila_tipo[i]="vacia";seccion_principal=0;seccion_concatenada=0}
}
//FIN Identificador de filas


//Creando ini
salida_ram="";
salida_ini="";
fila_principal=1;
claves_anidadas_123=0;

for(i=1;i<=filas;i+=1)
{
if(fila_tipo[i]="seccion principal"){fila_principal=i;i+=1}

//Enumerando claves anidadas
if(fila_tipo[i]="seccion concatenada"){claves_anidadas_123=0}
if(fila_tipo[i]="clave anidada"){claves_anidadas_123+=1}

//Obteniendo valor de celda.
for(i2=1;i2<=columnas;i2+=1)
{

//Identificando la columna 1 para secciones y comentarios.
if(i2=1)
{
if(fila_tipo[i]="seccion principal"){salida_ram=string(celda[1,fila_principal]);salida_ini+='['+string(salida_ram)+']'}
if(fila_tipo[i]="seccion concatenada"){salida_ram=string(celda[1,fila_principal])+string(celda[1,i]);salida_ini+='['+string(salida_ram)+']';}
//if(fila_tipo[i]="clave anidada")
if(fila_tipo[i]="comentario chr(59)"){salida_ini+=';'}
if(fila_tipo[i]="comentario chr(35)"){salida_ini+='#'}
c1=(fila_tipo[i]="seccion concatenada");
if(c1){salida_ini+='[fin]'};//Salto de línea para secciones concatenadas.
}
else
{

c1=(celda[i2,i]!="");
if(c1)
{
cx1=(fila_tipo[i]="seccion concatenada");
cx2=(fila_tipo[i]="clave anidada");
c2=(cx1 || cx2);
if(c2)
{
//Analizando claves
if(celda[i2,fila_principal]=";")
{
//Cuando la clave es un comentario
salida_ram=string(celda[i2,fila_principal])+string(celda[i2,i]);
}
else
{
//Clave normal
if(fila_tipo[i]="seccion concatenada")
{
salida_ram=string(celda[i2,fila_principal])+' = '+string(celda[i2,i]);
}

//Clave anidada
if(fila_tipo[i]="clave anidada")
{
salida_ram=string(celda[i2,fila_principal])+"."+string(claves_anidadas_123)+' = '+string(celda[i2,i]);
}
}
}

if(!c2){salida_ram=string(celda[i2,i])}
salida_ini+=salida_ram;
if(c2){salida_ini+='[fin]'};//Salto de línea para claves y valores.
}




}

}//fin for(i2=1;i2<=columnas;i2+=1)
//Fin obteniendo valor de celda

//Salto de linea para final de secciones
//Salto de linea para columna final
x1=i+(i<filas);
if(fila_tipo[x1]!="clave anidada")
{
salida_ini+="[fin]";
}


}
salida_ini=string_replace_all(salida_ini,"[fin]",chr(13));
return string(salida_ini);
















Modo de uso:


1. Crear script: Con el código que se les está entregando, deberán crear un script cuyo nombre deberá ser: “tabla_ini”.
Ejemplo de creación de un script con el código entregado.


2. Crear tabla: Abre Microsoft Word y crea una tabla con las dimensiones que necesites.
Ejemplo de tabla normal creada con Microsoft Word.



3. En el evento CREATE de un objeto deberás colocar:
Código: [Seleccionar]
tabla_ini(“”);//No olvidar las comillas dobles.

4. Copia la tabla: Selecciona toda la tabla de Microsoft Word . Para copiar toda la tabla sin problemas podemos: Ubicar el mouse sobre la tabla, presionamos click derecho, luego en seleccionar y finalmente en tabla:


5: Pegar tabla: En el evento créate donde hemos colocado el código ‘tabla_ini(“”);’, debemos pegar la tabla copiada dentro de los paréntesis y entre las comillas dobles.

6. Obtener código ini: El script recibe como argumento el string de la tabla y devuelve un string que contiene el archivo ini.


Detalles sobre la tabla







Mejoras próximas del script
1. Anidación: Permitir la anidación de código para crear estructuras anidadas.
2. Salida tipo Json: Permitir la creación de archivos Json.
3. Json lectura: Permitir la lectura de archivos Json para producir archivos ini, ds_maps y ds_lists, en versiones que no cuenten con estas funciones.

Visión de futuro:
1. Si se logra el manejo adecuado del lenguaje Json, se podrá tomar dicho lenguaje como base para la creación de estructuras de juegos y/o sistemas los cuales podrían ser capaces de ejecutarse o interpretarse en diversas plataformas y lenguajes. Esto a su vez permitiría lograr cosas actualmente imposibles (año 2021) como:
   A. Exportar juegos de versiones antiguas del game maker, a plataformas como android.
   B. Fusión de video juegos: se podría crear un interprete de código que tome como base los archivos json para generar un video juego en base a ellos, para luego crear un sistema que combine dos archivos json el cual genere un tercer archivo con características especificas capaces de ser interpretado.
C. Multi motor: Se pudiesen crear juegos basados en estructuras Json los cuales mediante interpretes especificaos pudiesen ejecutarse en diversos motores de desarrollo (Godot, Unity, Game maker, CryEngine, etc..). Esto quiere decir que se podrían crear juegos que se ejecuten en varios motores.

Bueno, eso es todo por ahora, saludos.


7
Desarrollo de Scripts / draw_button_plus
« en: Septiembre 07, 2021, 08:57:11 am »
Nombre del autor : Reyes Dávila (Dixon CGM).
Breve descripción de su función : Sirve para crear varios botones de manera rápida y sin complicaciones, incluyendo las funciones.
Versión GM utilizada : Game maker 4.3 y Game Maker studio 1.4
Versión del script: 1

Vista previa html5:
Aquí podrán ver en funcionamiento el script.
https://dixonysusjuegoseducativos.000webhostapp.com/_practica_game/botones/ver_01/index.html
Recursos adjuntos:
Aquí podrán descargar el editable para game maker studio.
https://www.mediafire.com/file/65vh2fqnjguz5nf/botones.gmz/file

Código del script
Código: [Seleccionar]
//draw_button_plus
//Colocar en evento Create: draw_button_plus_create=1;
//Colocar en evento Draw: draw_button_plus("ver,5,5,ocultar,7,5");
//Ejemplo de uso: draw_button_plus("Abrir,5,5,Cerrar,7,5");


//Creando variables
if(draw_button_plus_create=1)
{
draw_button_plus_create=0;

//Estableciendo cuadriculas
cuadricula_w=room_width/20;
cuadricula_h=room_height/20;

boton_fuente=string_height("H");
cantidad_comas=string_count(",",argument0);
cantidad_botones=floor((1+cantidad_comas)/3);

string_ram=argument0;
largo_string=string_length(string_ram);
for(i=0;i<cantidad_botones;i+=1)
{
posx=string_pos(",",string_ram);
boton[i,0]=string_copy(string_ram,1,posx-1);
string_ram=string_copy(string_ram,posx+1,largo_string);
largo_string=string_length(string_ram);

posx=string_pos(",",string_ram);
boton_ram=string_copy(string_ram,1,posx-1);
boton[i,1]=real(boton_ram);
string_ram=string_copy(string_ram,posx+1,largo_string);
largo_string=string_length(string_ram);

c1=(string_count(",",string_ram));
if(c1)
{
    posx=string_pos(",",string_ram)
    boton_ram=string_copy(string_ram,1,posx-1);
}
else
{
    boton_ram=string_ram;
}
boton[i,2]=real(boton_ram);
string_ram=string_copy(string_ram,posx+1,largo_string);
largo_string=string_length(string_ram);

ancho_boton=string_width(boton[i,0]);
boton[i,3]=ancho_boton*1.5/cuadricula_w;//Alto del boton por cuadricula.
boton[i,4]=2;
}

//Ajustando medidas del boton a cuadricula
for(i=0;i<cantidad_botones;i+=1)
{
boton[i,1]=boton[i,1]*cuadricula_w;
boton[i,2]=boton[i,2]*cuadricula_h;
boton[i,3]=boton[i,3]*cuadricula_w;
boton[i,4]=boton[i,4]*cuadricula_h;
}

}//Fin if argument0="create";








////////////////////////Dibujando botones...
if(draw_button_plus_create=0)
{
//Dibujando botones
funcion_boton="";
for(i=0;i<cantidad_botones;i+=1)
{
for(i2=0;i2<=4;i2+=1)
{
boton_data[i2]=boton[i,i2];
}
x1=boton_data[1];y1=boton_data[2];
x2=boton_data[1]+boton_data[3];y2=boton_data[2]+boton_data[4];
boton_up=0;
c1=mouse_x>x1;c2=mouse_x<x2;
c3=mouse_y>y1;c4=mouse_y<y2;
c5=mouse_check_button(mb_left);
c6=(funcion_boton="");
if(c1 and c2 and c3 and c4 and c5 and c6)
{
funcion_boton=boton_data[0];
boton_up=1;
}

draw_button(x1,y1,x2,y2,boton_up);//Game maker 4

game_maker_studio=''
draw_set_colour(c_ltgray);//Game maker studio
draw_button(x1,y1,x2,y2,!boton_up);//Game maker studio
draw_set_color(c_black);//Game maker studio
//'

if(c1 and c2 and c3 and c4 and (c5=0))
{
draw_line(x1,y1,x2,y1);
draw_line(x1,y1,x1,y2);
draw_line(x2,y1,x2,y2);
draw_line(x1,y2,x2,y2);
}
boton_data[5]=string_width(boton_data[0]);//Ancho del texto.
x1=boton_data[1]+boton_data[3]/2-boton_data[5]/2;y1=boton_data[2]+boton_data[4]/2-boton_fuente/2;
draw_text(x1,y1,boton_data[0]);
}
}//Fin if argument0=draw




Modo de uso
1. Primero copian el código del script que les he dejado.
 2.Crean un script en game maker y lo llaman "draw_button_plus".


3. Dentro de ese script pegan el código que copiaron peviamente.
4. En el evento CREATE de un objeto deberán colocar:
Código: [Seleccionar]
draw_button_plus_create=1;
5. Luego en el evento DRAW deberán colocar:
Código: [Seleccionar]
//Esto es un ejemplo:
draw_button_plus("Ver,1,10,Ocultar,4,10");
6. Finalmente debajo de ese código deberán colocar las funciones de cada botón muy fácilmente de la siguiente manera:
Código: [Seleccionar]
//Funciones de boton
if(funcion_boton="Ver")
{
direction=0;//Aquí va la función deseada
}

if(funcion_boton="Ocultar")
{
direction=1;//Aquí va la función deseada
}

El evento DRAW quedaría de la siguiente manera:
Código: [Seleccionar]
draw_button_plus("Ver,1,10,Ocultar,4,10");
//Funciones de boton
if(funcion_boton="Ver")
{
direction=0;//Aquí va la función deseada
}

if(funcion_boton="Ocultar")
{
direction=1;//Aquí va la función deseada
}


Segunda explicación:
1. Este script recibe argumentos en forma de string, los cuales deberán ser separados por una coma.
2. El primer espacio antes de la primera coma corresponde al nombre del primer botón a dibujar, el segundo argumeto es la posición x del botón y el tercer argumento es la posición y del botón.

3. Si queremos crear tres botones (Abrir, Cerrar y guardar), podemos hacer lo siguiente:
Código: [Seleccionar]
draw_button_plus("Abrir,0,0,Cerrar,3,0,Guardar,6,0");
4. En cuanto a las posiciones x, y estas se expresan en cuadriculas. El script divide la room en cuadriculas dividiendo el ancho y el alto en 20 partes, por tanto si queremos crear un botón en todo el centro de la pantalla podemos escribir:
Código: [Seleccionar]
draw_button_plus("Ver,10,10")

8
Hola, gusto en saludarlo camarada.



Nunca había escuchado en el GML la palabra semilla y si intento relacionar las semillas con game maker mi mente solo dibuja a Mario Bros recogiendo una  hortaliza llamada nabo la cual se siembra con semillas.
 



 

No conocía la palabra semilla aleatoria ahora lo entiendo:
https://es.wikipedia.org/wiki/Semilla_aleatoria

Aquí hay una función para game maker studio 2 que emplea ese concepto:
https://manual-es.yoyogames.com/GameMaker_Language/GML_Reference/Maths_And_Numbers/Number_Functions/random_get_seed.htm

Yo, también tuve problemas con el random, ya que no funcionaba  en juegos html5 hasta que se reiniciaba el juego. Estas son algunas  soluciones planteadas:

1.   Obtener los últimos números del current_time.
Bueno, la variable current_time que indica el tiempo de ejecución del sistema, siempre tendrá números diferentes en en tiempo, por lo tanto se pudiesen tomar sus últimos dígitos para obtener un numero aleatorio. Luego pudieses multiplicarlos por otro numero y producir algo más random.

2.   Dejarle el trabajo a php:
Para eso game maker se tendría que comunicar con un código php para que este le devuelva un numero aleatorio sin problemas, pero solo funcionaria si hay internet. Voy a trabajar en eso.

3.   Pedirle ayuda al cmd de Windows, (para juegos en Windows).
Crear un script que cree un fichero tipo bath (.bat), el cual tenga los códigos necesarios para generar un numero aleatorio mediante el lenguaje del Msdos y que este devuelva un numero aleatorio para game maker.


También estos métodos funcionarían para crear una larga lista de números aleatorios los cuales pudiesen emplearse para crear mundos aleatorios.

9
General / Joystick táctiles para juegos html5 en proceso.
« en: Agosto 13, 2021, 04:04:16 am »
Hola, gusto en saludarlos:


Joystick táctiles para juegos html5 en proceso.

1.   Quiero crear un joystick táctil para juegos html5 y no puedo emplear el draw gui porque no funciona en exploradores.

2.   El año pasado cree un sistema engorroso y orrible de escalas para lograr imitar la función draw gui en exploradores y logré crear joytick táctiles para el juego “adiós capitán”. Pero es demasiado complicado y los resultados no son del todo agradables (Mira el juego y dale un like, XD). En el proceso aprendí algunas cosas y este es el punto 3:

3.   Se pueden crear Joytick táctiles para juegos html5 empleando un pequeño sistema de tres views manejado por un script encargado de escalar las views para que dé un resultado parecido a este:




1.   Para lograrlo hay que crear una view principal que se ajuste al tamaño del explorador.

2.   Una seguna view que contenga el juego.

3.   Una tercera view que contenga el joystick táctil.
Parece fácil pero no:

1.   Para que todo quede ajustado deben escalarse proporcionalmente las views 2 y 3, empleando regla de tres, (Estudia regla de tres matemáticas las vas a necesitar).

2.   Debido al problema de escalado que algunos conocemos (problemas con fuentes, imágenes más dibujadas), es necesario trabajar con views superiores a 512x512.

3.   Para ubicar correctamente las views vamos a necesitar un sistema o script parecido al “ajustador de canvas html5” que he creado, pero un poco más complejo, esta véz habrá que manejar muy bien las dos posiciones del dispositivo móvil:

Movil en posición horizontal: Al cambiar de posición el móvil, la posición del joystick táctil cambia.



Para lograr que todo cuadre, es conveniente trabajar ahora con 4 views como se indica abajo:





1.   View azul: La que se ajusta a todo el contorno del explorador.
2.   View Roja: La que mostrará el juego.
3.   View verde: la que contiene la parte izquierda del joystick.
4.   View naranja: la que contiene la parte izquierda del joystick táctil.

¿Y que lograremos con eso?, bueno con eso podemos manejar las views para que cuando el móvil esté en horizontal podamos mostrar algo como esto:




Ahora olviden todo lo aprendido, XD.  Ahora es que vengo a hablarles de lo que realmente quiero hablarles:

Características de este sistema ya explicado:

1.   Solo trabajará correctamente en game maker studio 1, 2 y superiores.
2.   Se requiere emplear las funciones incluidas de multitouch.
3.   No se aplicará correctamente en la versión de game maker llamada “game maker html5”.

En resumen: Quiero crear un sistema de joystick táctiles que funcione en la versión game maker llamada “Game maker html5”.

Razones y motivos principales:
1.   Los juegos creados con game maker html5 son más ligeros que los creados con game maker studio, y cargan más rápido.

Dificultades:
1.   Game maker html5 no incluye función multitouch.
2.   Game maker html5 presenta problemas de coordenadas del mouse en dispositivos móviles.

Objetivos y alternativas:
1.   Crear joystick táctiles para juegos html5 mediante lenguajes para el desarrollo web tales como javascript, Jquery, php, angular, react, etc…

2.   Integrar al juego exportado el joystick táctil creado mediante los lenguajes indicados. (para esto solo necesitamos modificar el index.html del juego)


¿Cómo funcionaría el proyecto?

1.   Se crearían, mediante los lenguajes para el desarrollo web, los botones táctiles los cuales pudiesen ser ajustados mediante reglas css u otras.
2.   Al pulsar los botones algún lenguaje deberá “simular” que se ha presionado una tecla y game maker reconocería esta tecla “en teoria”.

Dificultades:

1.   No encuentro el código que simula la teclas del teclado en exploradores, bueno solo encontré esto:
https://www.it-swarm-es.com/es/javascript/jquery-o-js-puro-simular-la-tecla-enter-presionada-para-probar/969438578/

2.   Jquery está obsoleto y quizás deje de implementarse en exploradores en el futuro.

Estado actual del proyecto:
En proceso....

¿ alguna idea?

Aqui les dejo un ejemplo:

Un ejemplo sin terminar. Giren el dispositivo móvil y verán los cambios.
https://dixonysusjuegoseducativos.000webhostapp.com/_practica_game/Draw_gui_game/index.html

El juego "Adios capitan", trabaja con el sistema engorroso de escalas, giren el dispositivo movil.
https://dixonysusjuegoseducativos.000webhostapp.com/juegos_completos/adios_capitan/index.html

10
Juegos completos / Re: La carreta precisa + score online
« en: Agosto 08, 2021, 09:25:16 pm »
Hola, gusto en saludarlos.

Aquí les traigo la actualización 4 de este juego y estos fueron los principales cambios:

1.   Dificultad: Se reguló un poco la dificultad como me aconsejó nuestro amigo Marth.
2.   Reproducción de partida: Ahora podemos ver la jugada de los players que entren en el top 10.
3.   Ajuste de score: Se ajustó un poco el score para poder competir con nuestro amigo AlexWood XD.


Bueno adiós nos vemos.


11
Preguntas y respuestas / Re: Variable global
« en: Agosto 06, 2021, 05:04:49 pm »
Hola ikaro espero que estes muy bien.






En game maker studio existe una variable llamada "persistent", que puede valer uno o cero. Si un objeto tiene esta variable en 1, el objeto pasará de un room a otro con su misma posición. Si los circulos blancos son objetos entonces colocale en su evento create

persistent=1;

Luego ajusta tu juego para que quede todo perfecto y al finalizar la animación tendrás que destruir a todos tus circulos porque si no lo haces seguirán apareciendo en todos tus rooms, para destruirlas a todas podrás usar el siguiente código dobde obj_circulo_blanco es el nombre de tu objeto circulo.

with (obj_circulo_blanco)
{
    instance_destroy();
}



Bueno, nos vemos, adiós.



12
Preguntas y respuestas / Re: Problemas con HTML5
« en: Agosto 03, 2021, 03:01:36 am »
Hola, amigo Marth.


Bienvenido al mundo html5...... tus problemas acaban de comenzar, jejejeje.  XD


¿Full screen en exploradores?  :o.....Llevo como un año desde que me hice esa misma pregunta y he hecho varios intentos para comprender lo que se debe hacer. Pues ya debes saber que el full screen es con f10 y f11. Pero si decides que quieres un full screen automatico al inicio del juego solo tedigo que es toda una aventura interminable.


La aventura interminable del full screen automático en html5.




1.   Game maker ofrece la opción de agregar un botón para hacer un full screen en exploradores, pero estos botones son fastidiosos y orribles, y si el usuario no los apriera simplemente no tendrá full screen y no generan el full screen automatico.
2.   El problema con el full screen es el siguiente: Google no quiere que sean posibles los fullscreen. Por motivos de seguridad web un full screen puede convertirse en una menaza para los usuarios web ya que un programador malicioso pudiese hacerle un full screen, evitar que use sus dispositivos (raton, teclado, etc…). Por eso google y otros intelectuales informáticos tomaron la decisión de que no fuera posible hacer fullscren automatico, fin.
3.   Bueno de tanto buscar esa solución solo encontré una pequeña pista que me puede conducir a esa respuesta.
4.   Ahora bien, esta es lo último que encontré para hacer un full screen en navegadores, no te asustes por ningún lado mencionan a game maker, tranquilo. https://tutobasico.com/poner-navegador-en-pantalla-completa-con-jquery/


Carta al señor Mart:
Para encontrar el diamante perdido de la fullscreen tendrás que atravesar las fronteras del game maker y llegar  a los bosques tenebrosos de JavaScript y conseguir la espada mágica de Jquery. Primero ve a la provincia de Php hay encontrarás a un aliado llamado http_pos_string, pero ten cuidado porque te asechará un gran enemigo, “la desmotivación”. No te podré acompañar porque estoy combatiendo en otra batalla informática para alcanzar la liberación del game maker. Ve  amigo………………que el código te acompañe.
















Aquí podemos ver a Mart en el nivel 5000 con su espada php.







13
Preguntas y respuestas / Re: Problemas con HTML5
« en: Agosto 02, 2021, 05:51:39 pm »
Hola Marth, espero que estés bien.

Desde hace algún tiempo me he dedicado a crear juegos html5 y en el proceso me he encontrado con muchos problemas tales como:
1.   Problemas de sonido: La carga de sonido es bastante lenta.
2.   Problemas con funciones: Algunas funciones como string_copy tienen pequeñas diferencias y hay otras que simplemente no trabajan como otras que producen errores.
3.   Problemas con notificación de errores: Hay errores que aparecen en html5 y son difíciles de detectar, muchos de ellos se basan en problemas con funciones.
4.   Problemas de carga de los juegos: Si el juego usa muchas imágenes grandes tardará en cargar.
5.   Problemas con el canvas (área del juego en el explorador).
6.   Problemas con las fuentes de texto: a beses al escalar las imágenes o la view se distorsionan las letras y simplemente se ven muy mal.
7.   Problemas con la función random: He notado que esta función falla hasta que se reinicie el juego, pero debe existir alguna solución….. ha ya se quizás alguna ayuda de php.
Un juego puede correr muy bien en Windows y muy mal en html5.
Recomendaciones:
1.   Crea un “loading” que aparezca al iniciar el juego para que detecte si ya ha cargado completamente y luego que inicie el juego.
2.   Existen 2 grupos de funciones para controlar el mouse, las que conocen todos los mortales (mouse_check_button(mb_left)…) y las otras que se basan en el multi touch (funciones para detectar más de un mouse), quizás estas últimas puedan corregir el error.
3.   En cuanto al sonido también existen os grupos de funciones, las normales y las actuales.

Por mi parte al programar en html5 creo imágenes muy pequeñas y no les coloco sonido para que el juego cargue inmediatamente, no tengo idea de como programar un “loadin” de carga pero creo que es posible.











Bueno eso es todo te deseo las muchas de las mejores suertes y felicidades, amigo.





Por cierto si ganas me invitas a Madrid, quiero conocer a Veronica zumalacárregui.  XD


Veronica zumalacárregui del progama "Me voy a comer el mundo".


14
Hola, gusto en saludarlo.

la función que usted busca es:

keyboard_check_pressed( key );

En key colocarás la tecla que vas a usar, y obtendrás algo como esto
if(keyboard_check_pressed( vk_space ))
{
// función a realizar.
}

 Aqui puedes descargar el manual de game maker studio 2 en español el cual te ayudará a comprender esas funciones, para usarlo debes descargar el archivo, abrir la carpeta y abrir el archivo index.html
http://www.mediafire.com/file/z2ym96s5pdiz1y8/GMS2_Spanish-master.zip/file

15
Desarrollo de Scripts / ip_admin.php
« en: Julio 29, 2021, 11:17:53 am »
Nombre del autor : Reyes Dávila (Dixon CGM).
Breve descripción de su función : Es un scritp híbrido que funciona en game maker y php, devuelve la ip del usuario y la cantidad de visitas que tiene el juego, con esto se puede saber cuántos usuarios han jugado el juego.
Versión GM utilizada : Game Maker studio 1.4
Versión del script: 2

Vista previa html5:
Aquí podrán ver en funcionamiento el script.
https://dixonysusjuegoseducativos.000webhostapp.com/ip_admin/modelo/Ejemplo_html5/index.html

Recursos adjuntos:
Aquí podrán descargar el editable para game maker studio y el html5.
https://www.mediafire.com/file/zrdsu8e5b19clk9/ip_admin.gmz/file

Modo de uso

Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "1234567" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo ip_admin.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado ip_admin (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar:ip_admin("create");
c) En el evento step: ip_admin("step");
d) En el evento Asynchronous - http: ip_admin("http");

paso 5: Visualizar salida:
a) Este script creará dos variables globales llamadas: global.ip y global.cantidad_ip.
    *global.ip: Es la que contiene la ip de usuario.
    *global.cantidad_ip: Es la que contiene la cantidad de ip detectadas(la cantidad de usuarios que han visto tu juego).




Código del script


Código: [Seleccionar]






datos1514='
<?php
///Nombre del script: ip_admin.php;
//Para game maker studio 1.4
//Serial único del script: _BXY256
//Para cambiar el serial único deberá hacerse un reemplazo de todas las apariciones de "_BXY256".

///Datos a modificar manualmente
//Los datos deben estar dentro de comillas dobles.
$Usuario00="Dixon123";
$Clave00="1234567";
$web_alojamiento="https://dixonysusjuegoseducativos.000webhostapp.com/ip_admin/modelo/";
$script_php="ip_admin.php";
$intervalo_llamada="25";//Es el interrvalo de tiempo para solicitar información.

/*

//Instrucciones:
Este script es un código hibrido porque funciona en game maker y en servidores con php.
Para hacerlo funcionar es necesario tener una copia de este script guardado como archivo php
con la extensión ".php" y otra copia deberá estar dentro de un script de game maker.

Modo de uso:
Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "123456" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo ip_admin.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado ip_admin (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar: id_admin("create");
c) En el evento step: id_admin("step");
d) En el evento Asynchronous - http: id_admin("http");

paso 5: Visualizar salida:
a) Este script creará dos variables globales llamadas: global.ip y global.cantidad_ip.
    *global.ip: Es la que contiene la ip de usuario.
    *global.cantidad_ip: Es la que contiene la cantidad de ip detectadas(la cantidad de usuarios que han visto tu juego).

*/

?>

';

/*
<?php
//////////////////////////////////////////////////////////CÓDIGO PHP
$FuncionPhp=$_POST["funcion_BXY256"];
$UsuarioPhp=$_POST["usuario_BXY256"];
$ClavePhp=$_POST["clave_BXY256"];

//Protección con clave y usuario
$c1=($UsuarioPhp == $Usuario00);
$c2=($ClavePhp == $Clave00);

if(
$c1 and $c2)
{
//Aquí va el código php
if($FuncionPhp == "get")
{
    
//Paso 1: Obteniendo la ip de usuario.
    
function getRealIP()
        {
            if (!empty(
$_SERVER['HTTP_CLIENT_IP']))
            return 
$_SERVER['HTTP_CLIENT_IP'];
            if (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR']))
            return 
$_SERVER['HTTP_X_FORWARDED_FOR'];
            return 
$_SERVER['REMOTE_ADDR'];
        }
        
$IpUsuario=getRealIp();
        
        
//Paso 2: Identificando el fichero de registo.
        
$Fichero="registro_ip.txt";
        
        
//Paso 3: Creando fichero si no existe.
        
if (!file_exists($Fichero))
        {
            
$fi fopen($Fichero'w');
            
fclose($fi);
        }
        
        
//Paso 4: Leyendo el contenido del fichero.
        
$FicheroString=file_get_contents($Fichero);
        
        
//Paso 5: Verificando si la ip de usuario está registrada.
        
$IpExiste=substr_count($FicheroString$IpUsuario);
        
        
//Paso 6: Añadiendo la ip de usuario si no existe
        
if($IpExiste == 0)
        {
            
$fi=fopen($Fichero"a");
            
fwrite($fi$IpUsuario."/");
            
fclose($fi);
        }
        
        
//Paso 7: Leyendo el fichero denuevo.
        
$FicheroString=file_get_contents($Fichero);
        
        
//Paso 8: Contando la cantidad de ips registradas.
        
$IpCount=substr_count($FicheroString'/');
        
        
        
//Paso 9: Devolviendo archivo ini.
        
$Fichero_ini="[datos]
ip='xxip'
cantidad_ip=ccc
"
;
        
$Fichero_ini=str_replace('xxip',$IpUsuario,$Fichero_ini);
        
$Fichero_ini=str_replace('ccc',$IpCount,$Fichero_ini);
        echo 
$Fichero_ini;
    }



}
//fin Protección por clave.
////////////////////////////////////////////////////////FIN CÓDIGO PHP
?>

*/
salir_php='
<?php
/*
';
////////////////////////////////////////////////////////CÓDIGO GAME MAKER
if(argument0="create")
{
//Obteniendo datos de script
length00=string_length(datos1514);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.usuario_BXY256=string_copy(datos1514,1,posx-2);//Usuario
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.clave_BXY256=string_copy(datos1514,1,posx-2);//Clave
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.web_alojamiento_BXY256=string_copy(datos1514,1,posx-2);//Web_alojamiento
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.script_php_BXY256=string_copy(datos1514,1,posx-2);//Nombre del script php
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.intervalo_llamada_BXY256=real(string_copy(datos1514,1,posx-2));//intervalo que transcurrirá por cada llamada

//Construyendo la ruta del servidor
global.web_alojamiento_BXY256=string(global.web_alojamiento_BXY256)+string(global.script_php_BXY256);

//Para efectuar la llamada.
global.step_time_BXY256=0;

//variables para solicitar datos
global.stats_BXY256 = -1;
global.result_BXY256 = "";
global.ID_BXY256 = -1;
global.string_ini_BXY256="";

//Variable para ejecutar código
global.ejecutar_codigo_BXY256=0;

//Datos para el sistema. Estos datos dependerán de cada script.
global.ip="0.0.0.0";
global.cantidad_ip="0";
}


if(argument0="http")
{
    if (ds_map_find_value(async_load,"id")) == global.ID_BXY256
    {
        global.stats_BXY256 = ds_map_find_value(async_load,"status");
        global.string_ini_BXY256 = ds_map_find_value(async_load,"result");
    }
    if global.stats_BXY256 == 0
    {
        global.ejecutar_codigo_BXY256=1;
    }
}


if(argument0="step")
{
    global.step_time_BXY256+=1;
    if(global.step_time_BXY256=global.intervalo_llamada_BXY256)
    {
        funcion00="get";
        global.ID_BXY256 = http_post_string(global.web_alojamiento_BXY256,"funcion_BXY256="+string(funcion00)+"&usuario_BXY256="+string(global.usuario_BXY256)+"&clave_BXY256="+string(global.clave_BXY256));
        global.step_time_BXY256=0;
    }
}

if(global.ejecutar_codigo_BXY256)
{
//El código a ejecutar dependerá de las funciones del script.
        global.ejecutar_codigo_BXY256=0;

//Los datos llegarán en forma de archivo ini.
        ini_open_from_string(global.string_ini_BXY256);
        global.ip = ini_read_string( "datos", "ip", "0.0.0.0" );
        global.cantidad_ip = ini_read_real( "datos", "cantidad_ip", 0);
        ini_close();
}
////////////////////////////////////////////////////FIN CÓDIGO GAME MAKER
salir_php=';
*/
?>

';



Páginas: 1 2 3 ... 14

Warning: Parameter 1 to spoiler_buffer() expected to be a reference, value given in Unknown on line 0

Warning: Parameter 1 to custom_report_ob() expected to be a reference, value given in Unknown on line 0