Abril 25, 2013, 08:50:57 PM Ultima modificación: Abril 26, 2013, 05:24:00 AM por Iros
Buenas, como dice el título tengo problemas al definir un array. Lo que hago es llamar un *.ini con la DLL IniLibGMDLL.dll. El problema es que quiero definir cada llave (key) del *ini en un array, para ello uso este código:

[gml]rini_init();
INI = rini_open("List.ini");
//Iterate through them
name = rini_key_find_first(INI,"PARTICIPANTES");
while (name!="") {//Con esto creamos un array
    name[a] = rini_key_find_next(INI,"PARTICIPANTES");
    a+=1
}
//rini_close(INI);
rini_close(INI);

alarm[0] = 15;[/gml]

Se que está mal pero no se como hacer para crear un array para que cada valor se guarde, no se si me explico.

Desde ya, muchas gracias.

lo único que falta es declarar a antes de entrar al bucle:
[gml]
rini_init();
INI = rini_open("List.ini");
//Iterate through them
name = rini_key_find_first(INI,"PARTICIPANTES");
var a=0//declara la variable para el crecimiento de los indices
while (name!="") {//Con esto creamos un array
    name[a] = rini_key_find_next(INI,"PARTICIPANTES");
    a+=1
}
//rini_close(INI);
rini_close(INI);

alarm[0] = 15;
[/gml]

a menos que sea una variable declarada en el créate del objeto
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

Defino la variable a en el evento CREATE. Al ejecutar el código me dice que el índice de array no puede superar los 32000 o algo así. La verdad que no se que puede ser el problema :S

Cita de: Iros en Abril 25, 2013, 10:37:53 PM
Defino la variable a en el evento CREATE. Al ejecutar el código me dice que el índice de array no puede superar los 32000 o algo así. La verdad que no se que puede ser el problema :S
Entonces es porque el indice del array no puede superar los 32000 :D
Por qué llegas a un indice tan alto? Lo necesitas realmente o es un problema del bucle? Porque no creo que tengas tantos participantes
No se como funciona el código pero no se debe estar cumpliendo la condición del while, por lo que veo es porque no hay ningun nombre con string "" en el ini
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


#4 Abril 26, 2013, 02:29:44 AM Ultima modificación: Abril 26, 2013, 02:45:30 AM por Iros
Ese problema ya lo arreglé, el código me quedó de esta forma:

[gml]
rini_init();
INI = rini_open("List.ini");
//Iterate through them
name = rini_key_find_first(INI,"PARTICIPANTES");
while (name!="") {//Con esto creamos un array ^^
    name = rini_key_find_next(INI,"PARTICIPANTES");
    name[a] = rini_key_find_next(INI,"PARTICIPANTES");
    a+=1
}
//rini_close(INI);
rini_close(INI);

alarm[0] = 15;[/gml]

Ahora el problema es que no entra en el alarm :S

[EDIT]

Si entra en el evento alarm, pero no se porque motivo no me ejecuta el random :S
[gml]value = random_range(0,a)[/gml]
Donde "a" es la variable que definí antes que se incrementaba :S

[gml]var a;a=0;
rini_init();
INI = rini_open("List.ini");
//Iterate through them
name = rini_key_find_first(INI,"PARTICIPANTES");
while (name!="") {//Con esto creamos un array ^^
    name = rini_key_find_next(INI,"PARTICIPANTES");
    name[a] = name;
    a+=1
}
//rini_close(INI);
rini_close(INI);

alarm[0] = 15;[/gml]
No debería ser así?.

Lo de la variable "a" es fácil, solo definela en create y no en ese código o usa el random dentro de ese código. Las variables declaradas con "var" son temporales y solo funcionan en el código en el que son declaradas.

#6 Abril 26, 2013, 04:12:15 AM Ultima modificación: Abril 26, 2013, 05:22:24 AM por Iros
Antes lo hacía con var pero necesito usar las variables que defino en otros eventos por eso las hice local en vez de temporales.

El problema que tengo que es genera todo bien el número, le pongo un round() y redondea perfecto, pero no se porqué el valor ese no coincide con el valor del array cuando llamo uno, me explico, en otro objeto pongo: obj_sortear.name[obj_sortear.value] y me larga el resultado, pero comparándolo en la lista del ini el valor de VALUE no coincide :S

[EDIT]

Ya lo arreglé, quedó así:

[gml]
rini_init();
INI = rini_open("List.ini");
//Iterate through them
global.name[a] = rini_key_find_first(INI,"PARTICIPANTES");
//show_message(string(a)+"="+global.name[a])
while (global.name[a]!="") {//Con esto creamos un array ^^
    a += 1
    //global.name = rini_key_find_next(INI,"PARTICIPANTES");
    global.name[a] = rini_key_find_next(INI,"PARTICIPANTES");
    //show_message(string(a)+"="+global.name[a])
}
//rini_close(INI);
rini_close(INI);

alarm[0] = 15;[/gml]

El amigo sooel me ayudó :D

Cita de: Iros en Abril 26, 2013, 04:12:15 AM
Antes lo hacía con var pero necesito usar las variables que defino en otros eventos por eso las hice local en vez de temporales.
??? Yo te dije que las hagas locales no temporales, y de hecho por alguna extraña razón borraste el "var a; a=0;" de tus códigos de allí los copie.

Como sea que bueno que lo haz resuelto, en realidad solo tenias que cambiar el "a+=1" de lugar  XD.

Lo borré porque me di cuenta que copié el código anterior otra vez xD.

Al hacer la variable name global se hizo todo más fácil para llamarlas y todo. Gracias a todos por su ayuda!!.