장비

카드 슬롯 장비 스크립트[수정]

by 빙하 posted Nov 11, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

아이미르님의 카드 슬롯 장비 스크립트





#==============================================================================
# RGSS2_카드 슬롯 장비 Ver0. 12
# tomoaky (http://hikimoki.web.infoseek.co.jp/)
#
# 2011/02/08 Ver0. 12
# ·조건 분기:엑터의 장비품 판정에 대응
# ·숍에서의 장비품 소지수가 올바르게 표시되지 않는 불편을 수정
# ·일부 윈도우의 거동을 변경
#
# 2010/04/16  Ver0. 11
# 2010/03/25  Ver0. 1 공개
#
# RPG 트크르 VX에 이하의 기능을 추가하는 스크립트 소재입니다
# ·동종의 장비품을 개개에 관리하는 사양으로 변경
# ·강화 아이템에 의한 장비품 강화
# ·카드에 의한 장비품 커스터마이즈
# ·장비 중량에 의한 민첩성과 회피율의 보정
#
# 또 , 이하의 제한이 더해집니다
# ·장비품의 소지수취득이나 증감에 있어서의 「장비품도 포함한다」가 무효
# ·무기(방어용 기구)의 증감 커맨드에서는 전에 있는 것으로부터 순서로 줄인다
#
# 다른 스크립트와의 병용을 고려하지 않는 만들기가 되어 있습니다,
# 경합에 의한 불편은 포기할까 자력으로 수정해 주세요.
#
# 자세한 사용법등은 사이트의 해설 페이지를 참조해 주세요.
#==============================================================================

$include_tiex = true

#==============================================================================
# ■ 設定項目
#==============================================================================
module TIEX
  # 속성 아이콘 인덱스(속성 ID 순서에 칸마로 단락지어 늘어놓는 , 선두는 nil)
  ELEMENT_ICON = [
    nil , 132, 2, 4, 14, 16, 12, 20, 135,
    104, 105, 106, 107, 108, 109, 110, 111
  ]
  # 빈카드 슬롯 아이콘 인덱스
  ICON_CARD_SLOT = 240
  
  # 직업마다의 최대 적재량(직업 ID 순서에 칸마로 단락지어 늘어놓는 , 선두는 nil)
  JOB_WEIGHT_MAX = [
    nil , 100, 100, 100, 100, 100, 100, 100, 100
  ]
end

module Vocab
  def self.hit            # 命中率パラメータの名前(メモ欄には影響しません)
    return "명중율"
  end
  def self.eva            # 回避率パラメータの名前(メモ欄には影響しません)
    return "회피율"
  end
  def self.cri            # クリティカルパラメータの名前(メモ欄には影響しません)
    return "치명타"
  end
end

module Sound
  def self.play_item_power_up
    Audio.se_play("Audio/SE/Saint9", 80, 100)
  end
  def self.play_item_break
    Audio.se_play("Audio/SE/Crash", 80, 100)
  end
  def self.play_item_garbage
    Audio.se_play("Audio/SE/Crash", 80, 100)
  end
end

