EraBasic 的变量
翻译自原文档:http://cbaku.com/b/erakanon/eramavar.html
基本变量
通用变量
A-Z
单字母变量。从A到Z,共26个。适用于储存临时数据。
不要试图用来储存全局数据,因为在其它部分可能会被使用,如果你做了,未来的你会想要坐时光机回来打你的。
用法:
;赋值
A = 0
COUNT
循环次数变量。用于REPEAT~REND循环之中。从0开始计数。
不要在循环之中手动修改其中的数据,可能会导致BUG的出现。即使你知道你在干什么,但还是不推荐手动修改。
RESULT
结果变量(数字)。
不推荐以任何理由去改写它。如果需要改写,也请赋值给一个新的变量并改写那个新的变量。
RESULTS
结果变量(字符串)。
不推荐以任何理由去改写它。如果需要改写,也请赋值给一个新的变量并改写那个新的变量。
基本信息变量
DAY
日期变量。默认是没有单位的。
TIME
时间变量。默认是没有单位的。
MONEY
金钱变量。默认是没有单位的。
训练基本信息变量
MASTER
主角的注册编号。一般为0。
注意:这个数字可能与Chara××.csv
中注册的数字不同。
TARGET
训练对象的注册编号。
注意:这个数字可能与Chara××.csv
中注册的数字不同。
ASSI(Assistant)
助手的注册编号。
注意:这个数字可能与Chara××.csv
中注册的数字不同。
PLAYER
正在提供训练的角色的注册编号。一般与MASTER或ASSI相同。
注意:这个数字可能与Chara××.csv
中注册的数字不同。
CHARANUM(Character Number)
角色数量。引擎生成,用户无法改变。
ASSIPLAY(Assistant Play)
助手现在是否正在训练。
如果正在训练,值为1;
如果没训练,值为0;
SELECTCOM(Selected Command)
被选中的命令编号。与TRAIN.CSV
中所注册的命令编号相同。
PREVCOM(Previous Command)
上次被选中的命令编号。
用于判断执行重复命令。
训练变量
LOSEBASE
状态损耗变量。int[0~999]
一般地,LOSEBASE:0
代表体力消耗量,LOSEBASE:1
代表精力消耗量。
UP
参数升高变量。int[0~999]
索引与PALAM.CSV
文件中的索引相同。
DOWN
参数降低变量。int[0~999]
索引与PALAM.CSV
文件中的索引相同。
PALAMLV(Parameter Level)
参数上限。int[0~999]
如果相应训练参数的值超过了这个上限,则训练后得到的珍珠数量就会急剧增加。
索引与PALAM.CSV
文件中的索引相同。
EXPLV(Experience Level)
经验值上限。int[0~999]
当经验超过这个值时,训练的效果(经验)会增加。
EJAC
你懂的。int
为了方便,单独拿出来的一个变量。
标志
FLAG
标志。int[0~9999]
TFLAG(Temporary Flag)
临时标志。int[0~999]
用于储存临时状态或是训练状态。比FLAG更临时。
角色数据
大部分变量是二维数组。如EXP:1:2
代表第1个角色的第2种经验。
但有一种缩写,如EXP:0
,代表EXP:TARGET:0
,即训练对象的第0种经验。
NO
角色编号。int[0~99]
它不是一个二维数组,所以你可以用NO:TARGET
或NO:ASSI
来访问它。
BASE
角色基本参数。int[int[]]0~99
在实例游戏中,BASE:0
代表体力,BASE:1
代表精力。
MAXBASE
角色基本参数上限。int[int[]]0~99
ABL
角色能力。int[int[]]0~99
在ABL.CSV
中注册的能力编号。
TALENT
角色素质。int[int[]]0~999
在TALENT.CSV
中注册的素质编号。
EXP
角色经验。int[int[]]0~99
在EXP.CSV
中注册的经验编号。
MARK
角色刻印。int[int[]]0~99
在MARK.CSV
中注册的刻印编号。
RELATION
角色相性。int[int[]]0~99
RELATION:TARGET:3
指训练中的角色和角色编号为3的角色的相性。而不是注册编号。
JUEL
角色持有的珠。int[int[]]0~199
在PALAM.CSV
中注册的珠编号。
CFLAG(Character Flag)
角色标志。int[int[]]0~999
角色的各种数据都可保存于此。
CFLAG:0
为1
的角色会被认为是特殊角色。
ISASSI
是否为助手。int[]0~99
如果为0
,则不是助手;
如果为1
,则是助手。
用法:ISASSI:TARGET
或ISASSI:ASSI
。
NAME
角色名称。string[]0~99
用法:NAME:TARGET
或NAME:ASSI
。
CALLNAME
角色称呼。string[]0~99
用法:CALLNAME:TARGET
或CALLNAME:ASSI
。
TEQUIP
角色装备的物品。int[int[]]0~99
可用于判断物品装备情况,也可以用于表现角色强化,或是药剂的使用。
PALAM
角色训练中的参数。int[int[]]0~99
在PALAM.CSV
中注册的刻印编号。
STAIN
角色训练中的污渍。int[int[]]0~99
在示例游戏中,STAIN:0
指口部污渍;STAIN:1
指手部污渍等。
EX
训练中“攀登过几次顶峰”。int[int[]]0~99
在示例游戏中,EX:0
为C;EX:1
为V;EX:2
为A;
SOURCE
执行训练命令源角色。int[int[]]0~99
参见示例游戏中COM××.ERB
和SOURCE.ERB
可以看到从训练源到训练参数升高的流程。
NOWEX
达到顶点的次数。int[int[]]0~99
NOWEX:0指C;NOWEX:1指V;NOWEX:2指A。
GOTJUEL
训练中获得的珠。int[int[]]0~99
索引与Palam.csv中的索引一致。
物品数据
ITEM
拥有的物品数量。int[]0~99
索引与Item.csv中注册的一致。
ITEMSALES
物品在商店是否可购买。int[]0~99
如果值为1,则物品已售出;若为0,则物品尚未售出。
索引与Item.csv中注册的一致。
BOUGHT
刚购买的物品。可用于移除刚从@EVENTBUY商店购买的物品。
NOITEM
如果GameBase.csv中アイテムなし
项为1,则忽略训练命令中的物品判定。
PBAND
这……
【译者注:假设这个概念为“X”】
这是X的物品编号。因为X经常参与决定是否进行训练,因此独立出来专门做个变量。
名称数据
ABLNAME
能力名称。string[]0~99
通过在Abl.csv注册的编号进行访问。
TALENTNAME
素质名称。string[]0~99
通过在Talent.csv注册的编号进行访问。
EXPNAME
经验名称。string[]0~99
通过在Exp.csv注册的编号进行访问。
MARKNAME
刻印名称。string[]0~99
通过在Mark.csv注册的编号进行访问。
PALAMNAME
训练中的状态参数名称。string[]0~199
通过在Palam.csv注册的编号进行访问。
ITEMNAME
物品名称。string[]0~99
通过在Item.csv注册的编号进行访问。
字符串数据
STR
文本数据。string[]0~19999
Str.csv 的数据保存在这里。
修改变量内的值不会被保存机制保存。
SAVESTR
可被保存的文本数据。string[]0~99
储存在其中的数据会在保存的时候被保存。你想一直使用的字符串变量应该存储在这里。
随机数据
RAND
随机数。(伪数组)
是一个特殊的变量。返回一个随机数。
示例:
;输出一个0~9之间的随机整数
PrintV Rand:10
;输出一个0~A-1之间的随机整数
PrintV Rand:A
角色注册编号
角色注册编号与角色编号的异同
没有实质内容的角色数据
在CharaXX.csv文件中对角色进行注册的编号均为角色编号。
但CharaXX.csv中的全部角色并非是在训练开始的时候都被实例化了。要获得角色实体,需要调用AddChara指令。
角色的注册
在游戏开始时,唯一被实例化了的角色是主角。此时主角的角色注册编号为0。比如我们用AddChara注册了一个编号为5的角色。这个角色的角色编号为5,但此时他的角色注册编号为1。因为他是在主角注册之后紧跟着注册的。当然,如果我们再通过AddChara注册一个角色编号为7的角色,那么这个角色的角色注册编号顺延为2。
总之,角色编号相当于模板,角色注册编号相当于实例。
角色的注销
现在,假设你用DelChara命令删除了一个角色注册编号为1的角色,之后再通过AddChara添加一个角色编号为7的角色,则新增角色的角色注册编号为1。
请记住,上述即是角色注册编号的使用方式,角色注册编号是一个从0开始,连续的角色实例列表。
关于污渍
污渍数据的特殊性
污渍数据的种类
污渍的数据由Stain命令管理。Stain:Target:0
标识被训练角色嘴部的污渍。
然而,污渍的类型各种各样。不同的污渍可能会被混合在一起,怎么表示呢?
污渍数据的表示方法
基于上述的问题,现在污渍的表示有一个十分巧妙的方法。
我们假设存在A、B、C和D四种污渍种类,并依次代表1,2,4和8。
这样,整数5就代表A和C两种污渍混合在一起(数值相加);
整数12就代表C和D两种污渍混合在一起;
这样,我们就能通过一个数值代表不同种类污渍的组合方式了。
但显而易见的是,常规的整数运算如加减乘除就很难对这个数据产生任何有意义的影响了:比如我们希望在同一个部位添加一种污渍,或判断部位上是否存在某种污渍,就会比较麻烦。
污渍数据的判断方法
针对上述情况,我们又引入了新的符号&
和|
。它们和&&
(与)、||
(或)类似,但它们是单独使用的。
例如,我们假设Stain:Target:0
的值为12,即4+8,那么Stain:Target:0 & 4
将只考虑4的部分,那么是存在的,即:Stain:Target:0 & 4 == 4
。
假设Stain:Target:0
的值为11,即1+2+8,那么Stain:Target:0 & 4
将只考虑4的部分,那么是不存在的,即:Stain:Target:0 & 4 == 0
。
污渍数据的添加方法
接下来,假设Stain:Target:0
的值为5,即1+4,那么Stain:Target:0 | 2
就是在原来的基础上新增2的部分,即:Stain:Target:0 | 2 == 7
。
假设Stain:Target:0
的值为7,即1+2+4,那么Stain:Target:0 | 2
就是在原来的基础上新增2的部分,但原来已经有2的部分了,那么添加失败,保持值不变,即:Stain:Target:0 | 2 == 7
。
Stain:Target:0 = Stain:Target:0 | 2
也可以缩写为Stain:Target:0 |= 2
通过上述的方法,就可以更加方便的使用操作污渍的数据了。