查看: 2509|回复: 4

[转载] 发布一个 VX 移植到 VA

[复制链接]
梦石
0
星屑
575
在线时间
1752 小时
注册时间
2008-11-7
回帖
1111
发表于 2013-4-18 15:22:38 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
            VX的 Data  全部放到 VA 的 Data 里  
        VX里的数据将 都被移植到 VA里   脚本也可以移植 不过移植过去没什么用 需要的话 在后面自己可以加进去
      
         操作方法 开始界面 按住F12 大概5秒差不多  就可以移植过来了 地图 装备 道具 技能 什么的 都可以移植过来


[pre lang="ruby" line="1"]# VX->VXAceへの変換処理を行うか?
CONVERT_VX_TO_ACE = true
# データベースの変換を行うか?
CONVERT_DB  = true
# マップの変換を行うか?
CONVERT_MAP = true

# 旧バージョンでAceへの変換が不十分だったデータを修正するか?
# trueの状態で二回以上実行すると、一部のイベントデータが狂います。
RE_ADJUST_VX_TO_ACE = false

# -*- coding: utf-8 -*-
=begin

★ks_VX→VXAceデータ移行
2011/12/18      一部のイベントデータに移植ミスがあったため、
                移植済みデータの修正機能の実装とともに修正更新。
2011/12/17      自然回復しないステートの設定に不備があったので修正。
2011/12/16      細かい設定項目を追加。
2011/12/15      ブツが届いたので移行が不十分な点を修正。
                マップが反映されないとか、%系の効果に無茶な値が入ってたりとか。
2011/12/10 20時 スキルや使用アイテムに属性に対応した無駄データが作られていたので削除。
                スキルのIDがずらした分変更されてなかったので修正。
2011/12/10 19時 VXの時の属性を保持する際の書式を設定できるように変更。
                体験版での使い方を追記。
2011/12/10 18時 アイテムのHP回復効果の変換が違ったっぽいので修正。
                        ステート関連で幾つか数値的な間違いがあったっぽいので修正。

□===制作・著作===□
MaidensnowOnline  暴兎
見た目にまったく判らないスクリプトなので、著作権表記は必要ありません。
というか変換するとき意外は入れておく必要がないスクリプトです。

□===配置場所===□
スクリプトの一番上にでも設置して使ってください。

□===説明・使用方法===□
1.VXAceのDataフォルダに、VXのDataフォルダの中身を丸ごと投げ込みます。
2.テストプレイを起動して、タイトル画面が出たら終了します。
  グラフィックがない関係でcacheのエラーが出る場合もありますが特に問題はありません。
3.プロジェクトを保存せずにエディタを終了します。
4.起動するとデータベースとマップが変換後のものになっています。
注意・初期設定だと元々あったVXAceのデータベースは変換後データで上書きされます。
なお、変換結果が、ファイルに対応した名前でゲームフォルダに生成されます。
このファイルはUTF-8形式のテキストなので、UTF-8形式で開いて読んでください。

※体験版で試す場合は、拡張子を.rbに変更してゲームフォルダに置き、
 以下のスクリプトをイベント中で実行してください。
 また、2byte文字を含むプロジェクトパスの場合エラーで実行できません。

s = File.expand_path(".")
s.force_encoding('UTF-8')
ss = "/ks_VX-VXAce_converter"
ss.force_encoding('UTF-8')
p s, ss
Kernel.require s + ss


□===使用上の注意===□
・タイルセットは、VXの並びに準じたものを自分で作る必要があります。
・色調変更など、色設定がかかわるイベントコマンドはオブジェクトの都合か、正常に移植されません。
・経験値曲線には対応していません。
・用語などには対応していません。
・職業の能力値成長曲線は同じIDのアクターの能力値成長曲線を使用します。
・魔法防御には精神力と同じ値、アクター・エネミーは更に運に敏捷性と同じ値が入ります。
・スキル・使用アイテムの属性は、設定されている属性のうち一番初めの物に設定されますが、
 元の属性はメモ欄に記録されます。
・エリアはリージョンに変換され、重なっている場合は両方と違うリージョン番号になります。

=end

# 設定項目(特に設定しなくても大丈夫)_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# %sなどが含まれる文字列の変更が必要な場合は、%s以外を編集してください。
# 変換結果のテキストファイルを出力するかの設定
PUT_RESULT = false
# 変換結果のテキストファイルを出力先の相対パス
POUT_DIR = "ext_paramater_log_[%s]_.txt"
# 変換したファイルを出力先のファイル名(相対パス+ファイル名)
# 初期値ではもともとあったAceのデータベースを上書きする設定になっているので注意。
PUT_FILE_NAME = "data/%s2"
# VXのスキルや仕様アイテムの属性をメモに保持する際の書式です。
VX_ELEMENT_STR = "<VX属性 %s>"

