装備セットボーナス

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
TOMO
記事: 183
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

装備セットボーナス

投稿記事by TOMO » 2019年4月25日(木) 20:24

「5個中3個装備」とかも可能になるセットボーナスが作成可能となります

equip_bonus.jpg
equip_bonus.jpg (111.45 KiB) 閲覧数: 717 回

↑「ミスリルソード、ミスリルバックラー、ミスリルキャップ、ミスリルブレスト」で、
セットボーナスで更に「魔法力+10、魔法防御+10、運+10」が付いてます

コード: 全て選択

# 装備セットボーナスver1.01
# 制作者:TOMO
#
# 複数の装備の組み合わせで、セットボーナスが付与されます
#
#
# ※注意
# ・「使用するデータベースの取得」で武器と防具以外を使う方は、
#   一番下のparam_plusの方をコメントアウトして下さい
#   (@paramsが無い為)
#
# ・同じIDのセットボーナスは、作成は出来ますが付与はされません

# ※更新履歴
# ver1.01
#   処理内容の改良

module TOMO
  module EquipBonus
    # 装備ボーナスの設定
    # [[装備1, 装備2, …], 数] => ID,
    Bonus = {
      # 武器ID:22,防具ID:24,29,44から4個で、ID:62適応
      [["W:22","A:24","A:29","A:44"], 4] => 62,
     
      # 防具ID:34,39,49から2個で、ID:63適応
      [["A:34","A:39","A:49"], 2] => 63,
    }
   
    #------------------------------------------------------------------------
    # ● 使用するデータベースの取得
    #------------------------------------------------------------------------
    def self.database
      $data_weapons # 武器
#~       $data_armors  # 防具
    end
  end
end

class << DataManager
  #--------------------------------------------------------------------------
  # ● データベースのロード
  #--------------------------------------------------------------------------
  alias tomo_set_equip_bonus_load_database load_database
  def load_database
    tomo_set_equip_bonus_load_database
    set_equip_bonus
  end
  #--------------------------------------------------------------------------
  # ● 装備ボーナスDBの設定
  #--------------------------------------------------------------------------
  def set_equip_bonus
    $data_equip_bonus = {}
    TOMO::EquipBonus::Bonus.each do |key, id|
      items = key[0].collect {|text| get_bonus_item(text) }
      next if items.include?(nil)
      $data_equip_bonus[id] ||= []
      $data_equip_bonus[id] << [items, key[1]]
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備ボーナス用アイテムの取得
  #--------------------------------------------------------------------------
  def get_bonus_item(text)
    if text.match(/([WA]):(\d+)/i)
      case $1.upcase
      when "W"; return $data_weapons[$2.to_i]
      when "A"; return $data_armors[$2.to_i]
      end
    end
    return nil
  end
end

class Game_Actor
  attr_accessor   :equip_bonus
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias tomo_equip_bonus_setup setup
  def setup(actor_id)
    @equip_bonus = []
    tomo_equip_bonus_setup(actor_id)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  alias tomo_equip_bonus_refresh refresh
  def refresh
    tomo_equip_bonus_refresh
    refresh_equip_bonus
  end
  #--------------------------------------------------------------------------
  # ● 装備ボーナスのリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_equip_bonus
    @equip_bonus = []
    $data_equip_bonus.each {|id, set| set.each {|bonus|
      n = equips.uniq.compact.count {|item| bonus[0].include?(item) }
      @equip_bonus << id if n >= bonus[1]
    }}
  end
  #--------------------------------------------------------------------------
  # ● 装備ボーナスの取得
  #--------------------------------------------------------------------------
  def equip_bonus
    @equip_bonus.collect {|id| id ? TOMO::EquipBonus.database[id] : nil }
  end
  #--------------------------------------------------------------------------
  # ● 特徴を保持する全オブジェクトの配列取得
  #--------------------------------------------------------------------------
  alias tomo_equip_bonus_feature_objects feature_objects
  def feature_objects
    tomo_equip_bonus_feature_objects + equip_bonus.compact
  end
  #--------------------------------------------------------------------------
  # ● 通常能力値の加算値取得
  #--------------------------------------------------------------------------
  alias tomo_equip_bonus_param_plus param_plus
  def param_plus(param_id)
    v = tomo_equip_bonus_param_plus(param_id)
    equip_bonus.compact.inject(v) {|r, item| r += item.params[param_id] }
  end
end


どこかのウィンドウ内にセットボーナス名を描画したい場合は、

コード: 全て選択

$game_actors[4].equip_bonus.each_with_index do |item, i|
  draw_item_name(item, 0, line_height * i) if item
end

みたいにすれば可能です

※注意
もし画像の分の他に「ミスリルソード」を除いた
「ミスリルバックラー、ミスリルキャップ、ミスリルブレスト」
みたいなセットボーナスもID違いで作成した場合は、そちらも適応される仕様となってます

画像
画像
画像
画像
画像
画像

※追記
・2019/05/02 ver1.01
 処理内容の改良

“Ace:スクリプト素材(RGSS3)” へ戻る