Agosto 05, 2018, 08:51:36 PM Ultima modificación: Agosto 06, 2018, 12:39:35 AM por jpsaenz
Hola!

Intenté hacer algo como esto:

script = "scr_script";
script_execute ("script");


pero no funciona. Si entrecomillo el nombre de la variable, GMS misteriosamente ejecuta el primer script de la lista (es decir, puedo escribir "script_execute ("cualquiercosa")" y aquí me refiero a poner literalmente cualquiercosa, y se ejecutará el primer script que tenga en la lista de scripts (ver adjunto: en este caso, por ejemplo "scr_lamp_on_off")

Si no entrecomillo el nombre de la variable, GMS busca un script con ese nombre y (obviamente) no lo encuentra.

Existe alguna forma de ejecutar un script cuyo nombre dependa de una variable?

Saludos!

--
@jupixweb

Mira a ver si este trozo de código te puede ayudar en algo:

script_objetivo = asset_get_index(script_nombre);  //  script_nombre viene a ser nuestra variable
script_execute(script_objetivo);

Hola Arcdadian, muchas gracias por responder.

Cita de: Arcadian en Agosto 06, 2018, 07:12:14 AM
script_objetivo = asset_get_index(script_nombre);  //  script_nombre viene a ser nuestra variable
script_execute(script_objetivo);


hmmm... imagino que habrás querido decir que "script_nombre" es el nombre del script y que "script_objetivo" es nuestra variable. Aún así no funciona  :(

Saludos!
--
@jupixweb

Pues no, no me has entendido.

script_objetivo es un valor real, no la variable. La variable es una string (script_nombre).

Cita de: Arcadian en Agosto 06, 2018, 09:55:30 PM
Pues no, no me has entendido.

script_objetivo es un valor real, no la variable. La variable es una string (script_nombre).

ok, pero si "script_objetivo" es el nombre real del script, no tiene sentido hacerlo así.

Yo necesito poder ejecutar un script (u otro) dependiendo de algunos factores cuyo resultado vuelco en una variable.

Voy a inventar un ejemplo fácil: hay una puerta, al chocarse el jugador contra ella, se ejecuta un script. El estado de la puerta (cerrado/abierto) está guardado en una variable, y qué script ha de ejecutarse depende de ese estado.

O sea, lo que quiero hacer es algo como lo siguiente:

if (estado = cerrado) {
    scripttocall = scr_puertacerrada;
    } else if (estado = abierto) {
    scripttocall = scr_puertaabierta;
   }

var choque
choque = colision_rectangle (x,y,x+100,y+100,OBJ_PUERTA,false,false);
if (choque){
    script_execute (scripttocall);
    }


--
@jupixweb

El último ejemplo que has escrito debería funcionar jpsaenz. Lo importante es no usar comillas.

El código no es muy extenso, creo que así es más fácil de leer
[gml]
var choque;
choque = colision_rectangle (x,y,x+100,y+100,OBJ_PUERTA,false,false);
if (choque)
{
  if (estado == cerrado) {
    scr_puertacerrada();
  }
  else if (estado == abierto) {
    scr_puertaabierta();
  }
}
[/gml]

#6 Agosto 09, 2018, 07:32:32 AM Ultima modificación: Agosto 10, 2018, 06:12:46 AM por jpsaenz
Hola Clamud,

gracias por contestar!

Cita de: Clamud en Agosto 08, 2018, 05:13:09 AM
El último ejemplo que has escrito debería funcionar jpsaenz. Lo importante es no usar comillas.

No funciona, ni con, ni sin comillas.

Citar
El código no es muy extenso, creo que así es más fácil de leer
[gml]
var choque;
choque = colision_rectangle (x,y,x+100,y+100,OBJ_PUERTA,false,false);
if (choque)
{
  if (estado == cerrado) {
    scr_puertacerrada();
  }
  else if (estado == abierto) {
    scr_puertaabierta();
  }
}
[/gml]

jejej... claro, pero así no estoy poniendo el nombre del Script en una variable, no? El código que puse más arriba es solo un ejemplo simplificado; en el código real sucede lo siguiente:

Tengo un sistema de diálogos, y en el evento correspondiente al texo de cada NPC quiero poner algo así

[gml]
/// TEXTO NPC#1
msg[0] = "Hola qué tal, esta es la línea #1";
msg[1] = "Y esta es la linea #2, aquí se ejecuta el script";
msg[2] = "Linea final";

final = 2;
actionline = 0;
scriptToCall = "scr_script_npc1";
[/gml]

Después, en el objeto que controla los diálogos, quiero una línea que ejecute el script en cuestión, que puede llamarse "scr_script_np1", "scr_script_npc2"... o como sea:

[gml]
if (indice = referencia.actionline) {
   script_execute(referencia.scriptToCall);
[/gml]

Bueno, eso. He intentado con comillas, sin comillas, puse (no con muchas esperanzas) hasta un "referencia.scriptToCall();" en lugar de "script_execute" - pero nada funciona ...

De todas formas, gracias por los aportes!

pd: Por cierto, ¿Cuál es la diferencia entre "script_execute(nombredelscript)" y "nombredelscript();"?
--
@jupixweb