XPのデータのVX Aceへの移行



XPの規格の各種データをほぼそのままVX Aceに移植します。

Data ディレクトリに移行したXPのSystem.rxdata、States.rxdata、Item.rxdata、Weapon.rxdata、Armor.rxdata
をコピーしてください。

イベントで
 $game_system.set_xp_2_vxa 
を実行し、ゲーム本編で起動した後、一旦、ツクールを終了して再起動させてください。
そうすると反映されます。

※各種データの個数はXPとVX Aceとで同じ数にするか、もしくはVX Aceの方を大きくしてください。

※アイコンの制限解除 が別途必要です

変更点
2024:09:01
・固定文字列対応


移植用RPG::Item
class RPG::Item < RPG::UsableItem
  def initialize
    super
    @scope = 7
    @itype_id = 1
    @price = 0
    @consumable = true
    # 以下 XP -> VX Aceで必要
    @icon_name = ""
    @recover_hp_rate  = 0
    @recover_hp       = 0
    @recover_sp_rate  = 0
    @recover_sp       = 0
    @parameter_type   = 0
    @parameter_points = 0
    @element_set      = []
    @plus_state_set   = []
    @minus_state_set  = []
  end
  def key_item?
    @itype_id == 2
  end
  attr_accessor :itype_id
  attr_accessor :price
  attr_accessor :consumable
  # 以下 XP -> VX Aceで必要
  attr_accessor :icon_name
  attr_accessor :recover_hp_rate
  attr_accessor :recover_hp
  attr_accessor :recover_sp_rate
  attr_accessor :recover_sp
  attr_accessor :parameter_type 
  attr_accessor :parameter_points
  attr_accessor :element_set
  attr_accessor :plus_state_set 
  attr_accessor :minus_state_set 
end
移植用RPG::State
class RPG::State < RPG::BaseItem
  def initialize
    super
    @restriction = 0
    @priority = 50
    @remove_at_battle_end = false
    @remove_by_restriction = false
    @auto_removal_timing = 0
    @min_turns = 1
    @max_turns = 1
    @remove_by_damage = false
    @chance_by_damage = 100
    @remove_by_walking = false
    @steps_to_remove = 100
    @message1 = ''
    @message2 = ''
    @message3 = ''
    @message4 = ''
    # 以下 XP -> VXで必要
    @hit_rate   = 0
    @maxhp_rate = 0
    @maxsp_rate = 0
    @dex_rate   = 0
    @agi_rate   = 0
    @int_rate   = 0
    @atk_rate   = 0
    @pdef_rate  = 0
    @mdef_rate  = 0
    @eva        = 0
    @slip_damage     = false
    @plus_state_set  = []
    @minus_state_set = []
  end
  attr_accessor :restriction
  attr_accessor :priority
  attr_accessor :remove_at_battle_end
  attr_accessor :remove_by_restriction
  attr_accessor :auto_removal_timing
  attr_accessor :min_turns
  attr_accessor :max_turns
  attr_accessor :remove_by_damage
  attr_accessor :chance_by_damage
  attr_accessor :remove_by_walking
  attr_accessor :steps_to_remove
  attr_accessor :message1
  attr_accessor :message2
  attr_accessor :message3
  attr_accessor :message4
  # 以下 XP -> VXで必要
  attr_accessor :hit_rate
  attr_accessor :maxhp_rate
  attr_accessor :maxsp_rate
  attr_accessor :dex_rate
  attr_accessor :agi_rate
  attr_accessor :int_rate
  attr_accessor :atk_rate
  attr_accessor :pdef_rate
  attr_accessor :mdef_rate
  attr_accessor :eva
  attr_accessor :slip_damage
  attr_accessor :plus_state_set
  attr_accessor :minus_state_set