#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :item_check_number        # 装備品の個体識別ナンバーカウンタ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias tiex_game_system_initialize initialize
  def initialize
    tiex_game_system_initialize
    @item_check_number = 0
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :weapon                   # 武器 ID
  attr_reader   :armor1                   # 盾 ID
  attr_reader   :armor2                   # 頭防具 ID
  attr_reader   :armor3                   # 体防具 ID
  attr_reader   :armor4                   # 装飾品 ID
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     actor_id : アクター ID
  #--------------------------------------------------------------------------
  alias tiex_game_actor_setup setup
  def setup(actor_id)
    tiex_game_actor_setup(actor_id)
    @weapon = WeaponEx.new(actor.weapon_id) if actor.weapon_id > 0
    if actor.armor1_id > 0
      @armor1 = two_swords_style ? WeaponEx.new(actor.armor1_id) : ArmorEx.new(actor.armor1_id)
    end
    @armor2 = ArmorEx.new(actor.armor2_id) if actor.armor2_id > 0
    @armor3 = ArmorEx.new(actor.armor3_id) if actor.armor3_id > 0
    @armor4 = ArmorEx.new(actor.armor4_id) if actor.armor4_id > 0
  end
  #--------------------------------------------------------------------------
  # ● 武器オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def weapons
    result = []
    result.push(@weapon)
    result.push(@armor1) if two_swords_style
    return result
  end
  #--------------------------------------------------------------------------
  # ● 防具オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def armors
    result = []
    result.push(@armor1) unless two_swords_style
    result.push(@armor2)
    result.push(@armor3)
    result.push(@armor4)
    return result
  end
  #--------------------------------------------------------------------------
  # ● 기본 민첩성의 취득
  #--------------------------------------------------------------------------
  alias tiex_game_actor_base_agi base_agi
  def base_agi
    return 0 if over_weight?    # 重量過多なら0を返す
    return tiex_game_actor_base_agi
  end
  #--------------------------------------------------------------------------
  # ● 명중율의 취득
  #--------------------------------------------------------------------------
  alias tiex_game_actor_hit hit
  def hit
    n = tiex_game_actor_hit
    for item in armors.compact do n += item.hit end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 회피율의 취득
  #--------------------------------------------------------------------------
  alias tiex_game_actor_eva eva
  def eva
    return 0 if over_weight?    # 重量過多なら0を返す
    n = tiex_game_actor_eva
    for item in weapons.compact do n += item.eva end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 치명타 비율의 취득
  #--------------------------------------------------------------------------
  alias tiex_game_actor_cri cri
  def cri
    n = tiex_game_actor_cri
    for item in equips.compact do n += item.cri end
    return n
  end
  #--------------------------------------------------------------------------
  # ○ 장비 중량의 취득
  #--------------------------------------------------------------------------
  def weight
    n = 0
    for item in equips.compact do n += item.weight end
    return n
  end
  #--------------------------------------------------------------------------
  # ○ 중량 과다 상태의 취득
  #--------------------------------------------------------------------------
  def over_weight?
    return (weight > TIEX::JOB_WEIGHT_MAX[@class_id])
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更 (ID で指定)
  #     equip_type : 装備部位 (0..4)
  #     item_id    : 武器 ID or 防具 ID
  #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  #    イベントコマンド、および戦闘テストの準備で使用する。
  #--------------------------------------------------------------------------
  def change_equip_by_id(equip_type, item_id, test = false)
    if equip_type == 0 or (equip_type == 1 and two_swords_style)
      change_equip(equip_type, WeaponEx.new(item_id), test)
    else
      change_equip(equip_type, ArmorEx.new(item_id), test)
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更 (オブジェクトで指定)
  #     equip_type : 装備部位 (0..4)
  #     item       : 武器 or 防具 (nil なら装備解除)
  #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  #--------------------------------------------------------------------------
  def change_equip(equip_type, item, test = false)
    last_item = equips[equip_type]
    unless test
      return if $game_party.item_number(item) == 0 if item != nil
      $game_party.gain_item(last_item, 1)
      if item.is_a?(WeaponEx)
        $game_party.weapons = $game_party.weapons - [item]
      elsif item.is_a?(ArmorEx)
        $game_party.armors = $game_party.armors - [item]
      end
    end
    case equip_type
    when 0  # 무기
      @weapon = item
      change_equip(1, nil, test) unless two_hands_legal? # 両手持ち違反
    when 1  # 방패
      @armor1 = item
      change_equip(0, nil, test) unless two_hands_legal? # 両手持ち違反
    when 2  # 머리
      @armor2 = item
    when 3  # 신체
      @armor3 = item
    when 4  # 장식품
      @armor4 = item
    end
  end
  #--------------------------------------------------------------------------
  # ● 양손 장비 합법 판정
  #--------------------------------------------------------------------------
  def two_hands_legal?
    if weapons[0] != nil and weapons[0].two_handed
      return false if @armor1 != nil
    end
    if weapons[1] != nil and weapons[1].two_handed
      return false if @weapon != nil
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 장비 가능 판정
  #     item : アイテム
  #--------------------------------------------------------------------------
  def equippable?(item)
    if item.is_a?(RPG::Weapon) or item.is_a?(WeaponEx)
      return self.class.weapon_set.include?(item.id)
    elsif item.is_a?(RPG::Armor) or item.is_a?(ArmorEx)
      return false if two_swords_style and item.kind == 0
      return self.class.armor_set.include?(item.id)
    end
    return false
  end
end

#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :weapons                  # 所持品配列(武器)
  attr_accessor :armors                   # 所持品配列(防具)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias tiex_game_party_initialize initialize
  def initialize
    tiex_game_party_initialize
    @weapons = []     # 所持品配列 (武器Exオブジェクト)
    @armors  = []     # 所持品配列 (防具Exオブジェクト)
  end
  #--------------------------------------------------------------------------
  # ● アイテムオブジェクトの配列取得 (武器と防具を含む)
  #--------------------------------------------------------------------------
  def items
    result = []
    for i in @items.keys.sort
      result.push($data_items[i]) if @items[i] > 0
    end
    for item in @weapons
      result.push(item)
    end
    for item in @armors
      result.push(item)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 소지수취득
  #     item : アイテム
  #--------------------------------------------------------------------------
  def item_number(item)
    case item
    when RPG::Item
      number = @items[item.id]
    when WeaponEx, RPG::Weapon
      number = 0
      for weapon in @weapons
        number += 1 if item.id == weapon.id
      end
    when ArmorEx, RPG::Armor
      number = 0
      for armor in @armors
        number += 1 if item.id == armor.id
      end
    end
    return number == nil ? 0 : number
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 소지 판정
  #     item          : アイテム
  #     include_equip : 装備品も含める(未実装)
  #--------------------------------------------------------------------------
  def has_item?(item, include_equip = false)
    return true if item_number(item) > 0
    return false
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 증가 (감소)
  #     item          : アイテム
  #     n             : 個数
  #     include_equip : 装備品も含める(未実装)
  #--------------------------------------------------------------------------
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number + n, 0].max, 99].min
    when WeaponEx
      if n > 0
        @weapons.push(item)
      elsif n < 0
        for i in 0...@weapons.size
          if @weapons[i].id == item.id
            @weapons[i] = nil
            n += 1
          end
          break if n == 0
        end
        @weapons.compact!
      end
    when ArmorEx
      if n > 0
        @armors.push(item)
      elsif n < 0
        for i in 0...@armors.size
          if @armors[i].id == item.id
            @armors[i] = nil
            n += 1
          end
          break if n == 0
        end
        @armors.compact!
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ アイテムの並び替え
  #--------------------------------------------------------------------------
  def sort_item
    unless @weapons.empty?
      @weapons.sort! do |a, b|
        a.id <=> b.id
      end
    end
    unless @armors.empty?
      @armors.sort! do |a, b|
        a.id <=> b.id
      end
    end
  end
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 조건분기
  #--------------------------------------------------------------------------
  alias tiex_game_interpreter_command_111 command_111
  def command_111
    result = false
    if @params[0] == 4  # 엑터
      actor = $game_actors[@params[1]]
      if actor != nil
        case @params[2]
        when 0  # 파티에 있다
          result = ($game_party.members.include?(actor))
        when 1  # 이름
          result = (actor.name == @params[3])
        when 2  # 스킬
          result = (actor.skill_learn?($data_skills[@params[3]]))
        when 3  # 무기
          for item in actor.weapons
            result = true if item.id == @params[3]
          end
        when 4  # 갑옷
          for item in actor.armors
            result = true if item.id == @params[3]
          end
        when 5  # 상태
          result = (actor.state?(@params[3]))
        end
        @branch[@indent] = result     # 判定結果をハッシュに格納
        if @branch[@indent] == true
          @branch.delete(@indent)
          return true
        end
        return command_skip
      end
    end
    tiex_game_interpreter_command_111
  end
  #--------------------------------------------------------------------------
  # ● 무기의 증감
  #--------------------------------------------------------------------------
  def command_127
    value = operate_value(@params[1], @params[2], @params[3])
    if value > 0
      for i in 0...value
        $game_party.gain_item(WeaponEx.new(@params[0]), 1, @params[4])
      end
    else
      $game_party.gain_item(WeaponEx.new(@params[0]), value, @params[4])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 갑옷의 증감
  #--------------------------------------------------------------------------
  def command_128
    value = operate_value(@params[1], @params[2], @params[3])
    if value > 0
      for i in 0...value
        $game_party.gain_item(ArmorEx.new(@params[0]), 1, @params[4])
      end
    else
      $game_party.gain_item(ArmorEx.new(@params[0]), value, @params[4])
    end
    return true
  end
