| 赞 | 121 |
| VIP | |
| 好人卡 | |
| 积分 | 128 |
| 经验 | |
| 最后登录 | 2026-9-20 |
| 在线时间 | 1010 小时 |
- 梦石
- 0
- 星屑
- 12824
- 在线时间
- 1010 小时
- 注册时间
- 2019-11-5
- 回帖
- 2329
  
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 哇哇哇啊叭叭 于 2021-6-6 16:56 编辑
@管理员,可以结帖了。感谢alexncf125!rmva【地图】全局搜索(公共事件不在搜索范畴内)任意指令:
正确答案[pre lang="ruby"]#==============================================================================
# ■ Find_Command
#------------------------------------------------------------------------------
# 查找事件指令 by SailCat
# 该程序能够全局查找工程中的指定指令,方便剧情、事件debug
# 使用说明:
# 插入本脚本到Game_Temp(注意:不是Main)之前后执行就可以,你也可以手工做:
# finder = Find_Command.new
# finder.search(112) # 查找“条件分歧”指令
# finder.search(121, 5, 5, 1) # 查找“关闭5号开关”指令
# finder.search(201, nil, nil, nil, nil, 2) # 查找“场所移动后角色朝下”指令
# 找到的指令FindLog.txt文件里
# 注释掉第191行及以下的语句可以屏蔽这个功能,正常测试游戏
#==============================================================================
class Find_Command
#--------------------------------------------------------------------------
# ● 常量
#--------------------------------------------------------------------------
COMMAND_CODES = {
101 => "显示文章",
102 => "显示选择项",
103 => "数值输入的处理",
104 => "更改文章选项",
105 => "按钮输入的处理",
106 => "等待",
108 => "注释",
111 => "条件分歧",
112 => "循环",
113 => "中断循环",
115 => "中断事件处理",
116 => "暂时消除事件",
117 => "公共事件",
118 => "标签",
119 => "标签跳转",
121 => "开关操作",
122 => "变量操作",
123 => "独立开关操作",
124 => "计时器操作",
125 => "增减金钱",
126 => "增减物品",
127 => "增减武器",
128 => "增减防具",
129 => "替换队员",
131 => "更改窗口外观",
132 => "更改战斗 BGM",
133 => "更改战斗结束 ME",
134 => "更改禁止存档",
135 => "更改禁止菜单",
136 => "更改禁止遇敌",
201 => "场所移动",
202 => "设置事件位置",
203 => "画面卷动",
204 => "更改地图设置",
205 => "更改雾的色调",
206 => "更改雾的不透明度",
207 => "显示动画",
208 => "更改透明状态",
209 => "设置移动路线",
210 => "等待移动结束",
221 => "准备渐变",
222 => "执行渐变",
223 => "更改画面色调",
224 => "画面闪烁",
225 => "画面震动",
231 => "显示图片",
232 => "移动图片",
233 => "旋转图片",
234 => "更改图片色调",
235 => "图片消失",
236 => "天气设置",
241 => "演奏 BGM",
242 => "淡出 BGM",
245 => "演奏 BGS",
246 => "淡出 BGS",
247 => "记忆 BGM / BGS",
248 => "还原 BGM / BGS",
249 => "演奏 ME",
250 => "演奏 SE",
251 => "停止 SE",
301 => "战斗处理",
302 => "商店处理",
303 => "名称输入处理",
311 => "增减 HP",
312 => "增减 SP",
313 => "更改状态",
314 => "完全回复",
315 => "增减 EXP",
316 => "增减等级",
317 => "增减能力值",
318 => "增减特技",
319 => "变更装备",
320 => "更改角色姓名",
321 => "更改角色职业",
322 => "更改角色图形",
331 => "增减敌人 HP",
332 => "增减敌人 SP",
333 => "更改敌人状态",
334 => "敌人出现",
335 => "敌人变身",
336 => "敌人完全回复",
337 => "显示动画",
338 => "伤害处理",
339 => "强制行动",
340 => "战斗中断",
351 => "呼叫菜单画面",
352 => "呼叫存档画面",
353 => "游戏结束",
354 => "返回标题画面",
355 => "脚本"
}
#--------------------------------------------------------------------------
# ● 初期化
#--------------------------------------------------------------------------
def initialize
# 删除前次导出的文件
if FileTest.exist?("FindLog.txt")
File.delete("FindLog.txt")
end
@map_infos = load_data("Data/MapInfos.rvdata2")
end
#--------------------------------------------------------------------------
# ● 执行查找指令
# command_code: 指令的名称
# parameters: 指令的参数
#--------------------------------------------------------------------------
def search(command_code, *parameters)
File.open("FindLog.txt", "a") do |f|
for map_id in 1..999
map_name = sprintf("Data/Map%03d.rvdata2", map_id)
if FileTest.exist?(map_name)
# 载入当前地图
f.write("-----------------------------------------------------\n")
f.write(sprintf(" ■ Map: %d (%s)\n", map_id,
@map_infos[map_id].name.split(/\|/)[0]))
f.write("-----------------------------------------------------\n")
map = load_data(map_name)
# 循环地图中所有事件
for i in 1..999
event = map.events
if event != nil
t = false
# 循环事件的每一页
event.pages.each do |page|
# 如果指令不为空
if page.list.length > 0
# 循环页的所有指令
page.list.each do |command|
# 如果指令名称匹配
if command_code == command.code
matched = true
# 逐个检查参数
para_size = [parameters.size, command.parameters.size].min
for j in 0...para_size
if parameters[j] != nil and parameters[j] != command.parameters[j]
matched = false
break
end
end
# 匹配的情况下
if matched
# 输出事件提示字样
if !t
f.write(sprintf(" ⚪ Event %d: %s (%03d, %03d)\n",
event.id, event.name, event.x, event.y))
f.write("-----------------------------------------------------\n")
t = true
end
# 输出指令内容
f.write(COMMAND_CODES[command_code] + ": ")
for k in 0...command.parameters.size
f.write(command.parameters[k])
f.write(", ") if k < command.parameters.size - 1
end
f.write("\n")
end
end
end
end
end
# 结束输出指令内容
if t
f.write("-----------------------------------------------------\n")
end
end
end
end
end
end
end
end
finder = Find_Command.new
finder.search(121, 3, 3, 1)
exit[/pre]
原帖:
地图巨多,事件复杂。如何在工程里,找到某开关在哪个事件的哪个标签页里被操作过呢?
附:
https://rpg.blue/thread-402327-1-1.html
这个需要把所有地图都跑一遍,显然很不现实
https://rpg.blue/forum.php?mod=viewthread&tid=234460
这个帖子是xp的,但就算改成VA的,且没报错,也无法正确显示开关在哪。排错也无从找起(也可能是没改对?)错误代码
[pre lang="ruby"]#==============================================================================
# ■ Find_Command
#------------------------------------------------------------------------------
# 查找事件指令 by SailCat
# 该程序能够全局查找工程中的指定指令,方便剧情、事件debug
# 使用说明:
# 插入本脚本到Game_Temp(注意:不是Main)之前后执行就可以,你也可以手工做:
# finder = Find_Command.new
# finder.search(112) # 查找“条件分歧”指令
# finder.search(121, 5, 5, 1) # 查找“关闭5号开关”指令
# finder.search(201, nil, nil, nil, nil, 2) # 查找“场所移动后角色朝下”指令
# 找到的指令FindLog.txt文件里
# 注释掉第191行及以下的语句可以屏蔽这个功能,正常测试游戏
#==============================================================================
class Find_Command
#--------------------------------------------------------------------------
# ● 常量
#--------------------------------------------------------------------------
COMMAND_CODES = {
101 => "显示文章",
102 => "显示选择项",
103 => "数值输入的处理",
104 => "更改文章选项",
105 => "按钮输入的处理",
106 => "等待",
108 => "注释",
111 => "条件分歧",
112 => "循环",
113 => "中断循环",
115 => "中断事件处理",
116 => "暂时消除事件",
117 => "公共事件",
118 => "标签",
119 => "标签跳转",
121 => "开关操作",
122 => "变量操作",
123 => "独立开关操作",
124 => "计时器操作",
125 => "增减金钱",
126 => "增减物品",
127 => "增减武器",
128 => "增减防具",
129 => "替换队员",
131 => "更改窗口外观",
132 => "更改战斗 BGM",
133 => "更改战斗结束 ME",
134 => "更改禁止存档",
135 => "更改禁止菜单",
136 => "更改禁止遇敌",
201 => "场所移动",
202 => "设置事件位置",
203 => "画面卷动",
204 => "更改地图设置",
205 => "更改雾的色调",
206 => "更改雾的不透明度",
207 => "显示动画",
208 => "更改透明状态",
209 => "设置移动路线",
210 => "等待移动结束",
221 => "准备渐变",
222 => "执行渐变",
223 => "更改画面色调",
224 => "画面闪烁",
225 => "画面震动",
231 => "显示图片",
232 => "移动图片",
233 => "旋转图片",
234 => "更改图片色调",
235 => "图片消失",
236 => "天气设置",
241 => "演奏 BGM",
242 => "淡出 BGM",
245 => "演奏 BGS",
246 => "淡出 BGS",
247 => "记忆 BGM / BGS",
248 => "还原 BGM / BGS",
249 => "演奏 ME",
250 => "演奏 SE",
251 => "停止 SE",
301 => "战斗处理",
302 => "商店处理",
303 => "名称输入处理",
311 => "增减 HP",
312 => "增减 SP",
313 => "更改状态",
314 => "完全回复",
315 => "增减 EXP",
316 => "增减等级",
317 => "增减能力值",
318 => "增减特技",
319 => "变更装备",
320 => "更改角色姓名",
321 => "更改角色职业",
322 => "更改角色图形",
331 => "增减敌人 HP",
332 => "增减敌人 SP",
333 => "更改敌人状态",
334 => "敌人出现",
335 => "敌人变身",
336 => "敌人完全回复",
337 => "显示动画",
338 => "伤害处理",
339 => "强制行动",
340 => "战斗中断",
351 => "呼叫菜单画面",
352 => "呼叫存档画面",
353 => "游戏结束",
354 => "返回标题画面",
355 => "脚本"
}
#--------------------------------------------------------------------------
# ● 初期化
#--------------------------------------------------------------------------
def initialize
# 删除前次导出的文件
if FileTest.exist?("FindLog.txt")
File.delete("FindLog.txt")
end
@map_infos = load_data("Data/MapInfos.rvdata2")
end
#--------------------------------------------------------------------------
# ● 执行查找指令
# command_code: 指令的名称
# parameters: 指令的参数
#--------------------------------------------------------------------------
def search(command_code, *parameters)
File.open("FindLog.txt", "a") do |f|
for map_id in 1..999
map_name = sprintf("Data/Map%03d.rxdata", map_id)
if FileTest.exist?(map_name)
# 载入当前地图
f.write("-----------------------------------------------------\n")
f.write(sprintf(" ■ Map: %d (%s)\n", map_id,
@map_infos[map_id].name.split(/\|/)[0]))
f.write("-----------------------------------------------------\n")
map = load_data(map_name)
# 循环地图中所有事件
for i in 1..999
event = map.events
if event != nil
t = false
# 循环事件的每一页
event.pages.each do |page|
# 如果指令不为空
if page.list.length > 0
# 循环页的所有指令
page.list.each do |command|
# 如果指令名称匹配
if command_code == command.code
matched = true
# 逐个检查参数
para_size = [parameters.size, command.parameters.size].min
for j in 0...para_size
if parameters[j] != nil and parameters[j] != command.parameters[j]
matched = false
break
end
end
# 匹配的情况下
if matched
# 输出事件提示字样
if !t
f.write(sprintf(" ⚪ Event %d: %s (%03d, %03d)\n",
event.id, event.name, event.x, event.y))
f.write("-----------------------------------------------------\n")
t = true
end
# 输出指令内容
f.write(COMMAND_CODES[command_code] + ": ")
for k in 0...command.parameters.size
f.write(command.parameters[k])
f.write(", ") if k < command.parameters.size - 1
end
f.write("\n")
end
end
end
end
end
# 结束输出指令内容
if t
f.write("-----------------------------------------------------\n")
end
end
end
end
end
end
end
end
finder = Find_Command.new
finder.search(112)
exit[/pre] |
|