Registrarse

[RH - Scripting] Tienda PKMN y seleccionar PKMN

Estado
Cerrado para nuevas respuestas.

hacanoca

Héroe de WaH
Hola a todos.
Tengo dos dudas:

1. ¿Cómo hago una tienda PKMN pero que tenga precios diferentes a los
tradicionales?
Es como para crear "promociones" o algo así.

2. ¿Es posible obligar a que en cierto combate sólo se puedan usar "X" número de PKMN?.
Algo similar a la torre de batalla, pero que no sean 3 PKMN, sino por ejemplo sólo 2, o 4. El número que yo desee.

Ahh bueno, aclaro que trabajo en Fire Red.

Gracias de antemano.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Respecto a tu segunda duda,

solo tienes que usar un countpokemon y esto almacenará un valor en la variable 0x800D. En base a ese valor haz una condición que solo te permita luchar si tienes un número de determinados pokemon.

Código:
countpokemon
compare 0x800D 0x(número de Pokémon que quieres)
if 0x1 goto @secumple
De lo primero no estoy seguro, luego edito y lo confirmo.
 

Benny el gato pokemon

En camino a ser el Amo :v?
Con lo primero pues creo que se puede pero no de una forma fácil, pues el valor de X objeto viene asignado de por si y se pude editar con GEN3TOOL o Item Editor y este valor es permanente, creo que solo se podría hacer si duplicas los items en cuestión en espacios libres PERO cambiando el valor monetario osea me explico: Tendrás el item de verdad que por ejemplo cuesta 5,000 y tienes el duplicado que seria igual salvo que valdría 3,000 o lo que se te ocurra y se usaría para las "Ofertas"

Salu2
 

Dani_SR_17

¡Pokémon LionHeart!
Para lo primero hay algunas rutinas que lo hacen.
Si no te quieres complicar siempre puedes hacer lo siguiente.

El vendedor te dice que tiene X producto en promoción, en el que hay una oferta de 3x2 (por ejemplo).
Al hablar con el miras cuantos items lleva el protagonista de ese tipo en concreto y lo almacenas en una variable.
Al salir de la tienda vuelves a comprobarlo, si ha comprado alguno el número ha de ser mayor (ojo, tienes que mirar que sea mayor, no que sea diferente, ya que puede vender*).
Si es mayor pues ya miras cuanto de mayor es y según la oferta pues haces una cosa u otra.
Es un método algo cutre, pero funciona.


*Los objetos vendidos valen un 50% menos, luego si haces por ejemplo un 3x2 el jugador no va a ganar dinero haciendo la trampa de vender dos copias del objeto y después comprando otras dos para que le regalen la tercera.
 

hacanoca

Héroe de WaH
Con lo primero pues creo que se puede pero no de una forma fácil, pues el valor de X objeto viene asignado de por si y se pude editar con GEN3TOOL o Item Editor y este valor es permanente, creo que solo se podría hacer si duplicas los items en cuestión en espacios libres PERO cambiando el valor monetario osea me explico: Tendrás el item de verdad que por ejemplo cuesta 5,000 y tienes el duplicado que seria igual salvo que valdría 3,000 o lo que se te ocurra y se usaría para las "Ofertas"

Salu2
Muchas gracias.
Había pensado en esa opción. Aunque no la había puesto en práctica.
Una duda, ¿los items que duplique se pueden llamar igual, o deben llevar un nombre diferente?

Para lo primero hay algunas rutinas que lo hacen.
Si no te quieres complicar siempre puedes hacer lo siguiente.

El vendedor te dice que tiene X producto en promoción, en el que hay una oferta de 3x2 (por ejemplo).
Al hablar con el miras cuantos items lleva el protagonista de ese tipo en concreto y lo almacenas en una variable.
Al salir de la tienda vuelves a comprobarlo, si ha comprado alguno el número ha de ser mayor (ojo, tienes que mirar que sea mayor, no que sea diferente, ya que puede vender*).
Si es mayor pues ya miras cuanto de mayor es y según la oferta pues haces una cosa u otra.
Es un método algo cutre, pero funciona.


