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 3768 miembros registrados.
El último usuario registrado es lMac.

Nuestros miembros han publicado un total de 85831 mensajes en 12224 argumentos.

[Colectivo] [XP] Independent Game Objects System (IGOS)

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Eron el 2014-01-27, 00:32

Buenas, cuanto tiempo =’DD!

No he posteado mucho pero sí he ido siguiendo el foro más o menos.

Vengo a hacer un post especial con permiso de Wecoc, uno similar al de Hextiles:
¡¡Un script colectivo!!

Al principio quería hacerlo yo solo pero me topé con cosas que no puedo solucionar, y Wecoc lo miró pero no supo decirme donde está el problema D=

El script, o más bien conjunto de scripts se llama Independent Game Objects System (IGOS) y da cierta individualidad al manejo de los objetos, cargándolos por Object en vez de por id y por $game_items en vez de $data_items, etc. Explicado para tontos, hace que los objetos sean controlables como los actors.

Hasta donde hice funciona bastante bien con items, pero da muchos problemas con weapons y armors. Si funcionara bien, debería verse exactamente igual que por defecto; es un script de manejo interno de los items así que no debería verse ninguna diferencia en el juego.

Todos los errores que hay son de weapons o armors, según parece items funciona bien, lo cual es extraño porque los controlé totalmente igual, pero algún detalle habrá que se me escapa x'D
Los bugs que hay de momento y que son los que se deberían arreglar están resumidos en el primer script, y son:

Item
- Weapons y Armors no funciona bien el props o el _number en Window_Item
El error es que si tienes 3 pociones sale Poción : 3 como siempre pero si tienes 3 espadas
sale Espada : 1 Espada : 1 Espada : 1

Equip
- Lo mismo que en Item, seguro que si se arregla el error se arreglará por todas partes.
- Da mucho lag cuando tienes seleccionado un objeto, da la impresión de que el refresh no está funcionando bien y va como un update.

Shop
- Lo mismo que en Item, seguro que si se arregla el error se arreglará por todas partes.
- En Window_ShopStatus no se muestra el número de poseídos de Weapons y Armors, puede tratarse de otro efecto del mismo error u otro distinto. En realidad sí se muestra pero siempre marca 0 aunque sí tengas alguno.


No es un pedido, no necesito el script personalmente es para la comunidad.
Y quien participe saldrá en la lista de autores =D

Como es mucho código, subo demo de la versión actual.

IGOS v0.5.zip
avatar
Eron
Principiante
Principiante

0/3

Créditos 3593

Gracias : 56

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2014-01-27, 04:09

Acabo de ver que hay otro "bug", en Shop, y afecta a todo tipo de objetos, aunque supongo que es fácil arreglarlo. En Shop usaste muchos métodos de contar con _by_id, eso va en contra del resto del sistema, deberías usar el normal. Supongo que no usaste el normal porque no iba bien, y supongo que no iba bien por exactamente la misma razón por la que no van bien esos bugs. Sí eso es mucho suponer xDD Pero resumiendo creo que el _by_id no sirve y deberías evitar usarlo.

Como no pude arreglar los bugs y no he tenido fe ni para arreglar éste que dije, tiré para otro lado e hice un script que utiliza éste sistema. Creo que solo rocé la base de lo que el sistema ofrece, pero es que tampoco he entendido al 100% todo lo que tiene.

Código:
#==============================================================================
# [IGOS] Potion percentage
#==============================================================================

class Game_BaseItem
  attr_accessor :percentage
end

class Game_Item < Game_BaseItem
  alias potion_initialize initialize unless $@
  def initialize(item_id)
    potion_initialize(item_id)
    @percentage = 100
  end
end

class Game_Weapon < Game_BaseItem
  alias potion_initialize initialize unless $@
  def initialize(weapon_id)
    potion_initialize(weapon_id)
    @percentage = 100
  end
end
    
class Game_Armor < Game_BaseItem
  alias potion_initialize initialize unless $@
  def initialize(armor_id)
    potion_initialize(armor_id)
    @percentage = 100
  end
