2010/7/6更新
囧,小问题不断
第396行开始
- for num in 1...mapfile.size begin save_data(mapfile[num],sprintf("Data/Map%03d.rxdata", num)) rescue end复制代码
复制代码改成
- 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的经验:
{:nm_9:} 我自己倒没有脚本备份过,不过如果出现这种情况,可以尝试这个方法
2010/7/5紧急更新
借着阿月历险记测试了一下,发现了问题所在
一个是没有考虑到事件可能处于最后一项,强制向下读取会出错
一个是没有考虑到map的文件可能会空缺,最后导致数组的id和map的id不一致
好像似乎应该也许是修正了,测试了一下没有问题,阿月历险记和范例都可以正常导入,请使用以前版本的更新:
有问题欢迎反馈。
================历史版本=================
想想RM要汉化的话,还要开工程一个一个去改,不方便不说,也不方便分配任务啊润色之类的活。66和灼眼的夏娜写过的只能导入不能导出。
本来打算从头开始写的,但是在6r上发现了zh99998写的
VX版本,试用了一下,感觉不错,效率和功能都有了。所以着手改写成xp版最终的结果是,导出文本用了他的框架,各种Enumerable对象堆的……实在是看的我五体投地。但是由于实际的文本不仅仅是对话导入导出,还有选择项,注释,修改主角姓名,用原来的构架我实在是写不出来(……),所以写到导入部分,思路已经完全不一样了,我用了一大堆正则表达式……
最后感觉效率差了好多(……)不过好歹是可以用,
目前的功能是可以导出地图,公共事件和战斗中的对话,选项,注释和修改主角姓名的事件项中的文本,进行修改后可以导入。地图名也可以修改
脚本:使用save方法导入,使用read方法导出。导出messages.txt
。
- 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在线咨询功能删除,谢谢。