end

#==============================================================================
# ■ Window_Item
#==============================================================================
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 오브젝트의 초기화
  #     x      : 윈도우의 X좌표
  #     y      : 윈도우의 Y좌표
  #     width  : 윈도우의 폭
  #     height : 윈도우의 높이
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    if (width == 544 and height == 360)
      super(x, y, width, 208, 0)
      @column_max = 16
    elsif self.is_a?(Window_ShopSell)
      super(x, y, width, 152, 0)
      @column_max = 16
    else
      super(x, y, width, height)
      @column_max = 2
    end
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ(素材の使用先選択中)
  #--------------------------------------------------------------------------
  def refresh_material(material)
    @material = material
    @data = []
    for item in $game_party.items
      next if item.is_a?(RPG::Item)
      @data.push(item)
    end
    self.index = 0
    @data.push(nil) if include?(nil)
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
    @material = nil
  end
  #--------------------------------------------------------------------------
  # ○ 리 프 레 시(버리는 아이템 선택중)
  #--------------------------------------------------------------------------
  def refresh_garbage(garbage)
    @garbage = garbage
    @data = [@garbage]
    self.index = 0
    @data.push(nil) if include?(nil)
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
    @garbage = nil
  end
  #--------------------------------------------------------------------------
  # ● 항목의 묘화
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      number = $game_party.item_number(item)
      if @garbage != nil
        enabled = true
      elsif @material == nil
        enabled = enable?(item)
      else
        enabled = item.material_can_use?(@material)
      end
      rect.width -= 4
      if @column_max == 16    # 아이콘 모드라면 아이콘만 표기
        draw_icon(item.icon_index, rect.x + 4, rect.y, enabled)
        if item.is_a?(RPG::Item)  # 아이템만 개수 표기
          self.contents.font.size = 12
          rect.y += 4
          self.contents.draw_text(rect, number, 2)
        end
      else                    # 통상 모드라면 아이템명을 표기
        draw_item_name(item, rect.x, rect.y, enabled)
        if item.is_a?(RPG::Item)  # 아이템만 개수 표기
          self.contents.draw_text(rect, sprintf(":%2d", number), 2)
        end
      end
    end
  end
end

