传奇服务端的变量系统是脚本编写的核心,分为数字型(整数)、字符型(文本)和标识型(开关)三大类。不同引擎(如BLUE、GOM、GEE)的变量范围略有差异,但核心命令通用。
一、变量类型与作用域速查
变量前缀类型作用域生命周期与特性
P0-P99/P999数字个人临时。仅当前NPC对话有效,关闭窗口即清零。用于NPC内计算。
D0-D99/D999数字个人临时。人物不下线则保留,小退/下线归零。常用于摇骰子。
M0-M99/M999数字个人临时。切换地图清空。部分引擎等同于N变量。
N0-N99/N999数字个人临时。小退即归零。最常用的个人临时计数。
S0-S99/S999字符个人临时。存储字符串,小退归零。
U0-U99数字个人永久。保存至数据库,人物下线/重启不丢。
T0-T99字符个人永久。字符串型个人变量,保存至数据库。
G0-G99/G999数字全局永久。全服共用,存于Mir200/GlobalVal.ini,重启不丢。
A0-A99/A999字符全局永久。全局字符串,存于Mir200/GlobalVal.ini。
I0-I99/I999数字全局临时。全局内存变量,服务端重启归零。
[001]-[999]标识个人开关。只有0(关)和1(开),常用于任务标记,下线保存。
注意:GOM/GEE等新引擎常扩展至999上限,老版BLUE通常为99。
二、核心操作命令详解
1.赋值与运算命令
命令语法示例说明
MOVMOVN0100赋值。将N0设置为100。
INCINCN01加法。N0=N0+1。
DECDECN01减法。N0=N0-1。
MULMULN02乘法。N0=N0*2。
DIVDIVN02除法。N0=N0/2(整除)。
MOVRMOVRN0100随机数。将0-99之间的随机数赋给N0。
SUMSUMN0N1累加。需配合MOV使用(见下文详解)。
SUM命令详解:
SUM用于多个变量累加,通常需要先初始化一个容器变量。
#ACT
MOVN990;先清空累加容器
SUMN0N1;N99=N0+N1
SUMN2;N99=N99+N2
此时,N99的值为N0+N1+N2。
2.条件检测命令
在#IF段中使用,判断变量状态。
命令语法示例说明
EQUALEQUALN0100检测N0是否等于100。
LARGELARGEN0100检测N0是否大于100。
SMALLSMALLN0100检测N0是否小于100。
CHECKCHECK[001]1检测标识[001]是否为1(开启状态)。
SETSET[001]1设置标识[001]为1。
RESETRESET[001]5批量重置。将[001]至[005]共5个标识全部设为0。
3.字符变量(S/A)的特殊操作
字符变量(S、A系列)除了直接MOV赋值外,支持字符串截取和输入。
•文本输入:通过@@InPutString或@@InPutInteger触发,将玩家输入的内容存入S变量或A变量。
•字符串截取(DEC):DECS0510表示删除S0字符串中从第5位到第10位的字符(部分引擎支持)。
4.变量显示
在NPC对话(#SAY)中显示变量值,必须使用转换标签:
•数字变量:<$STR(N0)>
•字符/全局变量:<$STR(S0)>或<$GLOBAL(A0)>(视引擎而定)
示例:#SAY你的当前积分是:<$STR(N0)>
三、脚本实战示例
1.每日签到脚本(使用标识)
[@Main]
#if
CHECK[100]1;检测今日是否已签到
#act
MESSAGEBOX你今天已经签到过了!
break
#if
#act
SET[100]1;标记已签到
GAMEGOLD+1000
MESSAGEBOX签到成功,获得1000元宝!
说明:标识[100]在人物数据中保存,需配合机器人脚本(Robot.txt)在每天0点自动执行RESET[100]1来重置所有人的签到状态。
2.随机抽奖脚本(使用运算)
[@Lottery]
#if
CHECKGAMEGOLD>99;检测元宝是否够100
#act
GAMEGOLD-100;扣100元宝
MOVRN0100;生成0-99随机数
#if
SMALLN010;10%概率(0-9)
#act
GIVE屠龙1
MESSAGEBOX恭喜抽中屠龙!
#elseact
MESSAGEBOX很遗憾未中奖,随机数:<$STR(N0)>
四、常见报错与避坑
1.变量未定义/乱码:在显示变量(如<$STR(N0)>)时,若N0未经过MOV赋值直接显示,可能显示乱码或报错。建议在使用前先MOVN00初始化。
2.作用域混淆:误用P变量做跨NPC传递。P变量一旦关闭对话框就清零,跨NPC需使用D、N或U变量。
3.字符数字混用:试图将文本存入N变量(数字型)会导致脚本卡死或报错。存文本必须用S或A变量。
4.全局变量冲突:G变量是全服共用的,若多个NPC同时读写同一个G变量(如G10),可能导致数据错乱,建议加锁或使用个人U变量替代。
一、变量类型与作用域速查
变量前缀类型作用域生命周期与特性
P0-P99/P999数字个人临时。仅当前NPC对话有效,关闭窗口即清零。用于NPC内计算。
D0-D99/D999数字个人临时。人物不下线则保留,小退/下线归零。常用于摇骰子。
M0-M99/M999数字个人临时。切换地图清空。部分引擎等同于N变量。
N0-N99/N999数字个人临时。小退即归零。最常用的个人临时计数。
S0-S99/S999字符个人临时。存储字符串,小退归零。
U0-U99数字个人永久。保存至数据库,人物下线/重启不丢。
T0-T99字符个人永久。字符串型个人变量,保存至数据库。
G0-G99/G999数字全局永久。全服共用,存于Mir200/GlobalVal.ini,重启不丢。
A0-A99/A999字符全局永久。全局字符串,存于Mir200/GlobalVal.ini。
I0-I99/I999数字全局临时。全局内存变量,服务端重启归零。
[001]-[999]标识个人开关。只有0(关)和1(开),常用于任务标记,下线保存。
注意:GOM/GEE等新引擎常扩展至999上限,老版BLUE通常为99。
二、核心操作命令详解
1.赋值与运算命令
命令语法示例说明
MOVMOVN0100赋值。将N0设置为100。
INCINCN01加法。N0=N0+1。
DECDECN01减法。N0=N0-1。
MULMULN02乘法。N0=N0*2。
DIVDIVN02除法。N0=N0/2(整除)。
MOVRMOVRN0100随机数。将0-99之间的随机数赋给N0。
SUMSUMN0N1累加。需配合MOV使用(见下文详解)。
SUM命令详解:
SUM用于多个变量累加,通常需要先初始化一个容器变量。
#ACT
MOVN990;先清空累加容器
SUMN0N1;N99=N0+N1
SUMN2;N99=N99+N2
此时,N99的值为N0+N1+N2。
2.条件检测命令
在#IF段中使用,判断变量状态。
命令语法示例说明
EQUALEQUALN0100检测N0是否等于100。
LARGELARGEN0100检测N0是否大于100。
SMALLSMALLN0100检测N0是否小于100。
CHECKCHECK[001]1检测标识[001]是否为1(开启状态)。
SETSET[001]1设置标识[001]为1。
RESETRESET[001]5批量重置。将[001]至[005]共5个标识全部设为0。
3.字符变量(S/A)的特殊操作
字符变量(S、A系列)除了直接MOV赋值外,支持字符串截取和输入。
•文本输入:通过@@InPutString或@@InPutInteger触发,将玩家输入的内容存入S变量或A变量。
•字符串截取(DEC):DECS0510表示删除S0字符串中从第5位到第10位的字符(部分引擎支持)。
4.变量显示
在NPC对话(#SAY)中显示变量值,必须使用转换标签:
•数字变量:<$STR(N0)>
•字符/全局变量:<$STR(S0)>或<$GLOBAL(A0)>(视引擎而定)
示例:#SAY你的当前积分是:<$STR(N0)>
三、脚本实战示例
1.每日签到脚本(使用标识)
[@Main]
#if
CHECK[100]1;检测今日是否已签到
#act
MESSAGEBOX你今天已经签到过了!
break
#if
#act
SET[100]1;标记已签到
GAMEGOLD+1000
MESSAGEBOX签到成功,获得1000元宝!
说明:标识[100]在人物数据中保存,需配合机器人脚本(Robot.txt)在每天0点自动执行RESET[100]1来重置所有人的签到状态。
2.随机抽奖脚本(使用运算)
[@Lottery]
#if
CHECKGAMEGOLD>99;检测元宝是否够100
#act
GAMEGOLD-100;扣100元宝
MOVRN0100;生成0-99随机数
#if
SMALLN010;10%概率(0-9)
#act
GIVE屠龙1
MESSAGEBOX恭喜抽中屠龙!
#elseact
MESSAGEBOX很遗憾未中奖,随机数:<$STR(N0)>
四、常见报错与避坑
1.变量未定义/乱码:在显示变量(如<$STR(N0)>)时,若N0未经过MOV赋值直接显示,可能显示乱码或报错。建议在使用前先MOVN00初始化。
2.作用域混淆:误用P变量做跨NPC传递。P变量一旦关闭对话框就清零,跨NPC需使用D、N或U变量。
3.字符数字混用:试图将文本存入N变量(数字型)会导致脚本卡死或报错。存文本必须用S或A变量。
4.全局变量冲突:G变量是全服共用的,若多个NPC同时读写同一个G变量(如G10),可能导致数据错乱,建议加锁或使用个人U变量替代。

