qna_rh
Thread Id: 18030
Thread Name: [Fire red] ¿Enlazar scripts?
#0
Sharki 26148
Bueno, envista de que muy poca gente se pasa por la sección dudas sobre scripting.. He decidido poner mi duda aquí.

Mi problema es el siguiente.

Yo tengo un mini de un pikachu. El mapeado sólo tiene una única salida. Si el player intenta salir, sin hablar con pikachu, un script de gatillo se activa advirtiéndote de qué no tienes ningún pokémon y por lo tanto no puedes salir. Cuándo hablas con el mini de pikachu, este ejecuta un script que te da el menú pokédex, el menú pokémon, y un pikachu nivel 5 sin objeto, a su vez hace el gruñido de pikachu dos veces, y a continuación éste desaparece.

¿Cuál es el problema? Necesito que cuándo el script de pikachu desaparezca, el script de gatillo se desactive... el usuario nemesys básicamente me proporciono toda la ayuda sobre los códigos, pero inexplicablemente no entiendo porque el script de gatillo no se desactiva... A continuación os dejo el script.

Script de Pikachu:
#dynamic 0x800000 'Busca un offset a partir de la direcion 800000
#org @inicio 'Busca una direción libre en @inicio.
lock 'El mini deja de moverse
cry 0xA1 0x19 'Sonido de el pokémon PIKACHU (0x19 nacional hexádecimal)
faceplayer 'El mini te mira a la cara
checkflag 0x828 'Chekea la flag 828.
compare LASTRESULT 0x1 'Compara la última variable.
if 0x1 goto @nopkmn 'Si la flag está activada te manda a nopkmn.
msgbox @frase 0x6 'Frase
givepokemon 0x19 0x05 0x0 0x0 0x0 0x0 ''Recibe un pokémon Pikachu al 5 sin objeto.
setflag 0x828 'Te da el menú 'Pokémon'
setflag 0x829 'Te da el menú 'Pokédex'
cry 0xA1 0x19 'Sonido de el pokémon PIKACHU (0x19 nacional hexádecimal)
hidesprite 0x4 'Oculta el spirite.
release 'Finaliza
end 'Fin

#org @nopkmn 'No hace nada, al activar la flag te manda aquí.
hidesprite 0x4 'Oculta el spirite.
release
end

#org @frase 'Frase
= Pika, pikachu! Pikachu se unió a\ntu equipo.


Script de gatillo:
#dynamic 0x800000
#org @inicio
lock
checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto @nomov
msgbox @frase 0x6
closeonkeypress
applymovement MOVE_PLAYER @mov
waitmovement 0x0
release
end

#org @frase
= [green_fr]No puedes pasar por aquí sin un\npokéon. ¿Qué tal si bucas un\lpikachu?
release
end

#org @nomov
release
end

#org @mov
#raw 0x0 'Mira abajo
#raw 0x8 'Es empujado una casilla.
#raw 0xFE 'Fin de movimientos.
release
end


Gracias de antemano.
#1
cosarara97 12296
El código parece correcto, una vez activado el menú pokemon el gatillo no debería hacer nada. Estás seguro de que está bien insertado?
Ah, en el gatillo el lock y los release sobran. (EDIT: Pero esto no debería afectar)
#2
Sharki 26148
Iniciado por cosarara97
El código parece correcto, una vez activado el menú pokemon el gatillo no debería hacer nada. Estás seguro de que está bien insertado?
Ah, en el gatillo el lock y los release sobran. (EDIT: Pero esto no debería afectar)


El script (de code) está bien insertado.. A lo mejor lo que puede estar mal podría ser los datos de la derecha..

Adjunto imágenes.
La primera es el mini de pikachu, la segunda el script de gatillo.


Editado: Las imágenes no se ven una mierda. Aquí dejo el link dónde se ven 'bien'.

Script de gatillo

Script del mini pikachu
#3
cosarara97 12296
Si pones las imágenes como adjunto se reduce la calidad y no se ve nada. Si le das a Open Script ves el script como lo has puesto arriba?
#4
Sharki 26148
Iniciado por cosarara97
Si pones las imágenes como adjunto se reduce la calidad y no se ve nada. Si le das a Open Script ves el script como lo has puesto arriba?


Sip claro, salvo que las direciones @blabla están sustituidas por las direciones de offsets.




