扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 130|回复: 0

[转载发布] 【2010/7/6更新】RMXP的对话等文本的导入导出

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10627
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13396

    灌水之王

    发表于 2024-4-19 18:14:01 | 显示全部楼层 |阅读模式
    2010/7/6更新
    囧,小问题不断
    第396行开始
    1.   for num in 1...mapfile.size    begin      save_data(mapfile[num],sprintf("Data/Map%03d.rxdata", num))    rescue     end复制代码
    复制代码
    改成
    1.   for num in 1...mapfile.size    begin      next if mapfile[num]==0      save_data(mapfile[num],sprintf("Data/Map%03d.rxdata", num))    rescue     end复制代码
    复制代码
    另外,根据hongqizhen的经验:
    最后,由于是对付大游戏,在导入文本时的时间非常漫长,很容易就会出现“脚本已备份的提示”,建议加上夏娜的的这段代码:
    http://rpg.blue/portal.php?mod=view&aid=40747
    {:nm_9:} 我自己倒没有脚本备份过,不过如果出现这种情况,可以尝试这个方法



    2010/7/5紧急更新
    借着阿月历险记测试了一下,发现了问题所在
    一个是没有考虑到事件可能处于最后一项,强制向下读取会出错
    一个是没有考虑到map的文件可能会空缺,最后导致数组的id和map的id不一致

    好像似乎应该也许是修正了,测试了一下没有问题,阿月历险记和范例都可以正常导入,请使用以前版本的更新:



    有问题欢迎反馈。


    ================历史版本=================
    想想RM要汉化的话,还要开工程一个一个去改,不方便不说,也不方便分配任务啊润色之类的活。66和灼眼的夏娜写过的只能导入不能导出。

    本来打算从头开始写的,但是在6r上发现了zh99998写的VX版本,试用了一下,感觉不错,效率和功能都有了。所以着手改写成xp版最终的结果是,导出文本用了他的框架,各种Enumerable对象堆的……实在是看的我五体投地。但是由于实际的文本不仅仅是对话导入导出,还有选择项,注释,修改主角姓名,用原来的构架我实在是写不出来(……),所以写到导入部分,思路已经完全不一样了,我用了一大堆正则表达式……

    最后感觉效率差了好多(……)不过好歹是可以用,目前的功能是可以导出地图,公共事件和战斗中的对话,选项,注释和修改主角姓名的事件项中的文本,进行修改后可以导入。地图名也可以修改
    脚本:使用save方法导入,使用read方法导出。导出messages.txt
    1. TAB=" "*2ENTER= "\r\n"def read_event(list, head)  text = []  for i in 0...list.size    if list[i].code==101      text.push("#{TAB*2}#{ENTER}#{TAB*3}#{list[i].parameters[0]}#{ENTER}")      x=i+1      loop do        if list[x].code==401          text.push("#{TAB*3}#{list[x].parameters[0]}#{ENTER}")        else          break        end        x+=1      end    end    if list[i].code==102      text.push("#{TAB*2}#{ENTER}")      list[i].parameters[0].each do |entry|        text.push("#{TAB*3}#{entry}#{ENTER}")      end    end    if list[i].code==108      text.push("#{TAB*2}#{ENTER}#{TAB*3}#{list[i].parameters[0]}#{ENTER}")      x=i+1      loop do        if list[x].code==408          text.push("#{TAB*3}#{list[x].parameters[0]}#{ENTER}")        else          break        end        x+=1      end    end    if list[i].code==320      text.push("#{TAB*2}#{ENTER}#{TAB*3}#{list[i].parameters[1]}#{ENTER}")    end  end  return if text.empty?  result=head  text.each {|text| result += text }  return resultenddef read  file = File.open("messages.txt", "wb")  load_data("Data/MapInfos.rxdata").each_pair do |map_id, map|    file.write("#{ENTER}")     load_data(sprintf("Data/Map%03d.rxdata", map_id)).events.each_pair {|event_id, event| event.pages.each_index {|page_id| file.write(read_event(event.pages[page_id].list, "#{TAB}#{ENTER}"))}}  end  file.write("#{ENTER}")  load_data("Data/CommonEvents.rxdata").each {|command| file.write(read_event(command.list, "#{TAB}#{ENTER}")) if command}  file.write("#{ENTER}")  load_data("Data/Troops.rxdata").each {|battle| battle.pages.each_index {|page_id| file.write(read_event(battle.pages[page_id].list, "#{TAB}#{ENTER}"))} if battle}  file.closeenddef save  mapid=-1  eveid=-1  pageid=-1  listid=-1  file = File.open("messages.txt")  mapinfos=load_data("Data/MapInfos.rxdata")  mapfile=[0]  num=0  for num in 1..999    begin      mapfile.push(load_data(sprintf("Data/Map%03d.rxdata", num)))    rescue     end  end  commondata = load_data("Data/CommonEvents.rxdata")  troopdata = load_data("Data/Troops.rxdata")  #file.each_line do |line|  line=file.readlines  for i in 0...line.size    line[i] = line[i].split("")[-1]  #该死的编码问题……    line[i] = line[i].split("#{ENTER}")[0] #去掉换行符    if line[i]=~/\/      mapid=$1.to_i      mapname=$2      mapinfos[mapid].name=mapname    end    if line[i]=~/\/      eveid=$1.to_i      pageid=$2.to_i      Graphics.update    end        if line[i]=~/\\/      listid=$1.to_i      if mapid>0        x=i+1        y=listid        mapfile[mapid].events[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if mapfile[mapid].events[eveid].pages[pageid-1].list[y].code==401            mapfile[mapid].events[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      elsif mapid==-2        x=i+1        y=listid        commondata[eveid].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if commondata[eveid].list[y].code==401            commondata[eveid].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      elsif mapid==-3        x=i+1        y=listid        troopdata[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if troopdata[eveid].pages[pageid-1].list[y].code==401            troopdata[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      end    end    if line[i]=~/\\/      listid=$1.to_i      count=$2.to_i      temp=[]      if mapid>0        x=i+1        y=listid+1        z=0        loop do          if mapfile[mapid].events[eveid].pages[pageid-1].list[y].code==402            mapfile[mapid].events[eveid].pages[pageid-1].list[y].parameters[1]=line[x][6,line[x].size-7]            temp.push(line[x][6,line[x].size-7])            z+=1            x+=1            y+=1          else            y+=1          end          if z==count            break          end        end        mapfile[mapid].events[eveid].pages[pageid-1].list[listid].parameters[0]=temp      elsif mapid==-2        x=i+1        y=listid+1        z=0        loop do          if commondata[eveid].list[y].code==402            commondata[eveid].list[y].parameters[1]=line[x][6,line[x].size-7]            temp.push(line[x][6,line[x].size-7])            z+=1            x+=1            y+=1          else            y+=1          end          if z==count            break          end        end        commondata[eveid].list[listid].parameters[0]=temp      elsif mapid==-3        x=i+1        y=listid+1        z=0        loop do          if troopdata[eveid].pages[pageid-1].list[y].code==402            troopdata[eveid].pages[pageid-1].list[y].parameters[1]=line[x][6,line[x].size-7]            temp.push(line[x][6,line[x].size-7])            z+=1            x+=1            y+=1          else            y+=1          end          if z==count            break          end        end        troopdata[eveid].pages[pageid-1].list[listid].parameters[0]=temp      end    end        if line[i]=~/\\/      listid=$1.to_i      if mapid>0        x=i+1        y=listid        mapfile[mapid].events[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if mapfile[mapid].events[eveid].pages[pageid-1].list[y].code==408            mapfile[mapid].events[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      elsif mapid==-2        x=i+1        y=listid        commondata[eveid].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if commondata[eveid].list[y].code==408            commondata[eveid].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      elsif mapid==-3        x=i+1        y=listid        troopdata[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]        x+=1        y+=1        loop do          if troopdata[eveid].pages[pageid-1].list[y].code==408            troopdata[eveid].pages[pageid-1].list[y].parameters[0]=line[x][6,line[x].size-7]            x+=1            y+=1          else            break          end        end      end    end        if line[i]=~/\\/      listid=$1.to_i      if mapid>0        mapfile[mapid].events[eveid].pages[pageid-1].list[listid].parameters[1]=line[i+1][6,line[i+1].size-7]      elsif mapid==-2        commondata[eveid].list[listid].parameters[1]=line[i+1][6,line[i+1].size-7]      elsif mapid==-3        troopdata[eveid].pages[pageid-1].list[listid].parameters[1]=line[i+1][6,line[i+1].size-7]      end    end        if line[i]=~/\/      mapid=-2    end        if line[i]=~/\/      eveid=$1.to_i    end            if line[i]=~/\/      mapid=-3    end        if line[i]=~/\/      eveid=$1.to_i      pageid=$2.to_i    end  end  file.close  save_data(mapinfos,"Data/MapInfos.rxdata")  for num in 1...mapfile.size    begin      save_data(mapfile[num],sprintf("Data/Map%03d.rxdata", num))    rescue     end  end  save_data(commondata,"Data/CommonEvents.rxdata")  save_data(troopdata,"Data/Troops.rxdata")end复制代码
    复制代码
    范例工程:

    导出的文本示例:



       
          实际上这是个很复杂的问题。
          月光正煌煌地照耀在我的身上。
          而狩猎的对象,自是愈多愈佳。
          那么,狩猎开始了。
       
          你看了见过大爷吗
          还没呢
          看过了
          那是啥
       
          我是注释,我没有用啦啦啦
       
          阿尔东西


       
          我是公共事件
          真的哟
          目标是不掉用
          不调用写着干啥啊囧
       
          丁丁是人才
          嗯……
          水镜先生!
          那是啥
       
          我是注释,我在公共事件里面啦啦啦
       
          阿尔东西


       
          幽灵是很可怜的怪嘛
          你们每次做游戏都打他
       
          喜欢纵版
          不喜欢
          还行
          那是啥
       
          我是注释,我在打幽灵啦啦啦
       
          阿尔囧死

    注意:尖括号内的东西不要修改,文本前面的6个空格不要修改,否则会匹配失败
                 本帖来自P1论坛作者trentswd,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=134246  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:48 , Processed in 0.116184 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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