アイテム合成 カスタム



合成リストを別モジュール化

※このスクリプトの原作者はTOMY様です。
変更点 2024:04:01 ・能力値限界突破に対応
合成アイテム設定
module KGC_Compose
  # ◆合成レシピ
  #  ≪費用, [タイプ, ID, 個数], ...≫
  #  【 費用 】合成費用。
  #  【タイプ】合成素材の種類。(I..アイテム  W..武器  A..防具)
  #  【  ID  】合成素材のID。(↑と対応)
  #  【 個数 】合成素材の必要数。
  #  配列の添字がアイテム/武器/防具IDに対応。
  #  [タイプ, ID, 個数] はいくつでも指定可能。
  I_R_I = []  # アイテム
  I_R_W = []  # 武器
  I_R_A = []  # 防具
  
  #  <例 : アイテムID:8 の合成レシピ(アイテムID:2 と ID:5 を消費。料金 0)>
  # 武器・防具・アクセ
  I_R_W[32]  = [0, ["I", 113,  2]]                    # ザッパー
  I_R_W[38]  = [0, ["I", 113,  3], ["I", 153,  8]]    # クロノ・カイザー
  I_R_W[39]  = [0, ["I", 113,  3], ["I", 158,  1]]    # クトネシリカ
  I_R_W[161] = [0, ["I", 113,  3], ["I", 157,  1]]    # 天之尾羽張
  I_R_W[279] = [0, ["I", 113,  3], ["I", 160,  5]]    # 十文字槍
  I_R_W[280] = [0, ["I", 113,  3], ["I", 159, 10]]    # 皆朱の槍
  I_R_W[599] = [0, ["I", 113,  3], ["I", 164,  1]]    # モーターギア
  I_R_W[600] = [0, ["I", 113,  4]]                    # バール
  I_R_A[52]  = [0, ["I", 113,  3], ["I", 162,  1]]    # マジックシールド
  I_R_A[53]  = [0, ["I", 113,  3], ["I", 163,  1]]    # リングシールド
  I_R_A[469] = [0, ["I", 113,  3]]                    # 鉄扇
  I_R_A[477] = [0, ["I", 113,  3], ["I", 161,  1]]    # エンジェル・ハイロゥ
  # 特殊アイテム
  I_R_I[89] =  [0, ["I", 153,  2], ["I",  14,  3]]    # 毒々しい血
  I_R_I[90] =  [0, ["I", 153,  2], ["I",  16,  3]]    # 微睡む血
  I_R_I[91] =  [0, ["I", 153,  2], ["I",  17,  3]]    # 痺れる血
  I_R_I[92] =  [0, ["I", 153,  4], ["I",  19,  5]]    # サワヤカな血
  I_R_I[93] =  [0, ["I", 153,  4], ["I",  23,  5]]    # 燃え滾る血
  I_R_I[94] =  [0, ["I", 153,  4], ["I",  24,  5]]    # 凍てつく血
  I_R_I[95] =  [0, ["I", 153,  8], ["I",  28,  7]]    # 蠱惑的な血
  I_R_I[96] =  [0, ["I", 153,  8], ["I",  26,  7]]    # 世界の血
  I_R_I[97] =  [0, ["I", 153,  8], ["I",  29,  7]]    # 封じし血
end
スクリプト本体
#----------------------------------------------------------------------------
# アイテム合成 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ アイテム合成 - KGC_ComposeItem ◆
#           ◇ Last update : 2008/01/14 ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# 諸注意
# ≪ヘルプウィンドウ機能拡張[HelpExtension]≫より下
# 
# 改造内容:
# ・合成リストを別モジュール化
# 
#============================================================================
# 変更点
# 2024:04:01
# ・能力値限界突破に対応

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  # ◆必要素材リストをコンパクトにする
  #  必要素材が4種類以上になる場合は true にしてください。
  #  素材数の表記は "必要数/所持数" です。
  ICMP_MATERIAL_LIST_COMPACT = false

  # ◆合成アイテム情報切り替えボタン
  #  素材リスト <--> 能力値変化(装備品のみ)  を切り替えるボタン。
  ICMP_SWITCH_INFO_BUTTON = Input::A

  # ◆合成画面に所持金ウィンドウを表示しない
  #  合成にお金を必要としない場合は true にしてください。
  ICMP_HIDE_GOLD_WINDOW = true
  # ◆合成費用が 0 の場合、費用を表示しない
  ICMP_HIDE_ZERO_COST = true