*Los objetos vendidos valen un 50% menos, luego si haces por ejemplo un 3x2 el jugador no va a ganar dinero haciendo la trampa de vender dos copias del objeto y después comprando otras dos para que le regalen la tercera.
Muchas gracias, es una opción muy interesante.
Aunque tengo una duda (no sé si muy tonta), ¿como miro el número de items "X" que lleva el protagonista?, porque el comando "checkitem" comprueba es si llevo cierta cantidad del cierto item (como una flag, arroja valores 0 y 1).
Entonces no sé bien con que comando extraigo la cantidad que lleva el jugador.

Por otro lado, ¿sabes depronto en que tuto o link están esas rutinas que lo permiten?
 

Dani_SR_17

¡Pokémon LionHeart!
Muchas gracias, es una opción muy interesante.
Aunque tengo una duda (no sé si muy tonta), ¿como miro el número de items "X" que lleva el protagonista?, porque el comando "checkitem" comprueba es si llevo cierta cantidad del cierto item (como una flag, arroja valores 0 y 1).
Entonces no sé bien con que comando extraigo la cantidad que lleva el jugador.

Por otro lado, ¿sabes depronto en que tuto o link están esas rutinas que lo permiten?
Para eso vas a tener que hacer un bucle.
 

hacanoca

Héroe de WaH
Para eso vas a tener que hacer un bucle.
¿Un bucle?
No sé si entiendo bien
¿Algo así como un checkitem para cantidad posible?
Entonces si el que está es checkitem de cantidad igual a uno, varibale "X" obtiene valor 1.
Si el que entró fue el checkitem de cantidad igual a dos, variable "X" obtiene valor 2.
Si el que entró fue el checkitem de cantidad igual a tres, variable "X" obtiene valor 3.
....
...¿y así sucesivamente para cada cantidad posible?

¿O a qué te refieres con bucle? =P
Perdón la ignorancia.
 

Dani_SR_17

¡Pokémon LionHeart!
¿Un bucle?
No sé si entiendo bien
¿Algo así como un checkitem para cantidad posible?
Entonces si el que está es checkitem de cantidad igual a uno, varibale "X" obtiene valor 1.
Si el que entró fue el checkitem de cantidad igual a dos, variable "X" obtiene valor 2.
Si el que entró fue el checkitem de cantidad igual a tres, variable "X" obtiene valor 3.
....
...¿y así sucesivamente para cada cantidad posible?

¿O a qué te refieres con bucle? =P
Perdón la ignorancia.
Creo recordar que al hackitem se le podía pasar como "cantidad" una variable.
Pones la variable en uno, que tienes uno, pues la pasas a dos, que tienes dos, pues la pasas a tres, así hasta que ya pare.
Con eso obtendrías cuantos tienes.
Y ya es simplemente almacenarlo antes de comprar y al terminar de comprar, es algo costoso computacionalmente, lo suyo es que no pongas demasiados.
 

Benny el gato pokemon

En camino a ser el Amo :v?
Bueno, me puse a revisar lo que preguntaste y al parecer no hay ningún limitante conforme a que se repita el nombre de un objeto, y si existiera pues rellernarias el nombre con espacios y como esta rellenado TÉCNICAMENTE no seria igual. De cualquier modo puedes usar tanto este método como el que te dijo el gran Dani.

Creo que el de Dani es mas difícil pero te organizas mas por no tener que duplicar los items, aunque el que te mencione es un poco mas fácil, elige con la que mas te sientas a gusto

PD: No, yo tampoco se que es un bucle xD

Salu2
 

kakarotto

Leyenda de WaH
Realmente el metodo de dani no es dificil, pero claro teniendo en cuenta los conceptos y los programas adecuados. Me explico:

Un bucle es una instrucción que se repite por siempre o bien hasta que una condición se cumpla. Tu debes de hacer una instruccion que se repita tantas veces por número de objetos que tengas iguales (un bucle) y cada vez que cuente el numero de objeto almacene el valor de la variable + 1. Es decir, tu instruccion deberia hacer un bucle hasta que el valor sea igual a 10 por ejemplo haciendo un addvar 0x1 a la variable mientras recorre el bucle. Se puede hacer directamente con xse pero puede que no sea muy intuitivo, asi que te recomiendo el compilador red alien de cosarara97.Es una pu*a maravilla:
https://whackahack.com/foro/t-14807/gba-red-alien-script-editor
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Trabajando con Fire Red la verdad es que todo se simplifica mucho, puesto que existe una gran cantidad de rutinas hechas por gente de Pokeco que te solucionan casi todo. Doy por hecho que comprendes al menos de forma básica todo el tema de scripting y que sabes compilar e insertar rutinas en tu hack. En caso de no saber, te sugiero que comiences por ahí antes de ponerte a intentar crear sistemas ligeramente avanzados dentro de tu proyecto.

