Hola:

Yo no se si esto lo han averiguado ...
llamada al Script

//.   0, 0,   300, 112, 50

Estadistica(iResto, iFactor,   Cantidad, Aciertos, Puntaje)


Estadistica(argument0, argument1, argument2, argument3)
{
     argument0 = 300 - 112
     argument1 = 112 * 100 / 300

     return ( argument0 * Puntaje)
}

Bueno lo que quiero destacar es poder cambiar los valores de los argumentos "argument0" y "argument1", hay alguna nomenclatura, se que esto es posible de hacer cuando pero ejemplo "argumento0", fuere una estructura de una instancia  NPC.x, NPC.y ,  y pasase la estructura NPC,,, como argumento0,,,

Bueno la lógica de que esto al ser una instancia de un objeto es un bloque de memoria, pero en esa misma definición, las variables también son un bloque de memoria, así que debiera poder cambiarse desde dentro del Script, el problema es que a de haber una sintaxis, o alguna manera de escribirlo para que sea efectivo, alguien sabe ... !!!

Les voy a dar una idea, pero es que yo no la se hacerla bien, y agradecería que me dieran el código please...

Resulta que en la librería de GM, cuando uno llama un Script, por defecto, el boton "Execute_Script" pone 4 argumentos del Script,
Ese Boton "Execute_Script", es una función en la librería, hasta donde yo he leído, GM,, puede poner valores en un Stack, si alguien con el conocimiento, pudiera hacer una Función más a la Librería, que imitara el proceso del Botón "Execute_Script", pero en vez de poner 4 argumentos pusiera 6, y antes de llamar al Script, metiera esos mismos 6 argumentos, en el Stack,,, procesa el Script, una vez terminado,,, vuelve a meter los valores de los argumentos en el Stack, y también envíe el valor de salida del return,, Ojo aquí es muy importante conservar el Orden de entrada y Salida de lo argumentos, y el argumento que esta en cero no lo considere,,, " y se solucionaría el Problema de los argumentos variables...

la función podría llamarse Execute_ScriptVar(0,0,0,0,0,0), para diferenciarla de la anterior

Alguien la Puede Hacer, please ...  y la metemos el la librería de GM.

Gracias ... !!!



Te refieres a como le das los valores a los argument cuando ejecutas el script?

Abre una pieza de codigo y pon (Suponiendo que el nombre del script es "Estadistica":

[gml]
Estadistica(argument0,argument1,argument2,argumentn)
//Asi es la sintaxis para elegir los valores de los arguementos. En vez de poner argument, pon el valor que quieras.
[/gml]

Uy no entendi nada... :-\

Tu problema es que ya tenes una variable que se llama argument0, o argument1, o argument2... y te trae problemas en los scripts?

Despues lei algo como meter los argumentos en un stack, despues ejecutar el script cargando esos argumentos, y devolver los valores de los argumentos
No estarás buscando la función execute_script(Estadistica,argument0,argument1,etc)?
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


Se chicos creo que no lo entendieron,,,, veamos otro ejemplo,,, este funciona pero no es la idea !!!

//. Evento Create
REG = instance_create(x,y, obj_Registro)


//. Evento Space

QueNumero = 9
if( TraigaRegistro(REG,  QueNumero) == true)
{
       //. Si encontre ese registro los Datos los Puse en el Objeto REG, vealos

       draw_text(1,12, "Nombre..:" + string(REG.Nombre))
       draw_text(1,12, "Nombre..:" + string(REG.Apellido))
       draw_text(1,12, "Nombre..:" + string(REG.Edad))

} else {
     //. No Encontre el Registro, puse la palabra "VACIO" en cada campo de REG

}


//. Es Script

TraigaRegistro( dta, iNumero)
{

    if( iNumero == 9){
       
        //. Existe ese Registro le Paso los Datos
        dta.Nombre = "Jeanisse"
        dta.Apellido  = "Valencia"
        dta.Edad      = 20

        //. Si lo Encontre le marco true
        return true

}  else {
    //. No no encontre el Registro le pongo Vacios

    dta.Nombre = "VACIO"
    dta.Apellido  = "VACIO"
    dta.Edad      = 0

    //. Le marco que no lo Encontre
    return false
}

Bueno esto funciona pero con instancias de objetos,,, no es la idea pero sirve,,, lo que pasa es que en vez de cambiar los elementos dentro del objeto,,, el argumento pasado podría cambiarse directamente, sin meterlo en un objeto, y eso se llama "Argumento Variable"... entienden !!!

Creo que funciona por esta manejando punteros a direcciones de memoria ,,, y las variables las guarda en otro alcance,,, xD,,, que horror !!!!






usa variables global para guardar los datos.
dos usa un documento externo leete el manual en la parte de "Archivos INI"