查看: 14425|回复: 9

[已发主站] [猫儿工具箱系列第五弹]在工程中任意查找事件指令

[复制链接]

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2012-6-1 11:45:14 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 SailCat 于 2012-6-3 01:18 编辑

多说没用,看代码注释就够了。

所有参数的指定,以下给出完整(可带参数查询)的参数表,没给出的说明不能带参数查询
1)在最后一个指定参数之后的参数,如果不限制,可以省略
2)在最后一个指定参数之前的参数,如果不限制,写成nil

显示文章: finder.search(101, 文章文本字符串) (注:暂只支持第1行文本)
显示选择项: finder.search(102, [选择项1, 选择项2, 选择项3, 选择项4], 取消的返回值)
数值输入的处理: finder.search(103, 变量id, 位数)
更改文章选项: finder.search(104, 位置上0/中1/下2,显示外框0/不显示外框1)
按钮输入的处理: finder.search(105, 变量id)
等待: finder.search(106, 帧数)
注释: finder.search(108, 注释文本字符串) (注:暂只支持第1行文本)
条件分歧: finder.search(111, 条件类别0-12, 条件参数1,条件参数2,...)
    开关: finder.search(111, 0, 开关id, 开0/关1)
    变量: finder.search(111, 1, 变量id, 常量比较0/变量比较1, 对像值(或对像变量id), 相等0/以上1/以下2/大于3/小于4/不等5)
独立开关: finder.search(111, 2, 独立开关编号A-D, 开0/关1)
    计时: finder.search(111, 3, 时间, 以上0/以下1)
    角色: finder.search(111, 4, 角色id, 同伴0/名称1/特技2/武器3/防具4/状态5, 比较的名称/特技id/武器id/防具id/状态id)
    敌人: finder.search(111, 5, 敌人id, 出现0/状态1, 比较的状态id)
    事件: finder.search(111, 6, 事件id/角色-1/本事件0, 朝向上8/左4/右6/下2)
      钱: finder.search(111, 7, 钱数, 以上0/以下1)
    物品: finder.search(111, 8, 物品id)
    武器: finder.search(111, 9, 武器id)
    防具: finder.search(111, 10, 防具id)
    按钮: finder.search(111, 11, 按钮id(Input::A/B/C/X/Y/Z/L/R))
    脚本: finder.search(111, 12, 脚本内容字符串)
公共事件: finder.search(117, 公共事件id)
标签: finder.search(118, 标签名字符串)
标签跳转: finder.search(119, 标签名字符串)
开关操作: finder.search(121, 起始开关id, 结束开关id, 开0/关1)(如单个操作则起始开关id=结束开关id)
变量操作: finder.search(122, 起始变量id, 结束变量id, 代入0/加法1/减法2/乘法3/除法4/剩余5, 操作值类别0-7, 操作值1, 操作值2)(如单个操作则起始变量id=结束变量id)
    常量: 类别0,操作值1为常量值,无操作值2
    变量: 类别1,操作值1为变量id,无操作值2
    随机: 类别2,操作值1为起始值,操作值2为终止值
    物品: 类别3,操作值1为物品id,无操作值2
    角色: 类别4,操作值1为角色id,操作值2为取值类别,0-13分别对应lv/exp/hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
    敌人: 类别5,操作值1为敌人id,操作值2为取值类别,0-11分别对应hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
    事件: 类别6,操作值1为事件id,操作值2为取值类别,0-5分别对应x/y/朝向/屏x/屏y/地标
    其它: 类别7,操作值1为取值类别,0-6分别对应地图/人数/钱/步数/游戏时间/计时/存档次数