class Object
        # IDいくつからに旧スキルを入れるか(1,2が通常攻撃、防御となったことを考慮)
  # また、3を逃げる、4を何もしないであると仮定して敵の行動を修正します。
  # なので1~4を予約番号として、余裕を持って10を初期設定値としています。
        # クラスの習得スキル番号をずらす際にも加算されます。
        GETA_FOR_SKILLS = 10
        # スキル・アイテムを移行する際、基本ダメージの絶対値が1の場合、加算しない
        IGNORE_BASE_DAMAGE_1 = true
        # ダメージ計算式における旧関係度が100の時の能力値の倍率です
  ATK_RATE = 4
  SPI_RATE = 2
  DEF_RATE = 2
  MDF_RATE = 1
  # 武器の命中値の+-0と判定される値
  DEFAULT_HIT = 95
        # VXAceのデフォルトに近いダメージ計算式の表記になります。※trueの場合かなり再現限度が下がる
        # 例)ATK_RATE = 4、DEF_RATE = 2  で スキルが打撃関係度50
        #                 (trueの場合)  atk * 2 - def * 1
        #                 (falseの場合) atk * 200 / 100 - def * 100 / 100
        # 例)SPI_RATE = 2、MDF_RATE = 1  で スキルが精神関係度25(再現度が下がるパターン)
        #                 (trueの場合)  mat * 0 - mdf * 0
        #                 (falseの場合) mat * 50 / 100 - mdf * 25 / 100
        FORMULA_TYPE_ACE = false

        # 旧値を特殊効果に変換する時のコード番号の表(変更不要)
        SPECIFY_CODE = Hash.new
        SPECIFY_CODE[:@speed] = 33
        SPECIFY_CODE[:@element_set] = 11
        SPECIFY_CODE[:@element_ranks] = 11
        SPECIFY_CODE[:@state_ranks] = 13
        SPECIFY_CODE[:@state_set] = 13
        SPECIFY_CODE[:@plus_state_set] = 21
        SPECIFY_CODE[:@minus_state_set] = 22

        EQUIP_ELEMENT_SET_VALUE = Hash.new(0.5)
        EQUIP_STATE_SET_VALUE = Hash.new(0)

        # 属性有効度のランクをAceの効果変動に変換するときの対応表
        RANK_TO_VALUE_E = Hash.new(0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0)
                # 特定の属性IDだけランクに対応する耐性値を変更したい場合に設定する
                RANK_TO_VALUE_E[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}
        # 状態有効度のランクをAceの効果変動に変換するときの対応表
        RANK_TO_VALUE_S = Hash.new(0=>200, 1=>nil, 2=>20, 3=>40, 4=>60, 5=>80, 6=>100)
                # 特定のステートIDだけランクに対応する耐性値を変更したい場合に設定する
                RANK_TO_VALUE_S[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}

        # 旧能力値と名前が違う変数の変換表(変更不要)
        # ちなみに、ここで変換先が指定されておらず、新しいデータにない値は移植されない。
        # (変換前後でキーが変わってなくても、ここで設定されていれば移植される)
        CONVERT_TO_ACE_KEYS = {
    :@new_data=>nil,
                #:@name=>:@item_name, #新旧で変数名が違う場合の表記例
                #:@jet =>:@jet, #新しいデータにない値を移植したい場合の表記例
        }
        # 特殊効果が挿入される配列
        def sepecifi_set
    #p self.class, @id, *@features
    @features ||= []
                return @features
        end
        # 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
        SPECIFY_CLASS = RPG::BaseItem::Feature
end

class RPG::UsableItem
        # 旧値を特殊効果に変換する時のコード番号の表(変更不要)
        SPECIFY_CODE = Hash.new
        SPECIFY_CODE[:@state_set] = 32
        SPECIFY_CODE[:@element_set] = 31
        SPECIFY_CODE[:@state_set] = 32

        EQUIP_ELEMENT_SET_VALUE = Hash.new(0)
        EQUIP_STATE_SET_VALUE = Hash.new(0.60)
        # 特殊効果が挿入される配列
        def sepecifi_set
    #p self.class, @id, *@effects
    @effects ||= []
                return @effects
        end
        # 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
  SPECIFY_CLASS = RPG::UsableItem::Effect
end