end

#==============================================================================

class Game_Battler
  alias potion_item_effect item_effect unless $@
  def item_effect(item)
    potions = [1, 2, 3, 4, 5, 6, 7, 8]
    if potions.include?(item.id)
      potion_effect(item)
    else
      potion_item_effect(item)
    end
  end
  def potion_effect(item)
    recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
    recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
    # Element correction
    recover_hp *= elements_correct(item.element_set)
    recover_hp /= 100
    recover_sp *= elements_correct(item.element_set)
    recover_sp /= 100
    # Dispersion
    if item.variance > 0 and recover_hp.abs > 0
      amp = [recover_hp.abs * item.variance / 100, 1].max
      recover_hp += rand(amp+1) + rand(amp+1) - amp
    end
    if item.variance > 0 and recover_sp.abs > 0
      amp = [recover_sp.abs * item.variance / 100, 1].max
      recover_sp += rand(amp+1) + rand(amp+1) - amp
    end
    # HP / SP recover
    if recover_hp == 0 and recover_sp == 0
      return false
    end
    if (recover_sp == 0 and self.hp == self.maxhp) or
      (recover_hp == 0 and self.sp == self.maxsp)
      return false
    end
    # Percentage
    percent = item.percentage
    real_recover_hp = recover_hp * percent / 100
    real_recover_sp = recover_sp * percent / 100
    limitant_hp = (self.maxhp - self.hp) * percent / real_recover_hp
    limitant_sp = (self.maxsp - self.sp) * percent / real_recover_sp
    limitant = [limitant_hp, limitant_sp].max
    self.hp += real_recover_hp
    self.sp += real_recover_sp
    if limitant >= percent
      return true
    end
    new_percent = percent - limitant
    new_item = Game_Item.new(item.id)
    new_name = new_item.name.delete("(100%)")
    new_name.concat("(#{new_percent}%)")
    new_item.name = new_name
    new_item.percentage = new_percent
    new_item.price = new_item.price * new_percent / 100
    $game_party.gain_item(new_item, 1)
  end
end

Para usar bien éste script hay que cambiar el nombre de las pociones por el mismo con (100%) detrás.
(Por defecto lo puse en el nombre pero cambiarlo a la descripción es muy sencillo, es cambiar donde pone .name por .description en los comandos de al final del todo)

Hay que ponerlo debajo de los scripts del IGOS. Y en la parte donde pone
potions = [1, 2, 3, 4, 5, 6, 7, 8]
Cambiar esos números por los que son pociones de vida, magia o ambas.

El script hace que al usar una poción el héroe solo use el porcentaje necesario para curarse.
Igual la lié un poco en el cálculo, no estoy muy inspirado xD pero en todo caso se puede arreglar.

Aunque sea solo a modo de ejemplo de lo que el sistema permite. ¡Y es sencillo implemetar cosas como esa!

Spoiler:


Hacer armamento que se rompe con el tiempo o poner amuletos al equipo que lo mejore como en Diablo, son otros dos ejemplos similares que se pueden hacer de manera bastante parecida con ésto.

En realidad yo también quería hacer un sistema de éste tipo hace tiempo pero nunca lo hice así que agradezco a Eron el esfuerzo de empezarlo xD

PD.- Por cierto, lo de los Hextiles en teoría aún sigue abierto.
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2014-08-21, 13:43

Os parecerá una locura pero he destruído totalmente éste script porque eso de los props era demasiado liado (ya me perdonarás, Eron). Lo he cambiado por algo un poco más ameno llamado compare_with

Puedes comparar dos items supuestamente iguales con compare_with y te dice en qué difieren. Eso permite algo similar a los props de antes haciendo compare_with con el default y ya está (le puse un método para ello llamado default?) y además a la hora de hacer las escenas será más fácil agrupar lo que toque, haciendo compare_with entre los items...

Aún así puesto que es un sistema que va por item, decidí poner que las escenas los consideraran como únicos (Poción, Poción) en vez de poner lo de Poción : 2

