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复制代码