Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4075 miembros registrados.
El último usuario registrado es chuwakal.

Nuestros miembros han publicado un total de 84153 mensajes en 11989 argumentos.

TUTORIAL - Cómo usar el sistema IGOS

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP TUTORIAL - Cómo usar el sistema IGOS

Mensaje por Wecoc el 2014-08-22, 21:42

En éste tutorial os explicaré cómo usar el sistema IGOS v1.0 (post oficial)

Para los que no lo sepáis, éste sistema lo que hace es modificar el modo en el que los items, weapons y armors se guardan dentro del juego. Sin el sistema todos aquellos que sean del mismo tipo se guardan conjuntamente y no se les puede aplicar una modificación sin alterar todos los demás. Con el sistema en cambio cada item es considerado único, a un estilo más similar a cómo se guardan los actores, y de ese modo se pueden aplicar propiedades individuales.

Antes que nada, tened en cuenta que casi todos los métodos que diré en el tutorial son para item, pero todos tienen su símil con weapon y armor. En éste sistema los tres funcionan de modo muy similar, su única diferencia notable es la variable @type, que en items vale 0, en armas 1 y en protectores 2. Eso se puede comprobar también con los atajos is_item?, is_weapon? o is_armor?.

Añadir un item con propiedades especiales

Obtener un item sigue siendo más o menos igual, se puede hacer con el comando de evento Cambiar Objetos, o con $game_party.gain_item(item_id, n), siendo n cualquier valor.

Pero como novedad, gain_item no solo permite cargar items usando su id como por defecto sinó cargarlos directamente: $game_party.gain_item(item, n)

Entonces, una manera fácil de cargar un item es crearlo, modificarlo y luego cargarlo.

Código:
item = Game_Item.new(1)
item.name = "Poción cara"
item.price = 1000
$game_party.gain_item(item, 1)


Y otra alternativa es primero cargarlo con el sistema default y enseguida obtenerlo del inventario para modificarlo, a continuación veremos cómo.

Saber si un item tiene propiedades especiales
Indentificar las diferencias entre dos items


Cada item tiene una array llamada special_properties que incluye las propiedades especiales de éste (solo el tipo, no el valor concreto)

Saber si un item tiene propiedades especiales entonces es solo leer esa array:

Código:
item.special_properties.size == 0


Ésto mira si no tiene ninguna propiedad especial.

Código:
item.special_properties.include?("price")


Ésto mira si tiene el precio modificado o no.

Hay otro método que hace lo mismo (es un atajo), llamado default?

Código:
item.default?


Equivalente a special_properties.size == 0

Código:
item.default?("price")


Equivalente a special_properties.include?("price")

Hay un método llamado compare_with(item) que lo que hace es comparar diferencias entre nuestro item y otro. Aunque ambos tengan una misma propiedad especial (por ejemplo "price"), si su valor es distinto también son objetos distintos. Éste método por lo tanto es la base para distinguir entre distintos items del mismo tipo.

Si tenemos una potion_a con un precio de 1000 y de nombre "Poción cara" y una potion_b con un precio de "10" y de nombre "Poción barata":

Código:
potion_a.compare_with(potion_b)


Ésto devolverá ["price", "name"]

Si fueran exactamente idénticas devolvería [] por lo tanto su size sería 0.

Obtener un item del inventario y asignarle otras propiedades

Los items se guardan en $game_party dentro de una array llamada items (y las armas en weapons y los protectores en armors). Pero no podemos obtenerlos de allí directamente por id como siempre porque no sabríamos si seleccionamos uno modificado o no.

Para obtener un item del inventario, y así luego aplicarle lo que sea* usamos get_item(id), el cual permite una condición especial. Si hay más de uno que cumpla exactamente lo mismo obtiene uno al azar, al fin y al cabo si hemos hecho la condición bien serán iguales y no importará cual de los dos seleccionamos.

Código:
item = $game_party.get_item(1)


Ésto obtiene una poción del inventario con la condición por defecto de que ésta sea default, es decir que no tenga ninguna propiedad especial. Evidentemente, si ninguna cumple la condición devuelve nil.

Código:
item = $game_party.get_item(1) do |item|
  item.price == 1000
end


Ésto obtiene una poción del inventario con la condición de que su precio valga 1000. El problema es que si hay más de una poción en el inventario con ese precio y tienen alguna otra diferencia, seleccionará una al azar y por lo tanto no habremos precisado lo suficiente.