end

#==============================================================================
# ■ Game_System
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ○ 合成可能判定
  #     item : 合成するアイテム
  #--------------------------------------------------------------------------
  def composable?(item)
    # レシピ取得
    recipe = compose_recipe(item)
    # 合成料金が足りない場合は合成不可
    cost = recipe.shift
    return false if cost > $game_party.gold
    # アイテム数判定
    recipe.each { |r|
      case r[0].upcase
      when "I"
        # 所持数取得
        count = $game_party.item_number(r[1])
        # 数が足りているか判定
        return false if count < r[2]
      when "W"
        count = $game_party.weapon_number(r[1])
        return false if count < r[2]
      when "A"
        count = $game_party.armor_number(r[1])
        return false if count < r[2]
      end
    }
    return true
  end
  #--------------------------------------------------------------------------
  # ○ レシピ取得
  #     item : 合成するアイテム
  #--------------------------------------------------------------------------
  def compose_recipe(item)
    # 直接指定判定
    case item
    when RPG::Item
      if KGC_Compose::I_R_I[item.id] != nil
        return KGC_Compose::I_R_I[item.id].dup
      end
    when RPG::Weapon
      if KGC_Compose::I_R_W[item.id] != nil
        return KGC_Compose::I_R_W[item.id].dup
      end
    when RPG::Armor
      if KGC_Compose::I_R_A[item.id] != nil
        return KGC_Compose::I_R_A[item.id].dup
      end
    end
    # 属性判定
    recipe = [compose_cost(item)]
    material = compose_material(item)
    material.each { |m| recipe << m }
    return recipe
  end
  #--------------------------------------------------------------------------
  # ○ 合成料金取得
  #     item : 合成するアイテム
  #--------------------------------------------------------------------------
  def compose_cost(item)
    # アイテムの合成属性を取得
    case item
    when RPG::Item, RPG::Weapon
      element_set = item.element_set.dup
    when RPG::Armor
      element_set = item.guard_element_set.dup
    end
    # 属性確認
    element_set.compact.each { |i|
      element = $data_system.elements[i]
      # 合成料金を返す
      return $1.to_i if $game_special_elements["item_compose"] =~ element
    }
  end
  #--------------------------------------------------------------------------
  # ○ 合成に必要なアイテム取得
  #     item : 合成するアイテム
  #--------------------------------------------------------------------------
  def compose_material(item)
    need_item = []
    # アイテムの合成属性を取得
    case item
    when RPG::Item, RPG::Weapon
      element_set = item.element_set.dup
    when RPG::Armor
      element_set = item.guard_element_set.dup
    end
    # 属性確認
    element_set.compact.each { |i|
      element = $data_system.elements[i]
      if $game_special_elements["item_compose"] =~ element
        # 必要アイテムの種類と数を取得
        j = 0
        loop {
          need_item << [eval("$#{j * 3 + 2}"),
            eval("$#{j * 3 + 3}.to_i"), eval("$#{j * 3 + 4}.to_i")]
          break if eval("$#{j * 3 + 5} == nil")
          j += 1
        }
        break
      end
    }
    # 配列を返す
    return need_item
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_ComposeItemNumber
#------------------------------------------------------------------------------
#  合成画面で、合成するアイテムの個数を入力するウィンドウです。
#==============================================================================

class Window_ComposeItemNumber < Window_ShopNumber
  include DIAMOND
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_item_name(@item, 4, 96)
    rectr  = [272, 96, 32, 32]
    rectr2 = [308, 96, 24, 32]
    draw_shadow_text(rectr, "×")
    draw_shadow_text(rectr2, @number.to_s, normal_color, 2)
    self.cursor_rect.set(304, 96, 32, 32)
    # 合計価格と通貨単位を描画
    total_price = @price * @number
    if !KGC::ICMP_HIDE_ZERO_COST || total_price > 0
      domination = Vocab::gold
      cx = contents.text_size(domination).width
      rectr3 = [4, 160, 328-cx-2, 32]
      rectr4 = [332-cx, 160, cx, 32]
      draw_shadow_text(rectr3, total_price.to_s, normal_color, 2)
      draw_shadow_text(rectr4, domination, system_color, 2)
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_ComposeItem
#------------------------------------------------------------------------------
#  合成画面で、合成できる商品の一覧を表示するウィンドウです。
#==============================================================================