end
移植用RPG::Weapon
class RPG::Weapon < RPG::EquipItem
  def initialize
    super
    @wtype_id = 0
    @animation_id = 0
    @features.push(RPG::BaseItem::Feature.new(31, 1, 0))
    @features.push(RPG::BaseItem::Feature.new(22, 0, 0))
    # 以下 XP -> VXで必要
    @atk            = 0
    @pdef           = 0
    @mdef           = 0
    @agi_plus       = 0
    @int_plus       = 0
    @element_set    = []
    @plus_state_set = []
    @icon_name      = ""
  end
  def performance
    params[2] + params[4] + params.inject(0) {|r, v| r += v }
  end
  attr_accessor :wtype_id
  attr_accessor :animation_id
  # 以下 XP -> VXで必要
  attr_accessor :atk
  attr_accessor :pdef
  attr_accessor :mdef
  attr_accessor :agi_plus
  attr_accessor :int_plus
  attr_accessor :element_set
  attr_accessor :plus_state_set
  attr_accessor :icon_name
end
移植用RPG::Armor
class RPG::Armor < RPG::EquipItem
  def initialize
    super
    @atype_id = 0
    @etype_id = 1
    @features.push(RPG::BaseItem::Feature.new(22, 1, 0))
    # 以下 XP -> VXで必要
    @kind              = 0
    @pdef              = 0
    @mdef              = 0
    @eva               = 0
    @str_plus          = 0
    @agi_plus          = 0
    @int_plus          = 0
    @auto_state_id     = 0
    @guard_element_set = []
    @guard_state_set   = []
    @icon_name         = ""
  end
  def performance
    params[3] + params[5] + params.inject(0) {|r, v| r += v }
  end
  attr_accessor :atype_id
  # 以下 XP -> VXで必要
  attr_accessor :kind
  attr_accessor :pdef
  attr_accessor :mdef
  attr_accessor :eva
  attr_accessor :str_plus
  attr_accessor :agi_plus
  attr_accessor :int_plus
  attr_accessor :guard_element_set
  attr_accessor :guard_state_set
  attr_accessor :icon_name
  attr_accessor :auto_state_id
end
移植用RPG::System::Words
module RPG
  class System
    class Words
      def initialize
        @gold = ""
        @hp = ""
        @sp = ""
        @str = ""
        @dex = ""
        @agi = ""
        @int = ""
        @atk = ""
        @pdef = ""
        @mdef = ""
        @weapon = ""
        @armor1 = ""
        @armor2 = ""
        @armor3 = ""
        @armor4 = ""
        @attack = ""
        @skill = ""
        @guard = ""
        @item = ""
        @equip = ""
      end
      attr_accessor :gold
      attr_accessor :hp
      attr_accessor :sp
      attr_accessor :str
      attr_accessor :dex
      attr_accessor :agi
      attr_accessor :int
      attr_accessor :atk
      attr_accessor :pdef
      attr_accessor :mdef
      attr_accessor :weapon
      attr_accessor :armor1
      attr_accessor :armor2
      attr_accessor :armor3
      attr_accessor :armor4
      attr_accessor :attack
      attr_accessor :skill
      attr_accessor :guard
      attr_accessor :item
      attr_accessor :equip
    end
  end
end
スクリプト本体
#==============================================================================
# ■ XPのデータのVX Aceへの移行 by 貪藻矢射妥←
#------------------------------------------------------------------------------
#  読んで字のごとく、XPで造ったデータ(*.rxdata)をVX Ace(*.rvdata2)へ移行します。
#  
#  Data ディレクトリに移行したいXPのSystem.rxdata、States.rxdata、Item.rxdata、
#  Weapon.rxdata、Armor.rxdataをコピーしてください。
#  
#  イベントで
#  $game_system.set_xp_2_vxa 
#  を実行し、ゲーム本編で起動した後、一旦、ツクールを終了して再起動させて
#  ください。
#  そうすると反映されます。
#  
#  ※各種データの個数はXPとVX Aceとで同じ数にするか、もしくはVX Aceの方を
#   大きくしてください。
#  
#==============================================================================
# 更新っぽいもの
# 2024:09:08
# ・固定文字列対応