Ya no hay lag y todos esos bugs que había ya no están, pero aún hay cosas qué arreglar.
Por ejemplo, en Scene_Battle, @active_battler.current_action sigue funcionando por id de item, y no por item concreto (de hecho de la batalla no toqué nada, y ahora es lo que está más verde, seguramente habrá que retocar lo de los treasures y esas cosas)

Lo que habría que hacer ahora es arreglar eso y comprobar que no haya otros bugs. Lo dejo a vuestras manos. Cualquiera puede hacer de tester.

Una vez se haya resuelto todo y tengamos el sistema listo, que no queda tanto ya, me comprometo a hacer un tutorial de su funcionamiento.

Aquí tenéis mi avance:

IGOS v0.6.zip

Os recuerdo que es un colectivo, así que colectivad un poco xD

Edito: He encontrado otro bug previsible. Como en Scene_Shop las cosas se pueden vender más de una a la vez, aunque al seleccionar el item sí reconoce sus propiedades especiales, luego se puede vender más de uno con esas cuando en realidad los demás solo comparten el id. Creo que el modo de solucionar eso que mejor se adaptaría el sistema sería hacer que los items se compraran y vendieran de uno en uno. Al fin y al cabo como nos ahorramos un paso también es rápida la compra o venta, y... ¿quien compra 50 pociones a la vez? xD

Aún así estaría bien conservar update_target igualmente, solo quitar la llamada, para que luego recuperarlo con un script nuevo no sea complicado. Entonces igualmente hay que cambiarlo porque en vez de ir por ID vaya por todo el conjunto.
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

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

He arreglado todo lo que dije y un poco más y tras un testeo rápido no encontré ningún bug. Después de tanto tiempo, considero que el script llegó a su versión final.

IGOS v1.0.zip

El colectivo podría continuar, agregando scripts que dependieran de éste sistema, pero viendo su sublime participación casi que lo podemos dar por finalizado.

Cualquier bug que le encontréis lo notificáis aquí.

Y como lo prometido es deuda, haré un tutorial de uso de éste sistema.

======

Estoy tan animado por el hecho de que el sistema esté acabado, que he hecho otro aporte relacionado. Conviene acabarlo así que a ver si os apuntáis. No me tachéis de spammer por hacer tantos posts en cadena, es por una buena causa xDD

Es un shop con items limitados, cuando compras uno desaparece de la lista y cuando vendes uno aparece en la lista (tipo Fallout, Oblivion, Diablo...). Además consta de dinero del comprador y se guarda al guardar la partida. Vaya, que va genial con el sistema xDD

Código:
#==============================================================================
# [IGOS] ** Particular Shop - Beta -
#------------------------------------------------------------------------------
# Autores: Wecoc
#------------------------------------------------------------------------------
# * Fallos
#  Interface - Estaría mejor que las propiedades de cada cosa
#    se vieran con más claridad
#  Interface - El sistema consta de un dinero propio del comprador (@shop.gold)
#    que funciona pero no se muestra en ningún lado.
#==============================================================================

class Game_Temp
  attr_accessor :shop
end

class Game_Shop
 
  attr_reader  :id
  attr_accessor :goods
  attr_accessor :gold
  attr_accessor :sell_type  # 0 : Default,  1 : Only Items, 2 : Only Weapons
  attr_accessor :shop_type  # 0 : Default,  1 : Only Buy,  2 : Only Sell
  attr_accessor :buy_tax
  attr_accessor :sell_tax
 
  def initialize(id)
    @id = id
    @goods = []
    @gold = 1000
    @sell_type = 0
    @shop_type = 0
    @buy_tax =  1.0
    @sell_tax = 0.5
    setup(id)
  end
 
  def setup(id)
    case id
    when 0 # Example
      @goods = [item(1),
                item(1),
                item(1) {|item| item.price = 500},
                weapon(1),
                armor(4)
                ]
      @gold = 1500
    # when 1
    # ...
    end
  end
 
  def item(id, &block)
    item = Game_Item.new(id)
    yield item if block_given?
    return item
  end
 
  def weapon(id, &block)
    weapon = Game_Weapon.new(id)
    yield weapon if block_given?
    return weapon
  end
 
  def armor(id, &block)
    armor = Game_Armor.new(id)
    yield armor if block_given?
    return armor
  end
