Project1
标题:
[难以理解的脚本]通过文件来获取主线任务提示文字
[打印本页]
作者:
timiesea
时间:
2014-9-17 00:35
标题:
[难以理解的脚本]通过文件来获取主线任务提示文字
注:以下的所有内容适用于《RMVA传》,并不保证其他游戏的适用性,请慎重使用。
在本游戏中,每一个玩家都得选择一个主角进行游戏,在选择时用一个变量存储角色ID。
本游戏没有用到任务脚本,因此主线任务还是通过一个卷轴的形式体现。玩家使用主线任务卷轴时,游戏将根据玩家所选角色和游戏的进度来提示玩家下一步的进程。
每一个主角的主线游戏都放置在一个txt文件中,格式为id.txt
文件的内容格式如下:
弃用
1
从南边的水晶传送阵传送出去吧。您可以通过蓝
火圣杯和\C[14]森林女神\C[0]进行交流以获得奖励。尽管这
不是必须的。
此外,当使用掉\C[14]森林女神\C[0]的奖励后还可以通过对
话再次获得。
2
。。。。。。
其中数字表示任务序号,数字以下为该任务的提示,每三行就分一页。
脚本核心思想:
1.玩家在选择角色后,立刻打开文件,读取所有的内容并且创建一个二维数组,将每一个任务的所有提示按照序号进行存放。读取后关闭文件。
2.玩家如果读取文档,在还没有选择角色前没有动作,选择了角色后进行读取。读取后关闭文件。
3.玩家在使用主线任务卷轴时,从二维数组([任务ID][任务内容])中获取当前任务的所有提示内容,以三行为单位进行分页,每一页的第一行插入:“\\C[9]【提示】\\C[0]”。
4.分页分好后,使用$game_message(显示文章),将内容展示给玩家。
以下为代码:
读档:
#encoding:utf-8
#==============================================================================
# ■ DataManager
#------------------------------------------------------------------------------
# 数据库和游戏实例的管理器。所有在游戏中使用的全局变量都在这里初始化。
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# ● 生成各种游戏对象
#--------------------------------------------------------------------------
def self.create_game_objects
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_timer = Game_Timer.new
$game_message = Game_Message.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_others = Game_Others.new #创建一个自定义对象
end
#--------------------------------------------------------------------------
# ● 展开存档内容
# ● 根据角色ID打开相应的文件并且进行读取
#--------------------------------------------------------------------------
def self.extract_save_contents(contents)
$game_system = contents[:system]
$game_timer = contents[:timer]
$game_message = contents[:message]
$game_switches = contents[:switches]
$game_variables = contents[:variables]
$game_self_switches = contents[:self_switches]
$game_actors = contents[:actors]
$game_party = contents[:party]
$game_troop = contents[:troop]
$game_map = contents[:map]
$game_player = contents[:player]
if $game_variables[13] != 0
$game_others.Open($game_variables[13]);
end
end
end
复制代码
玩家选择角色后:
$game_others.Open("6");
复制代码
其中6为主角ID。
打开文件和显示任务内容:
#这个脚本的目的是用来管理游戏中一些额外功能的脚本
#这个类仿照默认脚本中以Game开头的类的写法
#这个类在进入游戏(开始之前)创建一个全局变量$game_others,以随时调用
#这个类的全局变量创建位置是:第11脚本第25行
#这个类的作者是萧道成峰
#这个类开始撰写的事件是2013-12-24
class Game_Others
#--------------------------------------------------------------------------
# ● 进行各种各样的初始化,主要用来初始化永久变量。
# ● 临时变量在各自的方法中初始化。
#--------------------------------------------------------------------------
def initialize
@strs = [];#存放某一个主角所有的主线任务提示的数组。
end
#--------------------------------------------------------------------------
# ● 根据传入的角色ID,打开相应的文件并且返回所有主线任务提示数组
# ● 数组是一个二维数组,第一维存放任务ID,第二维存放任务提示内容
# ● @strs[0]表示第一个任务的所有提示文字
#--------------------------------------------------------------------------
def Open(id)
map_name = id.to_s;#利用当前地图的ID拼凑出文件名
#继续拼凑文件名并打开文件,注:文件的编码须是utf-8
file = File.open("Data/" + map_name + ".txt");
str = file.readlines();#逐行扫描,存入一个数组
str = str[1, str.length() - 1];#文件的第一行弃用
ss = [];#一个临时数组,被当作二维数组的第二维,记录一个任务的所有提示文字
str.each do |st|#开始逐个扫描数组
st = st[0, st.length() - 1];#每一行的最后一个字符为换行符,必须删去。
#如果判断是数字则表示要读取新的任务
if st.to_i.to_s == st#判断是否是数字
@strs[@strs.length] = ss;
ss.clear;
next;
end
ss[ss.length] = st;
end
file.close();#文件打开后要关闭
end
#--------------------------------------------------------------------------
# ● 使用主线任务卷轴时读取文件获取内容并进行显示文字
#--------------------------------------------------------------------------
def Request_id(id)
st = @strs[id - 1];#新建一个数组存放当前任务的所有提示
if $game_message.texts == []
i = 1;#一个计数器
st.each do |str|#开始逐个扫描数组
p i;
if i == 1#如果计数器为1则插入固定文本
$game_message.add("\\C[9]【提示】\\C[0]");
end
$game_message.add(str);#将处理好的文字插入信息准备显示
#由于一页信息只能显示4行,去掉固定文本的一行,实际能显示的内容只有3行
#超过3行就要换页
if i == 3
i = 1;
next;
end
i = i + 1;#计数器进行累加
end
end
end
end
复制代码
创建一个公共事件,只需要如下自定义脚本:$game_others.Request_id($game_variables[2]);
其中$game_variables[2]代表第二号全局变量的值,在本游戏中代表游戏进程,也就是任务ID。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1