Project1
标题:
对话导入脚本[针对66加强对话脚本]
[打印本页]
作者:
狒狒王
时间:
2007-12-23 06:18
标题:
对话导入脚本[针对66加强对话脚本]
做游戏时写的一个简单脚本,可以把存在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
作者:
狒狒王
时间:
2007-12-23 06:18
标题:
对话导入脚本[针对66加强对话脚本]
做游戏时写的一个简单脚本,可以把存在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
作者:
Eclair
时间:
2008-1-31 19:10
提示:
作者被禁止或删除 内容自动屏蔽
作者:
doranikofu
时间:
2008-1-31 19:40
似乎很方便啊 感谢
可惜我用的FUKI的那个 Orz
不过RM这种模式想很方便的导入对白似乎还是很难的{/gg}
作者:
水迭澜
时间:
2008-1-31 23:39
{/se}好东西
回头来看一下~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1