脚本基础

文件型自定义变量

说明 Blue 引擎中通过 VAR、LOADVAR、SAVEVAR 等命令管理的文件型自定义变量,包括声明、读取、保存和常见用法。

常用命令

命令作用
VAR声明变量
LOADVAR从文件读取变量
SAVEVAR保存变量到文件
CHECKVAR判断变量值
CALCVAR对数字变量做运算

VAR 声明变量

同一作用域内不要重复声明同名变量,重复声明时引擎会报错。
在 VAR 命令声明 HardDisk 后,后续 LOADVAR,SAVEVAR,CALCVAR 无需再声明 HardDisk

语法

VAR <类型> <作用域> <变量名> [默认值] [HardDisk]

例如:

#ACT
VAR STRING HUMAN 网站地址 "" HardDisk
VAR INTEGER HUMAN 今日积分 0 HardDisk

参数

参数位置参数说明
1STRING / INTEGER变量类型,分别表示字符串和整数
2HUMAN / GLOBAL / GUILD作用域,分别表示人物、全局、行会
3变量名自定义变量名称
4默认值可选,声明时直接赋初始值;整数常用 0,字符串为空时写 ""
5HardDisk可选,表示是否实时写入数据

LOADVAR 读取变量

LOADVAR 用于把文件中的值读取到已声明变量里。

语法

LOADVAR <作用域> <变量名> <文件路径>

参数

参数位置参数说明
1HUMAN / GLOBAL / GUILD作用域,分别表示人物、全局、行会
2变量名已声明的文件型自定义变量名
3文件路径变量数据所在的文本文件

例如:

#ACT
LOADVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt

如果文件里已经存在对应字段,执行后就可以继续对变量做判断、计算或显示。

全局变量读取示例

[@OnStart]
#ACT
VAR STRING GLOBAL 财富第一名
LOADVAR GLOBAL 财富第一名 ..\QUESTDIARY\数据文件\排名\自定义全局变量数据.txt

使用全局文件型变量时,通常要在引擎启动时先完成声明和初始化。

SAVEVAR 保存变量

SAVEVAR 用于把当前变量值写回指定文件。

语法

SAVEVAR <作用域> <变量名> <文件路径>

参数

参数位置参数说明
1HUMAN / GLOBAL / GUILD作用域,分别表示人物、全局、行会
2变量名需要保存的变量名
3文件路径保存目标文件

例如:

#ACT
SAVEVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt

如果没有执行保存,内存里的变量值更新后不一定会同步回文件。

所以这套机制和普通变量最大的区别之一,就是“读写文件”通常要显式执行。

CHECKVAR 判断变量

CHECKVAR 用于检测文件型自定义变量是否满足某个条件。

语法

CHECKVAR <作用域> <变量名> <运算符> <值>

参数

参数位置参数说明
1HUMAN / GLOBAL / GUILD作用域,分别表示人物、全局、行会
2变量名需要检测的变量名
3> / < / = / ?比较运算符,其中 ? 表示大于等于
4值用于比较的目标值

例如:

#IF
CHECKVAR HUMAN 今日积分 = 5
#ACT
SENDMSG 7 等于 5

也可以配合变量写法:

#IF
CHECKVAR HUMAN 今日积分 = <$STR(M2)>
#ACT
SENDMSG 7 条件成立

CALCVAR 数值计算

CALCVAR 用于对数字型文件变量做运算。

语法

CALCVAR <作用域> <变量名> <运算符> <值>

参数

参数位置参数说明
1HUMAN / GLOBAL / GUILD作用域,分别表示人物、全局、行会
2变量名需要计算的数字型变量名
3+ / - / * / / / =运算方式
4值参与运算的值

例如:

#ACT
CALCVAR HUMAN 今日积分 + 5
SAVEVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt

如果变量类型是字符串,就不应直接按数字运算方式处理。

显示变量

文件型自定义变量声明并读取后,可以在对话框、提示文本等输出位置直接调用。

这组写法最常见的用途,不是继续做判断,而是把已经读到内存里的值直接显示给玩家看。

调用写法

写法含义说明
<$HUMAN(变量名)>读取人物文件型变量按变量名读取当前人物作用域下的文件型自定义变量。
<$GLOBAL(变量名)>读取全局文件型变量按变量名读取全局作用域下的文件型自定义变量。
<$GUILD(变量名)>读取行会文件型变量按变量名读取当前行会作用域下的文件型自定义变量。

例如:

#SAY
当前积分:<$HUMAN(今日积分)>
全服第一:<$GLOBAL(财富第一名)>
当前行会宣言:<$GUILD(行会宣言)>

使用前要先满足什么

这类写法依赖前面的文件型自定义变量流程,本身不会自动去文件里读取数据。

使用前至少要先完成下面这些步骤:

  1. 用 VAR 声明对应作用域和变量名。
  2. 用 LOADVAR 把文件中的值读进来,或先通过脚本给变量赋值。
  3. 需要持久保存时,再用 SAVEVAR 写回文件。

如果前面没有声明变量,或还没把值读进来,这里就可能显示为空、默认值,或者表现和预期不一致。

怎么理解这 3 种写法

  • <$HUMAN(...)> 适合显示当前人物自己的文件型数据,例如积分、签到次数、个人称号记录。
  • <$GLOBAL(...)> 适合显示全服共用的数据,例如排行榜第一名、活动状态、全服累计次数。
  • <$GUILD(...)> 适合显示当前行会自己的文件型数据,例如行会宣言、行会积分、行会仓库备注。

一个完整调用示例

下面这类写法适合先读取,再在对话框中显示:

#ACT
VAR INTEGER HUMAN 今日积分
LOADVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt

#SAY
你当前的积分为:<$HUMAN(今日积分)>

如果你只是想“把一个文件型自定义变量显示出来”,通常要先确认两件事:

  • 变量名是否和前面声明、读取时使用的名称完全一致。
  • 当前标签执行前,变量是否已经成功加载。

<$HUMAN(...)>、<$GLOBAL(...)>、<$GUILD(...)> 是文件型自定义变量的配套读取写法,不属于常规属性变量或通用变量标签。

全局变量声明位置

使用全局文件型变量时,这一步最容易写错。

全局文件型变量声明应放在 QManage 的 [@OnStart] 段下,在引擎启动后执行一次。

例如:

[@OnStart]
#ACT
VAR STRING GLOBAL 财富第一名
VAR INTEGER GLOBAL 第一财富值
LOADVAR GLOBAL 财富第一名 ..\QUESTDIARY\数据文件\排名\自定义全局变量数据.txt
LOADVAR GLOBAL 第一财富值 ..\QUESTDIARY\数据文件\排名\自定义全局变量数据.txt

如果全局声明位置写错,就容易出现读取不到、初始化不完整或运行期行为不稳定的问题。

一个完整示例

下面这类写法适合“读取个人积分文件,累加后再保存”:

#ACT
VAR INTEGER HUMAN 今日积分
LOADVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt
CALCVAR HUMAN 今日积分 + 5
SAVEVAR HUMAN 今日积分 ..\QUESTDIARY\数据文件\网站\395973.txt

如果要在对话框中显示结果:

#SAY
你当前的积分为:<$HUMAN(今日积分)>

相关阅读