Registrarse

[RH - Scripting] Ayuda con un script

Estado
Cerrado para nuevas respuestas.

Latenzo

Héroe de WaH
Hola necesito ayuda con un script.
Quiero que un personaje me regale la HM Streght solo se le muestro l'objeto clave TEA.

Ya hice el script giveitem por el TEA.
Como puedo hacer este script?

Gracias por ayudarme
 

darkeon75

ROM Hacker
Podrías hacer el script así:

Código:
(script antes del checkeo)
checkitem 0x171 0x1
if 0x1 goto @tengote
(script en caso de no tener el té)

#org @tengote
giveitem 0x156 0x1
(resto de script)
 

Lunos

Enfrentando a La Organización
Miembro insignia
Podrías hacer el script así:

Código:
(script antes del checkeo)
checkitem 0x171 0x1
if 0x1 goto @tengote
(script en caso de no tener el té)

#org @tengote
giveitem 0x156 0x1
(resto de script)
El comando checkitem no funciona como el checkflag, si no mas bien como los msgbox 0x5.
Se utiliza de la siguiente forma:
Código:
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @tengote
Hola necesito ayuda con un script.
Quiero que un personaje me regale la HM Streght solo se le muestro l'objeto clave TEA.

Ya hice el script giveitem por el TEA.
Como puedo hacer este script?

Gracias por ayudarme
Dicho eso, venia a sugerir lo mismo que @darkeon75.
Un checkitem que compruebe si el Jugador tiene 1 pieza del objeto "Té" y en base a eso dirijes tu script como te apetezca.
 

Latenzo

Héroe de WaH
El comando checkitem no funciona como el checkflag, si no mas bien como los msgbox 0x5.
Se utiliza de la siguiente forma:
Código:
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @tengote
Dicho eso, venia a sugerir lo mismo que @darkeon75.
Un checkitem que compruebe si el Jugador tiene 1 pieza del objeto "Té" y en base a eso dirijes tu script como te apetezca.
Código:
#dynamic 0x800000
#org @start
msgbox @talk 0x2
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @medicine
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @talk
= I need to ask you a favour.\nInside this house there is a\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and asking someone for it?

#org @medicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Soy bastante nuevo con los script. Como hago en caso que no tenga el te(medicine)?
Este script tiene algunos fallos?
 

Lunos

Enfrentando a La Organización
Miembro insignia
Código:
#dynamic 0x800000
#org @start
msgbox @talk 0x2
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @medicine
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @talk
= I need to ask you a favour.\nInside this house there is a\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and asking someone for it?

#org @medicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Soy bastante nuevo con los script. Como hago en caso que no tenga el te(medicine)?
Este script tiene algunos fallos?
Si. Vos no podés dirigir partes de un script a un msgbox directamente. Ese script está mal escrito.
Parte por parte, lo que tu script está haciendo es:
1) Buscar una dirección libre donde insertar el script, apartir de la dirección 0x800000.
2) Le pide al juego que ejecute la linea de texto @talk
3) Comprueba si el Jugador tiene 1 pieza del Objeto 0x171
4) Comprueba si el resultado es positivo.
5) En caso de que lo sea, el script te dirije a @medicine que en tu caso es una linea de texto. Ahi hay un error. Lo que tenés que hacer es dirigir el script a una porción que contenga un comando msgbox que será el que active la linea de texto que quieras mostrar.
6) En caso de que el Jugador no tenga 1 pieza del Objeto 171, le estás dando una pieza del objeto 0x156.
7) Despues de eso le pediste al juego que tirase una pantalla en negro, la quitase, y luego terminase el script.

Debido a lo mencionado en el 5to punto, tu script no funcionará.
Aquí tienes la corrección, para que lo analices.
Código:
#dynamic 0x800000
#org @inicio
msgbox @talk 0x2
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @medicine
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @medicine
msgbox @obtainedmedicine 0x2
end

#org @talk
= I need to ask you a favour.\nInside this house there is [B][COLOR="red"]an[/COLOR][/B]\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and [B][COLOR="Red"]ask[/COLOR][/B] someone for it?

