DazedTL/scripts/rvdata2json-fixed/to_rvdata2.rb
2023-04-21 03:54:59 -05:00

135 lines
3.6 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
require 'jsonable'
require 'zlib'
require_relative 'rgss3'
#2015/6/27
#制限事項Areas.rvdata2とScripts.rvdata2に未対応
#↓解決済2015/6/27
# 既存の不具合/15.6.18
# このスクリプトで復帰させると、以降エディタ上にイベントが表示されない
# (新規作成含む)
# イベント自体は動く
#追加メソッド
def restore_rvdata2(list)
return unless list.is_a?(Hash)
return unless list.has_key?("json_class")
obj = nil
case list["json_class"]
when "Color"
obj = Color.new([0,0,0,0])
when "Table"
obj = Table.new([1,1,0,0,1,[]])
when "Tone"
obj = Tone.new([0,0,0,0])
when "RPG::Event"
obj = RPG::Event.new(list["@x"], list["@y"])
when "RPG::EventCommand"
obj = RPG::EventCommand.new(list["@code"], list["@indent"], list["@parameters"])
when "RPG::MoveCommand"
obj = RPG::MoveCommand.new(list["@code"], list["@parameters"])
when "RPG::BaseItem::Feature"
obj = RPG::BaseItem::Feature.new(list["@code"], list["@data_id"], list["@value"])
when "RPG::UsableItem::Effect"
obj = RPG::UsableItem::Effect.new(list["@code"], list["@data_id"], list["@value1"], list["@value2"])
when "RPG::Map"
obj = RPG::Map.new(list["@width"], list["@height"])
when "RPG::BGM"
obj = RPG::BGM.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::BGS"
obj = RPG::BGS.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::ME"
obj = RPG::ME.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::SE"
obj = RPG::SE.new(list["@name"], list["@volume"], list["@pitch"])
else
str = "obj=" + list["json_class"] + ".new"
eval(str)
end
iterate_setting_value(obj, list)
return obj
end
def iterate_setting_value(target, list)
val = target.instance_variables
val.each{|d|
#マップイベントデータの場合
if d == :@events
list[d.to_s].each{|k, v|
target.events[k.to_i] = restore_rvdata2(v)
}
#target.events.each_key{|key|
# p key
#}
# 値がクラスオブジェクト
elsif list[d.to_s].is_a?(Hash)
target.instance_variable_set(d, restore_rvdata2(list[d.to_s]))
# 値がクラスオブジェクトの配列
elsif list[d.to_s].is_a?(Array) && list[d.to_s][0].is_a?(Hash)
data_trans = []
list[d.to_s].each{|d|
data_trans << restore_rvdata2(d)
}
target.instance_variable_set(d, data_trans)
else
target.instance_variable_set(d, list[d.to_s])
end
}
end
[
'Data/Actors.json',
'Data/Animations.json',
# 'Data/Areas.json',
'Data/Armors.json',
'Data/Classes.json',
'Data/CommonEvents.json',
'Data/Enemies.json',
'Data/Items.json',
*Dir.glob('Data/Map[0-9][0-9][0-9].json'),
'Data/MapInfos.json',
'Data/Skills.json',
'Data/States.json',
'Data/System.json',
'Data/Tilesets.json',
'Data/Troops.json',
'Data/Weapons.json'
].each do |json|
text = ''
p json
f = File.open(json, 'r:utf-8')
f.each {|line|
text += line
}
data = JSON.parse(text)
data_trans = nil
if data.is_a?(Array)
data_trans = []
data.each{ |d|
if d == nil
data_trans << d
else
data_trans << restore_rvdata2(d)
end
}
#あまり賢くない方法で対処(後で考える)
elsif data.is_a?(Hash)
if json == 'Data/MapInfos.json'
data_trans = {}
data.each{|k, v|
data_trans[k.to_i] = restore_rvdata2(v)
}
else
data_trans = restore_rvdata2(data)
end
else
data_trans = restore_rvdata2(data)
end
#p data_trans
File.open('Data/'+File.basename(json,'.json')+'.rvdata2', 'wb') do |file|
file.write(Marshal.dump(data_trans))
end
f.close
end