#==============================================================================
# ■ Treasure_Export
#------------------------------------------------------------------------------
# 宝箱导出工具 by SailCat
# 该程序能够导出工程中的全部宝箱,包括剧情获得道具,方便查错。
# 使用说明:
# 插入本脚本到Game_Temp(注意:不是Main)之前后执行就可以,你也可以手工做:
# treasure = Treasure_Export.new
# treasure.export_treasure(1) # 导出第1张地图的宝箱
# treasure.export_all_treasures # 导出所有地图的宝箱
# 导出的对话写在工程目录下的TreasureScript.txt文件里
# 注释掉第109行及以下的语句可以屏蔽这个功能,正常测试游戏
#==============================================================================
class Treasure_Export
#--------------------------------------------------------------------------
# ● 初期化
#--------------------------------------------------------------------------
def initialize
# 删除前次导出的文件
if FileTest.exist?("TreasureScript.txt")
File.delete("TreasureScript.txt")
end
@item_data = load_data("Data/Items.rxdata")
@weapon_data = load_data("Data/Weapons.rxdata")
@armor_data = load_data("Data/Armors.rxdata")
@map_infos = load_data("Data/MapInfos.rxdata")
end
#--------------------------------------------------------------------------
# ● 执行导出宝箱
# map_id: 地图ID
#--------------------------------------------------------------------------
def export_treasure(map_id)
File.open("TreasureScript.txt", "a") do |f|
map_name = sprintf("Data/Map%03d.rxdata", map_id)
if FileTest.exist?(map_name)
# 载入当前地图
map = load_data(map_name)
m = false
# 循环地图中所有事件
for i in 1..999
event = map.events[i]
if event != nil
t = false
# 循环事件的每一页
event.pages.each do |page|
# 如果指令不为空
if page.list.length > 0
# 循环页的所有指令
page.list.each do |command|
# 检查宝箱指令
info = ""
case command.code
when 125 # 增减金钱
if command.parameters[0] == 0
info = sprintf("金钱: %s%d", command.parameters[1] == 1 ?
"变量" : "", command.parameters[2])
end
when 126 # 增减道具
if command.parameters[1] == 0
info = sprintf("道具: %s x %s%d", @item_data[command.parameters[0]].name,
command.parameters[2] == 1 ? "变量" : "", command.parameters[3])
end
when 127 # 增减武器
if command.parameters[1] == 0
info = sprintf("武器: %s x %s%d", @weapon_data[command.parameters[0]].name,
command.parameters[2] == 1 ? "变量" : "", command.parameters[3])
end
when 128 # 增减防具
if command.parameters[1] == 0
info = sprintf("防具: %s x %s%d", @armor_data[command.parameters[0]].name,
command.parameters[2] == 1 ? "变量" : "", command.parameters[3])
end
end
if info != ""
# 输出事件提示字样
if !m
f.write("-----------------------------------------------------\n")
f.write(sprintf(" ■ Map: %d (%s)\n", map_id, @map_infos[map_id].name))
f.write("-----------------------------------------------------\n")
m = true
end
if !t
f.write(sprintf(" □ 坐标: (%03d, %03d); ", event.x, event.y))
t = true
else
f.write(" ")
end
# 输出宝箱
f.write(info)
f.write("\n")
end
end
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● 批量导出宝箱
#--------------------------------------------------------------------------
def export_all_treasures
for map_id in 1..999
export_treasure(map_id)
end
end
end
t=Treasure_Export.new
t.export_all_treasures
exit