#org @obtainedmedicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Por cierto, te marqué un par de errores ortográficos en #org @talk.
 

Latenzo

Héroe de WaH
Si. Vos no podés dirigir partes de un script a un msgbox directamente. Ese script está mal escrito.
Parte por parte, lo que tu script está haciendo es:
1) Buscar una dirección libre donde insertar el script, apartir de la dirección 0x800000.
2) Le pide al juego que ejecute la linea de texto @talk
3) Comprueba si el Jugador tiene 1 pieza del Objeto 0x171
4) Comprueba si el resultado es positivo.
5) En caso de que lo sea, el script te dirije a @medicine que en tu caso es una linea de texto. Ahi hay un error. Lo que tenés que hacer es dirigir el script a una porción que contenga un comando msgbox que será el que active la linea de texto que quieras mostrar.
6) En caso de que el Jugador no tenga 1 pieza del Objeto 171, le estás dando una pieza del objeto 0x156.
7) Despues de eso le pediste al juego que tirase una pantalla en negro, la quitase, y luego terminase el script.

Debido a lo mencionado en el 5to punto, tu script no funcionará.
Aquí tienes la corrección, para que lo analices.
Código:
#dynamic 0x800000
#org @inicio
msgbox @talk 0x2
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @medicine
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @medicine
msgbox @obtainedmedicine 0x2
end

#org @talk
= I need to ask you a favour.\nInside this house there is [B][COLOR="red"]an[/COLOR][/B]\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and [B][COLOR="Red"]ask[/COLOR][/B] someone for it?

#org @obtainedmedicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Por cierto, te marqué un par de errores ortográficos en #org @talk.
Antes de todo muchas gracias por l'ayuda.
Soy bastante nuevo haciendo scripts y por ahora estoy usando herremientas de terceros por el "cuerpo" del script.

Segun tu mensaje yo en el punto 6 estoy dando mi hm6 streght?
Y gracias por marcarme los errores. Ya lo habia corregido mientras que estaba esperando una respuesta.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Antes de todo muchas gracias por l'ayuda.
Soy bastante nuevo haciendo scripts y por ahora estoy usando herremientas de terceros por el "cuerpo" del script.

Segun tu mensaje yo en el punto 6 estoy dando mi hm6 streght?
Y gracias por marcarme los errores. Ya lo habia corregido mientras que estaba esperando una respuesta.
Eh, si, pero el tema es que tú estás dandole al jugador la HM04 Strength, si no tienen 1 pieza del objeto Té.

Para lo que vos querés hacer, este es el script que necesitás.
Código:
#dynamic 0x800000
#org @inicio
msgbox @talk 0x2
checkitem 0x171 0x1 // Comprueba si el Jugador tiene una pieza de Té.
compare LASTRESULT 0x1 // Comprueba si el resultado es positivo.
if 0x1 goto @medicine // Si lo es, lo lleva hasta la sección del script llamada @medicine.
end // Si no tiene una pieza de Té, termina el script aquí.

#org @medicine
msgbox @obtainedmedicine 0x2
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @talk
= I need to ask you a favour.\nInside this house there is an\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and ask someone for it?

#org @obtainedmedicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Ten en cuenta que siempre que el Jugador interactue con este NPC, el script hará que el jugador pase por el msgbox @talk, y luego lo llevará a #org @medicine si tiene 1 pieza de Té, incluso si él ya lo ha hecho.

Esto lo podés evitar de varias formas.
Mi sugerencia seria tomar una variable de uso libre (como por ejemplo 0x4013), darle un valor determinado (como por ejemplo 0x1) antes del end en #org medicine, y usar el comando "compare" al inicio del cuerpo principal del script.
Algo tal que asi:
Código:
#dynamic 0x800000
#org @inicio
checkitem 0x156 0x1 // Comprueba si el Jugador tiene la HM04 Strength.
compare LASTRESULT 0x1 // Comprueba si el resultado es positivo.
if 0x1 goto @done // Si lo es, lo vas a conducir a @done.
msgbox @talk 0x2 // Si no, mostrarás la linea de texto @talk.
checkitem 0x171 0x1 // Comprueba si el Jugador tiene una pieza de Té.
compare LASTRESULT 0x1 // Comprueba si el resultado es positivo.
if 0x1 goto @medicine // Si lo es, lo lleva hasta la sección del script llamada @medicine.
end // Si no tiene una pieza de Té, termina el script aquí.