#==============================================================================
# ■ Window_ItemStatus
#==============================================================================
class Window_ItemStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 264, 544, 152)
    @item = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update(item)
    super()
    if @item != item
      @item = item
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    return if @item == nil
    self.contents.font.size = Font.default_size
    draw_icon(@item.icon_index, 0, 0, true)
    self.contents.draw_text(24, 0, 288, WLH, @item.name)
    self.contents.draw_text(4,   WLH * 1, 504, WLH, @item.description)
    unless @item.is_a?(RPG::Item)     # アイテム以外の場合
      rect = self.contents.text_size(@item.name)
      for i in 0...@item.slot_max
        draw_icon(TIEX::ICON_CARD_SLOT, rect.width + i * 24 + 32, 0, true)
        if i < @item.slot.size
          icon_index = $data_items[@item.slot[i]].icon_index
          draw_icon(icon_index, rect.width + i * 24 + 32, 0, true)
        end
      end
      self.contents.font.size = 16
      self.contents.font.color = system_color
      self.contents.draw_text(4,   WLH * 2, 48, WLH, "장비레벨")
      self.contents.draw_text(106, WLH * 2, 48, WLH, Vocab::atk)
      self.contents.draw_text(208, WLH * 2, 48, WLH, Vocab::def)
      self.contents.draw_text(310, WLH * 2, 48, WLH, Vocab::spi)
      self.contents.draw_text(412, WLH * 2, 48, WLH, Vocab::agi)
      self.contents.draw_text(4,   WLH * 3, 48, WLH, "내구도")
      self.contents.draw_text(106, WLH * 3, 48, WLH, "명중율")
      self.contents.draw_text(208, WLH * 3, 48, WLH, "회피율")
      self.contents.draw_text(310, WLH * 3, 48, WLH, "치명타")
      self.contents.draw_text(412, WLH * 3, 48, WLH, "중량")
      if @item.is_a?(WeaponEx)
        self.contents.draw_text(4,   WLH * 4, 96, WLH, "속성")
        self.contents.draw_text(256, WLH * 4, 96, WLH, "부가")
      else
        self.contents.draw_text(4,   WLH * 4, 96, WLH, "반감")
        self.contents.draw_text(256, WLH * 4, 96, WLH, "방지")
      end
      self.contents.font.size = Font.default_size
      self.contents.font.color = normal_color
      self.contents.draw_text(52,   WLH * 2, 46, WLH, @item.level, 2)
      self.contents.draw_text(154, WLH * 2, 46, WLH, @item.atk, 2)
      self.contents.draw_text(256, WLH * 2, 46, WLH, @item.def, 2)
      self.contents.draw_text(358, WLH * 2, 46, WLH, @item.spi, 2)
      self.contents.draw_text(460, WLH * 2, 46, WLH, @item.agi, 2)
      self.contents.draw_text(52,   WLH * 3, 46, WLH, @item.durability, 2)
      self.contents.draw_text(154, WLH * 3, 46, WLH, @item.hit, 2)
      self.contents.draw_text(256, WLH * 3, 46, WLH, @item.eva, 2)
      self.contents.draw_text(358, WLH * 3, 46, WLH, @item.cri, 2)
      self.contents.draw_text(460, WLH * 3, 46, WLH, @item.weight, 2)
      x = 56
      for id in @item.element_set
        draw_icon(TIEX::ELEMENT_ICON[id], x, WLH * 4, true)
        x += 24
      end 
      x = 312
      for id in @item.state_set
        draw_icon($data_states[id].icon_index, x, WLH * 4, true)
        x += 24
      end 
    end
  end
end

#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_Item
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @column_max = 1
    super
  end
  #--------------------------------------------------------------------------
  # ● アイテムをリストに含めるかどうか
  #     item : アイテム
  #--------------------------------------------------------------------------
  def include?(item)
    return true if item == nil
    if @equip_type == 0
      return false unless item.is_a?(WeaponEx)
    else
      return false unless item.is_a?(ArmorEx)
      return false unless item.kind == @equip_type - 1
    end
    return @actor.equippable?(item)
  end
end

#==============================================================================
# ■ Window_EquipStatus
#==============================================================================
class Window_EquipStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, 208, 360)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    for i in 0..6
      draw_parameter(0, WLH * (i + 1), i)
    end
    # 重量の表示
    x, y = 0, WLH * (8 + 1)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 4, y, 80, WLH, "중량")
    self.contents.font.color = @actor.over_weight? ? knockout_color : normal_color
    self.contents.draw_text(x + 90, y, 30, WLH, @actor.weight, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 122, y, 20, WLH, "→", 1)
    if @new_weight != nil
      if @new_weight > TIEX::JOB_WEIGHT_MAX[@actor.class_id]
        self.contents.font.color = knockout_color
      else
        self.contents.font.color = normal_color
      end
      self.contents.draw_text(x + 142, y, 30, WLH, @new_weight, 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備変更後の能力値設定
  #     temp_actor : 装備変更後のダミーアクター
  #--------------------------------------------------------------------------
  def set_new_parameters(new_atk, new_def, new_spi, new_agi, new_hit,
      new_eva, new_cri, new_weight)
    if @new_atk != new_atk or @new_def != new_def or @new_spi != new_spi or
       @new_agi != new_agi or @new_hit != new_hit or @new_eva != new_eva or
       @new_cri != new_cri or @new_weight != new_weight
      @new_atk = new_atk
      @new_def = new_def
      @new_spi = new_spi
      @new_agi = new_agi
      @new_hit = new_hit
      @new_eva = new_eva
      @new_cri = new_cri
      @new_weight = new_weight
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● 능력치의 묘화
  #     x    : 描画先 X 座標
  #     y    : 描画先 Y 座標
  #     type : 能力値の種類 (0~3)
  #--------------------------------------------------------------------------
  def draw_parameter(x, y, type)
    case type
    when 0
      name = Vocab::atk
      value = @actor.atk
      new_value = @new_atk
    when 1
      name = Vocab::def
      value = @actor.def
      new_value = @new_def
    when 2
      name = Vocab::spi
      value = @actor.spi
      new_value = @new_spi
    when 3
      name = Vocab::agi
      value = @actor.agi
      new_value = @new_agi
    when 4
      name = Vocab::hit
      value = @actor.hit
      new_value = @new_hit
    when 5
      name = Vocab::eva
      value = @actor.eva
      new_value = @new_eva
    when 6
      name = Vocab::cri
      value = @actor.cri
      new_value = @new_cri
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x + 4, y, 80, WLH, name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 90, y, 30, WLH, value, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 122, y, 20, WLH, "→", 1)
    if new_value != nil
      self.contents.font.color = new_parameter_color(value, new_value)
      self.contents.draw_text(x + 142, y, 30, WLH, new_value, 2)
    end
  end
end