class Window_ComposeItem < Window_Selectable
  include RUBY_SYS
  include BM
  include VDI
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     shop_goods : 商品
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 64, 368, 416 - 32)
    @shop_goods = shop_goods
    # 拡張ヘルプウィンドウの場合は下げる
    #if $imported["HelpExtension"]
      self.y += 32
      self.height -= 32
    #end
    refresh
    self.index = 0
    
    @draw_item_num = 2     # 一度に描画する数
    @draw_ok = Array.new() # 描画完了フラグ配列
    
  end
  #--------------------------------------------------------------------------
  # ○ アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ○ 合成料金の取得
  #--------------------------------------------------------------------------
  def price
    item = @data[self.index]
    return $game_system.compose_recipe(item)[0]
  end
  #--------------------------------------------------------------------------
  # ○ 作成可能数の取得
  #--------------------------------------------------------------------------
  def create_count
    item = @data[self.index]
    recipe = $game_system.compose_recipe(item)
    cost = recipe.shift
    # 最大数の設定
    max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
    max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
    max_hold = item.number_limit
end # $imported["LimitBreak"]
    if cost == 0
      count = max_hold
    else
      count = $game_party.gold / cost
    end
    # アイテム計算
    recipe.each { |r|
      case r[0].upcase
      when "I"
        n = $game_party.item_number(r[1])
      when "W"
        n = $game_party.weapon_number(r[1])
      when "A"
        n = $game_party.armor_number(r[1])
      end
      n /= r[2]
      count = [count, n].min
    }
    # 作成可能数を返す
    return count
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @item_drawing = false
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    
    @draw_counter = 0
    reset_array
    @data = []
    for goods_item in @shop_goods
      case goods_item[0]
      when 0
        item = $data_items[goods_item[1]]
      when 1
        item = $data_weapons[goods_item[1]]
      when 2
        item = $data_armors[goods_item[1]]
      end
      next if item == nil
      # レシピ判定
      case item
      when RPG::Item
        if KGC_Compose::I_R_I[item.id] != nil
          @data << item
          next
        else
          element_set = item.element_set.dup
        end
      when RPG::Weapon
        if KGC_Compose::I_R_W[item.id] != nil
          @data << item
          next
        else
          element_set = item.element_set.dup
        end
      when RPG::Armor
        if KGC_Compose::I_R_A[item.id] != nil
          @data << item
          next
        else
          element_set = item.guard_element_set.dup
        end
      end
      # 属性確認
      for i in element_set.compact
        element = $data_system.elements[i]
        if $game_special_elements["item_compose"] =~ element
          # 追加
          @data.push(item)
        end
      end
    end
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      draw_item_v
      #for i in 0...@item_max
        #draw_item(i)
      #end
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    # 価格を取得
    price = $game_system.compose_recipe(item)[0]
    # アイテムの所持数を取得
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # 所持数が上限未満で、合成可能な場合
    max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
    max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
    max_hold = item.number_limit
end # $imported["LimitBreak"]
    limit = max_hold
    draw_color = (number < limit && $game_system.composable?(item)) ?
      normal_color : disabled_color
    dflag = (number < limit && $game_system.composable?(item)) ? true : false
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, BM::NILCOLOR)
    bitmap = RPG::Cache.icon(item.icon_name)
    item.name = transfer(item.name)
    opacity = draw_color == normal_color ? BM::MAX8BIT : BM::HARF8BIT
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    draw_shadow_text([x + 28, y], item.name, draw_color, 0, dflag)
    # 費用を表示する場合
    if !KGC::ICMP_HIDE_ZERO_COST || price > 0
      rectr = [x + 240, y, 88, 32]
      draw_shadow_text(rectr, price.to_s, draw_color, 2, dflag)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_ComposeItemInfo
#------------------------------------------------------------------------------
#  合成画面で、素材の所持数や必要数を表示するウィンドウです。
#==============================================================================