end

class Game_Party
  attr_accessor :shops
  alias particular_shops_ini initialize unless $@
  def initialize
    particular_shops_ini
    @shops = []
  end
 
  def shop(id)
    return @shops.select{|shop| shop.id == id}[0]
  end
end

class Interpreter
  def command_302 ; end
 
  def shop_call(id)
    new_shop = Game_Shop.new(id)
    shops = $game_party.shops.select{|shop| shop.id == id}
    if shops.size == 0
      $game_party.shops.push(new_shop)
    else
      new_shop = shops[0]
    end
    $game_temp.battle_abort = true
    $game_temp.shop_calling = true
    $game_temp.shop = new_shop
  end
end

class Window_ShopCommand < Window_Selectable
  def initialize
    super(0, 64, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @buy_disabled = false
    @sell_disabled = false
    @item_max = 3
    @column_max = 3
    @commands = ["Comprar", "Vender", "Salir"]
    refresh
    self.index = 0
  end

  def refresh
    self.contents.clear
    self.contents.font.color = @buy_disabled ? disabled_color : normal_color
    draw_item(0)
    self.contents.font.color = @sell_disabled ? disabled_color : normal_color
    draw_item(1)
    self.contents.font.color = normal_color
    draw_item(2)
  end

  def disable_item(index)
    case index
    when 0
      @buy_disabled = true
    when 1
      @sell_disabled = true
    end
    refresh
  end
end

class Window_ShopBuy < Window_Selectable
  def draw_item(index)
    item = @data[index]
    case item.type
    when 0 # Item
      number = $game_party.item_number_by_id(item)
    when 1 # Weapon
      number = $game_party.weapon_number_by_id(item)
    when 2 # Armor
      number = $game_party.armor_number_by_id(item)
    end
    item_price = (item.price * $game_temp.shop.buy_tax).to_i
    if item_price <= $game_party.gold and number < 99
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item_price.to_s, 2)
  end
end 

class Window_ShopSell < Window_Selectable
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    @data_number = []
    items = $game_party.items
    if $game_temp.shop.sell_type != 2
      for item in $game_party.items
        @data.push(item)
      end
    end
    if $game_temp.shop.sell_type != 1
      for weapon in $game_party.weapons
        @data.push(weapon)
      end
      for armor in $game_party.armors
        @data.push(armor)
      end
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
 
  def draw_item(index)
    item = @data[index]
    item_price = (item.price * $game_temp.shop.sell_tax).to_i
    if item.sellable? and $game_temp.shop.gold > item_price
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  end
end