#==============================================================================
# ■ Window_Status
#==============================================================================
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # ● 능력치의 묘화
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     type  : 能力値の種類 (0~3)
  #--------------------------------------------------------------------------
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      parameter_name = Vocab::atk
      parameter_value = actor.atk
    when 1
      parameter_name = Vocab::def
      parameter_value = actor.def
    when 2
      parameter_name = Vocab::spi
      parameter_value = actor.spi
    when 3
      parameter_name = Vocab::agi
      parameter_value = actor.agi
    when 4
      parameter_name = Vocab::hit
      parameter_value = actor.hit
    when 5
      parameter_name = Vocab::eva
      parameter_value = actor.eva
    when 6
      parameter_name = Vocab::cri
      parameter_value = actor.cri
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, WLH, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 120, y, 36, WLH, parameter_value, 2)
  end
  #--------------------------------------------------------------------------
  # ● 능력치의 묘화
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_parameters(x, y)
    for i in 0..6
      draw_actor_parameter(@actor, x, y + WLH * i, i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備品の描画
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  alias tiex_window_status_draw_equipments draw_equipments
  def draw_equipments(x, y)
    tiex_window_status_draw_equipments(x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y + 168, 120, WLH, "중량")
    self.contents.font.color = @actor.over_weight? ? knockout_color : normal_color
    self.contents.draw_text(x + 64, y + 168, 52, WLH, @actor.weight, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 116, y + 168, 24, WLH, "/", 1)
    self.contents.draw_text(x + 140, y + 168, 52, WLH, TIEX::JOB_WEIGHT_MAX[@actor.class_id], 2)
  end
end

#==============================================================================
# ■ Window_ShopSell
#==============================================================================
class Window_ShopSell < Window_Item
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(item == nil ? "" : item.name)
  end
end

#==============================================================================
# ■ Window_ShopStatus
#==============================================================================
class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● アクターの現装備と能力値変化の描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_actor_parameter_change(actor, x, y)
    return if @item.is_a?(RPG::Item)
    enabled = actor.equippable?(@item)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(x, y, 200, WLH, actor.name)
    if @item.is_a?(RPG::Weapon) or @item.is_a?(WeaponEx)
      item1 = weaker_weapon(actor)
    elsif actor.two_swords_style and @item.kind == 0
      item1 = nil
    else
      item1 = actor.equips[1 + @item.kind]
    end
    if enabled
      if @item.is_a?(RPG::Weapon) or @item.is_a?(WeaponEx)
        atk1 = item1 == nil ? 0 : item1.atk
        atk2 = @item == nil ? 0 : @item.atk
        change = atk2 - atk1
      else
        def1 = item1 == nil ? 0 : item1.def
        def2 = @item == nil ? 0 : @item.def
        change = def2 - def1
      end
      self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
    end
    draw_item_name(item1, x, y + WLH, enabled)
  end
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias tiex_scene_item_start start
  def start
    @status_window = Window_ItemStatus.new
    tiex_scene_item_start
    @item_window.help_window = nil
    @help_window.set_text("Z,Enter … 사용 / X,Esc … 취소 / Shift … 정돈 / A … 파기")
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias tiex_scene_item_terminate terminate
  def terminate
    @status_window.dispose
    tiex_scene_item_terminate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @help_window.update
    @item_window.update
    @target_window.update
    @status_window.update(@item_window.item)
    if @material != nil
      update_material_selection
    elsif @garbage != nil
      update_garbage_selection
    elsif @item_window.active
      update_item_selection
    elsif @target_window.active
      update_target_selection
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテム選択の更新
  #--------------------------------------------------------------------------
  alias tiex_scene_item_update_item_selection update_item_selection
  def update_item_selection
    if Input.trigger?(Input::X)   # アイテムを捨てる
      if @item_window.item == nil
        Sound.play_buzzer
      elsif @item_window.item.price == 0  # 귀중품은 버리지 못한다
        Sound.play_buzzer
      else
        Sound.play_decision
        @garbage = @item_window.item
        @item_window.refresh_garbage(@garbage)
        @help_window.set_text("Z,Enter … 파기한다 / X,Esc … 취소한다")
      end
    elsif Input.trigger?(Input::A) # 武器と防具を整頓する
      Sound.play_equip
      $game_party.sort_item
      @item_window.refresh
    else
      tiex_scene_item_update_item_selection
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの使用 (味方対象以外の使用効果を適用)
  #--------------------------------------------------------------------------
  alias tiex_scene_item_use_item_nontarget use_item_nontarget
  def use_item_nontarget
    if @item.material?
      @material = @item
      @item_window.refresh_material(@material)
      @help_window.set_text(sprintf("Z,Enter … %s 사용 / X,Esc … 취소", @material.name))
    else
      tiex_scene_item_use_item_nontarget
    end
  end
  #--------------------------------------------------------------------------
  # ● 素材適用アイテム選択の更新
  #--------------------------------------------------------------------------
  def update_material_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @material = nil
      @item_window.refresh
      @help_window.set_text("Z,Enter … 사용 / X,Esc … 취소 / Shift … 정돈 / A … 파기")
    elsif Input.trigger?(Input::C)
      @item = @item_window.item
      if @item == nil or @item.is_a?(RPG::Item)
        Sound.play_buzzer
        return
      end
      result = @item.material_can_use?(@material) # 素材が適用できるかどうか
      if result
        if @material.card_material? >= 0  # 소재가 카드일때
          @item.card_set(@material)
          Sound.play_item_power_up
        else                              # 소재가 강화 아이템일때
          if @item.power_up   # 강화 성공시
            Sound.play_item_power_up
          else                # 강화 실패시
            if @item.is_a?(WeaponEx)
              $game_party.weapons = $game_party.weapons - [@item]
            elsif @item.is_a?(ArmorEx)
              $game_party.armors = $game_party.armors - [@item]
            end
            Sound.play_item_break
          end
        end
        $game_party.consume_item(@material)   # 사용한 소재는 소비한다
        @material = nil
        @item_window.refresh
        @help_window.set_text("Z,Enter … 사용 / X,Esc … 취소 / Shift … 정돈 / A … 파기")
      else
        Sound.play_buzzer
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 捨てるアイテム選択の更新
  #--------------------------------------------------------------------------
  def update_garbage_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @garbage = nil
      @item_window.refresh
      @help_window.set_text("Z,Enter … 사용 / X,Esc … 취소 / Shift … 정돈 / A … 파기")
    elsif Input.trigger?(Input::C)
      Sound.play_item_garbage
      if @garbage.is_a?(RPG::Item)
        $game_party.lose_item(@garbage, 99)
      elsif @garbage.is_a?(WeaponEx)
        $game_party.weapons = $game_party.weapons - [@garbage]
      elsif @garbage.is_a?(ArmorEx)
        $game_party.armors = $game_party.armors - [@garbage]
      end
      @garbage = nil
      @item_window.refresh
      @help_window.set_text("Z,Enter … 사용 / X,Esc … 취소 / Shift … 정돈 / A … 파기")
    end
  end
  #--------------------------------------------------------------------------
  # ● ターゲットウィンドウの表示
  #     right : 오른쪽 정렬 (false 라면 왼쪽 정렬)
  #--------------------------------------------------------------------------
  alias tiex_scene_item_show_target_window show_target_window
  def show_target_window(right)
    tiex_scene_item_show_target_window(true)
    @status_window.close
  end
  #--------------------------------------------------------------------------
  # ● ターゲットウィンドウの非表示
  #--------------------------------------------------------------------------
  alias tiex_scene_item_hide_target_window hide_target_window
  def hide_target_window
    tiex_scene_item_hide_target_window
    @status_window.open
  end
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias tiex_scene_equip_start start
  def start
    tiex_scene_equip_start
    @item_status_window = Window_ItemStatus.new
    @item_status_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias tiex_scene_equip_terminate terminate
  def terminate
    @item_status_window.dispose
    tiex_scene_equip_terminate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias tiex_scene_equip_update update
  def update
    tiex_scene_equip_update
    if Input.trigger?(Input::A)
      if @item_status_window.visible
        Sound.play_cancel
        @item_status_window.visible = false
      else
        Sound.play_decision
        @item_status_window.visible = true
      end
    end
    if @equip_window.active
      @item_status_window.update(@equip_window.item)
      @item_status_window.y = 236
    elsif @item_window.active
      @item_status_window.update(@item_window.item)
      @item_status_window.y = 56
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_windows
    @item_windows = []
    for i in 0...EQUIP_TYPE_MAX
      @item_windows[i] = Window_EquipItem.new(208, 208, 336, 208, @actor, i)
      @item_windows[i].help_window = @help_window
      @item_windows[i].visible = (@equip_index == i)
      @item_windows[i].y = 208
      @item_windows[i].height = 208
      @item_windows[i].active = false
      @item_windows[i].index = -1
    end
  end
  #--------------------------------------------------------------------------
  # ● ステータスウィンドウの更新
  #--------------------------------------------------------------------------
  def update_status_window
    if @equip_window.active
      @status_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil, nil)
    elsif @item_window.active
      temp_actor = @actor.clone
      temp_actor.change_equip(@equip_window.index, @item_window.item, true)
      new_atk = temp_actor.atk
      new_def = temp_actor.def
      new_spi = temp_actor.spi
      new_agi = temp_actor.agi
      new_hit = temp_actor.hit
      new_eva = temp_actor.eva
      new_cri = temp_actor.cri
      new_weight = temp_actor.weight
      @status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi,
        new_hit, new_eva, new_cri, new_weight)
    end
    @status_window.update
  end
