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
・固定文字列対応

2025:08: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 DIAMOND
  # 命中率(属性と数値)
  #            S          A          B          C          D
  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 Tkl2K_2_XP
  # ターンの最初に先制攻撃の属性番号
  FASTEST_MOVE    = 21
  # ターンの一番最後に攻撃の属性番号
  LASTEST_MOVE    = 22
  # 一度に敵全体を攻撃の属性番号
  ALLIZE_ATTACK   = 23
  # 敵の回避率を無視の属性番号
  EVA_IGNORE      = 24
  # 両手武器の属性番号
  TWO_HANDED      = 25
  # 必殺(痛恨の一撃)防止の属性番号
  CRITICAL_CANCEL = 26
  # 敵の物理防御を無視の属性番号
  PDEF_IGNORE     = 53
  # 敵の魔法防御を無視の属性番号
  MDEF_IGNORE     = 54
end

module Equip_Extend
  # インナー装備用属性ID
  INNER_ARM = 61
  # 特殊装備用属性ID
  EXTRA_ACC = 62
  # 靴装備用属性ID
  BOOTS_ACC = 63
end

module Def_Num
  # スキルタイプ:封印で使うIDリスト
  SEAL_ID_LIST = [2, 3, 4]
  
  # 武器タイプ
  #01:剣
  WEP_TYPE_SWORD   = 1
  #02:刀
  WEP_TYPE_KATANA  = 2
  #03:短剣
  WEP_TYPE_KNIFE   = 3
  #04:斧
  WEP_TYPE_HAWK    = 4
  #05:槍
  WEP_TYPE_LANCE   = 5
  #06:鎌
  WEP_TYPE_SCYTHE  = 6
  #07:拳
  WEP_TYPE_KNUCKLE = 7
  #08:棍棒
  WEP_TYPE_STICK   = 8
  #09:弓
  WEP_TYPE_BOW     = 9
  #10:杖
  WEP_TYPE_ROD     = 10
  #11:本
  WEP_TYPE_BOOK    = 11
  #12:拳銃
  WEP_TYPE_GUN     = 12
  #13:狙撃銃
  WEP_TYPE_RIFLE   = 13
  #14:散弾銃
  WEP_TYPE_SHOTGUN = 14
  #15:その他
  WEP_TYPE_OTHER   = 15
  
  # 防具タイプ
  #02:盾(ライト)
  ARM_TYPE_SHIELD_L = 2
  #03:盾(ヘビー)
  ARM_TYPE_SHIELD_H = 3
  
  #05:兜(女性用)
  ARM_TYPE_MET_F    = 5
  #06:兜(男女兼用)
  ARM_TYPE_MET_W    = 6
  #07:兜(男性用)
  ARM_TYPE_MET_M    = 7
  
  #09:インナー(女性用)
  ARM_TYPE_INNER_F  = 9
  #10:インナー(男性用)
  ARM_TYPE_INNER_M  = 10
  
  #13:外套(女性用)
  ARM_TYPE_ARMOR_F  = 13
  #14:外套(男女兼用)
  ARM_TYPE_ARMOR_W  = 14
  #15:外套(男性用)
  ARM_TYPE_ARMOR_M  = 15
  
  #17:アクセ(女性用)
  ARM_TYPE_ACCE_F   = 17
  #18:アクセ(男女兼用)
  ARM_TYPE_ACCE_W   = 18
  #19:アクセ・特殊(女性用)
  ARM_TYPE_EXT_F    = 19
  #20:アクセ・特殊(男女兼用)
  ARM_TYPE_EXT_W    = 20
  #21:アクセ・靴(男女兼用)
  ARM_TYPE_BOOTS    = 21
  
  #武器のアニメーションID
  # アニメーションID:剣
  ANIM_ID_SWORD   = 7
  # アニメーションID:刀
  ANIM_ID_KATANA  = 112
  # アニメーションID:短剣
  ANIM_ID_KNIFE   = nil
  # アニメーションID:斧
  ANIM_ID_HAWK    = nil
  # アニメーションID:槍
  ANIM_ID_LANCE   = 13
  # アニメーションID:鎌
  ANIM_ID_SCYTHE  = nil
  # アニメーションID:拳
  ANIM_ID_KNUCKLE = 115
  # アニメーションID:棍棒
  ANIM_ID_STICK   = 19
  # アニメーションID:弓
  ANIM_ID_BOW     = nil
  # アニメーションID:杖
  ANIM_ID_ROD     = nil
  # アニメーションID:本
  ANIM_ID_BOOK    = nil
  # アニメーションID:拳銃
  ANIM_ID_GUN     = 91
  # アニメーションID:狙撃銃
  ANIM_ID_RIFLE   = 92
  # アニメーションID:散弾銃
  ANIM_ID_SHOTGUN = 92