class Scene_Shop
  def main
    @shop = $game_temp.shop
    @help_window = Window_Help.new
    @command_window = Window_ShopCommand.new
    case @shop.shop_type
    when 1
      @command_window.disable_item(1) # Disable Sell
    when 2
      @command_window.disable_item(0) # Disable Buy
    end
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 64
    @dummy_window = Window_Base.new(0, 128, 640, 352)
   
    @buy_window = Window_ShopBuy.new(@shop.goods)
    @buy_window.active = false
    @buy_window.visible = false
    @buy_window.help_window = @help_window

    @sell_window = Window_ShopSell.new
    @sell_window.active = false
    @sell_window.visible = false
    @sell_window.help_window = @help_window

    @status_window = Window_ShopStatus.new
    @status_window.visible = false
   
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
    @dummy_window.dispose
    @buy_window.dispose
    @sell_window.dispose
    @status_window.dispose
  end

  def update
    @help_window.update
    @command_window.update
    @gold_window.update
    @dummy_window.update
    @buy_window.update
    @sell_window.update
    @status_window.update
    if @command_window.active
      update_command
      return
    end
    if @buy_window.active
      update_buy
      return
    end
    if @sell_window.active
      update_sell
      return
    end
  end

  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # buy
        if @shop.shop_type == 2
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # sell
        if @shop.shop_type == 1
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @dummy_window.visible = false
        @sell_window.active = true
        @sell_window.visible = true
        @sell_window.refresh
      when 2  # quit
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Map.new
      end
      return
    end
  end

  def update_buy
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      item_price = (@item.price * @shop.buy_tax).to_i
      if @item == nil or item_price > $game_party.gold
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @item.type
      when 0 # Item
        number = $game_party.item_number_by_id(@item.id)
      when 1 # Weapon
        number = $game_party.weapon_total_number_by_id(@item.id)
      when 2 # Armor
        number = $game_party.armor_total_number_by_id(@item.id)
      end
      if number == 99
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.shop_se)
      @shop.goods.delete_one(@item)
      @shop.gold += item_price
      $game_party.lose_gold(item_price)
      case @item.type
      when 0 # Item
        $game_party.gain_item(@item, 1)
      when 1 # Weapon
        $game_party.gain_weapon(@item, 1)
      when 2 # Armor
        $game_party.gain_armor(@item, 1)
      end
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
    end
  end

  def update_sell
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      item_price = (@item.price * @shop.sell_tax).to_i
      if @item == nil or item_price == 0 or @shop.gold < item_price
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.shop_se)
      @shop.gold -= item_price
      @shop.goods.push(@item)
      $game_party.gain_gold(item_price)
      case @item.type
      when 0 # Item
        $game_party.lose_item(@item, 1)
      when 1 # Weapon
        $game_party.lose_weapon(@item, 1)
      when 2 # Armor
        $game_party.lose_armor(@item, 1)
      end
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
    end
  end
end


Lo que hay que arreglar es la Interface, y yo no sé como hacerlo para que quede bien así que alguien tendrá que dar soporte al script. Entended que tal y como está ya tiene el 90% hecho más o menos.

Ya que el sistema va mucho de propiedades especiales de cada item, estaría mejor que las propiedades de cada cosa se vieran con más claridad por ahí. El sistema consta de un dinero propio del mercenario (@shop.gold) que funciona pero no se muestra en ningún lado. Por último quizá también habría que arreglar el nombre del script... *risas*


Última edición por Wecoc el 2014-08-24, 15:04, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por rigel2 el 2014-08-23, 15:03

cilelos en verdad despues de ver todo el post
sigo sin definir para que podria ser util este script
a mi parecer algo asi solo liaria mas un proyecto pero en fin supongo que a alguien le servira
avatar
rigel2
Principiante
Principiante

0/3

Créditos 936

Gracias : 33

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2014-08-23, 17:02

Al principio también me costó ver sus ventajas, pero creía que a éstas alturas estaba claro... entiendo que puede parecer poco útil si lo miras como sistema solo, pero es que lo que hace principalmente es permitir hacer scripts a parte mucho más interesantes. Y ten en cuenta que muchos juegos comerciales utilizan propiedades concretas de objeto solo posibles en XP con un sistema de éste tipo.

Sé que puede parecer un sistema muy complejo pero en realidad no lo es tanto. Te pondré un ejemplo de utilidad para que entiendas mejor lo que supone, y de hecho es el ejemplo que prendo hacer dentro de un tiempo después de ésto de la tienda.

Un sistema de durabilidad en armas y protectores; cuanto más usas un arma o protector peor es su calidad y más cerca está de romperse. Una vez rota no puedes equiparla más. Hacer ésto por default no es posible ya que si tienes más de un arma igual, todas se romperían a la vez, porque el sistema default no da las propiedades por item sinó por id y lo que afecta a uno afecta a todos.

Otro ejemplo aunque no tan atractivo es el que dije de las pociones con porcentaje (aunque ese script es solo una prueba en realidad xD), no te bebes una poción entera sinó lo que necesites en ese momento, eso influye en su porcentaje. Nuevamente solo puedes hacerlo con éste sistema.