class Window_ComposeItemInfo < Window_Base
  include RUBY_SYS
  include BM
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(368, 64, 272, 416)
    # 拡張ヘルプウィンドウの場合は下げる
    #if $imported["HelpExtension"]
      self.y += 32
      self.height -= 32
    #end
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.font.color = normal_color
    self.contents.font.size = 22
    self.contents.clear
    return if @item == nil
    case @item
    when RPG::Item
      number = $game_party.item_number(@item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(@item.id)
    when RPG::Armor
      number = $game_party.armor_number(@item.id)
    end
    rectr  = [4, 0, 200, 24]
    rectr2 = [204, rectr[1], 32, rectr[3]]
    draw_shadow_text(rectr, BM::STAND_WORD, system_color)
    draw_shadow_text(rectr2, number.to_s, normal_color, 2)

    # アイテムのレシピを取得
    recipe = $game_system.compose_recipe(@item)
    recipe.shift
    # 必要アイテム数描画
    x = 4
    y = 64 - 32
    if KGC::ICMP_MATERIAL_LIST_COMPACT
      x = 0
      y = 32
      self.contents.font.size = 18
    end
    recipe.each { |r|
      case r[0].upcase
      when "I"
        # アイテム取得
        item = $data_items[r[1]]
        # 所持数取得
        count = $game_party.item_number(item.id)
      when "W"
        item = $data_weapons[r[1]]
        count = $game_party.weapon_number(item.id)
      when "A"
        item = $data_armors[r[1]]
        count = $game_party.armor_number(item.id)
      end
      if count < r[2]
        draw_color = disabled_color
        opacity = 160
        dflag = false
      else
        draw_color = normal_color
        opacity = BM::MAX8BIT
        dflag = true
      end
      # 素材描画
      icon = RPG::Cache.icon(item.icon_name)
      item.name = transfer(item.name)
      if KGC::ICMP_MATERIAL_LIST_COMPACT
        self.contents.blt(x, y, icon, icon.rect, opacity)
        draw_shadow_text([x + 26, y], item.name, draw_color)

        text = "#{r[2]}/#{count}"
        rectr = [x + width - 96, y, 64, 24]
        draw_shadow_text(rectr, text, draw_color, 2)

        y += 24
      else
        self.contents.blt(x + 4, y + 4, icon, icon.rect, opacity)
        draw_shadow_text([x + 32, y], item.name, draw_color)

        text = "必要数 #{r[2]}/所持数 #{count}"
        rectr2 = [x, y + 32, width - 32, 32]
        draw_shadow_text(rectr2, text, draw_color)

        y += 64
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ アイテムの設定
  #     item : 新しいアイテム
  #--------------------------------------------------------------------------
  def item=(item)
    if @item != item
      @item = item
      refresh
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_ShopStatus2
#------------------------------------------------------------------------------
#  ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================

class Window_ShopStatus2 < Window_Base
  include BM
  include RUBY_SYS
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(368, 128, 272, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @item == nil
      return
    end
    case @item
    when RPG::Item
      number = $game_party.item_number(@item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(@item.id)
    when RPG::Armor
      number = $game_party.armor_number(@item.id)
    end
    
    draw_shadow_text([4, 0, 200, 32], Vocab::STAND_WORD, system_color)
    draw_shadow_text([204, 0, 32, 32], number.to_s, normal_color, 2)
    
    stt = 32
    
    if @item.is_a?(RPG::Item)
      return
    end
    # 装備品追加情報
    for i in 0...$game_party.actors.size
      # アクターを取得
      actor = $game_party.actors[i]
      # 装備可能なら通常文字色に、不可能なら無効文字色に設定
      draw_shadow_text([4, stt + 64 * i], transfer(actor.name), normal_color, 
                       0, actor.equippable?(@item))
      # 現在の装備品を取得
      if @item.is_a?(RPG::Weapon)
        item1 = $data_weapons[actor.weapon_id]
      elsif @item.kind == 0
        item1 = actor.armors_weapon[0] ? $data_weapons[actor.armor1_id] : $data_armors[actor.armor1_id]
      elsif @item.kind == 1
        item1 = actor.armors_weapon[1] ? $data_weapons[actor.armor2_id] : $data_armors[actor.armor2_id]
      elsif @item.kind == 2
if $OuterFlgs["Equip_Extend"]
        if @item.guard_element_set.include?(Equip_Extend::INNER_ARM)
          item1 = actor.armors_weapon[5] ? $data_weapons[actor.armor6_id] : $data_armors[actor.armor6_id]
        else
          item1 = actor.armors_weapon[2] ? $data_weapons[actor.armor3_id] : $data_armors[actor.armor3_id]
        end
else # 元の処理
        item1 = $data_armors[actor.armor3_id]
end # $OuterFlgs["Equip_Extend"]
      else
if $OuterFlgs["Equip_Extend"]
        if @item.guard_element_set.include?(Equip_Extend::EXTRA_ACC) &&
          !@item.guard_element_set.include?(Equip_Extend::BOOTS_ACC)
          item1 = actor.armors_weapon[6] ? $data_weapons[actor.armor7_id] : $data_armors[actor.armor7_id]
        elsif @item.guard_element_set.include?(Equip_Extend::BOOTS_ACC)
          item1 = actor.armors_weapon[7] ? $data_weapons[actor.armor8_id] : $data_armors[actor.armor8_id]
        else
          item1 = actor.armors_weapon[3] ? $data_weapons[actor.armor4_id] : $data_armors[actor.armor4_id]
        end
else # 元の処理
        item1 = $data_armors[actor.armor4_id]
end # $OuterFlgs["Equip_Extend"]
      end
      # 装備可能な場合
      if actor.equippable?(@item)
        # 武器の場合
        if @item.is_a?(RPG::Weapon)
          atk1 = item1 != nil ? item1.atk : 0
          atk2 = @item != nil ? @item.atk : 0
          change = atk2 - atk1
        end
        # 防具の場合
        if @item.is_a?(RPG::Armor)
          pdef1 = item1 != nil ? item1.pdef : 0
          mdef1 = item1 != nil ? item1.mdef : 0
          pdef2 = @item != nil ? @item.pdef : 0
          mdef2 = @item != nil ? @item.mdef : 0
          change = pdef2 - pdef1 + mdef2 - mdef1
        end
        # パラメータの変化値を描画
        draw_shadow_text([124, stt + 64 * i, 112, 32], sprintf("%+d", change), 
                         normal_color, 2)
      end
      # アイテムを描画
      if item1 != nil
        x = 4
        y = stt + 64 * i + 32
        bitmap = RPG::Cache.icon(item1.icon_name)
        opacity = self.contents.font.color == normal_color ? MAX8BIT : HARF8BIT
        self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        draw_shadow_text([x + 28, y], transfer(item1.name), normal_color, 
                         0, opacity == MAX8BIT ? true : false)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの設定
  #     item : 新しいアイテム
  #--------------------------------------------------------------------------
  def item=(item)
    if @item != item
      @item = item
      refresh
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Shop
#==============================================================================

class Scene_Shop
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias main_KGC_ComposeItem main
  def main
    # 合成画面を呼び出した場合
    if $call_compose
      # 合成画面に移行
      $scene = Scene_ComposeItem.new
      $call_compose = false
    else
      main_KGC_ComposeItem
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Scene_ComposeItem
#------------------------------------------------------------------------------
#  合成画面の処理を行うクラスです。
#==============================================================================

class Scene_ComposeItem
  include BM
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定
  #--------------------------------------------------------------------------
  def set_keyhelp
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.set_bottom_help({
                                  "A"=>"ステータス表示/非表示(装備品時)"})
  end
  
  #--------------------------------------------------------------------------
  # ○ メイン処理
  #--------------------------------------------------------------------------
  def main
    @bottomkeyhelp_window = Window_BottomKeyHelp.new
    set_keyhelp
    # スプライトセットを作成
    #@spriteset = Spriteset_Map.new
    # ヘルプウィンドウを作成
    #if $imported["HelpExtension"]
      @help_window = Window_HelpExtension.new
    #else
      #@help_window = Window_Help.new
    #end
    @help_window.back_opacity = 196
    # ゴールドウィンドウを作成
    @gold_window = Window_Gold.new
    @gold_window.back_opacity = 196
    @gold_window.x = 480
    @gold_window.y = 416
    @gold_window.z = 1500
    @gold_window.visible = !KGC::ICMP_HIDE_GOLD_WINDOW
    # 合成ウィンドウを作成
    @compose_window = Window_ComposeItem.new($game_temp.shop_goods)
    @compose_window.back_opacity = 196
    @compose_window.activate
    @compose_window.show
    @compose_window.help_window = @help_window
    # 個数入力ウィンドウを作成
    @number_window = Window_ComposeItemNumber.new
    @number_window.back_opacity = 196
    @number_window.y = @compose_window.y
    @number_window.height = @compose_window.height
    @number_window.deactivate
    @number_window.hide
    # アイテム情報ウィンドウを作成
    @iteminfo_window = Window_ComposeItemInfo.new
    @iteminfo_window.back_opacity = 196
    @iteminfo_window.show
    # ステータスウィンドウを作成
    #@status_window = Window_ShopStatus.new
    @status_window = Window_ShopStatus2.new
    @status_window.x = @iteminfo_window.x
    @status_window.y = @iteminfo_window.y - 4
    @status_window.z = @iteminfo_window.z
    @status_window.height = @iteminfo_window.height
    @status_window.back_opacity = 196
    @status_window.hide

    @status_mode = false
    # トランジション実行
    Graphics.transition
    # メインループ
    loop {
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    }
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @gold_window.dispose
    @compose_window.dispose
    @number_window.dispose
    @iteminfo_window.dispose
    @status_window.dispose
    #@spriteset.dispose
    @bottomkeyhelp_window.dispose
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @help_window.update
    #if KGC::ICMP_HIDE_GOLD_WINDOW == true
      @gold_window.update
    #end
    @compose_window.update
    @number_window.update
    @iteminfo_window.update
    @status_window.update
    # 切り替えボタンが押されたら情報切り替え
    if Input.trigger?(KGC::ICMP_SWITCH_INFO_BUTTON)
      # 決定 SE を演奏
      Sound.play_ok
      # モード切替
      @status_mode = !@status_mode
      switch_info_window
    end
    # 合成ウィンドウがアクティブの場合: update_compose を呼ぶ
    if @compose_window.active
      update_compose
      return
    end
    # 個数入力ウィンドウがアクティブの場合: update_number を呼ぶ
    if @number_window.active
      update_number
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ 情報ウィンドウ切り替え
  #--------------------------------------------------------------------------
  def switch_info_window
    item = @compose_window.item
    if @status_mode && (item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor))
      @iteminfo_window.hide
      @status_window.show
    else
      @iteminfo_window.show
      @status_window.hide
      @status_mode = false
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (合成ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_compose
    # 各種ウィンドウのアイテムを設定
    selected_item = @compose_window.item
    @iteminfo_window.item = selected_item
    @status_window.item = selected_item
    switch_info_window
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムを取得
      @item = @compose_window.item
      # アイテムが無効、または合成不可能な場合
      if @item == nil || !$game_system.composable?(@item)
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # アイテムの所持数を取得
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      # すでに上限まで所持している場合
      max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
      max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
      max_hold = @item.number_limit
end # $imported["LimitBreak"]
      limit = max_hold
      if number >= limit
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # 最大購入可能個数を計算
      max = @compose_window.create_count
      max = [max, limit - number].min
      # 決定 SE を演奏
      Sound.play_ok
      # ウィンドウの状態を個数入力モードへ
      @compose_window.deactivate
      @compose_window.hide
      @number_window.set(@item, max, @compose_window.price)
      @number_window.activate
      @number_window.show
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (個数入力ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_number
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # 個数入力ウィンドウを非アクティブ・不可視に設定
      @number_window.deactivate
      @number_window.hide
      # ウィンドウの状態を合成モードへ
      @compose_window.activate
      @compose_window.show
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # ショップ SE を演奏
      Sound.play_shop
      # 個数入力ウィンドウを非アクティブ・不可視に設定
      @number_window.deactivate
      @number_window.hide
      # 個数分繰り返す
      for i in 0...@number_window.number
        # 金を減らす
        $game_party.lose_gold(@compose_window.price)
        # 合成素材を減らす
        recipe = $game_system.compose_recipe(@item)
        recipe.shift
        recipe.each { |r|
          case r[0].upcase
          when "I"
            $game_party.lose_item(r[1], r[2])
          when "W"
            $game_party.lose_weapon(r[1], r[2])
          when "A"
            $game_party.lose_armor(r[1], r[2])
          end
        }
        # アイテム入手
        case @item
        when RPG::Item
          $game_party.gain_item(@item.id, 1)
        when RPG::Weapon
          $game_party.gain_weapon(@item.id, 1)
        when RPG::Armor
          $game_party.gain_armor(@item.id, 1)
        end
      end
      # 各ウィンドウをリフレッシュ
      #if KGC::ICMP_HIDE_GOLD_WINDOW == true
        @gold_window.refresh
      #end
      @compose_window.refresh
      @iteminfo_window.refresh
      # 個数入力ウィンドウを非アクティブ・不可視に設定
      @number_window.deactivate
      @number_window.hide
      # ウィンドウの状態を合成モードへ
      @compose_window.activate
      @compose_window.show
      return
    end
  end
end
カスタマイズポイント解説(・・・言わなくても分かるような・・・) 薄赤色にてアイテム合成用の設定

戻る