end

#==============================================================================
# ■ Scene_Shop
#==============================================================================
class Scene_Shop < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias tiex_scene_shop_start start
  def start
    tiex_scene_shop_start
    @item_status_window = Window_ItemStatus.new
    @item_status_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias tiex_scene_shop_terminate terminate
  def terminate
    @item_status_window.dispose
    tiex_scene_shop_terminate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias tiex_scene_shop_update update
  def update
    tiex_scene_shop_update
    @item_status_window.visible = @sell_window.active
  end
  #--------------------------------------------------------------------------
  # ● 売却アイテム選択の更新
  #--------------------------------------------------------------------------
  def update_sell_selection
    @item_status_window.update(@sell_window.item)
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
    elsif Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      if @item == nil or @item.price == 0
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_party.item_number(@item)
        @sell_window.active = false
        @sell_window.visible = false
        if @item.is_a?(RPG::Item)
          @number_window.set(@item, max, @item.price / 2)
        else
          @number_window.set(@item, 1, @item.price / 2)
        end
        @number_window.active = true
        @number_window.visible = true
        @status_window.visible = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 個数入力の決定
  #--------------------------------------------------------------------------
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # 구입한다
      $game_party.lose_gold(@number_window.number * @item.price)
      if @item.is_a?(RPG::Item)
        $game_party.gain_item(@item, @number_window.number)
      else
        for i in 0...@number_window.number
          if @item.is_a?(RPG::Weapon)
            $game_party.gain_item(WeaponEx.new(@item.id), 1)
          else
            $game_party.gain_item(ArmorEx.new(@item.id), 1)
          end
        end
      end
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
    when 1  # 매각한다
      $game_party.gain_gold(@number_window.number * (@item.price / 2))
      if @item.is_a?(RPG::Item)
        $game_party.lose_item(@item, @number_window.number)
      else
        if @item.is_a?(WeaponEx)
          $game_party.weapons = $game_party.weapons - [@item]
        elsif @item.is_a?(ArmorEx)
          $game_party.armors = $game_party.armors - [@item]
        end
      end
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end
end