Hay más ejemplos, de cualquier implementación que quieras dar de éste tipo. Soy poco original y solo robo ideas de Diablo y éstos xD, pero todo lo que serían objetos / armas / protectores con nivel propio o con estados alterados propios, o añadirle runas, piedras preciosas o hechizos al equipo para alterarlo a tu gusto, así como un sistema de alquímia añadiendo hierbas o setas a las pociones, darle varios usos (como de arma y protector a la vez, aunque no sé cómo sería ésto exactamente) a un objeto... Y se me acaban las ideas xD

Claro que IGOS por sí solo se ve poco útil pero ya ves todo lo que permite con scripts a parte ;D

Edito: Ya hice el sistema de Durabilidad tan bien como pude, pero igualmente de nuevo solo es una beta así que ya es más tarea para el colectivo xDD

Código:
#==============================================================================
# [IGOS] ** Durability - Beta -
#------------------------------------------------------------------------------
# Autores: Wecoc
#==============================================================================

class Game_BaseItem
 
  attr_accessor :dur_max
  attr_accessor :dur
  attr_accessor :breakable
 
  alias durability_ini initialize unless $@
  def initialize(*args)
    durability_ini(*args)
    @dur_max = 100
    @dur = 100
    @breakable = true
  end
 
  def dur=(value)
    @dur = value
    @dur = [[0, @dur].max, @dur_max].min
  end
 
  def sellable?
    return total(:price) > 0
  end
   
  def break?
    return (@dur == 0 and @breakable)
  end
 
  def dur_state(var)
    var = total(var)
    return @breakable ? var * [@dur, 1].max / @dur_max : var
  end
 
  def total(var)
    instance_variable_get("@" + var.to_s)
  end
 
  def price
    return dur_state(:price)
  end
 
  def repair_price
    return total(:price) - price
  end
 
  def maxhp_plus ;      return dur_state(:maxhp_plus) ;      end
  def maxsp_plus ;      return dur_state(:maxsp_plus) ;      end
  def str_plus ;        return dur_state(:str_plus) ;        end
  def dex_plus ;        return dur_state(:dex_plus) ;        end
  def agi_plus ;        return dur_state(:agi_plus) ;        end
  def int_plus ;        return dur_state(:int_plus) ;        end
  def recover_hp ;      return dur_state(:recover_hp) ;      end
  def recover_sp ;      return dur_state(:recover_sp) ;      end
  def recover_hp_rate ; return dur_state(:recover_hp_rate) ;  end
  def recover_sp_rate ; return dur_state(:recover_sp_rate) ;  end
  def pdef_f ;          return dur_state(:pdef_f) ;          end
  def mdef_f ;          return dur_state(:mdef_f) ;          end
  def atk ;            return dur_state(:atk) ;              end
  def pdef ;            return dur_state(:pdef) ;            end
  def mdef ;            return dur_state(:mdef) ;            end
end

class Game_Item < Game_BaseItem
  alias durability_setup setup unless $@
  def setup(*args)
    durability_setup(*args)
    @breakable = false
  end
end

class Game_Actor < Game_Battler
  alias break_equippable? equippable? unless $@
  def equippable?(item)
    if item.breakable and item.break?
      return false
    end
    return break_equippable?(item)
  end
end


Todo lo que es el sistema de durabilidad creo que funciona bien, pero no está hecha la disminución de durabilidad del arma cuando ataca ni de los protectores cuando es atacado (lo cual dependería también de si está defendiéndose). También está recalculado el precio según si está muy roto o no y hay un precio de reparación llamado repair_price, pero no hay hecha ninguna escena de Herrería que lo utilice.

=======

Pongo las cosas que deberían hacerse para el colectivo, aunque si se os ocurren otros también:

Particular Shop - Hacer que las propiedades de cada cosa se vean con más claridad en la tienda
Particular Shop - Mostrar el dinero del comprador (@shop.gold)
Durability - Alteración de durabilidad en batalla (al atacar o ser atacado)
Durability - Sistema de Herrería (reparación de equipo)


Última edición por Wecoc el 2014-08-24, 15:05, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por rigel2 el 2014-08-24, 00:51

bueno la verdad todo trabajo conlleva un esfuerzo
y por lo visto este tiene bastante ahora con los ejemplos mensionados creo que la idea toma mas forma almenos para mi pero sin duda habra que
usar una cantidad de ingenio considerable para crear sistemas con igos
avatar
rigel2
Principiante
Principiante

0/3

Créditos 936

Gracias : 33

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por kaji el 2015-03-21, 09:32

Querida gente del foro, llevaba muchisimo tiempo inactivo y he vuelto, estoy empezando un proyecto y me interesa el sistema de tienda de Wecoc. ¿Cómo lo meto para que vaya? Lo he metido en un scrip en el IGOS a ver si era así pero no me salía la tienda (si os digo la verdad en los scripts soy pelín monguer).
avatar
kaji
Iniciado
Iniciado

0/3

Créditos 62

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por silvanash el 2015-04-04, 23:54

Me gustaría anunciar un bug que me he encontrado mientras intentaba hacer un script para el IGOS: el menú de equipar (Scene_Equip) no funciona correctamente.

En la demo del IGOS, sin activar ninguno de los demás eventos, intenta quitarle el escudo a Alexis. Los valores de armadura y resistencia mágica de Alexis cambian al instante a los que tendría sin el escudo ANTES de quitarle el escudo. Intentar colocarle el escudo de nuevo no funciona; en la ventana de equipamiento del personaje aparece Alexis con un escudo que ya no debería tener encima, y en la ventana de inventario no aparece ningún escudo. Pasa lo mismo con el resto del equipo defensivo (armadura, casco y accesorio). La única forma de poder quitarle el equipo defensivo es quitándole primero el arma al personaje. Pasa con todos los personajes que forman el grupo inicial de la demo. Ninguno de ellos puede modificar correctamente su equipo defensivo mientras tenga equipada el arma.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2015-09-30, 23:00

Actualizado a la versión 1.1

- Añadido module IGOS para poder comprobar externamente si se está usando el sistema.
- Añadidos los fixes de silvanash dentro del propio sistema. Se pueden configurar mediante las globales GROUP_IDENTICAL, SET_MAX_BY_ID y AUTOCLOSE_ITEM_TARGET del module IGOS.
- Arreglado el bug que mencionó silvanash.
- Añadida la opción EQUIP_SAFE_MODE.

Globales:
GROUP_IDENTICAL - Con ésta opción los items, weapons y armors que son idénticos se agrupan directamente (fix de Silvanash)

SET_MAX_BY_ID - Con ésta opción activada el máximo (99) de un item, weapon o armor va por su id, mientras que sin éste va por tipo concreto (fix de Silvanash). Dejé la opción desactivada porque al redefinir un parámetro de un item a otro de modo que lo igualas a un grupo de items ya existente se podría romper el límite.

AUTOCLOSE_ITEM_TARGET - Tras usar un objeto la ventana Target se cierra directamente.

EQUIP_SAFE_MODE - Por defecto, al equipar algo el método equip se llama varias veces, solo para hacer la comparación entre un equipo y el otro en la ventana Window_EquipLeft. Con éste modo se distingue entre safe_equip y el equip convencinal de modo que se simplifica la comparación y el método equip solo se llama una vez.

El sistema en sí sigue funcionando exactamente igual, los cambios fueron internos en los métodos, por lo que el tutorial de uso que hice del sistema sigue siendo igualmente válido.

IGOS v1.1.zip
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2015-10-04, 17:55

He detectado algunos nuevos bugs que intentaré arreglar para la próxima versión lo más pronto posible.

1 - En la tienda se compra y vende los objetos de uno en uno, sin el Window_ShopNumber. Eso tenía sentido cuando los items no estaban agrupados, pero con el nuevo GROUP_IDENTICAL no queda tan bien, así que habrá que hacer una nueva global para dar esa opción. (Edito: ¡Hecho!)