#5
J.com 12785
#org 0x80049B
lock
cry 0xA1 0x19
faceplayer
checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8
msgbox 0x88004DE MSG_NORMAL '"Pika, pikachu! Pikachu se..."
givepokemon 0x19 0x5 0x0 0x0 0x0 0x0
setflag 0x828
setflag 0x829
cry 0xA1 0x19
hidesprite 0x4
hidesprite 0x4
hidesprite 0x4
clearflag 0x4050
'---------------
#org 0x8004D8
hidesprite 0x4

A veer, varios errores:

1º Para un script como este, esto sobra:

checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8

Ademas de que el script de la direccion a la que manda ni siquiera tiene "end"

2º: Con el comando hidesprite, el mini desaparece, no hace falta ponerlo 3 veces, con 1 es suficiente. Si quieres que re-aparezca, usa el comando "showsprite 0xMini". (esto es solo un consejo) Ah! y es mejor poner el hidesprite primero y despues el "setflag 0xflag mini" PD: Usa una flag de 4 digitos, por ejemplo las que estan despues de la 1200, en vez de 828

3º: El comando que desactiva el script de gatillo esta mal, no es "clearflag" es "setvar 0xflag 0x2"

Vamos, quedaria asi tu script:

#org 0x80049B
faceplayer
cry 0xA1 0x19
msgbox 0x88004DE MSG_NORMAL '"Pika, pikachu! Pikachu se..."
givepokemon 0x19 0x5 0x0 0x0 0x0 0x0
cry 0xA1 0x19
hidesprite 0x4
setflag 0x"flag del pikachu"
setflag 0x828
setflag 0x829
setvar 0x4050 0x2
end

#6
Sharki 26148
Iniciado por Mr. Jota
#org 0x80049B
lock
cry 0xA1 0x19
faceplayer
checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8
msgbox 0x88004DE MSG_NORMAL '"Pika, pikachu! Pikachu se..."
givepokemon 0x19 0x5 0x0 0x0 0x0 0x0
setflag 0x828
setflag 0x829
cry 0xA1 0x19
hidesprite 0x4
hidesprite 0x4
hidesprite 0x4
clearflag 0x4050
'---------------
#org 0x8004D8
hidesprite 0x4

A veer, varios errores:

1º Para un script como este, esto sobra:

checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8

Ademas de que el script de la direccion a la que manda ni siquiera tiene "end"

2º: Con el comando hidesprite, el mini desaparece, no hace falta ponerlo 3 veces, con 1 es suficiente. Si quieres que re-aparezca, usa el comando "showsprite 0xMini". (esto es solo un consejo) Ah! y es mejor poner el hidesprite primero y despues el "setflag 0xflag mini" PD: Usa una flag de 4 digitos, por ejemplo las que estan despues de la 1200, en vez de 828

3º: El comando que desactiva el script de gatillo esta mal, no es "clearflag" es "setvar 0xflag 0x2"

Vamos, quedaria asi tu script:


Bien, al principio hice lo que tú decías, pero inexplicablemente al hablar con pikachu venía el profesor OAk y me contaba su vida. Literalmente tal cual.

Empezado a tocar de todo, al final no sé que hice, creo que cambie la variable de los SG y el setvar y tachan funciona xD

Así que muchísimas gracias... Pero no estoy satisfecho, quiero decir... me habéis proporcionado el código y agradezco que funcionase, pero no entiendo como desactivasteis el SG... Imagino que es por el setvar.. porque al cambiar de variable al setvar no se desactivaba... ¿Podrías explicarme como hago para mis futuros scripts el desactivar un SG que esta bloqueando? Es que no me entra en la cabeza... Gracias !!!
#7
cosarara97 12296
Iniciado por Mr. Jota
#org 0x80049B
lock
cry 0xA1 0x19
faceplayer
checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8
msgbox 0x88004DE MSG_NORMAL '"Pika, pikachu! Pikachu se..."
givepokemon 0x19 0x5 0x0 0x0 0x0 0x0
setflag 0x828
setflag 0x829
cry 0xA1 0x19
hidesprite 0x4
hidesprite 0x4
hidesprite 0x4
clearflag 0x4050
'---------------
#org 0x8004D8
hidesprite 0x4

A veer, varios errores:

1º Para un script como este, esto sobra:

checkflag 0x828
compare LASTRESULT 0x1
if 0x1 goto 0x88004D8

Ademas de que el script de la direccion a la que manda ni siquiera tiene "end"

