数据库

默认的脚本到底在做什么?在解读篇中,笔者会给出一些用来解读这些脚本的提示。

而本章会解释在脚本中是如何处理 VA 的数据库的。

$data_xxxx

请先从脚本编辑器左侧的列表中,找到 DataManager 项,在这页脚本刚开始的地方,能看见下方的代码对吧。这个 load_normal_database 是在游戏开始之后,在标题画面显示之前会先调用的方法。

  def self.load_normal_database
    $data_actors        = load_data("Data/Actors.rvdata2")
    $data_classes       = load_data("Data/Classes.rvdata2")
    $data_skills        = load_data("Data/Skills.rvdata2")
    $data_items         = load_data("Data/Items.rvdata2")
    $data_weapons       = load_data("Data/Weapons.rvdata2")
    $data_armors        = load_data("Data/Armors.rvdata2")
    $data_enemies       = load_data("Data/Enemies.rvdata2")
    $data_troops        = load_data("Data/Troops.rvdata2")
    $data_states        = load_data("Data/States.rvdata2")
    $data_animations    = load_data("Data/Animations.rvdata2")
    $data_tilesets      = load_data("Data/Tilesets.rvdata2")
    $data_common_events = load_data("Data/CommonEvents.rvdata2")
    $data_system        = load_data("Data/System.rvdata2")
    $data_mapinfos      = load_data("Data/MapInfos.rvdata2")
  end

在这段代码中,RM 会从保存好的文件中读取数据库,并让里面的各种数据可以从脚本中获取。凡是以$这个符号为开头的变量称作全局变量,顾名思义,这些数据在这段代码之后,不论是在脚本的哪个地方都能够由此获取。

所谓的 load_data 是RGSS 内建函数之一,是可以从指定的文件中读取数据的函数,比方说上面第一行代码的意思是:从 Data 文件夹中的 Actors.rvdata2 这个文件中读取数据,并将数据赋值给叫做 $data_actors 的变量中。

此外,在定义 load_data 方法最开始的地方写着 self.,这是定义 模块方法的方式。 关于模块会在下一章解释,现在请先将注意集中在方法的内容里面。

数据库的内容

每个对象所代表的东西如下:

变量名 对应的数据库 使用的类
$data_actors 角色 RPG::Actor 的数组
$data_classes 职业 RPG::Class 的数组
$data_skills 技能 RPG::Skill 的数组
$data_items 物品 RPG::Item 的数组
$data_weapons 武器 RPG::Weapon 的数组
$data_armors 护甲 RPG::Armor 的数组
$data_enemies 敌人 RPG::Enemy 的数组
$data_troops 敌群 RPG::Troop 的数组
$data_states 状态 RPG::State 的数组
$data_animations 动画 RPG::Animation 的数组
$data_tilesets 图块 RPG::Tileset 的数组
$data_common_events 公共事件 RPG::CommonEvent 的数组
$data_system 系统 RPG::System
$data_mapinfos 地图信息 RPG::MapInfo 的哈希表

从角色到公共事件这11种数据都是数组,对应数据库中每个项目的每个编号。不过在 VA 中,每个项目的数据ID都是从1开始,为了让数据ID跟数组的编号对齐,每个项目的第一个项目(也就是[0]项)的内容都是 nil。

获取数据库的内容

接下来也差不多和基础篇一样,在先前的 TEST 脚本页里写下获得数据库的代码试试看,但我们还存在一个问题。那就是在我们写在最上方的 TEST 这页脚本开始运行的时候,DataManager 这个模块还没有被定义。

所以我们快像下面一样,把跟 load_normal_database 方法一模一样的内容以及处理加上去吧。

$data_actors        = load_data("Data/Actors.rvdata2")
$data_classes       = load_data("Data/Classes.rvdata2")
$data_skills        = load_data("Data/Skills.rvdata2")
$data_items         = load_data("Data/Items.rvdata2")
$data_weapons       = load_data("Data/Weapons.rvdata2")
$data_armors        = load_data("Data/Armors.rvdata2")
$data_enemies       = load_data("Data/Enemies.rvdata2")
$data_troops        = load_data("Data/Troops.rvdata2")
$data_states        = load_data("Data/States.rvdata2")
$data_animations    = load_data("Data/Animations.rvdata2")
$data_tilesets      = load_data("Data/Tilesets.rvdata2")
$data_common_events = load_data("Data/CommonEvents.rvdata2")
$data_system        = load_data("Data/System.rvdata2")
$data_mapinfos      = load_data("Data/MapInfos.rvdata2")

这么一来就能使用 $data_actors 等变量了吧。数组的使用方法没有忘记吧?

举个例子,只要看一下 RPG::Actor 的页面应该就能马上找到,下面是显示1号角色名称的单行脚本。

p $data_actors[1].nickname

接下来的脚本用来显示敌方2号角色的名称。name 不是在 RPG::Enemy 中定义的,而是在它的父类 RPG::BaseItem 中定义的。

p $data_enemies[2].name

再来的范例用来显示3号物品所指定的物品图标的编号:

p $data_items[3].icon_index

最后一个脚本则用来显示出4号开关的名称:

p $data_system.switches[4]

想要获得数据库,诀窍就在于,从RGSS参考中检索到想要获得的数据的属性(变量)名称就可以了。

多试几次看看,确定自己能够正确获得数据之后就往下一章迈进吧!