Project1

标题: 发布一个 VX 移植到 VA [打印本页]

作者: z2z4    时间: 2013-4-18 15:22
标题: 发布一个 VX 移植到 VA
            VX的 Data  全部放到 VA 的 Data 里  
        VX里的数据将 都被移植到 VA里   脚本也可以移植 不过移植过去没什么用 需要的话 在后面自己可以加进去
      
         操作方法 开始界面 按住F12 大概5秒差不多  就可以移植过来了 地图 装备 道具 技能 什么的 都可以移植过来


RUBY 代码复制
  1. # VX->VXAceへの変換処理を行うか?
  2. CONVERT_VX_TO_ACE = true
  3. # データベースの変換を行うか?
  4. CONVERT_DB  = true
  5. # マップの変換を行うか?
  6. CONVERT_MAP = true
  7.  
  8. # 旧バージョンでAceへの変換が不十分だったデータを修正するか?
  9. # trueの状態で二回以上実行すると、一部のイベントデータが狂います。
  10. RE_ADJUST_VX_TO_ACE = false
  11.  
  12. # -*- coding: utf-8 -*-
  13. =begin
  14.  
  15. ★ks_VX→VXAceデータ移行
  16. 2011/12/18      一部のイベントデータに移植ミスがあったため、
  17.                 移植済みデータの修正機能の実装とともに修正更新。
  18. 2011/12/17      自然回復しないステートの設定に不備があったので修正。
  19. 2011/12/16      細かい設定項目を追加。
  20. 2011/12/15      ブツが届いたので移行が不十分な点を修正。
  21.                 マップが反映されないとか、%系の効果に無茶な値が入ってたりとか。
  22. 2011/12/10 20時 スキルや使用アイテムに属性に対応した無駄データが作られていたので削除。
  23.                 スキルのIDがずらした分変更されてなかったので修正。
  24. 2011/12/10 19時 VXの時の属性を保持する際の書式を設定できるように変更。
  25.                 体験版での使い方を追記。
  26. 2011/12/10 18時 アイテムのHP回復効果の変換が違ったっぽいので修正。
  27.                         ステート関連で幾つか数値的な間違いがあったっぽいので修正。
  28.  
  29. □===制作・著作===□
  30. MaidensnowOnline  暴兎
  31. 見た目にまったく判らないスクリプトなので、著作権表記は必要ありません。
  32. というか変換するとき意外は入れておく必要がないスクリプトです。
  33.  
  34. □===配置場所===□
  35. スクリプトの一番上にでも設置して使ってください。
  36.  
  37. □===説明・使用方法===□
  38. 1.VXAceのDataフォルダに、VXのDataフォルダの中身を丸ごと投げ込みます。
  39. 2.テストプレイを起動して、タイトル画面が出たら終了します。
  40.   グラフィックがない関係でcacheのエラーが出る場合もありますが特に問題はありません。
  41. 3.プロジェクトを保存せずにエディタを終了します。
  42. 4.起動するとデータベースとマップが変換後のものになっています。
  43. 注意・初期設定だと元々あったVXAceのデータベースは変換後データで上書きされます。
  44. なお、変換結果が、ファイルに対応した名前でゲームフォルダに生成されます。
  45. このファイルはUTF-8形式のテキストなので、UTF-8形式で開いて読んでください。
  46.  
  47. ※体験版で試す場合は、拡張子を.rbに変更してゲームフォルダに置き、
  48.  以下のスクリプトをイベント中で実行してください。
  49.  また、2byte文字を含むプロジェクトパスの場合エラーで実行できません。
  50.  
  51. s = File.expand_path(".")
  52. s.force_encoding('UTF-8')
  53. ss = "/ks_VX-VXAce_converter"
  54. ss.force_encoding('UTF-8')
  55. p s, ss
  56. Kernel.require s + ss
  57.  
  58.  
  59. □===使用上の注意===□
  60. ・タイルセットは、VXの並びに準じたものを自分で作る必要があります。
  61. ・色調変更など、色設定がかかわるイベントコマンドはオブジェクトの都合か、正常に移植されません。
  62. ・経験値曲線には対応していません。
  63. ・用語などには対応していません。
  64. ・職業の能力値成長曲線は同じIDのアクターの能力値成長曲線を使用します。
  65. ・魔法防御には精神力と同じ値、アクター・エネミーは更に運に敏捷性と同じ値が入ります。
  66. ・スキル・使用アイテムの属性は、設定されている属性のうち一番初めの物に設定されますが、
  67.  元の属性はメモ欄に記録されます。
  68. ・エリアはリージョンに変換され、重なっている場合は両方と違うリージョン番号になります。
  69.  
  70. =end
  71.  
  72. # 設定項目(特に設定しなくても大丈夫)_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  73. # %sなどが含まれる文字列の変更が必要な場合は、%s以外を編集してください。
  74. # 変換結果のテキストファイルを出力するかの設定
  75. PUT_RESULT = false
  76. # 変換結果のテキストファイルを出力先の相対パス
  77. POUT_DIR = "ext_paramater_log_[%s]_.txt"
  78. # 変換したファイルを出力先のファイル名(相対パス+ファイル名)
  79. # 初期値ではもともとあったAceのデータベースを上書きする設定になっているので注意。
  80. PUT_FILE_NAME = "data/%s2"
  81. # VXのスキルや仕様アイテムの属性をメモに保持する際の書式です。
  82. VX_ELEMENT_STR = "<VX属性 %s>"
  83.  
  84. class Object
  85.         # IDいくつからに旧スキルを入れるか(1,2が通常攻撃、防御となったことを考慮)
  86.   # また、3を逃げる、4を何もしないであると仮定して敵の行動を修正します。
  87.   # なので1~4を予約番号として、余裕を持って10を初期設定値としています。
  88.         # クラスの習得スキル番号をずらす際にも加算されます。
  89.         GETA_FOR_SKILLS = 10
  90.         # スキル・アイテムを移行する際、基本ダメージの絶対値が1の場合、加算しない
  91.         IGNORE_BASE_DAMAGE_1 = true
  92.         # ダメージ計算式における旧関係度が100の時の能力値の倍率です
  93.   ATK_RATE = 4
  94.   SPI_RATE = 2
  95.   DEF_RATE = 2
  96.   MDF_RATE = 1
  97.   # 武器の命中値の+-0と判定される値
  98.   DEFAULT_HIT = 95
  99.         # VXAceのデフォルトに近いダメージ計算式の表記になります。※trueの場合かなり再現限度が下がる
  100.         # 例)ATK_RATE = 4、DEF_RATE = 2  で スキルが打撃関係度50
  101.         #                 (trueの場合)  atk * 2 - def * 1
  102.         #                 (falseの場合) atk * 200 / 100 - def * 100 / 100
  103.         # 例)SPI_RATE = 2、MDF_RATE = 1  で スキルが精神関係度25(再現度が下がるパターン)
  104.         #                 (trueの場合)  mat * 0 - mdf * 0
  105.         #                 (falseの場合) mat * 50 / 100 - mdf * 25 / 100
  106.         FORMULA_TYPE_ACE = false
  107.  
  108.         # 旧値を特殊効果に変換する時のコード番号の表(変更不要)
  109.         SPECIFY_CODE = Hash.new
  110.         SPECIFY_CODE[:@speed] = 33
  111.         SPECIFY_CODE[:@element_set] = 11
  112.         SPECIFY_CODE[:@element_ranks] = 11
  113.         SPECIFY_CODE[:@state_ranks] = 13
  114.         SPECIFY_CODE[:@state_set] = 13
  115.         SPECIFY_CODE[:@plus_state_set] = 21
  116.         SPECIFY_CODE[:@minus_state_set] = 22
  117.  
  118.         EQUIP_ELEMENT_SET_VALUE = Hash.new(0.5)
  119.         EQUIP_STATE_SET_VALUE = Hash.new(0)
  120.  
  121.         # 属性有効度のランクをAceの効果変動に変換するときの対応表
  122.         RANK_TO_VALUE_E = Hash.new(0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0)
  123.                 # 特定の属性IDだけランクに対応する耐性値を変更したい場合に設定する
  124.                 RANK_TO_VALUE_E[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}
  125.         # 状態有効度のランクをAceの効果変動に変換するときの対応表
  126.         RANK_TO_VALUE_S = Hash.new(0=>200, 1=>nil, 2=>20, 3=>40, 4=>60, 5=>80, 6=>100)
  127.                 # 特定のステートIDだけランクに対応する耐性値を変更したい場合に設定する
  128.                 RANK_TO_VALUE_S[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}
  129.  
  130.         # 旧能力値と名前が違う変数の変換表(変更不要)
  131.         # ちなみに、ここで変換先が指定されておらず、新しいデータにない値は移植されない。
  132.         # (変換前後でキーが変わってなくても、ここで設定されていれば移植される)
  133.         CONVERT_TO_ACE_KEYS = {
  134.     :@new_data=>nil,
  135.                 #:@name=>:@item_name, #新旧で変数名が違う場合の表記例
  136.                 #:@jet =>:@jet, #新しいデータにない値を移植したい場合の表記例
  137.         }
  138.         # 特殊効果が挿入される配列
  139.         def sepecifi_set
  140.     #p self.class, @id, *@features
  141.     @features ||= []
  142.                 return @features
  143.         end
  144.         # 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
  145.         SPECIFY_CLASS = RPG::BaseItem::Feature
  146. end
  147.  
  148. class RPG::UsableItem
  149.         # 旧値を特殊効果に変換する時のコード番号の表(変更不要)
  150.         SPECIFY_CODE = Hash.new
  151.         SPECIFY_CODE[:@state_set] = 32
  152.         SPECIFY_CODE[:@element_set] = 31
  153.         SPECIFY_CODE[:@state_set] = 32
  154.  
  155.         EQUIP_ELEMENT_SET_VALUE = Hash.new(0)
  156.         EQUIP_STATE_SET_VALUE = Hash.new(0.60)
  157.         # 特殊効果が挿入される配列
  158.         def sepecifi_set
  159.     #p self.class, @id, *@effects
  160.     @effects ||= []
  161.                 return @effects
  162.         end
  163.         # 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
  164.   SPECIFY_CLASS = RPG::UsableItem::Effect
  165. end
  166.  
  167. class RPG::Weapon
  168.         SPECIFY_CODE = RPG::UsableItem::SPECIFY_CODE.dup
  169.         SPECIFY_CODE[:@state_set] = 13
  170.         EQUIP_ELEMENT_SET_VALUE = RPG::UsableItem::EQUIP_ELEMENT_SET_VALUE
  171.         EQUIP_STATE_SET_VALUE = RPG::UsableItem::EQUIP_STATE_SET_VALUE
  172. end
  173.  
  174. class RPG::State
  175.         SPECIFY_CODE = Hash.new
  176.         SPECIFY_CODE[:@state_set] = 14
  177. end
  178.  
  179. class RPG::Armor
  180.         SPECIFY_CODE = RPG::State::SPECIFY_CODE
  181. end
  182.  
  183. # 設定項目終了_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  184.  
  185.  
  186.  
  187.  
  188.  
  189. class RPG::BaseItem::Feature
  190.   def value1=(v)
  191.     @value = v
  192.   end
  193.   def value1
  194.     return @value || 0
  195.   end
  196.   def value2
  197.     return 0
  198.   end
  199.   TO_S = "<%s code:%2s data_id:%3s value:%3d>"
  200.   def to_s
  201.     return sprintf(TO_S, self.class, @code, @data_id, @value)
  202.   end
  203. end
  204. class RPG::UsableItem::Effect
  205.   TO_S = "<%s code:%2s data_id:%3s value1:%3d value2:%3d>"
  206.   def to_s
  207.     return sprintf(TO_S, self.class, @code, @data_id, @value1, @value2)
  208.   end
  209. end
  210. class RPG::UsableItem::Damage
  211.   TO_S = "<%s type:%1s element_id:%3s variance:%3s critical:%s\n         formula:%s>"
  212.   def to_s
  213.     return sprintf(TO_S, self.class, @type, @element_id, @variance, @critical, @formula)
  214.   end
  215. end
  216.  
  217. module Kernel
  218.   @@last_pp_name = ""
  219.   COLUMN_STR = "%s %s\r"
  220.   CR_STR = "\r/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_\r"
  221.   PRINT_LINE_STR = " %s\r"
  222.   def pp(*args)
  223.     return unless PUT_RESULT
  224.     f = File.open(sprintf(POUT_DIR, $filename), "a:UTF-8")
  225.     if @@last_pp_name != args[1]
  226.       f.write(CR_STR)
  227.       f.write(sprintf(COLUMN_STR, *args[0,2]))
  228.       @@last_pp_name = args[1]
  229.     end
  230.     args.shift
  231.     args.shift
  232.     args.each{|str| f.write(sprintf(PRINT_LINE_STR, str)) }
  233.     f.close
  234.   end
  235. end
  236.  
  237. module Kernel
  238.   def force_encoding_to_utf_8
  239.     return self
  240.   end
  241. end
  242. class NilClass
  243.         def convert_to_ace
  244.     return self
  245.   end
  246. end
  247. class String
  248.   UTF_8 = 'UTF-8'
  249.   def force_encoding_to_utf_8
  250.     self.force_encoding(UTF_8) if $VXAce && !self.frozen?
  251.     return self
  252.   end
  253.         def convert_to_ace
  254.     return self.force_encoding_to_utf_8
  255.   end
  256. end
  257. class TrueClass
  258.         def convert_to_ace
  259.     return self
  260.   end
  261. end
  262. class FalseClass
  263.         def convert_to_ace
  264.     return self
  265.   end
  266. end
  267. class Numeric
  268.         def convert_to_ace
  269.     return self
  270.   end
  271. end
  272. class Table
  273.         def convert_to_ace
  274.     return self
  275.   end
  276. end
  277. class Object
  278.   FEATURE_ELEMENT_RATE  = 11              # 属性有効度
  279.   FEATURE_DEBUFF_RATE   = 12              # 弱体有効度
  280.   FEATURE_STATE_RATE    = 13              # ステート有効度
  281.   FEATURE_STATE_RESIST  = 14              # ステート無効化
  282.   FEATURE_PARAM         = 21              # 通常能力値
  283.   FEATURE_XPARAM        = 22              # 追加能力値
  284.   FEATURE_SPARAM        = 23              # 特殊能力値
  285.   FEATURE_ATK_ELEMENT   = 31              # 攻撃時属性
  286.   FEATURE_ATK_STATE     = 32              # 攻撃時ステート
  287.   FEATURE_ATK_SPEED     = 33              # 攻撃速度補正
  288.   FEATURE_ATK_TIMES     = 34              # 攻撃追加回数
  289.   FEATURE_STYPE_ADD     = 41              # スキルタイプ追加
  290.   FEATURE_STYPE_SEAL    = 42              # スキルタイプ封印
  291.   FEATURE_SKILL_ADD     = 43              # スキル追加
  292.   FEATURE_SKILL_SEAL    = 44              # スキル封印
  293.   FEATURE_EQUIP_WTYPE   = 51              # 武器タイプ装備
  294.   FEATURE_EQUIP_ATYPE   = 52              # 防具タイプ装備
  295.   FEATURE_EQUIP_FIX     = 53              # 装備固定
  296.   FEATURE_EQUIP_SEAL    = 54              # 装備封印
  297.   FEATURE_SLOT_TYPE     = 55              # スロットタイプ
  298.   FEATURE_ACTION_PLUS   = 61              # 行動回数追加
  299.   FEATURE_SPECIAL_FLAG  = 62              # 特殊フラグ
  300.   FEATURE_COLLAPSE_TYPE = 63              # 消滅エフェクト
  301.   FEATURE_PARTY_ABILITY = 64              # パーティ能力
  302.   #--------------------------------------------------------------------------
  303.   # ● 定数(特殊フラグ)
  304.   #--------------------------------------------------------------------------
  305.   FLAG_ID_AUTO_BATTLE   = 0               # 自動戦闘
  306.   FLAG_ID_GUARD         = 1               # 防御
  307.   FLAG_ID_SUBSTITUTE    = 2               # 身代わり
  308.   FLAG_ID_PRESERVE_TP   = 3               # TP持ち越し
  309.   #--------------------------------------------------------------------------
  310.   # ● 定数(能力強化/弱体アイコンの開始番号)
  311.   #--------------------------------------------------------------------------
  312.   ICON_BUFF_START       = 64              # 強化(16 個)
  313.   ICON_DEBUFF_START     = 80              # 弱体(16 個)
  314.  
  315.   #--------------------------------------------------------------------------
  316.   # ● 定数(使用効果)
  317.   #--------------------------------------------------------------------------
  318.   EFFECT_RECOVER_HP     = 11              # HP 回復
  319.   EFFECT_RECOVER_MP     = 12              # MP 回復
  320.   EFFECT_GAIN_TP        = 13              # TP 増加
  321.   EFFECT_ADD_STATE      = 21              # ステート付加
  322.   EFFECT_REMOVE_STATE   = 22              # ステート解除
  323.   EFFECT_ADD_BUFF       = 31              # 能力強化
  324.   EFFECT_ADD_DEBUFF     = 32              # 能力弱体
  325.   EFFECT_REMOVE_BUFF    = 33              # 能力強化の解除
  326.   EFFECT_REMOVE_DEBUFF  = 34              # 能力弱体の解除
  327.   EFFECT_SPECIAL        = 41              # 特殊効果
  328.   EFFECT_GROW           = 42              # 成長
  329.   EFFECT_LEARN_SKILL    = 43              # スキル習得
  330.   EFFECT_COMMON_EVENT   = 44              # コモンイベント
  331.   #--------------------------------------------------------------------------
  332.   # ● 定数(特殊効果)
  333.   #--------------------------------------------------------------------------
  334.   SPECIAL_EFFECT_ESCAPE = 0               # 逃げる
  335.  
  336.         attr_reader   :new_data
  337.         def convert_to_ace
  338.     begin
  339.             @new_data = self.class.new
  340.     rescue
  341.             @new_data = self.class.new(0,0)
  342.     rescue
  343.       msgbox_p self.class
  344.             @new_data = self.class.new
  345.     end
  346.     $depth += 1
  347.     #msgbox_p @id, @name, @new_data.name, @new_data unless @name.nil? || @name.empty? || @id < 41
  348.                 instance_variables.each{|key|
  349.                         value = self.instance_variable_get(key)
  350.                         set_converted_to_ace(@new_data, key, value)
  351.                 }
  352.     unless @new_data.sepecifi_set.nil?
  353.       @new_data.sepecifi_set.sort{|a, b|
  354.       begin
  355.         b.code * 100000000 + b.data_id * 1000000 + b.value1 * 1000 + b.value2 <=>
  356.         a.code * 100000000 + a.data_id * 1000000 + a.value1 * 1000 + a.value2
  357.       rescue
  358.         msgbox_p a, b
  359.       end
  360.       }
  361.     end
  362.     #name = @new_data.instance_variable_get(:@name)
  363.     if $depth == 1
  364.       vz = @new_data.instance_variable_get(:@note)
  365.       name = @new_data.instance_variable_get(:@name) || @new_data.to_s
  366.       #msgbox_p i, type, name, @new_data, " " if vv.nil? && vx.nil?
  367.       pp @id, name, @new_data
  368.       @new_data.instance_variables.each{|key|
  369.         next if key == :@features
  370.         next if key == :@effects
  371.         next if key == :@note
  372.         pp @id, name, "#{key} : #{@new_data.instance_variable_get(key)}"
  373.       }
  374.       pp @id, name, vz.gsub("\n"){""} unless vz.nil?
  375.     end
  376.     $depth -= 1
  377.                 return @new_data
  378.         end
  379.         def set_converted_to_ace(new_data, key, value)
  380.                 @converted_key = false
  381.                 key = convert_to_ace_key(key)
  382.                 return if key.nil?
  383.                 if key == :@element_set || key == :@element_ranks
  384.                         return element_set_convert_to_ace(key, value)
  385.                 elsif key == :@state_set || key == :@state_ranks || key == :@plus_state_set || key == :@minus_state_set
  386.                         return state_set_convert_to_ace(key, value)
  387.                 end
  388.                 return if !@converted_key && @new_data.instance_variable_get(key).nil?
  389.                 @new_data.instance_variable_set(key, value.convert_to_ace)
  390.     #msgbox_p key, value, @new_data.instance_variable_get(key)
  391.         end
  392.         def convert_to_ace_key(key)
  393.                 vv = self.class::CONVERT_TO_ACE_KEYS[key]
  394.                 vv = CONVERT_TO_ACE_KEYS[key] if vv.nil?
  395.                 if !vv.nil?
  396.                         key = vv
  397.                         @converted_key = true
  398.                 end
  399.     #msgbox_p key, vv
  400.                 return key
  401.         end
  402.         def specifi_code(key)
  403.                 result = self.class::SPECIFY_CODE[key] || SPECIFY_CODE[key]
  404.     msgbox_p self.class, @name, key, result if result.nil?
  405.     return result
  406.         end
  407.         def new_specifi(code, data_id, value, value2 = nil)
  408.     msgbox_p caller[0] if code.nil?
  409.                 ndat = self.class::SPECIFY_CLASS.new
  410.                 ndat.code = code
  411.                 ndat.data_id = data_id
  412.                 ndat.value1 = value
  413.                 ndat.value2 = value2 unless value2.nil?
  414.           @new_data.sepecifi_set << ndat
  415.                 return ndat
  416.         end
  417.         def element_set_convert_to_ace(key, set)
  418.                 code = specifi_code(key)
  419.                 if Array === set
  420.                         dvalue = self.class::EQUIP_ELEMENT_SET_VALUE
  421.                         set.each{|data_id|
  422.         next if data_id == 0
  423.                                 value = dvalue[data_id]
  424.         msgbox_p @name, key, code, data_id, value if code.nil?
  425.                                 new_specifi(code, data_id, value)
  426.                         }
  427.                 elsif Table === set
  428.                         values = RANK_TO_VALUE_E
  429.                         set.xsize.times{|data_id|
  430.         next if data_id == 0
  431.                                 value = values[data_id][set[data_id]]
  432.                                 next if value.nil?
  433.                                 new_specifi(code, data_id, value / 100.0)
  434.                         }
  435.                 end
  436.         end
  437.         def state_set_convert_to_ace(key, set)
  438.                 code = specifi_code(key)
  439.                 if Array === set
  440.                         dvalue = self.class::EQUIP_STATE_SET_VALUE
  441.                         set.each{|data_id|
  442.         next if data_id == 0
  443.                                 value = dvalue[data_id]
  444.                                 new_specifi(code, data_id, value)
  445.                         }
  446.                 elsif Table === set
  447.                         values = RANK_TO_VALUE_E
  448.                         set.xsize.times{|data_id|
  449.         next if data_id == 0
  450.                                 value = values[data_id][set[data_id]]
  451.                                 next if value.nil?
  452.                                 new_specifi(code, data_id, value / 100.0)
  453.                         }
  454.                 end
  455.         end
  456. end
  457.  
  458. class RPG::Actor
  459.         def convert_to_ace
  460.                 super
  461.                 [@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id].each_with_index{|item_id, i|
  462.                         @new_data.equips[i] = item_id
  463.                 }
  464.  
  465.     new_specifi(FEATURE_SLOT_TYPE, 1, 1) if  @two_swords_style
  466.     new_specifi(FEATURE_EQUIP_FIX, 1, 0) if  @fix_equipment
  467.     new_specifi(FEATURE_SPECIAL_FLAG, 1, FLAG_ID_AUTO_BATTLE) if  @auto_battle
  468.     new_specifi(FEATURE_SPARAM, 1, 0.25) if  @super_guard
  469.     new_specifi(FEATURE_SPARAM, 3, 2.0) if  @pharmacology
  470.     new_specifi(FEATURE_XPARAM, 2, 4) if  @critical_bonus
  471.                 return @new_data
  472.         end
  473. end
  474. class RPG::Class
  475.         def convert_to_ace
  476.                 super
  477.     #new_specifi(FEATURE_SPARAM, 0, )
  478.     @new_data.sepecifi_set[0].value = (100 - @position * 25) / 100.0
  479.     actor = $now_data[@id]
  480.     now_params = actor.instance_variable_get(:@parameters)
  481.     [0, 1, 2, 3, 4, 4, 5, 5].each_with_index{|key, j|
  482.       @new_data.params.ysize.times{|k|
  483.         @new_data.params[j, k] = now_params[key, k]
  484.       }
  485.     }
  486.     return @new_data
  487.         end
  488. end
  489. class RPG::Class::Learning
  490.         def convert_to_ace
  491.                 super
  492.     @new_data.skill_id += Object::GETA_FOR_SKILLS
  493.     return @new_data
  494.   end
  495. end
  496. class RPG::Enemy::Action
  497.         def convert_to_ace
  498.                 super
  499.                 if @kind == 0
  500.                         case @basic
  501.                         when 0
  502.                                 @new_data.skill_id = 1
  503.                         when 1
  504.                                 @new_data.skill_id = 2
  505.                  when 2
  506.                                 @new_data.skill_id = 3
  507.                         when 3
  508.                                 @new_data.skill_id = 4
  509.                         end
  510.                 else
  511.             @new_data.skill_id += Object::GETA_FOR_SKILLS
  512.                 end
  513.                 return @new_data
  514.   end
  515. end
  516. class RPG::Enemy
  517.         def convert_to_ace
  518.                 super
  519.     [@maxhp, @maxmp, @atk, @def, @spi, @spi, @agi, @agi].each_with_index{|value, i|
  520.             @new_data.params[i] = value
  521.     }
  522.     @new_data.sepecifi_set[0].value = @hit / 100.0
  523.     @new_data.sepecifi_set[1].value = [url=home.php?mod=space&uid=284635]@eva[/url] / 100.0
  524.     [@drop_item1, @drop_item2].each_with_index{|data, i|
  525.       dat = RPG::Enemy::DropItem.new
  526.       dat.kind = data.kind
  527.       case data.kind
  528.       when 1; dat.data_id = data.instance_variable_get(:@item_id)
  529.       when 2; dat.data_id = data.instance_variable_get(:@weapon_id)
  530.       when 3; dat.data_id = data.instance_variable_get(:@armor_id)
  531.       end
  532.       dat.denominator = data.denominator
  533.       @new_data.drop_items[i] = dat
  534.     }
  535.  
  536.  
  537.     @levitate = false
  538.  
  539.     new_specifi(FEATURE_XPARAM, 2, 0.10) if @has_critical
  540.                 return @new_data
  541.   end
  542. end
  543. class RPG::BaseItem
  544. end
  545. class RPG::UsableItem
  546.         def convert_to_ace
  547.     e_set = remove_instance_variable(:@element_set)
  548.                 super
  549.     new_specifi(EFFECT_COMMON_EVENT, @common_event_id, 0) if @common_event_id != 0
  550.  
  551.     unless e_set.empty?
  552.             txt = ""
  553.             e_set.each{|i|
  554.                     txt += ", " unless txt.empty?
  555.                     txt += i.to_s
  556.             }
  557.             @new_data.note += sprintf(VX_ELEMENT_STR, txt)
  558.     end
  559.  
  560.     @new_data.damage.element_id = e_set[0] || 0
  561.     if @base_damage != 0
  562.             txt = ""
  563.       txt += "#{@base_damage.abs}" if !IGNORE_BASE_DAMAGE_1 || @base_damage.abs != 1
  564.       if @atk_f != 0
  565.               txt += " + " unless txt.empty?
  566.               txt += "a.atk * #{ATK_RATE * @atk_f / 100} - b.def * #{DEF_RATE * @atk_f / 100}" if FORMULA_TYPE_ACE
  567.               txt += "a.atk * #{ATK_RATE * @atk_f} / 100 - b.def * #{DEF_RATE * @atk_f} / 100" if !FORMULA_TYPE_ACE
  568.       end
  569.       if @spi_f != 0
  570.               txt += " + " unless txt.empty?
  571.               txt += "a.mat * #{SPI_RATE * @spi_f / 100} - b.mdf * #{MDF_RATE * @spi_f / 100}" if FORMULA_TYPE_ACE
  572.               txt += "a.mat * #{SPI_RATE * @spi_f} / 100 - b.mdf * #{MDF_RATE * @spi_f} / 100" if !FORMULA_TYPE_ACE
  573.       end
  574.       @new_data.damage.type = 1 unless txt.empty?
  575.       txt.gsub!("\s*(+|-)\s*b.(def|mdf)"){""} if @ignore_defense
  576.       @new_data.damage.formula = txt
  577.       @new_data.damage.type = 1
  578.     end
  579.     @new_data.damage.type = 2 if @damage_to_mp
  580.     if @base_damage < 0
  581.       @new_data.damage.type += 2
  582.     elsif @absorb_damage
  583.       @new_data.damage.type += 4
  584.     end
  585.     @new_data.damage.variance = 20
  586.     @new_data.hit_type = 1 if @physical_attack
  587.  
  588.                 return @new_data
  589.   end
  590. end
  591. class RPG::Skill
  592.         def convert_to_ace
  593.                 super
  594.     @new_data.id += Object::GETA_FOR_SKILLS
  595.     @new_data.success_rate = @hit
  596.                 @new_data.stype_id = 1 if @spi_f > 0
  597.                 return @new_data
  598.         end
  599. end
  600. class RPG::Item
  601.         def convert_to_ace
  602.                 super
  603.     #@consumable = true
  604.     @new_data.success_rate = 100
  605.     if @hp_recovery_rate != 0 || @hp_recovery != 0
  606.             new_specifi(EFFECT_RECOVER_HP, 0, @hp_recovery_rate / 100.0, @hp_recovery)
  607.     end
  608.     if @mp_recovery_rate != 0 || @mp_recovery != 0
  609.             new_specifi(EFFECT_RECOVER_MP, 0, @mp_recovery_rate / 100.0, @mp_recovery)
  610.     end
  611.     if @parameter_type != 0
  612.             new_specifi(EFFECT_GROW, @parameter_type, @parameter_points)
  613.     end
  614.  
  615.                 return @new_data
  616.         end
  617. end
  618. class RPG::Weapon
  619.         def convert_to_ace
  620.                 super
  621.     @new_data.sepecifi_set[1].value = (@hit - DEFAULT_HIT) / 100.0
  622.     unless @element_set.include?(1)
  623.       @new_data.sepecifi_set.delete(@new_data.sepecifi_set.find{|dat|
  624.           dat.code == FEATURE_ATK_ELEMENT && dat.data_id == 1# && dat.value == 0
  625.       })
  626.     end
  627.     @two_handed = false
  628.     [@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
  629.             @new_data.params[i + 2] = value
  630.     }
  631.     new_specifi(33, 0, 99999999) if @fast_attack
  632.     new_specifi(FEATURE_XPARAM, 2, 4) if @critical_bonus
  633.                 new_specifi(FEATURE_ATK_TIMES , 0, 1) if @dual_attack
  634.                 return @new_data
  635.         end
  636. end
  637. class RPG::Armor
  638.         def convert_to_ace
  639.                 super
  640.     @atype_id = @kind || 0
  641.     @new_data.sepecifi_set[0].value = @eva / 100.0
  642.     [@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
  643.             @new_data.params[i + 2] = value
  644.     }
  645.     new_specifi(FEATURE_XPARAM , 3, 1000) if @prevent_critical
  646.     new_specifi(FEATURE_SPARAM , 4, 0.5) if @half_mp_cost
  647.     new_specifi(FEATURE_SPARAM , 9, 2) if @double_exp_gain
  648.     new_specifi(FEATURE_XPARAM , 7, 0.10) if @auto_hp_recover
  649.                 return @new_data
  650.         end
  651. end
  652. class RPG::State
  653.         def convert_to_ace
  654.                 restriction = remove_instance_variable(:@restriction)
  655.                 super
  656.                 new_specifi(FEATURE_STYPE_SEAL, 1, 1) if restriction == 1
  657.     new_specifi(FEATURE_XPARAM, 1, -1000) if restriction == 5
  658.                 restriction -= 1 if restriction == 2 || restriction == 5
  659.     @new_data.restriction = restriction
  660.  
  661.     [:@atk_rate, :@def_rate, :@spi_rate, :@spi_rate, :@agi_rate].each_with_index{|key, i|
  662.             vv = instance_variable_get(key)
  663.             next if vv == 100
  664.             new_specifi(FEATURE_PARAM , i + 2, vv / 100.0)
  665.     }
  666.     new_specifi(FEATURE_XPARAM , 7, -0.1) if @slip_damage
  667.     @new_data.remove_at_battle_end = @battle_only
  668.     @new_data.chance_by_damage = 100 if @release_by_damage
  669.     @new_data.min_turns = @hold_turn
  670.     @new_data.max_turns = @hold_turn
  671.     @new_data.auto_removal_timing = 2
  672.     if (1..99) === @auto_release_prob
  673.             @new_data.max_turns *= 100
  674.             @new_data.max_turns, v = @new_data.max_turns.divmod(@auto_release_prob)
  675.             @new_data.max_turns += 1 if v > 0
  676.     elsif @auto_release_prob == 0
  677.       @new_data.auto_removal_timing = 0
  678.     end
  679.                 return @new_data
  680.         end
  681. end
  682. module RPG
  683.         RESION_SIZE = Hash.new(0)
  684.   class Area
  685.     def convert_to_ace
  686.       $now_data = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
  687.       super
  688.       resion = RESION_SIZE[@map_id]
  689.       resionear = (0b1 << resion) << 8
  690.       @encounter_list.each_with_index{|data, i|
  691.         ndat = RPG::Map::Encounter.new
  692.         ndat.troop_id = data
  693.         ndat.region_set << resionear
  694.         $now_data.encounter_list << ndat
  695.       }
  696.       p "#{sprintf("Data/Map%03d.rvdata2", @map_id)} #{resion} #{resionear}"
  697.       @rect.width.times{|i|
  698.               xx = @rect.x + i
  699.               @rect.height.times{|j|
  700.                       yy = @rect.y + j
  701.           #p "x:#{xx} y:#{yy}"
  702.                       $now_data.data[xx, yy, 3] |= resionear
  703.               }
  704.       }
  705.       RESION_SIZE[@map_id] += 1
  706.       save_data($now_data, sprintf("Data/Map%03d.rvdata2", @map_id))
  707.       return @new_data
  708.     end
  709.   end
  710. end
  711. class RPG::Map
  712.     def convert_to_ace
  713.       super
  714.       list = @new_data.encounter_list
  715.       list.each_with_index{|data, i|
  716.         next if data.nil?
  717.         list[i] = RPG::Map::Encounter.new
  718.         list[i].troop_id = data
  719.       }
  720.       map = @new_data.data
  721.       map.resize(map.xsize, map.ysize, 4)
  722.       return @new_data
  723.     end
  724. end
  725. class NilClass
  726.         def convert_to_ace
  727.                 return self
  728.         end
  729. end
  730. class Array
  731.         def convert_to_ace
  732.     $depth += 1
  733.                 new_data = Array.new
  734.                 self.each_with_index{|value, i|
  735.       type = 0
  736.                   new_data[i] = value.nil? ? value : value.convert_to_ace
  737.       name = new_data[i].instance_variable_get(:@name)
  738.       if $depth == 1 && !name.nil? && !name.empty?# && i > 40
  739.         vv = new_data[i].instance_variable_get(:@features)
  740.         vx = new_data[i].instance_variable_get(:@effects)
  741.         vz = new_data[i].instance_variable_get(:@note)
  742.         #msgbox_p i, type, name, new_data[i], " " if vv.nil? && vx.nil?
  743.         pp i, name, new_data[i]
  744.         new_data[i].instance_variables.each{|key|
  745.           next if key == :@features
  746.           next if key == :@effects
  747.           next if key == :@note
  748.           pp i, name, "#{key} : #{new_data[i].instance_variable_get(key)}"
  749.         }
  750.         pp i, name, *vv unless vv.nil?
  751.         pp i, name, *vx unless vx.nil?
  752.         pp i, name, vz.gsub("\n"){""} unless vz.nil?
  753.       end
  754.                 }
  755.     $depth -= 1
  756.                 return new_data
  757.         end
  758. end
  759. class Hash
  760.         def convert_to_ace
  761.                 new_data = Hash.new
  762.                 new_data.default = self.default
  763.                 self.each_with_index{|(key, value), i|
  764.                   new_data[key] = value.convert_to_ace
  765.                 }
  766.                 return new_data
  767.         end
  768. end
  769. class Color
  770.         def convert_to_ace
  771.     return self
  772.   end
  773. end
  774. class RPG::EventCommand
  775.         def convert_to_ace
  776.     super
  777.     @new_data.re_convert_to_ace
  778.     return @new_data
  779.   end
  780.   def re_convert_to_ace
  781.     case @code
  782.     when 111
  783.       case @parameters[0]
  784.       when 4
  785.         @parameters[2] += 1 if @parameters[2] >= 2
  786.         @parameters[3] += Object::GETA_FOR_SKILLS if @parameters[2] == 3
  787.         #p @code, @parameters
  788.       end
  789.     when 122
  790.       case @parameters[3]
  791.       when 3..7
  792.         @parameters.insert(4, @parameters[3])
  793.         @parameters[3] = 3
  794.         #p @code, @parameters
  795.       end
  796.     when 311..318
  797.       siz = [6,5,4,2,6,6,6,4][@code - 311]
  798.       @parameters.unshift(0) if @parameters.size < siz
  799.       p @code, @parameters
  800.       @parameters[-1] += Object::GETA_FOR_SKILLS if @code == 318
  801.     end
  802.     return self
  803.   end
  804. end
  805.  
  806. if CONVERT_VX_TO_ACE# 実行するか切り替え
  807.  
  808. database_files = [
  809. "Areas.rvdata",
  810. "Actors.rvdata",
  811. "Classes.rvdata",
  812. "Enemies.rvdata",
  813. "Skills.rvdata",
  814. "Items.rvdata",
  815. "Weapons.rvdata",
  816. "Armors.rvdata",
  817. "States.rvdata",
  818. "Troops.rvdata",
  819. "Armors.rvdata",
  820. "Animations.rvdata",
  821. "System.rvdata",
  822. "MapInfos.rvdata",
  823. "CommonEvents.rvdata",
  824. ]
  825. Dir::entries("data/").reverse!.each{|filename|
  826.   $depth = 0
  827.   $filename = filename
  828.   now_file_nem = "data/%s"
  829.   new_file_nem = PUT_FILE_NAME
  830.   #if database_files.include?(filename)
  831.                 if filename == "System.rvdata"
  832.       File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
  833.       p "#{filename} の変換を開始"
  834.                         $now_data = load_data(sprintf(new_file_nem, filename))
  835.                   $old_data = load_data("data/#{filename}")
  836.                         $now_data.elements = $old_data.elements
  837.                   $new_data = $now_data
  838.                 else
  839.       case filename
  840.       when "Areas.rvdata"
  841.         next unless CONVERT_DB
  842.       when "Classes.rvdata"
  843.         next unless CONVERT_DB
  844.                                 $now_data = load_data("data/Actors.rvdata")
  845.       when /map\d{3}\.rvdata$/i
  846.         next unless CONVERT_MAP
  847.         $now_data = load_data("Data/MapInfos.rvdata")
  848.       else
  849.         next unless CONVERT_DB
  850.         next unless database_files.include?(filename)
  851.       end
  852.       File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
  853.       p "#{filename} の変換を開始"
  854.                         $old_data = load_data("data/#{filename}")
  855.                         $new_data = $old_data.convert_to_ace
  856.       case filename
  857.       when "Areas.rvdata"
  858.         next
  859.                         when "Skills.rvdata"
  860.                                 $now_data = load_data(sprintf(now_file_nem, filename))
  861.                                 size = Object::GETA_FOR_SKILLS
  862.         $new_data.shift
  863.                                 $new_data.unshift(*$now_data[0,size+1])
  864.       else
  865.                         end
  866.                         #msgbox_p "data/#{filename} の変換に成功。"
  867.                 end
  868.                 save_data($new_data, sprintf(new_file_nem, filename))
  869.   #end
  870. }
  871.  
  872. RE_ADJUST_VX_TO_ACE = false
  873. end# CONVERT_VX_TO_ACE
  874.  
  875.  
  876. if RE_ADJUST_VX_TO_ACE && !$@
  877. msgbox_p "旧バージョンで変換ミスがあったデータを再変換します", "この処置を、新バージョンで変換したデータや、修正済みのデータに対して適用すると、", "一部のイベントデータが異常な値になります。"
  878. msgbox_p "実行を中止する場合は、F12を押しながらエンターキーを押し、", "その後テストプレイを中止終了してください。"
  879. msgbox_p "再変換を実行します。"
  880. module Kernel
  881.         def re_convert_to_ace
  882.                 instance_variables.each{|key|
  883.                         value = self.instance_variable_get(key).re_convert_to_ace
  884.       self.instance_variable_set(key, value)
  885.                 }
  886.                 return self
  887.         end
  888. end
  889. class NilClass
  890.         def re_convert_to_ace
  891.     return self
  892.   end
  893. end
  894. class Array
  895.         def re_convert_to_ace
  896.     $depth += 1
  897.                 self.each_with_index{|value, i|
  898.       self[i] = value.re_convert_to_ace
  899.                 }
  900.     $depth -= 1
  901.                 return self
  902.         end
  903. end
  904. class Hash
  905.         def re_convert_to_ace
  906.                 self.each_with_index{|(key, value), i|
  907.       self[key] = value.re_convert_to_ace
  908.                 }
  909.                 return self
  910.         end
  911. end
  912. Dir::entries("data/").reverse!.each{|filename|
  913.   $depth = 0
  914.   $filename = filename
  915.   now_file_nem = "data/%s"
  916.   new_file_nem = "data/%s"
  917.   #if database_files.include?(filename)
  918.   case filename
  919.   when /map\d{3}\.rvdata2$/i
  920.   when /CommonEvents.rvdata2$/i
  921.   else
  922.     next
  923.   end
  924.   p "#{filename} の再変換を開始"
  925.   $old_data = load_data("data/#{filename}")
  926.         $new_data = $old_data.re_convert_to_ace
  927.         save_data($new_data, sprintf(new_file_nem, filename))
  928. }
  929. end# if RE_ADJUST_VX_TO_ACE

作者: 喵呜喵5    时间: 2013-4-19 21:50
http://rpg.blue/thread-301572-1-1.html

唔……和这个有什么区别?
作者: 当时我就毛了3    时间: 2013-4-23 19:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: chd114    时间: 2013-4-23 21:49
没有转XP的?···




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1