module RPG
class Item < UsableItem
  def material?         # アイテムが素材かどうかを返す
    return true if power_material? >= 0
    return true if card_material? >= 0
    return false
  end
  def power_material?   # アイテムが強化素材なら対象種別を返す
    return 0 if @note =~ /<무기 강화>/
    return 1 if @note =~ /<방패 강화>/
    return 2 if @note =~ /<투구 강화>/
    return 3 if @note =~ /<갑옷 강화>/
    return 4 if @note =~ /<장식품 강화>/
    return -1
  end
  def card_material?    # アイテムがカードなら対象種別を返す
    return 0 if @note =~ /<무기 카드>/
    return 1 if @note =~ /<방패 카드>/
    return 2 if @note =~ /<투구 카드>/
    return 3 if @note =~ /<갑옷 카드>/
    return 4 if @note =~ /<장식품 카드>/
    return -1
  end
  def card_atk    # 카드 공격력 보정치 취득
    return (@note =~ /<공격력\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_def    # 카드 방어력 보정치 취득
    return (@note =~ /<방어력\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_spi    # 카드 정신력 보정치 취득
    return (@note =~ /<정신력\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_agi    # 카드 민첩성 보정치 취득
    return (@note =~ /<민첩성\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_hit    # 카드 명중율 보정치 취득
    return (@note =~ /<명중율\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_eva    # 카드 회피율 보정치 취득
    return (@note =~ /<회피율\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def card_cri    # 카드 치명타 보정치 취득
    return (@note =~ /<치명타\s*\=\s*(\-*\d+)>/i ? $1.to_i : 0)
  end
  def header_name # 카드의 접두어를 취득
    return (@note =~ /<접두어\s*\=\s*(\S+?)>/i ? $1 : "")
  end
end
end

class BaseItemEx
  attr_reader   :level
  attr_reader   :durability
  attr_reader   :weight
  attr_reader   :plus_power
  attr_reader   :slot
  attr_reader   :slot_max
  attr_reader   :note
  def initialize
    # 個体識別ナンバー
    @check_number = $game_system.item_check_number
    $game_system.item_check_number += 1
    # レベル
    @level = note =~ /<레벨\s*\=\s*(\d+)>/i ? $1.to_i : 1
    # 강화치
    @plus_power = 0
    # 랜덤 취득
    @atk = rand(rand(note =~ /<랜덤 공격력\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @def = rand(rand(note =~ /<랜덤 방어력\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @spi = rand(rand(note =~ /<랜덤 정신력\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @agi = rand(rand(note =~ /<랜덤 민첩성\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @hit = rand(rand(note =~ /<랜덤 명중율\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @eva = rand(rand(note =~ /<랜덤 회피율\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    @cri = rand(rand(note =~ /<랜덤 치명타\s*\=\s*(\d+)>/i ? $1.to_i : 0) + 1)
    # 耐久性
    @durability = 100 + rand(rand(101) + 1)
    # スロット
    @slot = []
    @slot_max = note =~ /<슬롯\s*\=\s*(\d+)>/i ? $1.to_i : 0
    # 重量
    @weight = note =~ /<중량\s*\=\s*(\d+)>/i ? $1.to_i : 10
    # メモ
    @note = note
  end
  def id          # IDの取得
    return @original_item.id
  end
  def name        # 名前の取得
    text = @original_item.name
    unless @slot.empty?   # スロットが空でなければカードの接頭語を付加
      dummy_slot = @slot.clone
      while(dummy_slot.size > 0)
        id = dummy_slot.shift
        item = $data_items[id]
        text = sprintf("%s%s", item.header_name, text)
        n = 1
        for i in 0...dummy_slot.size
          if dummy_slot[i] == id
            n += 1
            dummy_slot[i] = nil
          end
        end
        dummy_slot.compact!
        case n
        when 2; text = sprintf("더블 %s", text)
        when 3; text = sprintf("트리플 %s", text)
        when 4; text = sprintf("쿼드러플 %s", text)
        end
      end
    end
    text = sprintf("+%d%s", @plus_power, text) if @plus_power > 0 # 強化値
    return text
  end
  def icon_index  # アイコンインデックスの取得
    return @original_item.icon_index
  end
  def description # 説明の取得
    return @original_item.description
  end
  def note        # メモの取得
    return @original_item.note
  end
  def price       # 価格の取得
    return @original_item.price
  end
  def atk         # 攻撃力の取得
    n = @original_item.atk + @atk
    n += @level * @plus_power if @main_param == "공격력"
    for id in @slot do n += $data_items[id].card_atk end
    return n
  end
  def def         # 防御力の取得
    n = @original_item.def + @def
    n += @level * @plus_power if @main_param == "방어력"
    for id in @slot do n += $data_items[id].card_def end
    return n
  end
  def spi         # 精神力の取得
    n = @original_item.spi + @spi
    n += @level * @plus_power if @main_param == "정신력"
    for id in @slot do n += $data_items[id].card_spi end
    return n
  end
  def agi         # 敏捷性の取得
    n = @original_item.agi + @agi
    n += @level * @plus_power if @main_param == "민첩성"
    for id in @slot do n += $data_items[id].card_agi end
    return n
  end
  def hit         # 命中率の取得
    n = @hit
    n += @plus_power if @main_param == "명중율"
    for id in @slot do n += $data_items[id].card_hit end
    return n
  end
  def eva         # 回避率の取得
    n = @eva
    n += @plus_power if @main_param == "회피율"
    for id in @slot do n += $data_items[id].card_eva end
    return n
  end
  def cri         # 会心率の取得
    n = @cri
    n += @plus_power if @main_param == "치명타"
    for id in @slot do n += $data_items[id].card_cri end
    return n
  end
  def element_set # 属性ID配列の取得
    result = @original_item.element_set.clone
    for id in @slot
      result = result + $data_items[id].element_set
    end
    return result.uniq
  end
  def state_set   # 付加(防止)ステート配列の取得
    result = @original_item.state_set.clone
    for id in @slot
      result = result + $data_items[id].plus_state_set
      result = result - $data_items[id].minus_state_set
    end
    return result.uniq
  end
  def material_can_use?(item) # 指定したアイテムを素材として適用できるかを返す
    type = item.power_material?
    if (@plus_power < 10) and (self.level == item.base_damage) and
       (self.is_a?(WeaponEx) and type == 0) or
       (self.is_a?(ArmorEx) and type == kind + 1)
      return true
    end
    type = item.card_material?
    if (@slot_max > @slot.size) and ((self.is_a?(WeaponEx) and type == 0) or
       (self.is_a?(ArmorEx) and type == kind + 1))
      return true
    end
    return false
  end
  def power_up        # 강화
    if rand(100) < @durability
      @plus_power += 1
      @durability -= 20
      return true
    end
    return false
  end
  def card_set(item)  # 카드 설정
    @slot.push(item.id)
  end
end

class WeaponEx < BaseItemEx
  def initialize(weapon_id)
    @original_item = $data_weapons[weapon_id]
    super()
    # メインパラメータ
    if note =~ /<성능강화\s*\=\s*(공격력|방어력|정신력|민첩성|명중율|회피율|회심율)>/i
      @main_param = $1
    else
      @main_param = "공격력"
    end
    # ランダム値
    @atk = rand(rand(note =~ /<랜덤 공격력\s*\=\s*(\d+)>/i ? $1.to_i : 4) + 1)
  end
  def animation_id    # アニメーションIDの取得
    return @original_item.animation_id
  end
  def hit             # 命中率の取得
    return super + @original_item.hit
  end
  def two_handed      # 両手持ちフラグの取得
    return @original_item.two_handed
  end
  def fast_attack     # ターン内先制フラグの取得
    return @original_item.fast_attack
  end
  def dual_attack     # 連続攻撃フラグの取得
    return @original_item.dual_attack
  end
  def critical_bonus  # クリティカル頻発フラグの取得
    return @original_item.critical_bonus
  end
end

class ArmorEx < BaseItemEx
  def initialize(armor_id)
    @original_item = $data_armors[armor_id]
    super()
    # メインパラメータ
    if note =~ /<성능강화\s*\=\s*(공격력|방어력|정신력|민첩성|명중율|회피율|치명타)>/i
      @main_param = $1
    else
      @main_param = "방어력"
    end
    # ランダム値
    @def = rand(rand(note =~ /<랜덤 방어력\s*\=\s*(\d+)>/i ? $1.to_i : 4) + 1)
  end
  def kind  # 種別の取得
    return @original_item.kind
  end
  def eva   # 回避率の取得
    return super + @original_item.eva
  end
  def prevent_critical  # クリティカル防止フラグの取得
    return @original_item.prevent_critical
  end
  def half_mp_cost      # 消費MP半分フラグの取得
    return @original_item.half_mp_cost
  end
  def double_exp_gain   # 取得経験値2倍フラグの取得
    return @original_item.double_exp_gain
  end
  def auto_hp_recover   # HP自動回復フラグの取得
    return @original_item.auto_hp_recover
  end
end







사용법은 아이미르님의 것과 같습니다만, 회심율 대신에 치명타를 사용했습니다.
그리고 아이미르님의 스크립트와는 다르게 [=]표시를 사이에 두고 띄어쓰기를 하실 필요가 없습니다. 라기보단 하시면 안됩니다.
속성 아이콘이나 카드 빈슬롯 아이콘을 바꾸시는 경우는 가장 위의 속성 아이콘 인덱스와 빈카드 슬롯 인덱스에서 숫자를 바꿔주세요.
아이콘 셋에서 가장 윗줄 왼쪽것이 0번, 그리고 다음칸부터 우측으로 이동할때마다 숫자가 1씩 늘어납니다.
아래로 내려갈때는 16만큼 숫자가 늘어나지요.
아이미르님것이 스크립트 오류가 발생한 이유는 단 하나입니다.
[\]문자가 전부 실종되어있다는거......
드물게 번역기에 넣고 돌리면 [\]문자가 실종되는 경우가 생긴다더군요.
하하하.....