独立开关操作: finder.search(123, 独立开关编号A-D,开0/关1)
计时器操作: finder.search(124, 开0/关1, 时间秒数)
增减金钱: finder.search(125, 增0/减1, 常量0/变量1, 常量值或变量id)
增减物品: finder.search(126, 物品id, 增0/减1, 常量0/变量1, 常量值或变量id)
增减武器: finder.search(127, 武器id, 增0/减1, 常量0/变量1, 常量值或变量id)
增减防具: finder.search(128, 防具id, 增0/减1, 常量0/变量1, 常量值或变量id)
替换队员: finder.search(129, 角色id, 入0/出1, 原状0/初期化1)
更改窗口外观: finder.search(131, 外观文件名)
更改战斗 BGM: finder.search(132, BGM文件名)
更改战斗结束 ME: finder.search(133, ME文件名)
更改禁止存档: finder.search(134, 禁止0/允许1)
更改禁止菜单: finder.search(135, 禁止0/允许1)
更改禁止遇敌: finder.search(136, 禁止0/允许1)
场所移动: finder.search(201, 直接0/变量1, 地图id或其变量id, x坐标或其变量, y坐标或其变量, 朝向上8/左4/右6/下2)
设置事件位置: finder.search(202, 事件id, 直接0/变量1/交换2, x坐标或其变量/被交换事件id, y坐标或其变量, 朝向上8/左4/右6/下2)
画面卷动: finder.search(203, 卷动方向8/4/6/2, 卷动长度, 卷动速度1-6)
更改地图设置: finder.search(204, 远景0/雾1/背景2)
更改雾的色调: finder.search(205, nil, 帧数)
更改雾的不透明度: finder.search(206, 不透明度, 帧数)
显示动画: finder.search(207, 事件id, 动画id)
更改透明状态: finder.search(208, 透明0/普通1)
设置移动路线: finder.search(209, 事件id)
执行渐变: finder.search(222, 渐变文件名)
更改画面色调: finder.search(223, nil, 帧数)
画面闪烁: finder.search(224, nil, 帧数)
画面震动: finder.search(225, 强度, 频度, 帧数)
显示图片: finder.search(231, 图片id, 图片文件名)
移动图片: finder.search(232, 图片id)
旋转图片: finder.search(233, 图片id, 速度)
更改图片色调: finder.search(234, 图片id)
图片消失: finder.search(235, 图片id)
天气设置: finder.search(236, 无0/风1/雨2/雪3, 强度1-9, 持续)
演奏 BGM: finder.search(241, BGM文件名)
淡出 BGM: finder.search(242, 秒数)
演奏 BGS: finder.search(245, BGS文件名)
淡出 BGS: finder.search(246, 秒数)
演奏 ME: finder.search(249, ME文件名)
演奏 SE: finder.search(250, SE文件名)
战斗处理: finder.search(301, 队伍id, 不可逃0/可逃1, 不可败0/可败1)
名称输入处理: finder.search(303, 角色id, 字符数)
增减 HP: finder.search(311, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
增减 SP: finder.search(312, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
更改状态: finder.search(313, 角色id, 附加0/解除1, 状态id)
完全回复: finder.search(314, 角色id)
增减 EXP: finder.search(315, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
增减等级: finder.search(316, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
增减能力值: finder.search(317, 角色id, 0-5对应mhp/msp/str/dex/agi/int, 增0/减1, 常量0/变量1, 常量值或变量id)
增减特技: finder.search(318, 角色id, 学0/忘1, 特技id)
变更装备: finder.search(319, 角色id, 武器0/盾1/头2/甲3/饰4, 武器或防具id)
更改角色姓名: finder.search(320, 角色id, 名字)
更改角色职业: finder.search(321, 角色id, 职业id)
更改角色图形: finder.search(322, 角色id, 角色图文件名, 角色图色相, 战斗图文件名, 战斗图色相)
  1. #==============================================================================
  2. # ■ Find_Command
  3. #------------------------------------------------------------------------------
  4. #  查找事件指令 by SailCat
  5. #   该程序能够全局查找工程中的指定指令,方便剧情、事件debug
  6. #   使用说明:
  7. #     插入本脚本到Game_Temp(注意:不是Main)之前后执行就可以,你也可以手工做:
  8. #     finder = Find_Command.new
  9. #     finder.search(112)  # 查找“条件分歧”指令
  10. #     finder.search(121, 5, 5, 1) # 查找“关闭5号开关”指令
  11. #     finder.search(201, nil, nil, nil, nil, 2) # 查找“场所移动后角色朝下”指令
  12. #     找到的指令FindLog.txt文件里
  13. #     注释掉第191行及以下的语句可以屏蔽这个功能,正常测试游戏
  14. #==============================================================================
  15. class Find_Command
  16.   #--------------------------------------------------------------------------
  17.   # ● 常量
  18.   #--------------------------------------------------------------------------
  19.   COMMAND_CODES = {
  20.     101 => "显示文章",
  21.     102 => "显示选择项",
  22.     103 => "数值输入的处理",
  23.     104 => "更改文章选项",
  24.     105 => "按钮输入的处理",
  25.     106 => "等待",
  26.     108 => "注释",
  27.     111 => "条件分歧",
  28.     112 => "循环",
  29.     113 => "中断循环",
  30.     115 => "中断事件处理",
  31.     116 => "暂时消除事件",
  32.     117 => "公共事件",
  33.     118 => "标签",
  34.     119 => "标签跳转",
  35.     121 => "开关操作",
  36.     122 => "变量操作",
  37.     123 => "独立开关操作",
  38.     124 => "计时器操作",
  39.     125 => "增减金钱",
  40.     126 => "增减物品",
  41.     127 => "增减武器",
  42.     128 => "增减防具",
  43.     129 => "替换队员",
  44.     131 => "更改窗口外观",
  45.     132 => "更改战斗 BGM",
  46.     133 => "更改战斗结束 ME",
  47.     134 => "更改禁止存档",
  48.     135 => "更改禁止菜单",
  49.     136 => "更改禁止遇敌",
  50.     201 => "场所移动",
  51.     202 => "设置事件位置",
  52.     203 => "画面卷动",
  53.     204 => "更改地图设置",
  54.     205 => "更改雾的色调",
  55.     206 => "更改雾的不透明度",
  56.     207 => "显示动画",
  57.     208 => "更改透明状态",
  58.     209 => "设置移动路线",
  59.     210 => "等待移动结束",
  60.     221 => "准备渐变",
  61.     222 => "执行渐变",
  62.     223 => "更改画面色调",
  63.     224 => "画面闪烁",
  64.     225 => "画面震动",
  65.     231 => "显示图片",
  66.     232 => "移动图片",
  67.     233 => "旋转图片",
  68.     234 => "更改图片色调",
  69.     235 => "图片消失",
  70.     236 => "天气设置",
  71.     241 => "演奏 BGM",
  72.     242 => "淡出 BGM",
  73.     245 => "演奏 BGS",
  74.     246 => "淡出 BGS",
  75.     247 => "记忆 BGM / BGS",
  76.     248 => "还原 BGM / BGS",
  77.     249 => "演奏 ME",
  78.     250 => "演奏 SE",
  79.     251 => "停止 SE",
  80.     301 => "战斗处理",
  81.     302 => "商店处理",
  82.     303 => "名称输入处理",
  83.     311 => "增减 HP",
  84.     312 => "增减 SP",
  85.     313 => "更改状态",
  86.     314 => "完全回复",
  87.     315 => "增减 EXP",
  88.     316 => "增减等级",
  89.     317 => "增减能力值",
  90.     318 => "增减特技",
  91.     319 => "变更装备",
  92.     320 => "更改角色姓名",
  93.     321 => "更改角色职业",
  94.     322 => "更改角色图形",
  95.     331 => "增减敌人 HP",
  96.     332 => "增减敌人 SP",
  97.     333 => "更改敌人状态",
  98.     334 => "敌人出现",
  99.     335 => "敌人变身",
  100.     336 => "敌人完全回复",
  101.     337 => "显示动画",
  102.     338 => "伤害处理",
  103.     339 => "强制行动",
  104.     340 => "战斗中断",
  105.     351 => "呼叫菜单画面",
  106.     352 => "呼叫存档画面",
  107.     353 => "游戏结束",
  108.     354 => "返回标题画面",
  109.     355 => "脚本"
  110.   }
  111.   #--------------------------------------------------------------------------
  112.   # ● 初期化
  113.   #--------------------------------------------------------------------------
  114.   def initialize
  115.     # 删除前次导出的文件
  116.     if FileTest.exist?("FindLog.txt")
  117.       File.delete("FindLog.txt")
  118.     end
  119.     @map_infos = load_data("Data/MapInfos.rxdata")
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 执行查找指令
  123.   #     command_code: 指令的名称
  124.   #     parameters: 指令的参数
  125.   #--------------------------------------------------------------------------
  126.   def search(command_code, *parameters)
  127.     File.open("FindLog.txt", "a") do |f|
  128.       for map_id in 1..999
  129.         map_name = sprintf("Data/Map%03d.rxdata", map_id)
  130.         if FileTest.exist?(map_name)
  131.           # 载入当前地图
  132.           f.write("-----------------------------------------------------\n")
  133.           f.write(sprintf(" ■ Map: %d (%s)\n", map_id,
  134.             @map_infos[map_id].name.split(/\|/)[0]))
  135.           f.write("-----------------------------------------------------\n")
  136.           map = load_data(map_name)
  137.           # 循环地图中所有事件
  138.           for i in 1..999
  139.             event = map.events[i]
  140.             if event != nil
  141.               t = false
  142.               # 循环事件的每一页
  143.               event.pages.each do |page|
  144.                 # 如果指令不为空
  145.                 if page.list.length > 0
  146.                   # 循环页的所有指令
  147.                   page.list.each do |command|
  148.                     # 如果指令名称匹配
  149.                     if command_code == command.code
  150.                       matched = true
  151.                       # 逐个检查参数
  152.                       para_size = [parameters.size, command.parameters.size].min
  153.                       for j in 0...para_size
  154.                         if parameters[j] != nil and parameters[j] != command.parameters[j]
  155.                           matched = false
  156.                           break
  157.                         end
  158.                       end
  159.                       # 匹配的情况下
  160.                       if matched
  161.                         # 输出事件提示字样
  162.                         if !t
  163.                           f.write(sprintf(" □ Event %d: %s (%03d, %03d)\n",
  164.                           event.id, event.name, event.x, event.y))
  165.                           f.write("-----------------------------------------------------\n")
  166.                           t = true
  167.                         end
  168.                         # 输出指令内容
  169.                         f.write(COMMAND_CODES[command_code] + ": ")
  170.                         for k in 0...command.parameters.size
  171.                           f.write(command.parameters[k])
  172.                           f.write(", ") if k < command.parameters.size - 1
  173.                         end
  174.                         f.write("\n")
  175.                       end
  176.                     end
  177.                   end
  178.                 end
  179.               end
  180.               # 结束输出指令内容
  181.               if t
  182.                 f.write("-----------------------------------------------------\n")
  183.               end
  184.             end
  185.           end
  186.         end
  187.       end
  188.     end
  189.   end
  190. end
  191. #finder = Find_Command.new
  192. #finder.search(201,nil,nil,nil,nil,2)
  193. #exit
复制代码

评分

参与人数 2星屑 +2 赞 +6 收起 理由
Shy07 + 6 主站收录
viktor + 2 数据nice~求1234弹传送门

查看全部评分

  /) /)<

梦石
0
星屑
4262
在线时间
4894 小时
注册时间
2009-2-16
回帖
8198

超评测评委开拓者短篇七成年组季军

发表于 2012-6-1 11:50:55 | 显示全部楼层
没看懂怎么用= =  查的时候数据写在哪?
回复

使用道具 举报

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

 楼主| 发表于 2012-6-1 12:27:27 | 显示全部楼层
天使喝可乐 发表于 2012-6-1 11:50
没看懂怎么用= =  查的时候数据写在哪?

要查的数据以参数形式写在finder.search()方法的括号内
查到的结果,以文本格式输出到工程文件夹下面的FindLog.txt文件中
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复

使用道具 举报

  /) /)<

