| 赞 | 72 |
| VIP | |
| 好人卡 | |
| 积分 | 23 |
| 经验 | |
| 最后登录 | 2022-3-9 |
| 在线时间 | 4033 小时 |
…あたしは天
- 梦石
- 0
- 星屑
- 2308
- 在线时间
- 4033 小时
- 注册时间
- 2010-10-4
- 回帖
- 10548
 
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 taroxd 于 2014-7-28 10:23 编辑
全局替换事件中“显示文字”和“显示选项”中的文字。
在 pattern 中设定即可。
不识别换行。也就是说,只会对文字一行一行检查并逐行替换。
可以用于汉化游戏之类的地方。
------上级者向------
你可以修改 change_text 的行为,来执行更加多样化的替换。
change_text 接受一个字符串参数,直接改变该字符串的内容而不需要返回一个新的字符串。
如果要使用新的字符串来替换,请对原字符串执行 replace 方法,替换为新字符串的内容。
[fold=VA版]
[pre lang="ruby" line="1"]
pattern = {
'查找内容' => '替换内容', # 每一行的最后有一个逗号
'バカ' => '⑨',
}
re = Regexp.union(pattern.keys)
change_text = ->(text) { text.gsub!(re, pattern) }
change_page = lambda do |page|
return unless page
page.list.each do |command|
case command.code
when 401, 405 # 显示文字 / 显示滚动文字
change_text.(command.parameters[0])
when 102 # 显示选项
command.parameters[0].each(&change_text)
end
end
end
change_event = lambda do |event|
return unless event
event.pages.each(&change_page)
end
change_each_in_file = lambda do |filename, proc|
save_data(load_data(filename).each(&proc), filename)
end
# 替换地图上的事件
load_data('Data/MapInfos.rvdata2').each_key do |map_id|
filename = sprintf('Data/Map%03d.rvdata2', map_id)
map = load_data(filename)
map.events.each_value(&change_event)
save_data(map, filename)
end
change_each_in_file.('Data/CommonEvents.rvdata2', change_page) # 替换公共事件
change_each_in_file.('Data/Troops.rvdata2', change_event) # 替换敌群中的事件
msgbox '全局替换成功!请重启编辑器以查看效果。'
exit
[/pre]
[/fold]
[fold=VX版]
感谢 @kuerlulu 移植,出了问题找他= =
[pre lang="ruby" line="1"]@pattern = {
'123456' => '654321', # 每一行的最后有一个逗号
'バカ' => '⑨',
}
def change_text(text)
@pattern.keys.each{|key| text.gsub!(key,@pattern[key]) }
end
def change_page(page)
return unless page
page.list.each do |command|
case command.code
when 101,401 # 显示文字
change_text(command.parameters[0])
when 102 # 显示选项
command.parameters[0].each{|e|change_text(e)}
end
end
end
def change_event(event)
return unless event
event[1].pages.each{|e|change_page(e)}
end
# 替换地图上的事件
load_data('Data/MapInfos.rvdata').each_key do |map_id|
filename = sprintf('Data/Map%03d.rvdata', map_id)
map = load_data(filename)
map.events.each{|e|change_event(e)}
save_data(map, filename)
end
save_data(load_data('Data/CommonEvents.rvdata').each{|e|change_page(e)}, 'Data/CommonEvents.rvdata') # 替换公共事件
print '全局替换成功!请重启编辑器以查看效果。'
exit
[/pre]
[/fold] |
评分
-
查看全部评分
|