=begin
===============================================================================
导入/导出媒体文件列表 By喵呜喵5
===============================================================================
【说明】
将游戏中使用到的媒体文件名称导出到一个TXT文件中
修改完毕后可以重新导入回游戏
使用这个脚本可以方便的批量替换或者检查游戏中的媒体文件
目前仅对事件指令中的显示图片以及播放音乐类指令有效
=end
#==============================================================================
# 设定部分
#==============================================================================
M5MARK = "◎"
#播放音乐的标志,在这里填写一个不会在文件名中出现的符号
M5MARK2 = "★"
#显示图片的标志,在这里填写一个不会在文件名中出现的符号
COMMON = true # true / false
#导出/导入公共事件中的媒体文件名
TROOP = true # true / false
#导出/导入敌群事件中的媒体文件名
LOADMODE = true # true / false
#需要导入修改好的内容的话,这里修改为false
#==============================================================================
# 设定结束
#==============================================================================
#==============================================================================
# 脚本部分
#==============================================================================
def read_txt(file_name)
@file = []
return if !File.exists?("Event/#{file_name}.txt")
@text = nil
IO.foreach("Event/#{file_name}.txt") do |line|
@text = line.gsub("\xEF\xBB\xBF","").split("\n")[0]
@file.push(@text.delete("#{M5MARK}").delete("#{M5MARK2}")) if @text
end
end
def save_event_list(event_list)
return if !@file
event_list.each do |command|
case command.code
when 241,245,249,250
command.parameters[0].name = @file.delete_at(0)
when 231
command.parameters[1] = @file.delete_at(0)
end
end
end
def save_map_event
map_list = load_data("Data/MapInfos.rvdata2").keys
map_list.each do |map_id|
read_txt("地图#{map_id}")
map = load_data(sprintf("Data/Map%03d.rvdata2",map_id))
map.events.keys.each do |event_id|
map.events[event_id].pages.each do |page|
save_event_list(page.list)
end
end
save_data(map,sprintf("Data/Map%03d.rvdata2",map_id))
end
end
def save_common_event
read_txt("公共事件")
file = load_data("Data/CommonEvents.rvdata2")
file.each do |event|
save_event_list(event.list) if event
end
save_data(file,"Data/CommonEvents.rvdata2")
end
def save_troop_event
file = load_data("Data/Troops.rvdata2")
file.each do |troop|
next if !troop
read_txt("敌群#{troop.id}")
troop.pages.each do |page|
save_event_list(page.list)
end
end
save_data(file,"Data/Troops.rvdata2")
end
def load_event_list(event_list)
event_list.each do |command|
case command.code
when 241,245,249,250
@file_content += ("#{M5MARK}#{command.parameters[0].name}\n")
when 231
@file_content += ("#{M5MARK2}#{command.parameters[1]}\n")
end
end
end
def load_map_event
file = load_data("Data/MapInfos.rvdata2")
file.keys.each do |map_id|
@file_content = ""
map = load_data(sprintf("Data/Map%03d.rvdata2",map_id))
event = map.events
event.keys.each do |event_id|
event[event_id].pages.each_with_index do |event_page,index|
load_event_list(event_page.list)
end
end
save_text("地图#{map_id}",@file_content)
end
end
def load_common_event
@file_content = ""
file = load_data("Data/CommonEvents.rvdata2")
file.each do |event|
next if !event
load_event_list(event.list)
end
save_text("公共事件",@file_content)
end
def load_troop_event
@file_content = ""
file = load_data("Data/Troops.rvdata2")
file.each do |troop|
next if !troop
troop.pages.each_with_index do |event_page,index|
load_event_list(event_page.list)
end
save_text("敌群#{troop.id}",@file_content)
end
end
def save_text(name,word)
return if word == ""
content = File.open("Event/#{name}.txt",'w')
content.puts word
content.close
end
if LOADMODE
Dir.mkdir("Event") if !File.directory?("Event")
load_map_event
load_common_event if COMMON
load_troop_event if TROOP
msgbox "导出完毕!\n导出的媒体文件列表保存在游戏工程的Event目录下"
else
save_map_event
save_common_event if COMMON
save_troop_event if TROOP
msgbox "导入完毕!#{$TEST ? "\n请重新启动编辑器以查看效果" : ""}"
end
exit