class RPG::Weapon
        SPECIFY_CODE = RPG::UsableItem::SPECIFY_CODE.dup
        SPECIFY_CODE[:@state_set] = 13
        EQUIP_ELEMENT_SET_VALUE = RPG::UsableItem::EQUIP_ELEMENT_SET_VALUE
        EQUIP_STATE_SET_VALUE = RPG::UsableItem::EQUIP_STATE_SET_VALUE
end

class RPG::State
        SPECIFY_CODE = Hash.new
        SPECIFY_CODE[:@state_set] = 14
end

class RPG::Armor
        SPECIFY_CODE = RPG::State::SPECIFY_CODE
end

# 設定項目終了_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/





class RPG::BaseItem::Feature
  def value1=(v)
    @value = v
  end
  def value1
    return @value || 0
  end
  def value2
    return 0
  end
  TO_S = "<%s code:%2s data_id:%3s value:%3d>"
  def to_s
    return sprintf(TO_S, self.class, @code, @data_id, @value)
  end
end
class RPG::UsableItem::Effect
  TO_S = "<%s code:%2s data_id:%3s value1:%3d value2:%3d>"
  def to_s
    return sprintf(TO_S, self.class, @code, @data_id, @value1, @value2)
  end
end
class RPG::UsableItem::Damage
  TO_S = "<%s type:%1s element_id:%3s variance:%3s critical:%s\n         formula:%s>"
  def to_s
    return sprintf(TO_S, self.class, @type, @element_id, @variance, @critical, @formula)
  end
end

module Kernel
  @@last_pp_name = ""
  COLUMN_STR = "%s %s\r"
  CR_STR = "\r/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_\r"
  PRINT_LINE_STR = " %s\r"
  def pp(*args)
    return unless PUT_RESULT
    f = File.open(sprintf(POUT_DIR, $filename), "a:UTF-8")
    if @@last_pp_name != args[1]
      f.write(CR_STR)
      f.write(sprintf(COLUMN_STR, *args[0,2]))
      @@last_pp_name = args[1]
    end
    args.shift
    args.shift
    args.each{|str| f.write(sprintf(PRINT_LINE_STR, str)) }
    f.close
  end
end

module Kernel
  def force_encoding_to_utf_8
    return self
  end
end
class NilClass
        def convert_to_ace
    return self
  end
end
class String
  UTF_8 = 'UTF-8'
  def force_encoding_to_utf_8
    self.force_encoding(UTF_8) if $VXAce && !self.frozen?
    return self
  end
        def convert_to_ace
    return self.force_encoding_to_utf_8
  end
end
class TrueClass
        def convert_to_ace
    return self
  end
end
class FalseClass
        def convert_to_ace
    return self
  end
end
class Numeric
        def convert_to_ace
    return self
  end
end
class Table
        def convert_to_ace
    return self
  end
