设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1874|回复: 2
打印 上一主题 下一主题

脚本DEBUG

 关闭 [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
619
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

跳转到指定楼层
1
发表于 2008-10-4 00:06:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
自己写的支持行增减的对话导入导出脚本
如果txt的行数变了,导进去对话的就不对

感觉错误应该出在save_event里,但是用不同的思路重写了两边还是一样的错{/gg}

  1. #==============================================================================
  2. # ■ 文章导入导出 v0.3 1003
  3. #------------------------------------------------------------------------------
  4. #  把这个放F11里,运行游戏
  5. #   弹出的文本文档就是导出的对话,用记事本修改即可
  6. #   导入的时候把第一行改为false
  7. #==============================================================================

  8. #--------------------------------------------------------------------------
  9. # ● 设定部分
  10. #     OUT : 导入/导出标记
  11. #     TAB : 指定分隔符,默认为两个空格
  12. #     HEAD: 是否显示事件位置信息
  13. #     INFO: 是否显示对话角色头像等信息
  14. #--------------------------------------------------------------------------
  15. OUT = true     #导入时请改为false
  16. TAB = " " * 2
  17. HEAD = true
  18. INFO = true

  19. #--------------------------------------------------------------------------
  20. # ● 缩进
  21. #--------------------------------------------------------------------------
  22. INDENT = HEAD ? INFO ? 3 : 2 : INFO ? 1 : 0

  23. #--------------------------------------------------------------------------
  24. # ● 导出方法定义
  25. #--------------------------------------------------------------------------
  26. def read_event(list, head)
  27.   text = []
  28.   list.each do |command|
  29.     text.push ["#{HEAD ? TAB * 2 : ""}<头像名[#{command.parameters[0]}]头像编号[#{command.parameters[1]}]背景[#{command.parameters[2]}]位置[#{command.parameters[3]}]>\r\n"]if command.code == 101
  30.     text[-1].push (TAB * INDENT + command.parameters[0]) if command.code == 401
  31.   end
  32.   return if text.empty?
  33.   result = HEAD ? head : ""
  34.   text.each do |text|
  35.     INFO ? result += text.shift : text.shift
  36.     text.each {|text| result += text + "\r\n"}
  37.   end
  38.   #想不出词了,于是全用text -0-
  39.   return result
  40. end
  41. #--------------------------------------------------------------------------
  42. # ● 导入方法定义
  43. #--------------------------------------------------------------------------
  44. def save_event(list)
  45.   index = 0
  46.   while index < list.size
  47.     if list[index].code == 101
  48.       list[index].parameters = @text[0].shift
  49.       index += 1
  50.       #获取接下来的401
  51.       while index < list.size and list[index].code == 401
  52.         if @text[0].empty?      #如果text里的文字已经没有了,就直接删掉当前命令
  53.           list.delete_at(index)
  54.         else
  55.           list[index].parameters[0] = @text[0].shift
  56.           last_com = list[index]#替换文字,并记录当前命令(后面的添加用)
  57.           index += 1
  58.         end
  59.       end
  60.       for text in @text[0]      #如果text还有多余的,就添加上
  61.         last_com.parameters[0] = text
  62.         list.insert(index, last_com)
  63.         index += 1
  64.       end
  65.       @text.shift               #清除text的第一项,准备下一次循环
  66.     else
  67.       index += 1                #如果命令不是101,就直接检查下一命令
  68.     end
  69.   end
  70.   return list                   #返回修改后的命令列表
  71. end

  72. if OUT
  73.   #--------------------------------------------------------------------------
  74.   # ● 导出
  75.   #--------------------------------------------------------------------------
  76.   file = File.open("messages.txt", "wb")
  77.   load_data("Data/MapInfos.rvdata").each_pair do |map_id, map|
  78.     file.write("<地图[#{map_id}]#{map.name}>\r\n") if HEAD
  79.     load_data(sprintf("Data/Map%03d.rvdata", map_id)).events.each_pair {|event_id, event| event.pages.each_index {|page_id| file.write(read_event(event.pages[page_id].list, "#{TAB}<事件[#{event_id}]#{event.name}页[#{page_id+1}]>\r\n"))}}
  80.   end
  81.   file.write("<全局事件>\r\n")
  82.   load_data("Data/CommonEvents.rvdata").each {|command| file.write(read_event(command.list, "#{TAB}<全局事件[#{command.id}]>\r\n")) if command}
  83.   file.write("<战斗>\r\n")
  84.   load_data("Data/Troops.rvdata").each {|battle| battle.pages.each_index {|page_id| file.write(read_event(battle.pages[page_id].list, "#{TAB}<战斗[#{battle.id}]#{battle.name}页[#{page_id+1}]>\r\n"))} if battle}
  85.   file.close
  86.   `notepad.exe messages.txt`
  87. else
  88.   #--------------------------------------------------------------------------
  89.   # ● 导入
  90.   #--------------------------------------------------------------------------
  91.   @text = []
  92.   file = File.open("messages.txt")
  93.   file.each_line do |line|
  94.     line = line.split("")[-1]  #该死的编码问题……
  95.     line = line.split("\n")[0] #去掉换行符
  96.     if line and line[HEAD ? TAB.size * 2 : 0, 11] == "<头像名[" and INFO
  97.       line = line[TAB.size * 2, line.size - TAB.size * 2] if HEAD
  98.       @text.push [[line[11,line.size - 46], line[-21,1], line[-12,1], line[-3,1]]]
  99.     elsif line and line[0, TAB.size * INDENT] == TAB * INDENT and line[0,1] != "<"
  100.       @text[-1].push line[TAB.size * INDENT, line.size - TAB.size * INDENT]
  101.     end
  102.   end
  103.   file.close
  104.   load_data("Data/MapInfos.rvdata").each_key do |map_id|
  105.     map_file = (sprintf("Data/Map%03d.rvdata", map_id))
  106.     data = load_data(map_file)
  107.     data.events.each_pair {|event_id, event| event.pages.each_index {|page_id| data.events[event_id].pages[page_id].list = save_event(event.pages[page_id].list)}}
  108.     #p data.events[1].pages[0].list
  109.     save_data(data, map_file)
  110.   end
  111.   
  112.   data = load_data("Data/CommonEvents.rvdata")
  113.   data.each_index {|event_id| data[event_id].list = save_event(data[event_id].list) unless event_id == 0}
  114.   save_data(data,"Data/CommonEvents.rvdata")
  115.   
  116.   data = load_data("Data/Troops.rvdata")
  117.   data.each_index {|troop_id| data[troop_id].pages.each_index {|page_id| data[troop_id].pages[page_id].list = save_event(data[troop_id].pages[page_id].list)}unless troop_id == 0}
  118.   save_data(data, "Data/Troops.rvdata")
  119. end
复制代码

版务信息:本贴由楼主自主结贴~
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-23
帖子
539
2
发表于 2008-10-4 00:51:04 | 只看该作者
解决方法如下:
1、尽量输入回车(被T出)
2、用正则表达式得到字符量以后,匹配一定的字符换行..
(这个找八云解决,我马上就上课去了- -)
我发现,在VX里没有真正的换行计算- -
横版卷轴ARPG制作中... 系统80% 素材95% 剧情1%.... 有脚本问题随时吼我- -(被T出)
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-8
帖子
466
3
发表于 2008-10-4 01:06:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-1 23:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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