2 - En la tienda el apartado "Tienes:" sigue funcionando por id, y óbviamente no es lo óptimo. (Edito: ¡Arreglado!)

3 - Al obtener un item de la party con gain_item o gain_item_by_props ... y cambiarle alguna propiedad, también se cambia a los demás que cumplen esas mismas restricciones. (Edito: ¡Arreglado!)

Pronto subiré nueva demo, para la versión 1.2, y será mucho más completa que la actual.


Última edición por Wecoc el 2015-10-20, 14:56, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por silvanash el 2015-10-04, 18:08

Para el último bug prueba a usar un .dup. Creo que pasa porque añadiste todos esos objetos en una misma llamada a script, así que todos tienen la misma ID de script. Al modificar uno, cambian todos.

En Kelala me pasaba eso cuando intenté pillar un array desde un module. Al modificar el array obtenido me cambiaba el que estaba en el module.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2015-10-04, 21:26

Pues sí que era cuestión de clonarlo, aunque no en la llamada de script sinó en el propio gain_item xD
Ahora todo va de maravilla.

¡Muchas gracias por el consejo!
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2015-10-20, 16:43

Actualizado a la versión 1.2

- Arreglados los bugs, carencias y discrepancias mencionados anteriormente.
- Añadido un nuevo script opcional llamado Supplementary Data Type Script, que es una base similar al IGOS pero adaptado a las skills, estados y clases a parte de añadir otras funciones interesantes :D (Sería lo que Yanfly llama un Lunatic Mode, creo). Recomiendo echarle un ojo. Quizá diréis que prácticamente "no sirve de nada", pero sirve para poder hacer buenos scripts, es todo un core.
- Demo mucho más explicativa, y con algunas tonterías.

No se conocen bugs en ésta versión, si alguien detecta alguno que lo comente aquí.

IGOS v1.2b.zip

Eron, ya puedes estar contento xDD


Última edición por Wecoc el 2016-08-22, 15:43, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por kaji el 2015-12-17, 09:11

no me deja usarlo por uin fallo en el script game_switches... en la línea 20, solo pasa con IGOS, ¿por que?
avatar
kaji
Iniciado
Iniciado

0/3

Créditos 62

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2015-12-17, 09:53

Si el fallo ocurre solo al cargar una partida guardada antes de poner el IGOS, es normal. Ocurre al añadir scripts que hacen modificaciones importantes al sistema, como éste, si intentas cargar partidas con el sistema antíguo ya no funcionan. En ese caso conviene descartar esas partidas.

Si el error te sale siempre, pues no lo sé. Nunca he visto ese error antes, puede que sea una incompatibilidad con otro script que estés usando.
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por kaji el 2015-12-17, 14:08

Es al empezar partida, sale sin hacer nada, lo curioso es que no tengo ningún script metido, lo tengo todo con engines, pero no puede ser culpa de ninguno ya que he copiado todo el mapa para tener a manos las muestras de IGOS
avatar
kaji
Iniciado
Iniciado

0/3

Créditos 62

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por silvanash el 2016-07-09, 17:45

He encontrado otro bug :D.

Cuando entras en Scene_Item, puedes darle a aceptar sin tener nada en inventario. Eso tira error de nil method al llamar a is_item?, porque literalmente no hay nada a lo que hacer la comprobación. Podría hacer el fix yo mismo, pero te lo comunico para que corrijas el IGOS y no andar haciendo fixes descoordinados.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Wecoc el 2016-08-22, 15:44

Updateada la demo a versión "1.2b". Se solucionó el bug mencionado por silvanash, concretamente en Scene_Item:update_item dentro del script principal de IGOS.

Si encontráis algún otro bug comentadlo aquí.
avatar
Wecoc
Administrador
Administrador



Créditos 12083

Gracias : 519

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo] [XP] Independent Game Objects System (IGOS)

Mensaje por Contenido patrocinado


Contenido patrocinado


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.