Código:
item = $game_party.get_item(1) do |item|
  item.special_properties.include?("price") and
  item.special_properties.include?("name")
end


Ésto obtiene una poción del inventario con la condición de que tanto su precio como su nombre no sean los que hay por defecto. Nuevamente, el problema es que si hay más de una poción con esas condiciones en el inventario pero que difieren en algo seleccionará una al azar.

Para evitar ese problema podemos fijar más cosas en la condición, como con item.special_properties.size == (size), o bien crear un item, modificarle lo que convenga y luego compararlos.

Código:
model_item = Game_Item.new(1)
model_item.name = "Poción cara"
model_item.price = 1000
item = $game_party.get_item(1) do |item|
  item.compare_with(model_item).size == 0
end


Ésto obtiene una poción del inventario que se llame "Poción cara", valga 1000 y en todo lo demás sea por defecto.

Por último hay un método parecido, llamado get_items_by_props(id, props), que no funciona por condición sinó con una comparación con special_properties directamente, de modo que solo obtendrá los que tengan modificaciones en esas special_properties. Las dos diferencias que lo hacen importante respecto get_item es que no devuelve uno sinó todos los que lo cumplan en una array, y que aquellos que cumplan la condición pero tengan otras propiedades especiales no serán incluídos directamente, así que es mucho más eficaz para obtener un item de propiedades concretas.

Código:
items = $game_party.get_items_by_props(1,
["price", "name"])
item = items[0]


Ésto obtiene una poción cuyas propiedades especiales sean el precio y el nombre y ninguna más que esas dos.

Aún podemos ir más allá y ponerle, como antes, una condición extra.

Código:
items = $game_party.get_items_by_props(1,
["price", "name"]) do |item|
  item.price == 1000 and
  item.name == "Poción cara"
end
item = items[0]


Ésto obtiene una poción del inventario que se llame "Poción cara", valga 1000 y en todo lo demás sea por defecto. Ese resultado ya lo habíamos logrado con el último ejemplo de get_item, éste entonces es un método alternativo de lograr lo mismo. Es la máxima precisión con la que se puede obtener un item.

* Cosas que se pueden hacer una vez obtenido el item:

- Equiparlo

Código:
weapon = $game_party.get_weapon(5)
$game_party.actors[0].equip(0, weapon)


- Quitarlo

Código:
item = $game_party.get_item(1)
$game_party.lose_item(item, 1)


- Modificarle propiedades

Código:
item = $game_party.get_items_by_props(1, "price")[0]
item.price = 1000


Contar items poseídos

Como por defecto, los items que tiene la party se cuentan con $game_party.item_number(item_id), pero ésto contará solo los que sean default de ese id, por lo tanto los que no tengan propiedades especiales.

Para contar los que sean como uno concreto se puede usar $game_party.item_number(item)

Como novedad hay un método más similar al default que éste, que es contarlos por id sean cuales sean sus demás diferencias.
Eso se hace con $game_party.item_number_by_id(item_id) o bien $game_party.item_number_by_id(item)

Por último solo para armas y protectores, hay una alteración de weapon_number llamada weapon_total_number, en la que también se puede llamar por id o por item directamente. Hace lo mismo, la única diferencia es que cuenta también los equipados.

Y claro, al igual que ésta modificación también tenemos weapon_total_number_by_id.

Éstas son todas las llamadas importantes que incluye el sistema y con las que el almacenaje de objetos, armas y protectores en el proyecto será mucho más profesional. Sois libres de poner cualquier comentario que queráis hacer.

Tiendas con items con propiedades especiales

Las tiendas se pueden insertar como siempre, pero entonces todos los items a comprar tendran las propiedades default. Para ello existe un atajo a la llamada de la tienda con la que los items se definen justo antes de llamarla. Ese atajo es shop_call.

Código:
potion = Game_Item.new(1)
potion.price = 15
ether = Game_Item.new(4)
shop_call([potion, ether])


Definir cada uno de los objetos antes de la llamada puede ocupar demasiadas líneas, y ese problema de espacio también puede ocurrir en otros casos, es por ello que recomiendo usar Longer Script Calls
avatar
Wecoc
Administrador
Administrador



Créditos 9138

Gracias : 472

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.