end
class Object
  FEATURE_ELEMENT_RATE  = 11              # 属性有効度
  FEATURE_DEBUFF_RATE   = 12              # 弱体有効度
  FEATURE_STATE_RATE    = 13              # ステート有効度
  FEATURE_STATE_RESIST  = 14              # ステート無効化
  FEATURE_PARAM         = 21              # 通常能力値
  FEATURE_XPARAM        = 22              # 追加能力値
  FEATURE_SPARAM        = 23              # 特殊能力値
  FEATURE_ATK_ELEMENT   = 31              # 攻撃時属性
  FEATURE_ATK_STATE     = 32              # 攻撃時ステート
  FEATURE_ATK_SPEED     = 33              # 攻撃速度補正
  FEATURE_ATK_TIMES     = 34              # 攻撃追加回数
  FEATURE_STYPE_ADD     = 41              # スキルタイプ追加
  FEATURE_STYPE_SEAL    = 42              # スキルタイプ封印
  FEATURE_SKILL_ADD     = 43              # スキル追加
  FEATURE_SKILL_SEAL    = 44              # スキル封印
  FEATURE_EQUIP_WTYPE   = 51              # 武器タイプ装備
  FEATURE_EQUIP_ATYPE   = 52              # 防具タイプ装備
  FEATURE_EQUIP_FIX     = 53              # 装備固定
  FEATURE_EQUIP_SEAL    = 54              # 装備封印
  FEATURE_SLOT_TYPE     = 55              # スロットタイプ
  FEATURE_ACTION_PLUS   = 61              # 行動回数追加
  FEATURE_SPECIAL_FLAG  = 62              # 特殊フラグ
  FEATURE_COLLAPSE_TYPE = 63              # 消滅エフェクト
  FEATURE_PARTY_ABILITY = 64              # パーティ能力
  #--------------------------------------------------------------------------
  # ● 定数(特殊フラグ)
  #--------------------------------------------------------------------------
  FLAG_ID_AUTO_BATTLE   = 0               # 自動戦闘
  FLAG_ID_GUARD         = 1               # 防御
  FLAG_ID_SUBSTITUTE    = 2               # 身代わり
  FLAG_ID_PRESERVE_TP   = 3               # TP持ち越し
  #--------------------------------------------------------------------------
  # ● 定数(能力強化/弱体アイコンの開始番号)
  #--------------------------------------------------------------------------
  ICON_BUFF_START       = 64              # 強化(16 個)
  ICON_DEBUFF_START     = 80              # 弱体(16 個)

  #--------------------------------------------------------------------------
  # ● 定数(使用効果)
  #--------------------------------------------------------------------------
  EFFECT_RECOVER_HP     = 11              # HP 回復
  EFFECT_RECOVER_MP     = 12              # MP 回復
  EFFECT_GAIN_TP        = 13              # TP 増加
  EFFECT_ADD_STATE      = 21              # ステート付加
  EFFECT_REMOVE_STATE   = 22              # ステート解除
  EFFECT_ADD_BUFF       = 31              # 能力強化
  EFFECT_ADD_DEBUFF     = 32              # 能力弱体
  EFFECT_REMOVE_BUFF    = 33              # 能力強化の解除
  EFFECT_REMOVE_DEBUFF  = 34              # 能力弱体の解除
  EFFECT_SPECIAL        = 41              # 特殊効果
  EFFECT_GROW           = 42              # 成長
  EFFECT_LEARN_SKILL    = 43              # スキル習得
  EFFECT_COMMON_EVENT   = 44              # コモンイベント
  #--------------------------------------------------------------------------
  # ● 定数(特殊効果)
  #--------------------------------------------------------------------------
  SPECIAL_EFFECT_ESCAPE = 0               # 逃げる

        attr_reader   :new_data
        def convert_to_ace
    begin
            @new_data = self.class.new
    rescue
            @new_data = self.class.new(0,0)
    rescue
      msgbox_p self.class
            @new_data = self.class.new
    end
    $depth += 1
    #msgbox_p @id, @name, @new_data.name, @new_data unless @name.nil? || @name.empty? || @id < 41
                instance_variables.each{|key|
                        value = self.instance_variable_get(key)
                        set_converted_to_ace(@new_data, key, value)
                }
    unless @new_data.sepecifi_set.nil?
      @new_data.sepecifi_set.sort{|a, b|
      begin
        b.code * 100000000 + b.data_id * 1000000 + b.value1 * 1000 + b.value2 <=>
        a.code * 100000000 + a.data_id * 1000000 + a.value1 * 1000 + a.value2
      rescue
        msgbox_p a, b
      end
      }
    end
    #name = @new_data.instance_variable_get(:@name)
    if $depth == 1
      vz = @new_data.instance_variable_get(:@note)
      name = @new_data.instance_variable_get(:@name) || @new_data.to_s
      #msgbox_p i, type, name, @new_data, " " if vv.nil? && vx.nil?
      pp @id, name, @new_data
      @new_data.instance_variables.each{|key|
        next if key == :@features
        next if key == :@effects
        next if key == :@note
        pp @id, name, "#{key} : #{@new_data.instance_variable_get(key)}"
      }
      pp @id, name, vz.gsub("\n"){""} unless vz.nil?
    end
    $depth -= 1
                return @new_data
        end
        def set_converted_to_ace(new_data, key, value)
                @converted_key = false
                key = convert_to_ace_key(key)
                return if key.nil?
                if key == :@element_set || key == :@element_ranks
                        return element_set_convert_to_ace(key, value)
                elsif key == :@state_set || key == :@state_ranks || key == :@plus_state_set || key == :@minus_state_set
                        return state_set_convert_to_ace(key, value)
                end
                return if !@converted_key && @new_data.instance_variable_get(key).nil?
                @new_data.instance_variable_set(key, value.convert_to_ace)
    #msgbox_p key, value, @new_data.instance_variable_get(key)
        end
        def convert_to_ace_key(key)
                vv = self.class::CONVERT_TO_ACE_KEYS[key]
                vv = CONVERT_TO_ACE_KEYS[key] if vv.nil?
                if !vv.nil?
                        key = vv
                        @converted_key = true
                end
    #msgbox_p key, vv
                return key
        end
        def specifi_code(key)
                result = self.class::SPECIFY_CODE[key] || SPECIFY_CODE[key]
    msgbox_p self.class, @name, key, result if result.nil?
    return result
        end
        def new_specifi(code, data_id, value, value2 = nil)
    msgbox_p caller[0] if code.nil?
                ndat = self.class::SPECIFY_CLASS.new
                ndat.code = code
                ndat.data_id = data_id
                ndat.value1 = value
                ndat.value2 = value2 unless value2.nil?
          @new_data.sepecifi_set << ndat
                return ndat
        end
        def element_set_convert_to_ace(key, set)
                code = specifi_code(key)
                if Array === set
                        dvalue = self.class::EQUIP_ELEMENT_SET_VALUE
                        set.each{|data_id|
        next if data_id == 0
                                value = dvalue[data_id]
        msgbox_p @name, key, code, data_id, value if code.nil?
                                new_specifi(code, data_id, value)
                        }
                elsif Table === set
                        values = RANK_TO_VALUE_E
                        set.xsize.times{|data_id|
        next if data_id == 0
                                value = values[data_id][set[data_id]]
                                next if value.nil?
                                new_specifi(code, data_id, value / 100.0)
                        }
                end
        end
        def state_set_convert_to_ace(key, set)
                code = specifi_code(key)
                if Array === set
                        dvalue = self.class::EQUIP_STATE_SET_VALUE
                        set.each{|data_id|
        next if data_id == 0
                                value = dvalue[data_id]
                                new_specifi(code, data_id, value)
                        }
                elsif Table === set
                        values = RANK_TO_VALUE_E
                        set.xsize.times{|data_id|
        next if data_id == 0
                                value = values[data_id][set[data_id]]
                                next if value.nil?
                                new_specifi(code, data_id, value / 100.0)
                        }
                end
        end