梦石
0
星屑
4262
在线时间
4894 小时
注册时间
2009-2-16
回帖
8198

超评测评委开拓者短篇七成年组季军

发表于 2012-6-1 12:51:06 | 显示全部楼层
SailCat 发表于 2012-6-1 12:27
要查的数据以参数形式写在finder.search()方法的括号内
查到的结果,以文本格式输出到工程文件夹下面的Fi ...

我是说 数据查询指令的写法
比如 增加1450血 或者 角色名字改为ABC  这些都得有说明吧= =
回复 1 0

使用道具 举报

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

 楼主| 发表于 2012-6-1 12:58:20 | 显示全部楼层
天使喝可乐 发表于 2012-6-1 12:51
我是说 数据查询指令的写法
比如 增加1450血 或者 角色名字改为ABC  这些都得有说明吧= =
...

那个,参见RM自带帮助文件-脚本入门-解读篇-编译器-事件代码

加1450血:311, nil, 0,0,1450
角色名字改为ABC:320, nil, "ABC"
如果是确定的某个角色就把nil换成角色的ID
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2012-6-1 17:48:31 | 显示全部楼层
LZ能发个案例吗?表示实在搞不懂这东西是做什么用的
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
120
在线时间
5250 小时
注册时间
2011-10-7
回帖
1769

