Project1

标题: 有没有办法批量导出替换全部当前地图中的某个字或者词 [打印本页]

作者: 89444640    时间: 2018-4-20 18:03
标题: 有没有办法批量导出替换全部当前地图中的某个字或者词
刚才测试,发现因为输入法和更换系统,造成 帕秋这个词汇 很多地方都打成了 帕秋,包括素材
素材就算了,反正那个名字都能用,但是事件里面的,就必须替换了。
目前只能根据记忆一个一个找地图中可能出现这个词的事件,查了两个小时了,觉得肯定有漏的。
只能重新走一遍测试了。
我印象中,RMXP好像是能用什么方法导入和导出文本的。
有办导出或者批量替换特殊单词中的某个字吗?
作者: 芯☆淡茹水    时间: 2018-4-20 19:42
本帖最后由 芯☆淡茹水 于 2018-4-20 22:17 编辑

如果我遇到你那种情况,我会偷懒的这样做:


  1. class Bitmap
  2.   alias xr_replace_draw_text draw_text
  3.   def draw_text(*args)
  4.     index = args[0].is_a?(Rect) ? 1 : 4
  5.     args[index].gsub!(/帕秋莉/, "帕秋丽")
  6.     xr_replace_draw_text(args)
  7.   end
  8. end
复制代码

作者: 百里_飞柳    时间: 2018-4-20 22:10
https://github.com/Solistra/rvpacker 一个程序邪教操作,把数据解包成json,再用文本编辑器全局替换了,再打包回原文件
作者: 89444640    时间: 2018-4-20 22:36
芯☆淡茹水 发表于 2018-4-20 19:42
如果我遇到你那种情况,我会偷懒的这样做:

新建了个工程,把干净的Scripts放进去,然后复制脚本过去运行,还是跳出

作者: 芯☆淡茹水    时间: 2018-4-20 22:52
本帖最后由 芯☆淡茹水 于 2018-4-20 23:00 编辑
89444640 发表于 2018-4-20 22:36
新建了个工程,把干净的Scripts放进去,然后复制脚本过去运行,还是跳出
...




  1. class Bitmap
  2.   alias xr_replace_draw_text draw_text
  3.   def draw_text(*args)
  4.     index = args[0].is_a?(Rect) ? 1 : 4
  5.     args[index].gsub!(/帕秋莉/, "帕秋丽")
  6.     xr_replace_draw_text(*args)
  7.   end
  8. end
复制代码


至于对话框里面的,可以这样(这个没测试)

RUBY 代码复制
  1. class Game_Temp
  2.   def message_text=(text)
  3.     @message_text = text
  4.     @message_text && @message_text.gsub!(/帕秋莉/, "帕秋丽")
  5.   end
  6. end

作者: guoxiaomi    时间: 2018-4-21 02:20
去看看sailcat的工具包,这个应该直接对数据下手,前面提到的方法不对。
data_map.events.pages.list类似的……判断一下code = 401或者101
作者: 灯笼菜刀王    时间: 2018-4-21 14:12
我觉得,你让新脚本和你的那一大群老住户搞好邻里关系的时间,足够你一个字一个字修回来了吧......
作者: chd114    时间: 2018-4-21 17:58
在实际显示文本的脚本加替换就行了,然后你原来错误的也不需要改
这个应该是最保险的了当然坏处是你两个词只有一个可以用了(因为另一个会被换掉)
作者: yang1zhi    时间: 2018-4-21 18:11
本帖最后由 yang1zhi 于 2018-4-21 18:13 编辑

因为你人名没有采用数据库里面的人名。
如果你是调用数据库里的人名,或者脚本里的变量
那只要修改一处就全改过来了


-----------
自从吃亏后。我现在都是把文字写在脚本里。事件的对话框里什么也没写。
作者: guoxiaomi    时间: 2018-5-3 20:07
复制脚本到游戏里,关掉工程正常运行,查看生成的txt文件,就知道这些事件的位置了。去掉最后 save_data 前面的注释会直接修改对应的地图文件。
请做好data文件夹的备份以防万一,使用完毕后删掉此脚本。
这个脚本只要在main前,放哪都行,反正就用一次,最好放在最前面。
因为可能出现不在同一行的情况,所以也顺便检测了帕秋和帕,这个自己去替换吧
RUBY 代码复制
  1. file = File.open('result-paqiuli.txt', 'w')
  2. Dir.glob('Data/Map*.rxdata') do |fn|
  3.   # 排除掉地图设置文件
  4.   next if fn == 'Data/MapInfos.rxdata'
  5.   # 读取地图内容
  6.   file.puts fn
  7.   data_map = load_data(fn)
  8.   data_map.events.each do |id, event|
  9.     event.pages.each do |page|
  10.       page.list.each do |cmd|
  11.         case cmd.code
  12.         when 101, 401
  13.           if cmd.parameters[0] =~ /帕秋丽/
  14.             file.puts "Event#{id}: 帕秋丽"
  15.             cmd.parameters[0].gsub!('帕秋丽', '帕秋莉')
  16.           elsif cmd.parameters[0] =~ /帕秋/
  17.             file.puts "Event#{id}: 帕秋"
  18.           elsif cmd.parameters[0] =~ /帕/
  19.             file.puts "Event#{id}: 帕"
  20.           end
  21.         end
  22.       end
  23.     end
  24.   end
  25.   # 取消下面一行的注释以修改地图文件
  26.   # save_data(data_map, fn)
  27. end
  28. file.close
  29. p '请查看txt文件!'
  30. exit


作者: Tsar_NicholasII    时间: 2018-6-8 01:14
没办法,只能重做
作者: hyperzlib    时间: 2018-6-8 10:54
理论可行,因为地图其实是ruby归档,不过要写程序
作者: Tsar_NicholasII    时间: 2018-6-9 13:43
实际显示的文本加脚本替换




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1