end

module Def_Num_XP
  # 防具タイプ
  #0:盾
  ARM_TYPE_SHIELD = 0
  #1:兜
  ARM_TYPE_MET    = 1
  #2:鎧
  ARM_TYPE_ARMOR  = 2
  #3:アクセ
  ARM_TYPE_ACCE   = 3
    
  # XPのデータでどこからどこまでが何の武器かわかっている場合
  # 剣
  WEP_LIST_SWORD   = [2..93]
  # 刀
  WEP_LIST_KATANA  = [102..245]
  # 斧
  WEP_LIST_HAWK    = [247..263]
  # 槍
  WEP_LIST_LANCE   = [277..303]
  # 鎌
  WEP_LIST_SCYTHE  = [312..328]
  # 拳
  WEP_LIST_KNUCKLE = [337..368]
  # 棍棒
  WEP_LIST_STICK   = [377..413]
  # 拳銃
  WEP_LIST_GUN     = [422..507]
  # 狙撃銃
  WEP_LIST_RIFLE   = [517..569]
  # 散弾銃
  WEP_LIST_SHOTGUN = [577..587]
  # その他
  WEP_LIST_OTHER   = [597..610]
end

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

class Game_System
  #--------------------------------------------------------------------------
  # ● 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 Def_Num_XP::SCOPE_KIND_NONE, 
         Def_Num_XP::SCOPE_KIND_ANY_EMENY, 
         Def_Num_XP::SCOPE_KIND_ALL_ENEMY
      return datas.scope
    when Def_Num_XP::SCOPE_KIND_ANY_FRIEND, 
         Def_Num_XP::SCOPE_KIND_ALL_FRIEND, 
         Def_Num_XP::SCOPE_KIND_ANY_FRIEND_DEAD, 
         Def_Num_XP::SCOPE_KIND_ALL_FRIEND_DEAD, 
         Def_Num_XP::SCOPE_KIND_USER
      return datas.scope + 4
    else
      msgbox "ありえないエラー"
      return nil
    end
  end
  #--------------------------------------------------------------------------
  # ● restriction変換
  #--------------------------------------------------------------------------
  def get_restriction_4_pxv(datas)
    case datas.restriction
    when Def_Num_XP::REST_PTN_NONE, 
         Def_Num_XP::REST_PTN_CONF_FRIEND, 
         Def_Num_XP::REST_PTN_NO_ACT
      return datas.restriction
    when Def_Num_XP::REST_PTN_NO_MAGIC
      return Def_Num::REST_PTN_NONE
    when Def_Num_XP::REST_PTN_CONF_ENEMY
      return datas.restriction - 1
    else
      msgbox "ありえないエラー"
      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スリップ"
  
  MltAtt_WD = "連続攻撃"
  def wep_id_include_chk(list, id)
    for data in list
      if data.is_a?(Range)
        return true if data === id
      else
        return true if data == id
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 武器の引き継ぎ
  #--------------------------------------------------------------------------
  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(Def_Num::FEATURE_ATK_ELEMENT, id)
      end
      # ステート付加処理
      if $data_weapons_xp[id].plus_state_set != nil
        make_features(Def_Num::FEATURE_ATK_STATE, id)
      end
      
      # 武器タイプとか分かっている場合の処理
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_SWORD, id) # 剣
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_SWORD
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_SWORD
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_KATANA, id) # 刀
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_KATANA
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_KATANA
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_HAWK, id) # 斧
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_HAWK
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_LANCE, id) # 槍
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_LANCE
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_LANCE
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_SCYTHE, id) # 鎌
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_SCYTHE
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_KNUCKLE, id) # 拳
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_KNUCKLE
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_KNUCKLE
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_STICK, id) # 棍棒
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_STICK
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_STICK
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_GUN, id) # 拳銃
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_GUN
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_GUN
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_RIFLE, id) # 狙撃銃
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_RIFLE
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_RIFLE
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_SHOTGUN, id) # 散弾銃
        $data_weapons[id].wtype_id     = Def_Num::WEP_TYPE_SHOTGUN
        $data_weapons[id].animation_id = Def_Num::ANIM_ID_SHOTGUN
      end
      if wep_id_include_chk(Def_Num_XP::WEP_LIST_OTHER, id) # その他
        $data_weapons[id].wtype_id = Def_Num::WEP_TYPE_OTHER
      end
      
      # XP : ターンの最初に先制攻撃 をつけている場合
      if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::FASTEST_MOVE)
        make_features(Def_Num::FEATURE_ATK_SPEED, id, 999)
      end
      # XP : ターンの一番最後に攻撃 をつけている場合
      if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::LASTEST_MOVE)
        make_features(Def_Num::FEATURE_ATK_SPEED, id, -999)
      end
      # XP : 一度に複数回攻撃可能な武器 対象の場合
      max_atk = 0
      mlt_flg = false
      weapon = $data_weapons_xp[id]
      if $data_system_xp == nil
        $data_system_xp     = load_data(make_rxdata(FIX_PATH::PATH_DATA_SYSM))
      end
      
      if weapon != nil
        for j in weapon.element_set
          ele_set = $data_system_xp.elements[j]
          if ele_set != nil
            if ele_set =~ /^#{MltAtt_WD}([0-9]+)$/
              max_atk += $1.to_i
              mlt_flg = true
            end
          end
        end
      end
	  
      if mlt_flg && max_atk > 1
        # 追加攻撃回数を設定するので実際の攻撃回数-1を設定する
        make_features(Def_Num::FEATURE_ATK_TIMES, id, max_atk - 1)
      end
      
	  # XP : 両手武器 をつけている場合
      if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::TWO_HANDED)
        make_features(Def_Num::FEATURE_EQUIP_SEAL, id)
      end
      # XP : 命中精度 を使用している場合
      if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[0][0])
        $data_weapons[id].features[1].value = 0.2
      end
      if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[1][0])
        $data_weapons[id].features[1].value = 0.0
      end
      if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[2][0])
        $data_weapons[id].features[1].value = -0.1
      end
      if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[3][0])
        $data_weapons[id].features[1].value = -0.3
      end
      if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[4][0])
        $data_weapons[id].features[1].value = -0.5
      end
      
      if $data_weapons_xp[id].icon_name != ""
        $data_weapons[id].note             = get_icon_name($data_weapons_xp[id])
      end
      # XP : 一度に敵全体を攻撃 をつけている場合
      # 更に何らかのスクリプトで
      # メモ欄の記載で全体攻撃のスクリプトを使用している場合
      if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::ALLIZE_ATTACK)
        if $data_weapons[id].note  != ""
          $data_weapons[id].note += "\r\n" + "<全体攻撃>"
        else
          $data_weapons[id].note = "<全体攻撃>"
        end
      end
      # XP : 敵の回避率を無視 をつけている場合
      # 更に何らかのスクリプトで
      # メモ欄の記載で回避無視のスクリプトを使用している場合
      if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::EVA_IGNORE)
        if $data_weapons[id].note != ""
          $data_weapons[id].note += "\r\n" + "<回避率無視>"
        else
          $data_weapons[id].note = "<回避率無視>"
        end
      end
      # XP : 敵の物理/魔法防御を無視 をつけている場合
      # 更に何らかのスクリプトで
      # メモ欄の記載で防御無視のスクリプトを使用している場合
      if ($data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::PDEF_IGNORE) ||
          $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::MDEF_IGNORE))
        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].etype_id    = $data_armors_xp[id].kind + 1
      $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 
      
      # XP : 必殺(痛恨の一撃)防止 をつけている場合
      if $data_armors_xp[id].guard_element_set.include?(Tkl2K_2_XP::CRITICAL_CANCEL)
        $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                       Def_Num::FEATURE_XPARAM, 3, 1.0))
      end
      # XP : 特殊消費スキル を使用している場合
      if $data_armors_xp[id].guard_element_set.include?(ChangeSC::EX_RED)
        $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                       Def_Num::FEATURE_SPARAM, 4, 0.9))
      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(
                                         Def_Num::FEATURE_ELEMENT_RATE, 
                                         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(
                                           Def_Num::FEATURE_STATE_RATE, 
                                           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 Def_Num_XP::ARM_TYPE_SHIELD # 盾
        $data_armors[id].atype_id = ARM_TYPE_SHIELD_L
      when Def_Num_XP::ARM_TYPE_MET # 兜
        $data_armors[id].atype_id = ARM_TYPE_MET_W
      when Def_Num_XP::ARM_TYPE_ARMOR # 鎧
        # インナーか外套かで分岐
        if $data_armors_xp[id].guard_element_set.include?(Equip_Extend::INNER_ARM)
          $data_armors[id].atype_id = ARM_TYPE_INNER_F
        else
          $data_armors[id].atype_id = ARM_TYPE_ARMOR_W
        end
      when Def_Num_XP::ARM_TYPE_ACCE # アクセ
        # 純粋な装飾品か特殊装備か靴かで分岐
        if $data_armors_xp[id].guard_element_set.include?(Equip_Extend::EXTRA_ACC)
          $data_armors[id].atype_id = ARM_TYPE_EXT_W
        elsif $data_armors_xp[id].guard_element_set.include?(Equip_Extend::BOOTS_ACC)
          $data_armors[id].atype_id = ARM_TYPE_BOOTS
        else
          $data_armors[id].atype_id = ARM_TYPE_ACCE_W
        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(Def_Num::EFFECT_RECOVER_HP, id)
      end
      # SP回復系処理
      if $data_items_xp[id].recover_sp_rate > 0 || 
        $data_items_xp[id].recover_sp  > 0
        make_effects(Def_Num::EFFECT_RECOVER_MP, id)
      end
      # ステート追加処理
      if $data_items_xp[id].plus_state_set != nil
        make_effects(Def_Num::EFFECT_ADD_STATE, id)
      end
      # ステート解除処理
      if $data_items_xp[id].minus_state_set != nil
        make_effects(Def_Num::EFFECT_REMOVE_STATE, id)
      end
      # パラメータ増幅系処理
      if $data_items_xp[id].parameter_type > 0
        make_effects(Def_Num::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(
                                     Def_Num::FEATURE_XPARAM, 0, 
                                     (t_state.hit_rate - 100) / 100.0))
    end
    if t_state.maxhp_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 0, 
                                     t_state.maxhp_rate / 100.0))
    end
    if t_state.maxsp_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 1, 
                                     t_state.maxsp_rate / 100.0))
    end
    if t_state.agi_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 6, 
                                     t_state.agi_rate / 100.0))
    end
    if t_state.int_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 4, 
                                     t_state.int_rate / 100.0))
    end
    if t_state.atk_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 2, 
                                     t_state.atk_rate / 100.0))
    end
    if t_state.pdef_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 3, 
                                     t_state.pdef_rate / 100.0))
    end
    if t_state.mdef_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 5, 
                                     t_state.mdef_rate / 100.0))
    end
    if t_state.eva != 0
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_XPARAM, 1, 
                                     t_state.eva / 100.0))
    end
    # 器用さを運に反映してみる
    if t_state.dex_rate != 100
      $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                     Def_Num::FEATURE_PARAM, 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(
                                       Def_Num::FEATURE_XPARAM, 7, 
                                       slip_damage_HP / 100.0))
      end
      if slip_damage_SP != 0
        $data_armors[id].features.push(RPG::BaseItem::Feature.new(
                                       Def_Num::FEATURE_XPARAM, 8, 
                                       slip_damage_SP / 100.0))
      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 = ELE_MM::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 = ELE_MM::GRD_ELE_PLUS
        end
      end
      # 属性ダメージ反転が設定されている場合
      for j in armor.guard_state_set
        if $data_states_xp[j].name =~ /^#{element_name}マイナス/
          # 属性ダメージ反転のみが設定されている場合
          if r_flg == ELE_MM::GRD_ELE_NONE
            rate += ELE_MM::DEFAULT_GUARD
          # 属性ダメージ増加で反転の場合(属性ダメージ軽減)
          elsif r_flg == ELE_MM::GRD_ELE_PLUS
            rate *= -1
          end
          r_flg = ELE_MM::GRD_ELE_MINUS
        end
      end
      # 属性ダメージ軽減用ステートが何も設定されていない場合
      if r_flg == ELE_MM::GRD_ELE_NONE
        rate -= ELE_MM::DEFAULT_GUARD
      end
    end
    
    # メソッド終了
    rate = [[rate, ELE_MM::ELE_MM_MIN].max, ELE_MM::ELE_MM_MAX].min
    return rate / 100.0
  end
  
  #--------------------------------------------------------------------------
  # ● 武器用効果作成、追加
  #--------------------------------------------------------------------------
  def make_features(code, id, value=nil)
    case code
    when Def_Num::FEATURE_ATK_ELEMENT # 攻撃時属性
      for index in $data_weapons_xp[id].element_set
        $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                        Def_Num::FEATURE_ATK_ELEMENT, index + 2, 1))
      end
    when Def_Num::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(
                          Def_Num::FEATURE_ATK_STATE, index, 0.8))
        end
      end
    when Def_Num::FEATURE_ATK_SPEED   # 攻撃速度補正
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                                      Def_Num::FEATURE_ATK_SPEED, 0, value))
    when Def_Num::FEATURE_ATK_TIMES   # 攻撃追加回数
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                                      Def_Num::FEATURE_ATK_TIMES, 0, 1))
    when Def_Num::FEATURE_EQUIP_SEAL  # 装備封印
      $data_weapons[id].features.push(RPG::BaseItem::Feature.new(
                                      Def_Num::FEATURE_EQUIP_SEAL, 1, 0))
    else
      msgbox "不明なcode"
      exit
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテム用途エフェクト追加
  #--------------------------------------------------------------------------
  def make_effects(code, id)
    case code
    when Def_Num::EFFECT_RECOVER_HP   # HP回復
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Def_Num::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 Def_Num::EFFECT_RECOVER_MP   # MP回復
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Def_Num::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 Def_Num::EFFECT_ADD_STATE    # ステート付加
      for index in $data_items_xp[id].plus_state_set
        tmp_effects = RPG::UsableItem::Effect.new
        tmp_effects.code = Def_Num::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 Def_Num::EFFECT_REMOVE_STATE # ステート解除
      for index in $data_items_xp[id].minus_state_set
        tmp_effects = RPG::UsableItem::Effect.new
        tmp_effects.code = Def_Num::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 Def_Num::EFFECT_GROW         # パラメータ増幅
      tmp_effects = RPG::UsableItem::Effect.new
      tmp_effects.code = Def_Num::EFFECT_GROW
      case $data_items_xp[id].parameter_type
      when Def_Num_XP::PRM_UP_TYPE_MAXHP, 
           Def_Num_XP::PRM_UP_TYPE_MAXSP, 
           Def_Num_XP::PRM_UP_TYPE_STR
        # XPの腕力をVXAの攻撃へ変換
        tmp_effects.data_id = $data_items_xp[id].parameter_type - 1
      when Def_Num_XP::PRM_UP_TYPE_DEX
        # XPの器用さをVXAの運へ変換
        tmp_effects.data_id = Def_Num::PRM_UP_TYPE_LUK
      when Def_Num_XP::PRM_UP_TYPE_AGI
        tmp_effects.data_id = Def_Num::PRM_UP_TYPE_AGI
      when Def_Num_XP::PRM_UP_TYPE_INT
        tmp_effects.data_id = Def_Num::PRM_UP_TYPE_MAT
      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
※スキル、防具、武器、アイテムにはステート、属性がそれぞれ関係しているので、通常は全部行うのがよいです。

戻る