En cuanto a los dos problemas que planteas, la solución es bastante simple:

1.- Modificar precios de las tiendas: Como no sé exactamente cómo quieres implementar esas promociones, te daré las herramientas básicas para poder desarrollar la idea como tú prefieras.

En primer lugar necesitas poder modificar los precios de los objetos. Para ello existe ESTA RUTINA que te permite modificar los precios de los objetos de la tienda mediante porcentajes. El propio post es bastante explicativo, así que léelo con detenimiento.

Para lo de contar el número de items de un cierto tipo de objeto en la mochila puedes usar ESTA OTRA RUTINA que modifica el comportamiento del comando checkitem de XSE, haciendo que se almacene en la variable 0x8008 la cantidad del item de tu elección.

Para la segunda cuestión, tendré que editar mañana porque ahora mismo no recuerdo bien cómo se hacía, pero son funciones que tiene el propio juego implementadas, así que no es complicado :awesome:

Invoco a @Sayer301! porque acabo de recordar que él tenía un método para quitar Pokémon del equipo usando unos special del juego, lo mismo ayuda para solucionar el problemilla. Si no, a las malas, siempre estaría ESTA OTRA RUTINA
 
Última edición:

hacanoca

Héroe de WaH
Trabajando con Fire Red la verdad es que todo se simplifica mucho, puesto que existe una gran cantidad de rutinas hechas por gente de Pokeco que te solucionan casi todo. Doy por hecho que comprendes al menos de forma básica todo el tema de scripting y que sabes compilar e insertar rutinas en tu hack. En caso de no saber, te sugiero que comiences por ahí antes de ponerte a intentar crear sistemas ligeramente avanzados dentro de tu proyecto.

En cuanto a los dos problemas que planteas, la solución es bastante simple:

1.- Modificar precios de las tiendas: Como no sé exactamente cómo quieres implementar esas promociones, te daré las herramientas básicas para poder desarrollar la idea como tú prefieras.

En primer lugar necesitas poder modificar los precios de los objetos. Para ello existe ESTA RUTINA que te permite modificar los precios de los objetos de la tienda mediante porcentajes. El propio post es bastante explicativo, así que léelo con detenimiento.

Para lo de contar el número de items de un cierto tipo de objeto en la mochila puedes usar ESTA OTRA RUTINA que modifica el comportamiento del comando checkitem de XSE, haciendo que se almacene en la variable 0x8008 la cantidad del item de tu elección.

Para la segunda cuestión, tendré que editar mañana porque ahora mismo no recuerdo bien cómo se hacía, pero son funciones que tiene el propio juego implementadas, así que no es complicado :awesome:

Invoco a @Sayer301! porque acabo de recordar que él tenía un método para quitar Pokémon del equipo usando unos special del juego, lo mismo ayuda para solucionar el problemilla. Si no, a las malas, siempre estaría ESTA OTRA RUTINA
¡Oye muchas gracias!
Esos links que me dejas traen cosas muy útiles.
Sobre todo la primera, si la entendí bien, creo que es justo lo que estaba buscando.
 

Sayer301!

UnityLord!
Miembro de honor
No te voy a engañar, el mejor método es el de dani, no usa rutinas que modifiquen datos, no usa nada mas que los propios sistemas del juego. Y ademas te voy a explicar como hacerlo en scripting de XSE para que sea easy. Usare las variables 4010 y 4011 porque si.

#org @inicio
lo que quieras antes de empezar con la tienda
call @CuentaElNumero
goto @tienda

#org @CuentaElNumero
Checkitem 0x1B (No se si tenia mas parametros)
if 0x1 goto @UnoMas
copyvar 0x4010 LASTRESULT (La copiamos a una variable que podamos usar en comandos)
copyvar 0x4010 0x4011 (la copiamos a una variable diferente para guardar el numero de forma segura)
setvar 0x4010 0x0 (Borramos la cantidad, para poder usar el bucle de nuevo sin problemas)
giveitem 0x1B LASTRESULT (devolvemos toda la cantidad de objetos que quitamos para contarlos)
Return

#org @UnoMas
Removeitem 0x1B
Addvar 0x4010 0x1
call @CuentaElNumero

