赞 | 1 |
VIP | 165 |
好人卡 | 0 |
积分 | 21 |
经验 | 3408976 |
最后登录 | 2015-6-13 |
在线时间 | 1634 小时 |
Lv3.寻梦者 股东
- 梦石
- 0
- 星屑
- 2050
- 在线时间
- 1634 小时
- 注册时间
- 2006-8-21
- 帖子
- 489
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
做游戏时写的一个简单脚本,可以把存在txt文件里的对话导入到指定事件里去。
- #==============================================================================
- # ■ Lines_Convert
- #------------------------------------------------------------------------------
- # 将对白导入为事件
- #==============================================================================
- class Lines_Convert
- #--------------------------------------------------------------------------
- # ● 常量定义
- #--------------------------------------------------------------------------
- EVENTS_ID = 1 #导入的对象事件的ID(1始)
- PAGES_ID = 0 #导入的事件页ID (0始)
- MY_FILE = "line.txt" #导入的剧本文件名
- MAP_ID = "Data/Map001.rxdata" #导入的地图地址
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize
- #读取地图文件
- @my_map = load_data(MAP_ID)
- @cxs_read = File.open(MY_FILE)
- @lines = @cxs_read.readlines
- #清空事件列表
- @my_map.events[1].pages[0].list = []
- #写入对白
- refresh
- #写入事件列表尾
- new_event(0,[])
- #存储
- save_data(@my_map,MAP_ID)
- end
- #--------------------------------------------------------------------------
- # ● 处理
- #--------------------------------------------------------------------------
- def refresh
- for i in 0 ... @lines.size
- #对每一行读取:@人名@人物ID@内容@
- @line_name = Tannings_module.string_within(@lines[i]+"@","@",1)
- @line_event_id = Tannings_module.string_within(@lines[i]+"@","@",2)
- @line_content = Tannings_module.string_within(@lines[i]+"@","@",3).scan(/./)
- @line_each = ""
-
- if @line_name == "囧"
- @line_each = "--------------------------------------------"
- new_event(101,@line_each)
- else
- if @line_content.size <= 16
- #单行,缩紧一格(缩紧两格为两行者视为一行)
- @line_each = " "
- for n in 0...@line_content.size
- @line_each = @line_each + @line_content[n]
- end
- new_event(101,@line_each)
- @line_each = (@line_name != "" ? "\\name[" + @line_name + "]":"") + (@line_event_id != "" ? "\\p[" + @line_event_id +"]":"")
- new_event(401,@line_each)
- elsif @line_content.size <= 31
- #双行,首行缩紧两格,其他行缩紧一格
- @line_each = " "
- for n in 0...15
- @line_each = @line_each + @line_content[n]
- end
- new_event(101,@line_each)
-
- @line_each = " "
- for n in 15...@line_content.size
- @line_each = @line_each + @line_content[n]
- end
- new_event(401,@line_each)
-
- @line_each = (@line_name != "" ? "\\name[" + @line_name + "]":"") + (@line_event_id != "" ? "\\p[" + @line_event_id +"]":"")
-
- new_event(401,@line_each)
-
- elsif @line_content.size <= 47
- #三行,首行缩紧两格,其他行缩紧一格
- @line_each = " "
- for n in 0...15
- @line_each = @line_each + @line_content[n]
- end
- new_event(101,@line_each)
-
- @line_each = " "
- for n in 15...31
- @line_each = @line_each + @line_content[n]
- end
- new_event(401,@line_each)
-
- @line_each = " "
- for n in 31...@line_content.size
- @line_each = @line_each + @line_content[n]
- end
- new_event(401,@line_each)
-
- @line_each = (@line_name != "" ? "\\name[" + @line_name + "]":"") + (@line_event_id != "" ? "\\p[" + @line_event_id +"]":"")
- new_event(401,@line_each)
-
- else
- #超过三行,无效之,并警告
- @line_each = "●超格了●"
- for n in 0 ...10
- @line_each = @line_each + @line_content[n]
- end
- print @line_each
- new_event(101,"●囧●囧●囧●超格了●囧●囧●囧●")
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 写入事件代码
- # code :事件代码(Fixnum,101为起始行,401为跟随行)
- # parameters :对话内容(String)
- #--------------------------------------------------------------------------
- def new_event(code,parameters)
- unless parameters == ""
- #新建一事件代码变量
- my_code = RPG::EventCommand.new
- #写入数据
- my_code.code = code
- my_code.indent = 0
- my_code.parameters = [parameters]
- #存储数据
- @my_map.events[EVENTS_ID].pages[PAGES_ID].list.push my_code
- #清空
- my_code = nil
- end
- end
-
- end
- module Tannings_module
- #用来计算一字符串内两指定子字符串之间内容的函数
- #(字符串,分割符,位置(第一个还是第N个))
- def self.string_within(the_string,the_symbol,times)
- @the_string = the_string
- @the_symbol = the_symbol
- @times = times
- @the_array = @the_string.scan(/./)
- @s_to_e = [0,0]
- @r = ""
-
- for i in 0 .. @the_array.size
- if @the_array[i] == @the_symbol
- @times -= 1
- case @times
- when 0
- @s_to_e[0] = i+1
- when -1
- @s_to_e[1] = i-1
- break
- end
- end
- end
-
- for i in @s_to_e[0]..@s_to_e[1]
- @r = @r + @the_array[i]
- end
-
- return @r
- end
- end
复制代码
首先把要导入的对话存到line.txt去,按照如下格式存放(记得要分行,具体看范例):
@名字甲@事件1ID@对话内容A
@名字乙@事件2ID@对话内容B
然后自动生成对话:
对话内容A
\name[名字甲]\p[事件1ID]
对话内容B
\name[名字乙]\p[事件2ID]
那个事件ID跟存到哪个事件里没有关系,就是指到时候显示对话时显示在哪个事件上面。名字和事件ID可写可不写,不写名字就没有名字,不写ID就是普通的对话了。然后,如果名字的地方写“囧”字,则生成一个分割行,导入NPC对话的时候可以看得清楚一点。如果对话内容超过3行,会提示错误,生成“●囧●囧●囧●超格了●囧●囧●囧●”字样(囧),请重新生成。
存好以后,找个事件里写Lines_Convert.new,运行一下,然后直接关闭游戏和工程,再打开就可以看到生成好的对话了。具体的参数在脚本里改。
大概就是这么一个简单的东西。如果是剧本事先写好,应该还是有点用的,加其他效果进去的时候也能比较有的放矢。不过那个游戏是用的66加强对话脚本,所以不支持Fuki,这个真是很遗憾。如果不用任何对话加强脚本,直接用也还凑合,不写名字和事件ID就是了。(为什么不管发什么我都这么罗嗦 - -)
范例工程:
http://rpg.blue/upload_program/files/line_convert.rar |
|