开拓者贵宾

发表于 2012-6-2 06:31:49 | 显示全部楼层
嗯,还是建议增加一个解析文本的东西吧……否则容易混乱……
回复

使用道具 举报

菜鸟飞呀飞 该用户已被删除
发表于 2012-6-2 10:07:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

 楼主| 发表于 2012-6-3 01:42:03 | 显示全部楼层
应大家要求,主帧添加了查找调用的具体方式
前4弹都发在本版,需要的童鞋请自行脑补下载地址
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复

使用道具 举报

梦石
0
星屑
260
在线时间
26 小时
注册时间
2019-6-11
回帖
7
发表于 2019-7-14 22:25:13 | 显示全部楼层
本帖最后由 ufo1cn 于 2019-7-15 21:25 编辑
SailCat 发表于 2012-6-3 01:42
应大家要求,主帧添加了查找调用的具体方式
前4弹都发在本版,需要的童鞋请自行脑补下载地址 ...


这个脚本很方便,我再加上在公共事件中查找的功能吧, 明天有空再改进下,输出搜索结果根据MapInfos.rxdata和所在地图ID输出所在地图树.
希望可以有人改成独立的小工具,能从列表选参数就方便了。

已经加上输出事件所在地图树,方便地图太多时定位地图

[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文件里
#     具体参数见脚本尾部。
#==============================================================================

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.rxdata")
  end
  
  
  def printMapTree(f,map_id)
      
        #f.write(sprintf(" ■ Map: %d (%s)", map_id,
    #@map_infos[map_id].name.split(/\|/)[0]))
        #map_id = @map_infos[map_id].parent_id
        #if map_id == 0
        #return
        #else
    #f.write("-->")
    #printMapTree(f,map_id)
        #end
     
   
    while map_id!=0
     
    f.write(sprintf(" ■ Map: %d (%s)", map_id,
    @map_infos[map_id].name.split(/\|/)[0]))
          map_id = @map_infos[map_id].parent_id
          if map_id!=0
      f.write("-->")
      end
   
    end
    f.write("\n")
   
end
         
  #--------------------------------------------------------------------------
  # ● 执行查找指令
  #     command_code: 指令的名称
  #     parameters: 指令的参数
  #--------------------------------------------------------------------------
  def search(command_code, *parameters)
    File.open("FindLog.txt", "a") do |f|
       
       
        #----------------------------start common event------------------------------
      common_events_name = "Data/CommonEvents.rxdata"
     if FileTest.exist?(common_events_name)                                                                       
      # 载入当前地图
      f.write("-----------------------------------------------------\n")
      f.write(" CommonEvents\n")
      f.write("-----------------------------------------------------\n")
      common_events = load_data(common_events_name)
          #for i in 1..999                                                                                                         
          #common_event = common_events
         # i = 1
         common_events.each do |common_event|
          if  common_event != nil     #1-1-1(3)
                  
                   #    f.write(sprintf("CommonEvent ID: %d: %s[触发:%d,条件开关ID:%d]\n",
       #     common_event.id, common_event.name,common_event.trigger,common_event.switch_id))  
                                     
            t = false
                 event_list = common_event.list   
                 #如果指令列表不为空
                  if  event_list.length > 0                                                                                 
                       line = 0
                   # 循环事件的所有指令
                   event_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(" CommonEvent %d: %s (line:%03d/%03d)\n",
                        #  common_event.id, common_event.name, line,event_list.length))
                          f.write(sprintf("CommonEvent ID: %d: %s[触发:%d,条件开关ID:%d]\n",
                          common_event.id, common_event.name,common_event.trigger,common_event.switch_id))  
                               
                          f.write("-----------------------------------------------------\n")
                          t = true
                          end                                                                                                                                                               
                         # 输出指令内容
                          f.write(sprintf("line:(%04d)/length:%04d) ",line,event_list.length))
                          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 #0-0-0-0-0-0-0-0(7)                                                                                                                 
                        end                                                                                                            
                        line += 1                                                  
                  end                                                                                                            
                end                                                                                                                  
              end                                                                                                                          
       # 结束输出指令内容
              if t                                                                                                                        
                f.write("-----------------------------------------------------\n")
              end
            end
          end
        f.write(" CommonEvents End\n")
            f.write("-----------------------------------------------------\n")
               
        #----------------------------end common event------------------------------   
       f.write(" Map Event\n")   
       f.write("-----------------------------------------------------\n")
           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)
                  mt  = false
          # 循环地图中所有事件
          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
                               if !mt
                               #f.write("----MapTree------------------------------------------------\n")
                                           printMapTree(f,map_id)
                               #f.write("\n----MapTree End------------------------------------------------\n")
                                           mt = true;
                                       end
                                                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
          
        f.write(" Map Event End\n")   
    f.write("-----------------------------------------------------\n")
          
          
          
    end
       
       
       
  end
end


#所有参数的指定,以下给出完整(可带参数查询)的参数表,没给出的说明不能带参数查询
#1)在最后一个指定参数之后的参数,如果不限制,可以省略
#2)在最后一个指定参数之前的参数,如果不限制,写成nil
# 显示文章: finder.search(101, 文章文本字符串) (注:暂只支持第1行文本)
# 显示选择项: finder.search(102, [选择项1, 选择项2, 选择项3, 选择项4], 取消的返回值)
# 数值输入的处理: finder.search(103, 变量id, 位数)
# 更改文章选项: finder.search(104, 位置上0/中1/下2,显示外框0/不显示外框1)
# 按钮输入的处理: finder.search(105, 变量id)
# 等待: finder.search(106, 帧数)
# 注释: finder.search(108, 注释文本字符串) (注:暂只支持第1行文本)
# 条件分歧: finder.search(111, 条件类别0-12, 条件参数1,条件参数2,...)
# 开关: finder.search(111, 0, 开关id, 开0/关1)
# 变量: finder.search(111, 1, 变量id, 常量比较0/变量比较1, 对像值(或对像变量id), 相等0/以上1/以下2/大于3/小于4/不等5)
# 独立开关: finder.search(111, 2, 独立开关编号A-D, 开0/关1)
# 计时: finder.search(111, 3, 时间, 以上0/以下1)
# 角色: finder.search(111, 4, 角色id, 同伴0/名称1/特技2/武器3/防具4/状态5, 比较的名称/特技id/武器id/防具id/状态id)
# 敌人: finder.search(111, 5, 敌人id, 出现0/状态1, 比较的状态id)
# 事件: finder.search(111, 6, 事件id/角色-1/本事件0, 朝向上8/左4/右6/下2)
# 钱: finder.search(111, 7, 钱数, 以上0/以下1)
# 物品: finder.search(111, 8, 物品id)
# 武器: finder.search(111, 9, 武器id)
# 防具: finder.search(111, 10, 防具id)
# 按钮: finder.search(111, 11, 按钮id(Input::A/B/C/X/Y/Z/L/R))
# 脚本: finder.search(111, 12, 脚本内容字符串)
# 公共事件: finder.search(117, 公共事件id)
# 标签: finder.search(118, 标签名字符串)
# 标签跳转: finder.search(119, 标签名字符串)
# 开关操作: finder.search(121, 起始开关id, 结束开关id, 开0/关1)(如单个操作则起始开关id=结束开关id)
# 变量操作: finder.search(122, 起始变量id, 结束变量id, 代入0/加法1/减法2/乘法3/除法4/剩余5, 操作值类别0-7, 操作值1, 操作值2)(如单个操作则起始变量id=结束变量id)
# 常量: 类别0,操作值1为常量值,无操作值2
# 变量: 类别1,操作值1为变量id,无操作值2
# 随机: 类别2,操作值1为起始值,操作值2为终止值
# 物品: 类别3,操作值1为物品id,无操作值2
# 角色: 类别4,操作值1为角色id,操作值2为取值类别,0-13分别对应lv/exp/hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
# 敌人: 类别5,操作值1为敌人id,操作值2为取值类别,0-11分别对应hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
# 事件: 类别6,操作值1为事件id,操作值2为取值类别,0-5分别对应x/y/朝向/屏x/屏y/地标
# 其它: 类别7,操作值1为取值类别,0-6分别对应地图/人数/钱/步数/游戏时间/计时/存档次数
# 独立开关操作: finder.search(123, 独立开关编号A-D,开0/关1)
# 计时器操作: finder.search(124, 开0/关1, 时间秒数)
# 增减金钱: finder.search(125, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减物品: finder.search(126, 物品id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减武器: finder.search(127, 武器id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减防具: finder.search(128, 防具id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 替换队员: finder.search(129, 角色id, 入0/出1, 原状0/初期化1)
# 更改窗口外观: finder.search(131, 外观文件名)
# 更改战斗 BGM: finder.search(132, BGM文件名)
# 更改战斗结束 ME: finder.search(133, ME文件名)
# 更改禁止存档: finder.search(134, 禁止0/允许1)
# 更改禁止菜单: finder.search(135, 禁止0/允许1)
# 更改禁止遇敌: finder.search(136, 禁止0/允许1)
# 场所移动: finder.search(201, 直接0/变量1, 地图id或其变量id, x坐标或其变量, y坐标或其变量, 朝向上8/左4/右6/下2)
# 设置事件位置: finder.search(202, 事件id, 直接0/变量1/交换2, x坐标或其变量/被交换事件id, y坐标或其变量, 朝向上8/左4/右6/下2)
# 画面卷动: finder.search(203, 卷动方向8/4/6/2, 卷动长度, 卷动速度1-6)
# 更改地图设置: finder.search(204, 远景0/雾1/背景2)
# 更改雾的色调: finder.search(205, nil, 帧数)
# 更改雾的不透明度: finder.search(206, 不透明度, 帧数)
# 显示动画: finder.search(207, 事件id, 动画id)
# 更改透明状态: finder.search(208, 透明0/普通1)
# 设置移动路线: finder.search(209, 事件id)
# 执行渐变: finder.search(222, 渐变文件名)
# 更改画面色调: finder.search(223, nil, 帧数)
# 画面闪烁: finder.search(224, nil, 帧数)
# 画面震动: finder.search(225, 强度, 频度, 帧数)
# 显示图片: finder.search(231, 图片id, 图片文件名)
# 移动图片: finder.search(232, 图片id)
# 旋转图片: finder.search(233, 图片id, 速度)
# 更改图片色调: finder.search(234, 图片id)
# 图片消失: finder.search(235, 图片id)
# 天气设置: finder.search(236, 无0/风1/雨2/雪3, 强度1-9, 持续)
# 演奏 BGM: finder.search(241, BGM文件名)
# 淡出 BGM: finder.search(242, 秒数)
# 演奏 BGS: finder.search(245, BGS文件名)
# 淡出 BGS: finder.search(246, 秒数)
# 演奏 ME: finder.search(249, ME文件名)
# 演奏 SE: finder.search(250, SE文件名)
# 战斗处理: finder.search(301, 队伍id, 不可逃0/可逃1, 不可败0/可败1)
# 名称输入处理: finder.search(303, 角色id, 字符数)
# 增减 HP: finder.search(311, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减 SP: finder.search(312, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 更改状态: finder.search(313, 角色id, 附加0/解除1, 状态id)
# 完全回复: finder.search(314, 角色id)
# 增减 EXP: finder.search(315, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减等级: finder.search(316, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减能力值: finder.search(317, 角色id, 0-5对应mhp/msp/str/dex/agi/int, 增0/减1, 常量0/变量1, 常量值或变量id)
# 增减特技: finder.search(318, 角色id, 学0/忘1, 特技id)
# 变更装备: finder.search(319, 角色id, 武器0/盾1/头2/甲3/饰4, 武器或防具id)
# 更改角色姓名: finder.search(320, 角色id, 名字)
# 更改角色职业: finder.search(321, 角色id, 职业id)
# 更改角色图形: finder.search(322, 角色id, 角色图文件名, 角色图色相, 战斗图文件名, 战斗图色相)


#finder = Find_Command.new
#finder.search(201,nil,nil,nil,nil,2)
#exit
[/pre]



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部