#org @tienda
Aqui va la parte de la tienda y eso tipico y al salir de la tienda hacemos un recuento
call @CuentaElNumero
compare 0x4010 0x4011
if 0x(el valor de mayor creo que era 3 pero no estoy seguro) goto @oferton
y si no pues se cierra y fuera.
end

#org @oferton
Aqui comparas la variable 4011, si es mayor que igual o mayor que 1, le das el objeto (o los que sean por oferta) le restas el dinero, le restas 1 a la variable y vuelves a llamar a este offset y asi hasta que sea el valor de 4011 sea 0 y fin.


El método que dice @Blax501 que tengo sirve pero tiene inconvenientes. El mas importante es que toda la experiencia ganada (así como si suben de nivel) se pierde tras el combate, por lo cual acaba siendo poco efectivo. Es útil cuando quieres tener un equipo secundario durante un tiempo sin perder el anterior, si te sirviese el efecto aunque no ganases experiencia comunicamelo y lo intento buscar entre mis mil mierdas XD

Saludoh!
 
Última edición:

hacanoca

Héroe de WaH
No te voy a engañar, el mejor método es el de dani, no usa rutinas que modifiquen datos, no usa nada mas que los propios sistemas del juego. Y ademas te voy a explicar como hacerlo en scripting de XSE para que sea easy. Usare las variables 4010 y 4011 porque si.

#org @inicio
lo que quieras antes de empezar con la tienda
call @CuentaElNumero
goto @tienda

#org @CuentaElNumero
Checkitem 0x1B (No se si tenia mas parametros)
if 0x1 goto @UnoMas
copyvar 0x4010 LASTRESULT (La copiamos a una variable que podamos usar en comandos)
copyvar 0x4010 0x4011 (la copiamos a una variable diferente para guardar el numero de forma segura)
setvar 0x4010 0x0 (Borramos la cantidad, para poder usar el bucle de nuevo sin problemas)
giveitem 0x1B LASTRESULT (devolvemos toda la cantidad de objetos que quitamos para contarlos)
Return

#org @UnoMas
Removeitem 0x1B
Addvar 0x4010 0x1
call @CuentaElNumero

#org @tienda
Aqui va la parte de la tienda y eso tipico y al salir de la tienda hacemos un recuento
call @CuentaElNumero
compare 0x4010 0x4011
if 0x(el valor de mayor creo que era 3 pero no estoy seguro) goto @oferton
y si no pues se cierra y fuera.
end

#org @oferton
Aqui comparas la variable 4011, si es mayor que igual o mayor que 1, le das el objeto (o los que sean por oferta) le restas el dinero, le restas 1 a la variable y vuelves a llamar a este offset y asi hasta que sea el valor de 4011 sea 0 y fin.


El método que dice @Blax501 que tengo sirve pero tiene inconvenientes. El mas importante es que toda la experiencia ganada (así como si suben de nivel) se pierde tras el combate, por lo cual acaba siendo poco efectivo. Es útil cuando quieres tener un equipo secundario durante un tiempo sin perder el anterior, si te sirviese el efecto aunque no ganases experiencia comunicamelo y lo intento buscar entre mis mil mierdas XD

Saludoh!
Muchas gracias.
Me queda mucho más claro lo del bucle.
Sin embargo, las ofertas que quiero poner no es de un sólo item. (Es más como una tienda rival al POKéMART que vende contrabando). Por lo que pienso que es sumamente engorroso. Igual es bueno saber estas cosas.
¿Sabes si la rutina que me mencionó @Blax501 para los descuentos en forma de porcentaje presenta algún inconveniente?

En cuanto a lo de seleccionar los POKéMON: pues finalmente no pensaba usar la rutina para seleccionar cierta cantidad de POKéMON antes de un combate. Pero sí me interesa para otra cosa:
En mi hack pienso hacer más de una región, y estaba buscando una forma de obligar al jugador a cambiar de equipo POKéMON para iniciar la segunda región.
Se me ocurre que con esta rutina, podría dejarle al jugador el equipo ppal guardado (de forma que no lo pueda usar), dejar que se aventure y forme otro equipo, y ya al final para otros eventos más tochos darle la posibilidad de recuperar su equipo original.
Esto se podría hacer con esta rutina, ¿no?; ¿o generaría algún inconveniente?
 
Estado
Cerrado para nuevas respuestas.
Arriba