module VX_TO_XP
  # 属性を使用
  SIE = 31 # 逆効果と相殺の属性
end

module KGC
  # ◆吸収属性
  ABSORB   = 28
  # ◆SP Damage用属性
  SP_DAMAGE       = 50
end

module ChangeSC
  # SP割合消費の属性番号
  SP_P_C = 32
  # HP消費の属性番号
  HP_C   = 33
  # HP割合消費の属性番号
  HP_P_C = 34
  # 消費軽減の属性番号
  EX_RED = 27
end

module DHR
  HIT_RATES = [[55,  75], [56,  80], [57, 100], [58, 150], [59, 180]]
end

module ELE_MM
  ELE_MM_MAX =  200
  ELE_MM_MIN = -200
  # weakest 物理/魔法
  WEEK_P = 0
  WEEK_M = -200
  # 物理属性配列/魔法属性配列
  P_LIST = [11..15]
  M_LIST = [1..9, 16]
  # 属性防御のみを設定した場合の軽減値
  DEFAULT_GUARD = 15
  # 属性防御判定用
  GRD_ELE_PLUS  = 0  # 属性ダメージ増加
  GRD_ELE_MINUS = 1  # 属性ダメージ反転
  GRD_ELE_NONE  = -1 # デフォルト
end

module FIX_PATH
  # RPGツクールXPデータ拡張子
  EX_CHILD_RXDATA = ".rxdata"
end

