Project1
标题: 求问有没有办法搜索公共事件触发的事件位置? [打印本页]
作者: hzw123 时间: 2014-2-16 21:22
标题: 求问有没有办法搜索公共事件触发的事件位置?
汉化游戏的时候发现一个公共事件却在地图中怎么都找不到,应该也不是有意隐藏的,因为只有这一个公共事件没有找到对应的地方,所以想问问有什么快速的方法找到这个公共事件到底是在哪里触发使用的?
作者: 丿梁丶小柒 时间: 2014-2-19 13:20
最简单的办法就是一个一个找。
也有可能执行的是脚本。
作者: 晴兰 时间: 2014-2-19 14:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 夜狠简单 时间: 2014-2-19 23:36
晴兰 发表于 2014-2-19 14:09
如果能保证这个事件一定运行的话,可以加一行脚本来显示调用位置和调用者信息啥的 ...
代码该怎么写呢?最主要还是从方便的观点来。可是我完全没头绪
作者: 铃仙·优昙华院·因幡 时间: 2014-2-20 11:21
变量带入地图ID的话可以查看调用公共事件的地图.
作者: 夜狠简单 时间: 2014-2-20 12:34
版主大大都出动了,有时间的话我看下能不能写一段公共事件不执行也能找出所有与它相关的地图ID的代码。不过楼主解决了没有吱一声嘛
作者: 夜狠简单 时间: 2014-2-21 14:25
铃仙·优昙华院·因幡 发表于 2014-2-20 11:21
变量带入地图ID的话可以查看调用公共事件的地图.
这个目前可以找地图上的公共事件,至于物品和战斗事件里带有的公共事件暂时没试过。楼主什么时候回来了可以参考一下,另外版主有空的话帮我看下脚本那里该怎么写输出的数据可以不重复?
-
-
找公共事件.zip
284.17 KB, 下载次数: 48
作者: 铃仙·优昙华院·因幡 时间: 2014-2-21 17:23
本帖最后由 铃仙·优昙华院·因幡 于 2014-2-21 17:31 编辑
module Reisen
class MapCommonEvent
def initialize(startID = 1, endID = 100)
@map_id = startID - 1
@fp = File.open("CommonEvent.log", "w")
while @map_id <= endID
begin
@map_id += 1
@map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
@fp.write("地图ID:#{@map_id}\n")
write_event
rescue
@fp.write("地图ID:#{@map_id}不存在\n")
next
end
end
@fp.close
end
def write_event
@map.events.each do |key, value|
value.pages.each do |page|
page.list.each do |list|
case list.code
when 117 # 事件调用公共事件
@fp.write("\t事件ID:#{key},事件坐标(#{value.x},#{value.y})调用的公共事件ID为#{list.parameters[0]}\n")
when 655,355 # 脚本事件
list.parameters.each do |parameter|
parameter =~ /\$game_temp.common_event_id\s*=\s*(\d+)/
@fp.write("\t事件ID:#{key},事件坐标(#{value.x},#{value.y})调用的公共事件ID为#{$1}\n") if $1
end
end
end
end
end
end
end
end
module Reisen
class MapCommonEvent
def initialize(startID = 1, endID = 100)
@map_id = startID - 1
@fp = File.open("CommonEvent.log", "w")
while @map_id <= endID
begin
@map_id += 1
@map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
@fp.write("地图ID:#{@map_id}\n")
write_event
rescue
@fp.write("地图ID:#{@map_id}不存在\n")
next
end
end
@fp.close
end
def write_event
@map.events.each do |key, value|
value.pages.each do |page|
page.list.each do |list|
case list.code
when 117 # 事件调用公共事件
@fp.write("\t事件ID:#{key},事件坐标(#{value.x},#{value.y})调用的公共事件ID为#{list.parameters[0]}\n")
when 655,355 # 脚本事件
list.parameters.each do |parameter|
parameter =~ /\$game_temp.common_event_id\s*=\s*(\d+)/
@fp.write("\t事件ID:#{key},事件坐标(#{value.x},#{value.y})调用的公共事件ID为#{$1}\n") if $1
end
end
end
end
end
end
end
end
任意地图的任意事件 -> 事件 -> 脚本 -> Reisen::MapCommonEvent.new(start, end)
其中的 start 表示要搜索的地图ID 的开始序号, end 是结尾序号.
最后的搜索内容在工程根目录下一个 CommonEvent.log 里保存的, 内容差不多是这样的:
地图ID:1
事件ID:1,事件坐标(6,6)调用的公共事件ID为1
地图ID:2
事件ID:1,事件坐标(5,3)调用的公共事件ID为5
事件ID:1,事件坐标(5,3)调用的公共事件ID为422
地图ID:3不存在
地图ID:4不存在
地图ID:5不存在
地图ID:6不存在
地图ID:1
事件ID:1,事件坐标(6,6)调用的公共事件ID为1
地图ID:2
事件ID:1,事件坐标(5,3)调用的公共事件ID为5
事件ID:1,事件坐标(5,3)调用的公共事件ID为422
地图ID:3不存在
地图ID:4不存在
地图ID:5不存在
地图ID:6不存在
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |