设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 12117|回复: 9

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

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22393
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

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

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

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

x
本帖最后由 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弹传送门

查看全部评分

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4207
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

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

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22393
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

 楼主| 发表于 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] 到本站一游。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4207
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

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

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

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22393
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

 楼主| 发表于 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] 到本站一游。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9273
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
5250 小时
注册时间
2011-10-7
帖子
1885

开拓者贵宾

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

使用道具 举报

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

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22393
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

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

使用道具 举报

Lv2.观梦者

梦石
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输出所在地图树.
希望可以有人改成独立的小工具,能从列表选参数就方便了。

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

RUBY 代码复制
  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. #     具体参数见脚本尾部。
  14. #==============================================================================
  15.  
  16. class Find_Command
  17.   #--------------------------------------------------------------------------
  18.   # ● 常量
  19.   #--------------------------------------------------------------------------
  20.   COMMAND_CODES = {
  21.     101 => "显示文章",
  22.     102 => "显示选择项",
  23.     103 => "数值输入的处理",
  24.     104 => "更改文章选项",
  25.     105 => "按钮输入的处理",
  26.     106 => "等待",
  27.     108 => "注释",
  28.     111 => "条件分歧",
  29.     112 => "循环",
  30.     113 => "中断循环",
  31.     115 => "中断事件处理",
  32.     116 => "暂时消除事件",
  33.     117 => "公共事件",
  34.     118 => "标签",
  35.     119 => "标签跳转",
  36.     121 => "开关操作",
  37.     122 => "变量操作",
  38.     123 => "独立开关操作",
  39.     124 => "计时器操作",
  40.     125 => "增减金钱",
  41.     126 => "增减物品",
  42.     127 => "增减武器",
  43.     128 => "增减防具",
  44.     129 => "替换队员",
  45.     131 => "更改窗口外观",
  46.     132 => "更改战斗 BGM",
  47.     133 => "更改战斗结束 ME",
  48.     134 => "更改禁止存档",
  49.     135 => "更改禁止菜单",
  50.     136 => "更改禁止遇敌",
  51.     201 => "场所移动",
  52.     202 => "设置事件位置",
  53.     203 => "画面卷动",
  54.     204 => "更改地图设置",
  55.     205 => "更改雾的色调",
  56.     206 => "更改雾的不透明度",
  57.     207 => "显示动画",
  58.     208 => "更改透明状态",
  59.     209 => "设置移动路线",
  60.     210 => "等待移动结束",
  61.     221 => "准备渐变",
  62.     222 => "执行渐变",
  63.     223 => "更改画面色调",
  64.     224 => "画面闪烁",
  65.     225 => "画面震动",
  66.     231 => "显示图片",
  67.     232 => "移动图片",
  68.     233 => "旋转图片",
  69.     234 => "更改图片色调",
  70.     235 => "图片消失",
  71.     236 => "天气设置",
  72.     241 => "演奏 BGM",
  73.     242 => "淡出 BGM",
  74.     245 => "演奏 BGS",
  75.     246 => "淡出 BGS",
  76.     247 => "记忆 BGM / BGS",
  77.     248 => "还原 BGM / BGS",
  78.     249 => "演奏 ME",
  79.     250 => "演奏 SE",
  80.     251 => "停止 SE",
  81.     301 => "战斗处理",
  82.     302 => "商店处理",
  83.     303 => "名称输入处理",
  84.     311 => "增减 HP",
  85.     312 => "增减 SP",
  86.     313 => "更改状态",
  87.     314 => "完全回复",
  88.     315 => "增减 EXP",
  89.     316 => "增减等级",
  90.     317 => "增减能力值",
  91.     318 => "增减特技",
  92.     319 => "变更装备",
  93.     320 => "更改角色姓名",
  94.     321 => "更改角色职业",
  95.     322 => "更改角色图形",
  96.     331 => "增减敌人 HP",
  97.     332 => "增减敌人 SP",
  98.     333 => "更改敌人状态",
  99.     334 => "敌人出现",
  100.     335 => "敌人变身",
  101.     336 => "敌人完全回复",
  102.     337 => "显示动画",
  103.     338 => "伤害处理",
  104.     339 => "强制行动",
  105.     340 => "战斗中断",
  106.     351 => "呼叫菜单画面",
  107.     352 => "呼叫存档画面",
  108.     353 => "游戏结束",
  109.     354 => "返回标题画面",
  110.     355 => "脚本"
  111.   }
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.   #--------------------------------------------------------------------------
  119.   # ● 初期化
  120.   #--------------------------------------------------------------------------
  121.   def initialize
  122.     # 删除前次导出的文件
  123.     if FileTest.exist?("FindLog.txt")
  124.       File.delete("FindLog.txt")
  125.     end
  126.     @map_infos = load_data("Data/MapInfos.rxdata")
  127.   end
  128.  
  129.  
  130.   def printMapTree(f,map_id)
  131.  
  132.         #f.write(sprintf(" ■ Map: %d (%s)", map_id,
  133.     #@map_infos[map_id].name.split(/\|/)[0]))
  134.         #map_id = @map_infos[map_id].parent_id
  135.         #if map_id == 0
  136.         #return
  137.         #else
  138.     #f.write("-->")
  139.     #printMapTree(f,map_id)
  140.         #end
  141.  
  142.  
  143.     while map_id!=0
  144.  
  145.     f.write(sprintf(" ■ Map: %d (%s)", map_id,
  146.     @map_infos[map_id].name.split(/\|/)[0]))
  147.           map_id = @map_infos[map_id].parent_id
  148.           if map_id!=0
  149.       f.write("-->")
  150.       end
  151.  
  152.     end
  153.     f.write("\n")
  154.  
  155. end
  156.  
  157.   #--------------------------------------------------------------------------
  158.   # ● 执行查找指令
  159.   #     command_code: 指令的名称
  160.   #     parameters: 指令的参数
  161.   #--------------------------------------------------------------------------
  162.   def search(command_code, *parameters)
  163.     File.open("FindLog.txt", "a") do |f|
  164.  
  165.  
  166.         #----------------------------start common event------------------------------
  167.       common_events_name = "Data/CommonEvents.rxdata"
  168.      if FileTest.exist?(common_events_name)                                                                       
  169.       # 载入当前地图
  170.       f.write("-----------------------------------------------------\n")
  171.       f.write(" CommonEvents\n")
  172.       f.write("-----------------------------------------------------\n")
  173.       common_events = load_data(common_events_name)
  174.           #for i in 1..999                                                                                                         
  175.           #common_event = common_events[i]
  176.          # i = 1
  177.          common_events.each do |common_event|
  178.           if  common_event != nil     #1-1-1(3)
  179.  
  180.                    #    f.write(sprintf("CommonEvent ID: %d: %s[触发:%d,条件开关ID:%d]\n",
  181.        #     common_event.id, common_event.name,common_event.trigger,common_event.switch_id))  
  182.  
  183.             t = false
  184.                  event_list = common_event.list   
  185.                  #如果指令列表不为空
  186.                   if  event_list.length > 0                                                                                 
  187.                        line = 0
  188.                    # 循环事件的所有指令
  189.                    event_list.each do |command|                                                                  
  190.                     # 如果指令名称匹配
  191.                        if command_code == command.code                                                      
  192.                        matched = true
  193.                        # 逐个检查参数
  194.                        para_size = [parameters.size, command.parameters.size].min
  195.                        for j in 0...para_size                                                                                   
  196.                         if parameters[j] != nil and parameters[j] != command.parameters[j]           
  197.                           matched = false
  198.                           break
  199.                         end                                                                                                        
  200.                       end   
  201.  
  202.  
  203.  
  204.                         # 匹配的情况下
  205.                         if matched                                                                                                           
  206.                           # 输出事件提示字样
  207.                           if !t                                                                                                     
  208.                         #  f.write(sprintf(" CommonEvent %d: %s (line:%03d/%03d)\n",
  209.                         #  common_event.id, common_event.name, line,event_list.length))
  210.                           f.write(sprintf("CommonEvent ID: %d: %s[触发:%d,条件开关ID:%d]\n",
  211.                           common_event.id, common_event.name,common_event.trigger,common_event.switch_id))  
  212.  
  213.                           f.write("-----------------------------------------------------\n")
  214.                           t = true
  215.                           end                                                                                                                                                               
  216.                          # 输出指令内容
  217.                           f.write(sprintf("line:(%04d)/length:%04d) ",line,event_list.length))
  218.                           f.write(COMMAND_CODES[command_code] + ": ")
  219.                           for k in 0...command.parameters.size                                                        
  220.                           f.write(command.parameters[k])
  221.                           f.write(", ") if k < command.parameters.size - 1
  222.                           end                                                                                                         
  223.                           f.write("\n")
  224.                         end #0-0-0-0-0-0-0-0(7)                                                                                                                 
  225.                         end                                                                                                            
  226.                         line += 1                                                  
  227.                   end                                                                                                            
  228.                 end                                                                                                                  
  229.               end                                                                                                                          
  230.        # 结束输出指令内容
  231.               if t                                                                                                                        
  232.                 f.write("-----------------------------------------------------\n")
  233.               end
  234.             end
  235.           end
  236.         f.write(" CommonEvents End\n")
  237.             f.write("-----------------------------------------------------\n")
  238.  
  239.         #----------------------------end common event------------------------------   
  240.        f.write(" Map Event\n")   
  241.        f.write("-----------------------------------------------------\n")
  242.            for map_id in 1..999
  243.         map_name = sprintf("Data/Map%03d.rxdata", map_id)
  244.         if FileTest.exist?(map_name)
  245.           # 载入当前地图
  246.           #f.write("-----------------------------------------------------\n")
  247.           #f.write(sprintf(" ■ Map: %d (%s)\n", map_id,
  248.           #  @map_infos[map_id].name.split(/\|/)[0]))
  249.           #f.write("-----------------------------------------------------\n")
  250.           map = load_data(map_name)
  251.                   mt  = false
  252.           # 循环地图中所有事件
  253.           for i in 1..999
  254.             event = map.events[i]
  255.             if event != nil
  256.               t = false
  257.               # 循环事件的每一页
  258.               event.pages.each do |page|
  259.                 # 如果指令不为空
  260.                 if page.list.length > 0
  261.                   # 循环页的所有指令
  262.                   page.list.each do |command|
  263.                     # 如果指令名称匹配
  264.                     if command_code == command.code
  265.                       matched = true
  266.                       # 逐个检查参数
  267.                       para_size = [parameters.size, command.parameters.size].min
  268.                       for j in 0...para_size
  269.                         if parameters[j] != nil and parameters[j] != command.parameters[j]
  270.                           matched = false
  271.                           break
  272.                         end
  273.                       end
  274.                       # 匹配的情况下
  275.                       if matched
  276.                         # 输出事件提示字样
  277.                         if !t
  278.                                if !mt
  279.                                #f.write("----MapTree------------------------------------------------\n")
  280.                                            printMapTree(f,map_id)
  281.                                #f.write("\n----MapTree End------------------------------------------------\n")
  282.                                            mt = true;
  283.                                        end
  284.                                                 f.write(sprintf(" □ Event %d: %s (%03d, %03d)\n",
  285.                           event.id, event.name, event.x, event.y))
  286.                           f.write("-----------------------------------------------------\n")
  287.                           t = true
  288.                         end
  289.                         # 输出指令内容
  290.                         f.write(COMMAND_CODES[command_code] + ": ")
  291.                         for k in 0...command.parameters.size
  292.                           f.write(command.parameters[k])
  293.                           f.write(", ") if k < command.parameters.size - 1
  294.                         end
  295.                         f.write("\n")
  296.                       end
  297.                     end
  298.                   end
  299.                 end
  300.               end
  301.               # 结束输出指令内容
  302.               if t
  303.                 f.write("-----------------------------------------------------\n")
  304.               end
  305.             end
  306.           end
  307.         end
  308.       end
  309.  
  310.         f.write(" Map Event End\n")   
  311.     f.write("-----------------------------------------------------\n")
  312.  
  313.  
  314.  
  315.     end
  316.  
  317.  
  318.  
  319.   end
  320. end
  321.  
  322.  
  323. #所有参数的指定,以下给出完整(可带参数查询)的参数表,没给出的说明不能带参数查询
  324. #1)在最后一个指定参数之后的参数,如果不限制,可以省略
  325. #2)在最后一个指定参数之前的参数,如果不限制,写成nil
  326. # 显示文章: finder.search(101, 文章文本字符串) (注:暂只支持第1行文本)
  327. # 显示选择项: finder.search(102, [选择项1, 选择项2, 选择项3, 选择项4], 取消的返回值)
  328. # 数值输入的处理: finder.search(103, 变量id, 位数)
  329. # 更改文章选项: finder.search(104, 位置上0/中1/下2,显示外框0/不显示外框1)
  330. # 按钮输入的处理: finder.search(105, 变量id)
  331. # 等待: finder.search(106, 帧数)
  332. # 注释: finder.search(108, 注释文本字符串) (注:暂只支持第1行文本)
  333. # 条件分歧: finder.search(111, 条件类别0-12, 条件参数1,条件参数2,...)
  334. # 开关: finder.search(111, 0, 开关id, 开0/关1)
  335. # 变量: finder.search(111, 1, 变量id, 常量比较0/变量比较1, 对像值(或对像变量id), 相等0/以上1/以下2/大于3/小于4/不等5)
  336. # 独立开关: finder.search(111, 2, 独立开关编号A-D, 开0/关1)
  337. # 计时: finder.search(111, 3, 时间, 以上0/以下1)
  338. # 角色: finder.search(111, 4, 角色id, 同伴0/名称1/特技2/武器3/防具4/状态5, 比较的名称/特技id/武器id/防具id/状态id)
  339. # 敌人: finder.search(111, 5, 敌人id, 出现0/状态1, 比较的状态id)
  340. # 事件: finder.search(111, 6, 事件id/角色-1/本事件0, 朝向上8/左4/右6/下2)
  341. # 钱: finder.search(111, 7, 钱数, 以上0/以下1)
  342. # 物品: finder.search(111, 8, 物品id)
  343. # 武器: finder.search(111, 9, 武器id)
  344. # 防具: finder.search(111, 10, 防具id)
  345. # 按钮: finder.search(111, 11, 按钮id(Input::A/B/C/X/Y/Z/L/R))
  346. # 脚本: finder.search(111, 12, 脚本内容字符串)
  347. # 公共事件: finder.search(117, 公共事件id)
  348. # 标签: finder.search(118, 标签名字符串)
  349. # 标签跳转: finder.search(119, 标签名字符串)
  350. # 开关操作: finder.search(121, 起始开关id, 结束开关id, 开0/关1)(如单个操作则起始开关id=结束开关id)
  351. # 变量操作: finder.search(122, 起始变量id, 结束变量id, 代入0/加法1/减法2/乘法3/除法4/剩余5, 操作值类别0-7, 操作值1, 操作值2)(如单个操作则起始变量id=结束变量id)
  352. # 常量: 类别0,操作值1为常量值,无操作值2
  353. # 变量: 类别1,操作值1为变量id,无操作值2
  354. # 随机: 类别2,操作值1为起始值,操作值2为终止值
  355. # 物品: 类别3,操作值1为物品id,无操作值2
  356. # 角色: 类别4,操作值1为角色id,操作值2为取值类别,0-13分别对应lv/exp/hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
  357. # 敌人: 类别5,操作值1为敌人id,操作值2为取值类别,0-11分别对应hp/sp/mhp/msp/str/dex/agi/int/pdf/mdf/eva
  358. # 事件: 类别6,操作值1为事件id,操作值2为取值类别,0-5分别对应x/y/朝向/屏x/屏y/地标
  359. # 其它: 类别7,操作值1为取值类别,0-6分别对应地图/人数/钱/步数/游戏时间/计时/存档次数
  360. # 独立开关操作: finder.search(123, 独立开关编号A-D,开0/关1)
  361. # 计时器操作: finder.search(124, 开0/关1, 时间秒数)
  362. # 增减金钱: finder.search(125, 增0/减1, 常量0/变量1, 常量值或变量id)
  363. # 增减物品: finder.search(126, 物品id, 增0/减1, 常量0/变量1, 常量值或变量id)
  364. # 增减武器: finder.search(127, 武器id, 增0/减1, 常量0/变量1, 常量值或变量id)
  365. # 增减防具: finder.search(128, 防具id, 增0/减1, 常量0/变量1, 常量值或变量id)
  366. # 替换队员: finder.search(129, 角色id, 入0/出1, 原状0/初期化1)
  367. # 更改窗口外观: finder.search(131, 外观文件名)
  368. # 更改战斗 BGM: finder.search(132, BGM文件名)
  369. # 更改战斗结束 ME: finder.search(133, ME文件名)
  370. # 更改禁止存档: finder.search(134, 禁止0/允许1)
  371. # 更改禁止菜单: finder.search(135, 禁止0/允许1)
  372. # 更改禁止遇敌: finder.search(136, 禁止0/允许1)
  373. # 场所移动: finder.search(201, 直接0/变量1, 地图id或其变量id, x坐标或其变量, y坐标或其变量, 朝向上8/左4/右6/下2)
  374. # 设置事件位置: finder.search(202, 事件id, 直接0/变量1/交换2, x坐标或其变量/被交换事件id, y坐标或其变量, 朝向上8/左4/右6/下2)
  375. # 画面卷动: finder.search(203, 卷动方向8/4/6/2, 卷动长度, 卷动速度1-6)
  376. # 更改地图设置: finder.search(204, 远景0/雾1/背景2)
  377. # 更改雾的色调: finder.search(205, nil, 帧数)
  378. # 更改雾的不透明度: finder.search(206, 不透明度, 帧数)
  379. # 显示动画: finder.search(207, 事件id, 动画id)
  380. # 更改透明状态: finder.search(208, 透明0/普通1)
  381. # 设置移动路线: finder.search(209, 事件id)
  382. # 执行渐变: finder.search(222, 渐变文件名)
  383. # 更改画面色调: finder.search(223, nil, 帧数)
  384. # 画面闪烁: finder.search(224, nil, 帧数)
  385. # 画面震动: finder.search(225, 强度, 频度, 帧数)
  386. # 显示图片: finder.search(231, 图片id, 图片文件名)
  387. # 移动图片: finder.search(232, 图片id)
  388. # 旋转图片: finder.search(233, 图片id, 速度)
  389. # 更改图片色调: finder.search(234, 图片id)
  390. # 图片消失: finder.search(235, 图片id)
  391. # 天气设置: finder.search(236, 无0/风1/雨2/雪3, 强度1-9, 持续)
  392. # 演奏 BGM: finder.search(241, BGM文件名)
  393. # 淡出 BGM: finder.search(242, 秒数)
  394. # 演奏 BGS: finder.search(245, BGS文件名)
  395. # 淡出 BGS: finder.search(246, 秒数)
  396. # 演奏 ME: finder.search(249, ME文件名)
  397. # 演奏 SE: finder.search(250, SE文件名)
  398. # 战斗处理: finder.search(301, 队伍id, 不可逃0/可逃1, 不可败0/可败1)
  399. # 名称输入处理: finder.search(303, 角色id, 字符数)
  400. # 增减 HP: finder.search(311, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
  401. # 增减 SP: finder.search(312, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
  402. # 更改状态: finder.search(313, 角色id, 附加0/解除1, 状态id)
  403. # 完全回复: finder.search(314, 角色id)
  404. # 增减 EXP: finder.search(315, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
  405. # 增减等级: finder.search(316, 角色id, 增0/减1, 常量0/变量1, 常量值或变量id)
  406. # 增减能力值: finder.search(317, 角色id, 0-5对应mhp/msp/str/dex/agi/int, 增0/减1, 常量0/变量1, 常量值或变量id)
  407. # 增减特技: finder.search(318, 角色id, 学0/忘1, 特技id)
  408. # 变更装备: finder.search(319, 角色id, 武器0/盾1/头2/甲3/饰4, 武器或防具id)
  409. # 更改角色姓名: finder.search(320, 角色id, 名字)
  410. # 更改角色职业: finder.search(321, 角色id, 职业id)
  411. # 更改角色图形: finder.search(322, 角色id, 角色图文件名, 角色图色相, 战斗图文件名, 战斗图色相)
  412.  
  413.  
  414. #finder = Find_Command.new
  415. #finder.search(201,nil,nil,nil,nil,2)
  416. #exit




回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 14:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表