end

class RPG::Actor
        def convert_to_ace
                super
                [@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id].each_with_index{|item_id, i|
                        @new_data.equips = item_id
                }

    new_specifi(FEATURE_SLOT_TYPE, 1, 1) if  @two_swords_style
    new_specifi(FEATURE_EQUIP_FIX, 1, 0) if  @fix_equipment
    new_specifi(FEATURE_SPECIAL_FLAG, 1, FLAG_ID_AUTO_BATTLE) if  @auto_battle
    new_specifi(FEATURE_SPARAM, 1, 0.25) if  @super_guard
    new_specifi(FEATURE_SPARAM, 3, 2.0) if  @pharmacology
    new_specifi(FEATURE_XPARAM, 2, 4) if  @critical_bonus
                return @new_data
        end
end
class RPG::Class
        def convert_to_ace
                super
    #new_specifi(FEATURE_SPARAM, 0, )
    @new_data.sepecifi_set[0].value = (100 - @position * 25) / 100.0
    actor = $now_data[@id]
    now_params = actor.instance_variable_get(:@parameters)
    [0, 1, 2, 3, 4, 4, 5, 5].each_with_index{|key, j|
      @new_data.params.ysize.times{|k|
        @new_data.params[j, k] = now_params[key, k]
      }
    }
    return @new_data
        end
end
class RPG::Class::Learning
        def convert_to_ace
                super
    @new_data.skill_id += Object::GETA_FOR_SKILLS
    return @new_data
  end
end
class RPG::Enemy::Action
        def convert_to_ace
                super
                if @kind == 0
                        case @basic
                        when 0
                                @new_data.skill_id = 1
                        when 1
                                @new_data.skill_id = 2
                 when 2
                                @new_data.skill_id = 3
                        when 3
                                @new_data.skill_id = 4
                        end
                else
            @new_data.skill_id += Object::GETA_FOR_SKILLS
                end
                return @new_data
  end
end
class RPG::Enemy
        def convert_to_ace
                super
    [@maxhp, @maxmp, @atk, @def, @spi, @spi, @agi, @agi].each_with_index{|value, i|
            @new_data.params = value
    }
    @new_data.sepecifi_set[0].value = @hit / 100.0
    @new_data.sepecifi_set[1].value = @eva / 100.0
    [@drop_item1, @drop_item2].each_with_index{|data, i|
      dat = RPG::Enemy::DropItem.new
      dat.kind = data.kind
      case data.kind
      when 1; dat.data_id = data.instance_variable_get(:@item_id)
      when 2; dat.data_id = data.instance_variable_get(:@weapon_id)
      when 3; dat.data_id = data.instance_variable_get(:@armor_id)
      end
      dat.denominator = data.denominator
      @new_data.drop_items = dat
    }


    @levitate = false

    new_specifi(FEATURE_XPARAM, 2, 0.10) if @has_critical
                return @new_data
  end