class Game_System
  include VX_TO_XP
  include KGC
  include ChangeSC
  include DHR
  include ELE_MM
  #--------------------------------------------------------------------------
  # ● rvdata2からrxdataのファイル名を作成する
  #--------------------------------------------------------------------------
  def make_rxdata(data)
    data2 = data.dup
    data2[FIX_PATH::EX_CHILD_RVDATA2] = FIX_PATH::EX_CHILD_RXDATA
    
    return data2
  end
  #--------------------------------------------------------------------------
  # ● scope変換
  #--------------------------------------------------------------------------
  def get_scope_4_pxv(datas)
    case datas.scope
    when 0,1,2     ; return datas.scope
    when 3,4,5,6,7 ; return datas.scope+4
    else           ; p "ありえないエラー" ; return nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 防御力変換
  #--------------------------------------------------------------------------
  def get_def_4_pxv(datas)
    return (datas.pdef + datas.mdef) / 2
  end
  #--------------------------------------------------------------------------
  # ● アイコン名称変換
  #   スクリプト:アイコンの制限解除 が別途必要
  #--------------------------------------------------------------------------
  def get_icon_name(datas)
    return "ICON#{DIA_IC::STT}" + datas.icon_name + "#{DIA_IC::FIN}"
  end
  #--------------------------------------------------------------------------
  # ● 全部変換
  #--------------------------------------------------------------------------
  def set_xp_2_vxa
    
    set_xp_items
    set_xp_weapons
    set_xp_armors
    
  end
  
  HP_SLIP_WD = "HPスリップ"
  SP_SLIP_WD = "SPスリップ"
  
  #--------------------------------------------------------------------------
  # ● 武器の引き継ぎ
  #--------------------------------------------------------------------------
  def set_xp_weapons
    $data_weapons_xp    = load_data(make_rxdata(FIX_PATH::PATH_DATA_WEPN))
    
    for id in 1...$data_weapons_xp.size
      $data_weapons[id].name        = $data_weapons_xp[id].name
      $data_weapons[id].description = $data_weapons_xp[id].description.gsub(/\\n/, "\r\n")
      $data_weapons[id].price       = $data_weapons_xp[id].price 
      $data_weapons[id].params[2]   = $data_weapons_xp[id].atk
      $data_weapons[id].params[3]   = $data_weapons_xp[id].pdef
      $data_weapons[id].params[5]   = $data_weapons_xp[id].mdef
      $data_weapons[id].params[4]   = $data_weapons_xp[id].int_plus 
      $data_weapons[id].params[6]   = $data_weapons_xp[id].agi_plus  
      
      # 属性処理
      if $data_weapons_xp[id].element_set != nil
        make_features(Game_BattlerBase::FEATURE_ATK_ELEMENT, id)
      end
      # ステート付加処理
      if $data_weapons_xp[id].plus_state_set != nil
        make_features(Game_BattlerBase::FEATURE_ATK_STATE, id)
      end
      
      # 武器タイプとか分かっている場合の処理
      if id >= 2 && id <= 93 # 剣
        $data_weapons[id].wtype_id = 1
        $data_weapons[id].animation_id = 7
      end
      if id >= 102 && id <= 245 # 刀
        $data_weapons[id].wtype_id = 2
        $data_weapons[id].animation_id = 112
      end
      if id >= 247 && id <= 263 # 斧
        $data_weapons[id].wtype_id = 4
      end
      if id >= 277 && id <= 303 # 槍
        $data_weapons[id].wtype_id = 5
        $data_weapons[id].animation_id = 13
      end
      if id >= 312 && id <= 328 # 鎌
        $data_weapons[id].wtype_id = 6
      end
      if id >= 337 && id <= 368 # 拳
        $data_weapons[id].wtype_id = 7
        $data_weapons[id].animation_id = 115
      end
      if id >= 377 && id <= 413 # 棍
        $data_weapons[id].wtype_id = 8
        $data_weapons[id].animation_id = 19
      end
      if id >= 422 && id <= 462 # 自動拳銃
        $data_weapons[id].wtype_id = 13
        $data_weapons[id].animation_id = 91
      end
      if id >= 472 && id <= 507 # 回転式拳銃
        $data_weapons[id].wtype_id = 12
        $data_weapons[id].animation_id = 91
      end
      if id >= 517 && id <= 569 # 狙撃銃
        $data_weapons[id].wtype_id = 14
        $data_weapons[id].animation_id = 92
      end
      if id >= 577 && id <= 587 # 散弾銃
        $data_weapons[id].wtype_id = 15
        $data_weapons[id].animation_id = 92
      end
      if id >= 597 && id <= 610 # その他
        $data_weapons[id].wtype_id = 16
      end
      
      # なんらかのスクリプトで 先制攻撃属性 をつけている場合
      if $data_weapons_xp[id].element_set.include?(先制攻撃属性)
        $data_weapons[id].fast_attack  = true
      end
      # なんらかのスクリプトで 二回攻撃属性 をつけている場合
      if $data_weapons_xp[id].element_set.include?(二回攻撃属性)
        $data_weapons[id].dual_attack  = true
      end
      # なんらかのスクリプトで 両手持ち属性 をつけている場合
      if $data_weapons_xp[id].element_set.include?(両手持ち属性)
        $data_weapons[id].two_handed  = true
      end
      
      # XP : 命中精度 を使用している場合
      if $data_weapons_xp[id].element_set.include?(HIT_RATES[0][0])
        $data_weapons[id].hit = 100
      end
      if $data_weapons_xp[id].element_set.include?(HIT_RATES[1][0])
        $data_weapons[id].hit = 90
      end
      if $data_weapons_xp[id].element_set.include?(HIT_RATES[2][0])
        $data_weapons[id].hit = 80
      end
      if $data_weapons_xp[id].element_set.include?(HIT_RATES[3][0])
        $data_weapons[id].hit = 60
      end
      if $data_weapons_xp[id].element_set.include?(HIT_RATES[4][0])
        $data_weapons[id].hit = 50
      end
      
      if $data_weapons_xp[id].icon_name != ""
        $data_weapons[id].note             = get_icon_name($data_weapons_xp[id])
      end
      # なんらかのスクリプトで 全体攻撃属性 をつけている場合
      if $data_weapons_xp[id].element_set.include?(全体攻撃属性)
        if $data_weapons[id].note  != ""
          $data_weapons[id].note += "\r\n" + "<全体攻撃>"
        else
          $data_weapons[id].note = "<全体攻撃>"
        end
      end
      # なんらかのスクリプトで 回避無視属性 をつけている場合
      if $data_weapons_xp[id].element_set.include?(回避無視属性)
        if $data_weapons[id].note != ""
          $data_weapons[id].note += "\r\n" + "<回避率無視>"
        else
          $data_weapons[id].note = "<回避率無視>"
        end
      end
    end
    save_data($data_weapons,FIX_PATH::PATH_DATA_WEPN)
  end
  #--------------------------------------------------------------------------
  # ● 防具の引き継ぎ
  #--------------------------------------------------------------------------
  def set_xp_armors
    $data_armors_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_ARMR))
    
    for id in 1...$data_armors_xp.size
      $data_armors[id].name        = $data_armors_xp[id].name 
      $data_armors[id].description = $data_armors_xp[id].description.gsub(/\\n/, "\r\n")
      $data_armors[id].kind        = $data_armors_xp[id].kind 
      $data_armors[id].price       = $data_armors_xp[id].price 
      $data_armors[id].params[7]   = $data_armors_xp[id].eva
      $data_armors[id].params[2]   = $data_armors_xp[id].str_plus 
      $data_armors[id].params[3]   = $data_armors_xp[id].pdef
      $data_armors[id].params[5]   = $data_armors_xp[id].mdef
      $data_armors[id].params[4]   = $data_armors_xp[id].int_plus 
      $data_armors[id].params[6]   = $data_armors_xp[id].agi_plus 
      
      # なんらかのスクリプトで 必殺防止属性 をつけている場合
      if $data_armors_xp[id].guard_element_set.include?(必殺防止属性)
        $data_armors[id].prevent_critical = true
      end
      # XP : 特殊消費スキル を使用している場合
      if $data_armors_xp[id].guard_element_set.include?(EX_RED)
        $data_armors[id].half_mp_cost = true
      end
      # 属性防御
      if $data_armors_xp[id].guard_element_set != nil
        for index in $data_armors_xp[id].guard_element_set
          $data_armors[id].features.push(RPG::BaseItem::Feature.new(11, 
                                         index + 2, element_rate(index, id)))
        end
      end
      # ステート防御
      if $data_armors_xp[id].guard_state_set != nil
        for index in $data_armors_xp[id].guard_state_set
          if index < 19
            $data_armors[id].features.push(RPG::BaseItem::Feature.new(13, 
                                           index, 0.8))
          end
        end
      end
      # オートステート、スリップダメージ設定
      # ダメージ吸収 貪藻矢射妥←カスタム を使用している場合
      if $data_armors_xp[id].auto_state_id > 0
        set_auto_state($data_armors_xp[id].auto_state_id, id)
        set_slip_damage($data_armors_xp[id].auto_state_id, id)
      end
      
      if $data_armors_xp[id].icon_name != ""
        $data_armors[id].note             = get_icon_name($data_armors_xp[id])
      end
      
      case $data_armors_xp[id].kind
      when 0 ; $data_armors[id].atype_id = 1 # 盾
      when 1 ; $data_armors[id].atype_id = 4 # 兜
      when 2 # 鎧
        if $data_armors_xp[id].guard_element_set.include?(61)
          $data_armors[id].atype_id = 8
        else
          $data_armors[id].atype_id = 12
        end
      when 3 # アクセ
        if $data_armors_xp[id].guard_element_set.include?(62)
          $data_armors[id].atype_id = 19
        else
          $data_armors[id].atype_id = 16
        end
      end
    end
    end
    
    save_data($data_armors,FIX_PATH::PATH_DATA_ARMR)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの引き継ぎ
  #--------------------------------------------------------------------------
  def set_xp_items
    $data_items_xp      = load_data(make_rxdata(FIX_PATH::PATH_DATA_ITEM))
    
    for id in 1...$data_items_xp.size
      $data_items[id].name             = $data_items_xp[id].name
      $data_items[id].price            = $data_items_xp[id].price
      $data_items[id].description      = $data_items_xp[id].description.gsub(/\\n/, "\r\n")
      $data_items[id].occasion         = $data_items_xp[id].occasion
      $data_items[id].consumable       = $data_items_xp[id].consumable
      $data_items[id].scope            = get_scope_4_pxv($data_items_xp[id])

      # 価格が0のものは『大切なもの』扱い
      if $data_items_xp[id].price == 0
        $data_items[id].itype_id = 2
      end
      # HP回復系処理
      if $data_items_xp[id].recover_hp_rate > 0 || 
        $data_items_xp[id].recover_hp  > 0
        make_effects(Game_Battler::EFFECT_RECOVER_HP, id)
      end
      # SP回復系処理
      if $data_items_xp[id].recover_sp_rate > 0 || 
        $data_items_xp[id].recover_sp  > 0
        make_effects(Game_Battler::EFFECT_RECOVER_MP, id)
      end
      # ステート追加処理
      if $data_items_xp[id].plus_state_set != nil
        make_effects(Game_Battler::EFFECT_ADD_STATE, id)
      end
      # ステート解除処理
      if $data_items_xp[id].minus_state_set != nil
        make_effects(Game_Battler::EFFECT_REMOVE_STATE, id)
      end
      # パラメータ増幅系処理
      if $data_items_xp[id].parameter_type > 0
        make_effects(Game_Battler::EFFECT_GROW, id)
      end

      if $data_items_xp[id].icon_name != ""
        $data_items[id].note             = get_icon_name($data_items_xp[id])
      end
    end
      
    save_data($data_items,FIX_PATH::PATH_DATA_ITEM)
  end
  #--------------------------------------------------------------------------
  # ● オートステートの設定
  #--------------------------------------------------------------------------
  def set_auto_state(state_id, id)
    if $data_states_xp == nil
      $data_states_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
    end
    
    t_state = $data_states_xp[state_id]
    
    if t_state.hit_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 0, 
                                     (t_state.hit_rate - 100) / 100.0))
    end
    if t_state.maxhp_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 0, 
                                     t_state.maxhp_rate / 100.0))
    end
    if t_state.maxsp_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 1, 
                                     t_state.maxsp_rate / 100.0))
    end
    if t_state.agi_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 6, 
                                     t_state.agi_rate / 100.0))
    end
    if t_state.int_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 4, 
                                     t_state.int_rate / 100.0))
    end
    if t_state.atk_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 2, 
                                     t_state.atk_rate / 100.0))
    end
    if t_state.pdef_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 3, 
                                     t_state.pdef_rate / 100.0))
    end
    if t_state.mdef_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 5, 
                                     t_state.mdef_rate / 100.0))
    end
    if t_state.eva != 0
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 1, 
                                     t_state.eva / 100.0))
    end
    # 器用さを運に反映してみる
    if t_state.dex_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 7, 
                                     t_state.dex_rate / 100.0))
    end
  end
  
  #--------------------------------------------------------------------------
  # ● スリップダメージの設定
  #--------------------------------------------------------------------------
  def set_slip_damage(state_id, id)
    
    if $data_states_xp == nil
      $data_states_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
    end
    
    slip_damage_HP = 0
    slip_damage_SP = 0
    slip_damage_H_Val = 0
    slip_damage_S_Val = 0
    
    if $data_states_xp[state_id].slip_damage
      # そのステートが持っているスリップダメージの
      # LvプラスステートまたはLvマイナスステートを判定。
      for j in $data_states_xp[state_id].plus_state_set
        # プラスステートの取得
        plus_state = $data_states_xp[j]
        if plus_state != nil
          if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
            slip_damage_HP -= $1.to_i
          end
          if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
            slip_damage_SP -= $1.to_i
          end
          if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
            slip_damage_H_Val -= $1.to_i
          end
          if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
            slip_damage_S_Val -= $1.to_i
          end
        end
      end
      for j in $data_states_xp[state_id].minus_state_set
        # マイナスステートの取得
        minus_state = $data_states_xp[j]
        if minus_state != nil
          if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
            slip_damage_HP += $1.to_i
          end
          if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
            slip_damage_SP += $1.to_i
          end
          if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
            slip_damage_H_Val += $1.to_i
          end
          if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
            slip_damage_S_Val += $1.to_i
          end
        end
      end
      
      if slip_damage_HP != 0
        $data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 7, 
                                       slip_damage_HP / 100.0))
      #elsif slip_damage_H_Val != 0
        #$data_armors[id].features.push(RPG::BaseItem::Feature.new(23, 4, 0.9))
      end
      if slip_damage_SP != 0
        $data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 8, 
                                       slip_damage_SP / 100.0))
      #elsif slip_damage_S_Val != 0
        #$data_armors[id].features.push(RPG::BaseItem::Feature.new(23, 4, 0.9))
      end 
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 属性補正値の取得
  #     element_id : 属性 ID
  #--------------------------------------------------------------------------
  def element_rate(element_id, id)
    if $data_states_xp == nil
      $data_states_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
    end
    if $data_system_xp == nil
      $data_system_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_SYSM))
    end
    
    element_name = $data_system_xp.elements[element_id]
    rate = 0
    r_flg = GRD_ELE_NONE
    
    # 防具でこの属性が防御されている場合の計算
    
    armor = $data_armors_xp[id]
    if armor != nil and armor.guard_element_set.include?(element_id)
      # 属性ダメージ増(減)n%が設定されている場合
      for j in armor.guard_state_set
        if $data_states_xp[j].name =~ /^#{element_name}([0-9]+)(%|%)/
          rate += $1.to_i
          r_flg = GRD_ELE_PLUS
        end
      end
      # 属性ダメージ反転が設定されている場合
      for j in armor.guard_state_set
        if $data_states_xp[j].name =~ /^#{element_name}マイナス/
          # 属性ダメージ反転のみが設定されている場合
          if r_flg == GRD_ELE_NONE
            rate += DEFAULT_GUARD
          # 属性ダメージ増加で反転の場合(属性ダメージ軽減)
          elsif r_flg == GRD_ELE_PLUS
            rate *= -1
          end
          r_flg = GRD_ELE_MINUS
        end
      end
      # 属性ダメージ軽減用ステートが何も設定されていない場合
      if r_flg == GRD_ELE_NONE
        rate -= DEFAULT_GUARD
      end
    end
    
    # メソッド終了
    rate = [[rate, ELE_MM_MIN].max, ELE_MM_MAX].min
    return rate / 100.0
  end
  
  #--------------------------------------------------------------------------
  # ● 武器用効果作成、追加
  #--------------------------------------------------------------------------
  def make_features(code, id)
    case code
    when Game_BattlerBase::FEATURE_ATK_ELEMENT # 攻撃時属性
      for index in $data_weapons_xp[id].element_set
        $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                        Game_BattlerBase::FEATURE_ATK_ELEMENT, index + 2, 1))
      end
    when Game_BattlerBase::FEATURE_ATK_STATE   # 攻撃時ステート
      for index in $data_weapons_xp[id].plus_state_set
        if index < 19
          $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                          Game_BattlerBase::FEATURE_ATK_STATE, index, 0.8))
        end
      end
    when Game_BattlerBase::FEATURE_ATK_SPEED   # 攻撃速度補正
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(33, 0, 999))
    when Game_BattlerBase::FEATURE_ATK_TIMES   # 攻撃追加回数
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(34, 0, 1))
    when Game_BattlerBase::FEATURE_EQUIP_SEAL  # 装備封印
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(54, 1, 0))
    else
      msgbox "不明なcode"
      exit
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテム用途エフェクト追加
  #--------------------------------------------------------------------------
  def make_effects(code, id)
    case code
    when Game_Battler::EFFECT_RECOVER_HP   # HP回復
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Game_Battler::EFFECT_RECOVER_HP
      tmp_effects.data_id = 0
      tmp_effects.value1 = $data_items_xp[id].recover_hp_rate / 100.0
      tmp_effects.value2 = $data_items_xp[id].recover_hp
      $data_items[id].effects.push(tmp_effects)
    when Game_Battler::EFFECT_RECOVER_MP   # MP回復
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Game_Battler::EFFECT_RECOVER_MP
      tmp_effects.data_id = 0
      tmp_effects.value1 = $data_items_xp[id].recover_sp_rate / 100.0
      tmp_effects.value2 = $data_items_xp[id].recover_sp
      $data_items[id].effects.push(tmp_effects)
    when Game_Battler::EFFECT_ADD_STATE    # ステート付加
      for index in $data_items_xp[id].plus_state_set
        tmp_effects = RPG::UsableItem::Effect.new
        tmp_effects.code = Game_Battler::EFFECT_ADD_STATE
        tmp_effects.data_id = index
        tmp_effects.value1 = 1
        tmp_effects.value2 = 0
        $data_items[id].effects.push(tmp_effects)
      end
    when Game_Battler::EFFECT_REMOVE_STATE # ステート解除
      for index in $data_items_xp[id].minus_state_set
        tmp_effects = RPG::UsableItem::Effect.new
        tmp_effects.code = Game_Battler::EFFECT_REMOVE_STATE
        tmp_effects.data_id = index
        tmp_effects.value1 = 1
        tmp_effects.value2 = 0
        $data_items[id].effects.push(tmp_effects)
      end
    when Game_Battler::EFFECT_GROW         # パラメータ増幅
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Game_Battler::EFFECT_GROW
      case $data_items_xp[id].parameter_type
      when 1,2,3 ; tmp_effects.data_id = $data_items_xp[id].parameter_type - 1 # 0:HP 1:SP 2:腕力
      when 4 ; tmp_effects.data_id = 7 # 器用さ => 運へ変換
      when 5 ; tmp_effects.data_id = 6 # 敏捷性
      when 6 ; tmp_effects.data_id = 4 # 魔力
      end
      tmp_effects.value1 = $data_items_xp[id].parameter_points
      tmp_effects.value2 = 0
      $data_items[id].effects.push(tmp_effects)
    else
      msgbox "不明なcode"
      exit
    end
  end
end
※他サイトのスクリプトでツクールXPでは標準実装でないが、VX Aceで標準実装の機能を取り込むこともできます。 スクリプトを実行すると アイテム、武器、防具の順で移植ができます。 特定の一部だけ移植したいと言う場合は以下にします。 薄赤文字の部分、薄橙文字の部分 属性IDを使用して、先制攻撃二回攻撃両手持ち必殺防止を実装している場合に 各種日本語の部分に属性IDを適用してください 薄黄文字の部分 属性IDを使用して全体攻撃回避無視を実装している場合で、かつKGC Softの同機能を実装している場合に 各種日本語の部分に属性IDを適用してください ※他にもスリップダメージの部分とSP/HP割合消費の部分もKGC Softの同機能にあわせた造りになっています
種類 スクリプト
全部 $game_system.set_xp_2_vxa
アイテム $game_system.set_xp_items
武器 $game_system.set_xp_weapons
防具 $game_system.set_xp_armors
※スキル、防具、武器、アイテムにはステート、属性がそれぞれ関係しているので、通常は全部行うのがよいです。

戻る