2º: Con el comando hidesprite, el mini desaparece, no hace falta ponerlo 3 veces, con 1 es suficiente. Si quieres que re-aparezca, usa el comando "showsprite 0xMini". (esto es solo un consejo) Ah! y es mejor poner el hidesprite primero y despues el "setflag 0xflag mini" PD: Usa una flag de 4 digitos, por ejemplo las que estan despues de la 1200, en vez de 828

3º: El comando que desactiva el script de gatillo esta mal, no es "clearflag" es "setvar 0xflag 0x2"

Vamos, quedaria asi tu script:


La 0x828 tenía que usarla igualmente para activar el menú pokemon, así que cambiarla no tiene much sentido. De todos modos, desactivar un gatillo cambiando su variable o con una comprovación al principio no es muy diferente.

@Sharki: Has visto que el script descompilado es diferente? Tiene errores que ha marcado Mr. Jota, como ese hidesprite triplicado, los ends que faltan, el clearflag que ha aparecido de la nada, etc. que no estaban en tu código original.
#8
Sharki 26148
Iniciado por cosarara97
La 0x828 tenía que usarla igualmente para activar el menú pokemon, así que cambiarla no tiene much sentido. De todos modos, desactivar un gatillo cambiando su variable o con una comprovación al principio no es muy diferente.

@Sharki: Has visto que el script descompilado es diferente? Tiene errores que ha marcado Mr. Jota, como ese hidesprite triplicado, los ends que faltan, el clearflag que ha aparecido de la nada, etc. que no estaban en tu código original.


Si, sinceramente... no entiendo porqué se cambio todo ¿Alguna hipótesis?

Bueno, dejando eso de lado... ¿Alguien podría explicarme cual es lo que hace que la SG se desactive? En especial ese uso en la variable...

Se agradecería.
#9
cosarara97 12296
Un script de gatillo tiene asignado una variable (Var Number en AM) con un valor (Var Value en AM). Si esa variable no tiene el valor especificado, el gatillo no se ejecuta.
Sobre porqué ha cambiado... Ni idea.
#10
Sharki 26148
Iniciado por cosarara97
Un script de gatillo tiene asignado una variable (Var Number en AM) con un valor (Var Value en AM). Si esa variable no tiene el valor especificado, el gatillo no se ejecuta.
Sobre porqué ha cambiado... Ni idea.


¿y cómo sé que variable y valor deben?

setvar 0x 0x:

Los parametros primeros del 0x es la variable y el segundo 0x es el valor entonces ¿se supone que todos los scripts de gatillo tienen de variable 4051 y valor 2?

Quiero decir, no es como los offsets, que cuando ya creaste un offset, no puedes 'utilizar ese offset' otra vez porque sería estúpido... ¿esa variable 4051 se puede usar siempre que quieras?

Por último.. ¿Lo qué hizo que se desactivara fue asignarle a la variable un valor de 2?
#11
J.com 12785
Haber, en el script de gatillo hay dos huecos: "var number" "var value"
En var number pones la flag (4051) y el var value en este caso no te hace falta, ya que tu script no usa variables. Tan solo pon 0

Luego, para desactivar pones:
setvar 0x4051 0x2

y ya está, deberia funcionar xD
#12
cosarara97 12296
Si usas siempre la misma variable, cuando cambies el valor de esa variable vas a desactivar todos los scipts, así que a no ser que quieras desactivar varios gatillos de una vez, tienes que usar una variable diferente para cada uno.
La variable la eliges en AM, en el campo Var Number, y esa es la variable a la que tienes que cambiar el valor cuando quieras desactivarlo.
Oh, y no importa si la pones a 2, a 1, o a 0xFFFF, mientras sea diferente del número que pone en Var Value se va a desactivar.
#13
Sharki 26148
Iniciado por cosarara97
Si usas siempre la misma variable, cuando cambies el valor de esa variable vas a desactivar todos los scipts, así que a no ser que quieras desactivar varios gatillos de una vez, tienes que usar una variable diferente para cada uno.
La variable la eliges en AM, en el campo Var Number, y esa es la variable a la que tienes que cambiar el valor cuando quieras desactivarlo.
Oh, y no importa si la pones a 2, a 1, o a 0xFFFF, mientras sea diferente del número que pone en Var Value se va a desactivar.


Oh, ya entiendo... Muchísimas gracias a los dos por estar a cada rato respondiendo todas las dudas que tenía !

Se agradece mucho tener foreros así.

Duda concluida. Podéis cerrar el tema.