传奇服务端变量命令与脚本操作全解

来源: 作者: 点击:
传奇服务端的变量系统是脚本编写的核心,分为数字型(整数)、字符型(文本)和标识型(开关)三大类。不同引擎(如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. 赋值与运算命令

命令 语法示例 说明

MOV MOV N0 100 赋值。将N0设置为100。

INC INC N0 1 加法。N0 = N0 + 1。

DEC DEC N0 1 减法。N0 = N0 - 1。

MUL MUL N0 2 乘法。N0 = N0 * 2。

DIV DIV N0 2 除法。N0 = N0 / 2(整除)。

MOVR MOVR N0 100 随机数。将0-99之间的随机数赋给N0。

SUM SUM N0 N1 累加。需配合MOV使用(见下文详解)。

SUM命令详解:
SUM用于多个变量累加,通常需要先初始化一个容器变量。
#ACT
MOV N99 0 ; 先清空累加容器
SUM N0 N1 ; N99 = N0 + N1
SUM N2 ; N99 = N99 + N2

此时,N99的值为N0+N1+N2。

2. 条件检测命令

在 #IF 段中使用,判断变量状态。

命令 语法示例 说明

EQUAL EQUAL N0 100 检测N0是否等于100。

LARGE LARGE N0 100 检测N0是否大于100。

SMALL SMALL N0 100 检测N0是否小于100。

CHECK CHECK [001] 1 检测标识[001]是否为1(开启状态)。

SET SET [001] 1 设置标识[001]为1。

RESET RESET [001] 5 批量重置。将[001]至[005]共5个标识全部设为0。

3. 字符变量(S/A)的特殊操作

字符变量(S、A系列)除了直接MOV赋值外,支持字符串截取和输入。

• 文本输入:通过 @@InPutString 或 @@InPutInteger 触发,将玩家输入的内容存入S变量或A变量。

• 字符串截取(DEC):DEC S0 5 10 表示删除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元宝
MOVR N0 100 ; 生成0-99随机数
#if
SMALL N0 10 ; 10%概率(0-9)
#act
GIVE 屠龙 1
MESSAGEBOX 恭喜抽中屠龙!
#elseact
MESSAGEBOX 很遗憾未中奖,随机数:<$STR(N0)>


四、常见报错与避坑

1. 变量未定义/乱码:在显示变量(如 <$STR(N0)>)时,若N0未经过MOV赋值直接显示,可能显示乱码或报错。建议在使用前先 MOV N0 0 初始化。
2. 作用域混淆:误用P变量做跨NPC传递。P变量一旦关闭对话框就清零,跨NPC需使用D、N或U变量。
3. 字符数字混用:试图将文本存入N变量(数字型)会导致脚本卡死或报错。存文本必须用S或A变量。
4. 全局变量冲突:G变量是全服共用的,若多个NPC同时读写同一个G变量(如G10),可能导致数据错乱,建议加锁或使用个人U变量替代。