#org @medicine
msgbox @obtainedmedicine 0x2
giveitem 0x156 0x1
fadescreen 0x1
fadescreen 0x0
end

#org @done
(aquí puedes añadir un msgbox con tu NPC agradeciendole de nuevo al jugador, o lo que se te cante.)
end

#org @talk
= I need to ask you a favour.\nInside this house there is an\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and ask someone for it?

#org @obtainedmedicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
Honestamente, por esta clase de cosas es que no puedo recomendar usar programas que escriban scripts de manera automatica. Vos no tenés control sobre el resultado.
En esencia, es el mismo problema generado por el uso de parches que carecen de documentación apropiada, y hacen modificaciones a tu ROM.
 
Última edición:

Latenzo

Héroe de WaH
@Lunos

#dynamic 0x74DF3C
#org @inicio
msgbox @talk 0x2
checkitem 0x171 0x1
compare LASTRESULT 0x1
if 0x1 goto @medicine
end

#org @medicine
msgbox @obtainedmedicine 0x2
fadescreen 0x1
hidesprite 0x12
giveitem 0x156 0x1 0x1
setflag 0x265
fadescreen 0x0
end

#org @talk
= I need to ask you a favour.\nInside this house there is an\pinjured POKéMON.\nI need a MEDICINE.\pCould you go inside the POKéPARK\nDEPOSIT and ask someone for it?

#org @obtainedmedicine
= Is this the MEDICINE?\nThank you so much.\pTake this, I'm sure that you'll\nneed it!
He logrado hacer funcionar todo asì...
Mas o menos creo que sea similar a lo que tu hiciste.
Todavia cuando la pantalla esta negra el "textbox" me dice: < [PLAYER] found...> y no received.

Honestamente, por esta clase de cosas es que no puedo recomendar usar programas que escriban scripts de manera automatica
Acabo de empenzar es por esto. Lo unico que hago es crearme un modelo de script y depues yo lo edito agregando lo que quiero. Mas alla no voy mas a necesitar lo programas de terceros
 
Última edición:

Fran Agustín

Si el sol besa tus ojos, ni cuenta te das.
Miembro insignia
Primero: ¿Lo que has hecho ya tiene el comportamiento esperado o quieres cambiarle alguna cosa y no sabes cómo? (Más allá de lo que te diré luego)

@Lunos
Todavia cuando la pantalla esta negra el "textbox" me dice: < [PLAYER] found...> y no received.
En cuanto a esto, busca la línea del giveitem:
giveitem 0x156 0x1 0x1
Y cambia ese último 0x1, déjalo así:
giveitem 0x156 1 0
Aclaro:
giveitem 0x156 0x1 0x0 = giveitem 0x156 1 0
¿Qué has hecho? Bueno, precisamente ese parámetro es el que controla si debe decirte que lo encontraste o que te lo dieron.
El valor 0 significa te lo dieron y el valor 1, lo encontraste.

Cualquier otra cosa que necesites, avísanos. ¡Un saludo!
 

Latenzo

Héroe de WaH
Primero: ¿Lo que has hecho ya tiene el comportamiento esperado o quieres cambiarle alguna cosa y no sabes cómo? (Más allá de lo que te diré luego)



En cuanto a esto, busca la línea del giveitem:


Y cambia ese último 0x1, déjalo así:


Aclaro:


¿Qué has hecho? Bueno, precisamente ese parámetro es el que controla si debe decirte que lo encontraste o que te lo dieron.
El valor 0 significa te lo dieron y el valor 1, lo encontraste.

Cualquier otra cosa que necesites, avísanos. ¡Un saludo!
Gracias, si yo quiera que me lo dieran. Todavia al final lo dejè asì.
 
Estado
Cerrado para nuevas respuestas.
Arriba