end
class RPG::BaseItem
end
class RPG::UsableItem
        def convert_to_ace
    e_set = remove_instance_variable(:@element_set)
                super
    new_specifi(EFFECT_COMMON_EVENT, @common_event_id, 0) if @common_event_id != 0

    unless e_set.empty?
            txt = ""
            e_set.each{|i|
                    txt += ", " unless txt.empty?
                    txt += i.to_s
            }
            @new_data.note += sprintf(VX_ELEMENT_STR, txt)
    end

    @new_data.damage.element_id = e_set[0] || 0
    if @base_damage != 0
            txt = ""
      txt += "#{@base_damage.abs}" if !IGNORE_BASE_DAMAGE_1 || @base_damage.abs != 1
      if @atk_f != 0
              txt += " + " unless txt.empty?
              txt += "a.atk * #{ATK_RATE * @atk_f / 100} - b.def * #{DEF_RATE * @atk_f / 100}" if FORMULA_TYPE_ACE
              txt += "a.atk * #{ATK_RATE * @atk_f} / 100 - b.def * #{DEF_RATE * @atk_f} / 100" if !FORMULA_TYPE_ACE
      end
      if @spi_f != 0
              txt += " + " unless txt.empty?
              txt += "a.mat * #{SPI_RATE * @spi_f / 100} - b.mdf * #{MDF_RATE * @spi_f / 100}" if FORMULA_TYPE_ACE
              txt += "a.mat * #{SPI_RATE * @spi_f} / 100 - b.mdf * #{MDF_RATE * @spi_f} / 100" if !FORMULA_TYPE_ACE
      end
      @new_data.damage.type = 1 unless txt.empty?
      txt.gsub!("\s*(+|-)\s*b.(def|mdf)"){""} if @ignore_defense
      @new_data.damage.formula = txt
      @new_data.damage.type = 1
    end
    @new_data.damage.type = 2 if @damage_to_mp
    if @base_damage < 0
      @new_data.damage.type += 2
    elsif @absorb_damage
      @new_data.damage.type += 4
    end
    @new_data.damage.variance = 20
    @new_data.hit_type = 1 if @physical_attack

                return @new_data
  end
end
class RPG::Skill
        def convert_to_ace
                super
    @new_data.id += Object::GETA_FOR_SKILLS
    @new_data.success_rate = @hit
                @new_data.stype_id = 1 if @spi_f > 0
                return @new_data
        end
end
class RPG::Item
        def convert_to_ace
                super
    #@consumable = true
    @new_data.success_rate = 100
    if @hp_recovery_rate != 0 || @hp_recovery != 0
            new_specifi(EFFECT_RECOVER_HP, 0, @hp_recovery_rate / 100.0, @hp_recovery)
    end
    if @mp_recovery_rate != 0 || @mp_recovery != 0
            new_specifi(EFFECT_RECOVER_MP, 0, @mp_recovery_rate / 100.0, @mp_recovery)
    end
    if @parameter_type != 0
            new_specifi(EFFECT_GROW, @parameter_type, @parameter_points)
    end

                return @new_data
        end
end
class RPG::Weapon
        def convert_to_ace
                super
    @new_data.sepecifi_set[1].value = (@hit - DEFAULT_HIT) / 100.0
    unless @element_set.include?(1)
      @new_data.sepecifi_set.delete(@new_data.sepecifi_set.find{|dat|
          dat.code == FEATURE_ATK_ELEMENT && dat.data_id == 1# && dat.value == 0
      })
    end
    @two_handed = false
    [@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
            @new_data.params[i + 2] = value
    }
    new_specifi(33, 0, 99999999) if @fast_attack
    new_specifi(FEATURE_XPARAM, 2, 4) if @critical_bonus
                new_specifi(FEATURE_ATK_TIMES , 0, 1) if @dual_attack
                return @new_data
        end
end
class RPG::Armor
        def convert_to_ace
                super
    @atype_id = @kind || 0
    @new_data.sepecifi_set[0].value = @eva / 100.0
    [@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
            @new_data.params[i + 2] = value
    }
    new_specifi(FEATURE_XPARAM , 3, 1000) if @prevent_critical
    new_specifi(FEATURE_SPARAM , 4, 0.5) if @half_mp_cost
    new_specifi(FEATURE_SPARAM , 9, 2) if @double_exp_gain
    new_specifi(FEATURE_XPARAM , 7, 0.10) if @auto_hp_recover
                return @new_data
        end
end
class RPG::State
        def convert_to_ace
                restriction = remove_instance_variable(:@restriction)
                super
                new_specifi(FEATURE_STYPE_SEAL, 1, 1) if restriction == 1
    new_specifi(FEATURE_XPARAM, 1, -1000) if restriction == 5
                restriction -= 1 if restriction == 2 || restriction == 5
    @new_data.restriction = restriction

    [:@atk_rate, :@def_rate, :@spi_rate, :@spi_rate, :@agi_rate].each_with_index{|key, i|
            vv = instance_variable_get(key)
            next if vv == 100
            new_specifi(FEATURE_PARAM , i + 2, vv / 100.0)
    }
    new_specifi(FEATURE_XPARAM , 7, -0.1) if @slip_damage
    @new_data.remove_at_battle_end = @battle_only
    @new_data.chance_by_damage = 100 if @release_by_damage
    @new_data.min_turns = @hold_turn
    @new_data.max_turns = @hold_turn
    @new_data.auto_removal_timing = 2
    if (1..99) === @auto_release_prob
            @new_data.max_turns *= 100
            @new_data.max_turns, v = @new_data.max_turns.divmod(@auto_release_prob)
            @new_data.max_turns += 1 if v > 0
    elsif @auto_release_prob == 0
      @new_data.auto_removal_timing = 0
    end
                return @new_data
        end
end
module RPG
        RESION_SIZE = Hash.new(0)
  class Area
    def convert_to_ace
      $now_data = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
      super
      resion = RESION_SIZE[@map_id]
      resionear = (0b1 << resion) << 8
      @encounter_list.each_with_index{|data, i|
        ndat = RPG::Map::Encounter.new
        ndat.troop_id = data
        ndat.region_set << resionear
        $now_data.encounter_list << ndat
      }
      p "#{sprintf("Data/Map%03d.rvdata2", @map_id)} #{resion} #{resionear}"
      @rect.width.times{|i|
              xx = @rect.x + i
              @rect.height.times{|j|
                      yy = @rect.y + j
          #p "x:#{xx} y:#{yy}"
                      $now_data.data[xx, yy, 3] |= resionear
              }
      }
      RESION_SIZE[@map_id] += 1
      save_data($now_data, sprintf("Data/Map%03d.rvdata2", @map_id))
      return @new_data
    end
  end
end
class RPG::Map
    def convert_to_ace
      super
      list = @new_data.encounter_list
      list.each_with_index{|data, i|
        next if data.nil?
        list = RPG::Map::Encounter.new
        list.troop_id = data
      }
      map = @new_data.data
      map.resize(map.xsize, map.ysize, 4)
      return @new_data
    end
end
class NilClass
        def convert_to_ace
                return self
        end
end
class Array
        def convert_to_ace
    $depth += 1
                new_data = Array.new
                self.each_with_index{|value, i|
      type = 0
                  new_data = value.nil? ? value : value.convert_to_ace
      name = new_data.instance_variable_get(:@name)
      if $depth == 1 && !name.nil? && !name.empty?# && i > 40
        vv = new_data.instance_variable_get(:@features)
        vx = new_data.instance_variable_get(:@effects)
        vz = new_data.instance_variable_get(:@note)
        #msgbox_p i, type, name, new_data, " " if vv.nil? && vx.nil?
        pp i, name, new_data
        new_data.instance_variables.each{|key|
          next if key == :@features
          next if key == :@effects
          next if key == :@note
          pp i, name, "#{key} : #{new_data.instance_variable_get(key)}"
        }
        pp i, name, *vv unless vv.nil?
        pp i, name, *vx unless vx.nil?
        pp i, name, vz.gsub("\n"){""} unless vz.nil?
      end
                }
    $depth -= 1
                return new_data
        end
end
class Hash
        def convert_to_ace
                new_data = Hash.new
                new_data.default = self.default
                self.each_with_index{|(key, value), i|
                  new_data[key] = value.convert_to_ace
                }
                return new_data
        end
end
class Color
        def convert_to_ace
    return self
  end
end
class RPG::EventCommand
        def convert_to_ace
    super
    @new_data.re_convert_to_ace
    return @new_data
  end
  def re_convert_to_ace
    case @code
    when 111
      case @parameters[0]
      when 4
        @parameters[2] += 1 if @parameters[2] >= 2
        @parameters[3] += Object::GETA_FOR_SKILLS if @parameters[2] == 3
        #p @code, @parameters
      end
    when 122
      case @parameters[3]
      when 3..7
        @parameters.insert(4, @parameters[3])
        @parameters[3] = 3
        #p @code, @parameters
      end
    when 311..318
      siz = [6,5,4,2,6,6,6,4][@code - 311]
      @parameters.unshift(0) if @parameters.size < siz
      p @code, @parameters
      @parameters[-1] += Object::GETA_FOR_SKILLS if @code == 318
    end
    return self
  end
end

if CONVERT_VX_TO_ACE# 実行するか切り替え

database_files = [
"Areas.rvdata",
"Actors.rvdata",
"Classes.rvdata",
"Enemies.rvdata",
"Skills.rvdata",
"Items.rvdata",
"Weapons.rvdata",
"Armors.rvdata",
"States.rvdata",
"Troops.rvdata",
"Armors.rvdata",
"Animations.rvdata",
"System.rvdata",
"MapInfos.rvdata",
"CommonEvents.rvdata",
]
Dir::entries("data/").reverse!.each{|filename|
  $depth = 0
  $filename = filename
  now_file_nem = "data/%s"
  new_file_nem = PUT_FILE_NAME
  #if database_files.include?(filename)
                if filename == "System.rvdata"
      File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
      p "#{filename} の変換を開始"
                        $now_data = load_data(sprintf(new_file_nem, filename))
                  $old_data = load_data("data/#{filename}")
                        $now_data.elements = $old_data.elements
                  $new_data = $now_data
                else
      case filename
      when "Areas.rvdata"
        next unless CONVERT_DB
      when "Classes.rvdata"
        next unless CONVERT_DB
                                $now_data = load_data("data/Actors.rvdata")
      when /map\d{3}\.rvdata$/i
        next unless CONVERT_MAP
        $now_data = load_data("Data/MapInfos.rvdata")
      else
        next unless CONVERT_DB
        next unless database_files.include?(filename)
      end
      File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
      p "#{filename} の変換を開始"
                        $old_data = load_data("data/#{filename}")
                        $new_data = $old_data.convert_to_ace
      case filename
      when "Areas.rvdata"
        next
                        when "Skills.rvdata"
                                $now_data = load_data(sprintf(now_file_nem, filename))
                                size = Object::GETA_FOR_SKILLS
        $new_data.shift
                                $new_data.unshift(*$now_data[0,size+1])
      else
                        end
                        #msgbox_p "data/#{filename} の変換に成功。"
                end
                save_data($new_data, sprintf(new_file_nem, filename))
  #end
}

RE_ADJUST_VX_TO_ACE = false
end# CONVERT_VX_TO_ACE


if RE_ADJUST_VX_TO_ACE && !$@
msgbox_p "旧バージョンで変換ミスがあったデータを再変換します", "この処置を、新バージョンで変換したデータや、修正済みのデータに対して適用すると、", "一部のイベントデータが異常な値になります。"
msgbox_p "実行を中止する場合は、F12を押しながらエンターキーを押し、", "その後テストプレイを中止終了してください。"
msgbox_p "再変換を実行します。"
module Kernel
        def re_convert_to_ace
                instance_variables.each{|key|
                        value = self.instance_variable_get(key).re_convert_to_ace
      self.instance_variable_set(key, value)
                }
                return self
        end
end
class NilClass
        def re_convert_to_ace
    return self
  end
end
class Array
        def re_convert_to_ace
    $depth += 1
                self.each_with_index{|value, i|
      self = value.re_convert_to_ace
                }
    $depth -= 1
                return self
        end
end
class Hash
        def re_convert_to_ace
                self.each_with_index{|(key, value), i|
      self[key] = value.re_convert_to_ace
                }
                return self
        end
end
Dir::entries("data/").reverse!.each{|filename|
  $depth = 0
  $filename = filename
  now_file_nem = "data/%s"
  new_file_nem = "data/%s"
  #if database_files.include?(filename)
  case filename
  when /map\d{3}\.rvdata2$/i
  when /CommonEvents.rvdata2$/i
  else
    next
  end
  p "#{filename} の再変換を開始"
  $old_data = load_data("data/#{filename}")
        $new_data = $old_data.re_convert_to_ace
        save_data($new_data, sprintf(new_file_nem, filename))
}
end# if RE_ADJUST_VX_TO_ACE[/pre]
RPG魔塔:http://rpg.blue/thread-254429-1-1.html
魔塔2:http://rpg.blue/thread-303601-1-1.html
魔塔3: 制作中...MV

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-4-19 21:50:55 | 显示全部楼层
http://rpg.blue/thread-301572-1-1.html

唔……和这个有什么区别?
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
50
在线时间
0 小时
注册时间
2013-4-23
回帖
8
发表于 2013-4-23 19:47:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2013-4-23 21:49:34 | 显示全部楼层
没有转XP的?···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部