传奇服务端变量运用全命令 语法+示例+实操指南

来源: 作者: 点击:

传奇服务端变量按作用域分全局、模块、局部变量,按类型分数值、字符串、IO等,核心命令含定义、赋值、读取、判断等,命令需结合脚本使用,语法错误会导致功能失效。以下拆解所有变量运用命令,含语法格式、适用场景与实操示例,覆盖主流引擎适配需求。

一、变量基础规则 必看前提

1. 命名规则:变量名由字母、数字、下划线组成,仅字母开头,长度不超过32个字符,区分大小写(如Var1与var1为不同变量)。

2. 变量类型:数值型(BYTE/INT/FLOAT等)、字符串型(STR/String)、IO型(IN/OUT/INB等),不同类型变量赋值需符合值范围,超出范围会强制转换或报错。

3. 作用域限制:全局变量加Global修饰符,全服务端生效;模块变量加LB/LR等前缀,模块内生效;局部变量仅函数体内部生效。

二、变量核心命令 分类详解

1. 变量定义命令 初始化变量

用于创建变量并指定类型、初始值,不同作用域变量定义语法不同,未初始化变量默认值为0或空字符串。

(1)全局变量定义

语法:Global 变量名 变量类型 = 初始值

适用类型:支持所有变量类型(数值、字符串、IO等),全服务端所有脚本可调用。

示例1(数值型全局变量):Global HeroLevel INT = 30 (定义全局变量HeroLevel,类型为4字节整型,初始值30)

示例2(字符串型全局变量):Global PlayerName STR = "传奇战士" (定义全局字符串变量,初始值为指定文本)

(2)模块变量定义

语法:前缀+变量名 变量类型 = 初始值(前缀:LB=字节型模块变量,LR=整型模块变量,LD=浮点型模块变量)

适用场景:定义在模块内部、函数体外,仅当前模块脚本可调用。

示例1(字节型模块变量):LB_A BYTE = 10 (定义模块变量LB_A,类型1字节,值范围0-255,初始值10)

示例2(整型模块变量):LR_B INT = 100 (定义模块变量LR_B,类型4字节,值范围-2147483647~2147483647)

(3)局部变量定义

语法:local 变量名 变量类型 = 初始值(局部变量需加local修饰符)

适用场景:定义在函数体内部,仅当前函数内生效,函数执行结束后变量释放。

示例:local C Float = 3.14 (定义局部浮点型变量C,初始值3.14)

2. 变量赋值命令 修改变量值

用于更新变量数值或文本,不同类型变量赋值语法有差异,需匹配变量值范围,否则会强制转换。

(1)数值型变量赋值

语法:变量名 = 数值(支持直接赋值、运算赋值)

示例1(直接赋值):HeroLevel = 40 (将全局变量HeroLevel赋值为40)

示例2(运算赋值):LR_B = LR_B + 20 (模块变量LR_B自增20)

示例3(强制转换赋值):LB_A = 278 (LB_A为BYTE型,值范围0-255,赋值278后强制转换为22)

(2)字符串型变量赋值

语法:变量名 = "字符串内容"(支持字符串拼接,用...连接)

示例1(直接赋值):PlayerName = "传奇法师" (更新字符串变量内容)

示例2(字符串拼接):PlayerTitle = "等级" ... HeroLevel ... "级" (拼接为“等级40级”)

(3)IO变量赋值

IO变量分输入(In/InB等)、输出(Out/OutB等),赋值需按bit/字节/字维度操作,部分IO地址仅支持读取。

① 按bit位赋值(值为ON/1或OFF/0)

语法:Out(X) = ON/OFF (X为IO地址,范围0-13823,输出IO可读写)

示例:Out(0) = ON (将0号输出IO位设为开启状态)

② 按字节赋值(值范围0-255)

语法:OutB(X) = 数值 (X范围0-1727,输出字节IO可读写)

示例:OutB(5) = 3 (将5号输出字节IO赋值为3)

③ 按字赋值(值范围0-65535)

语法:OutW(X) = 数值 (X范围0-863,输出字IO可读写)

示例:OutW(5) = 100 (将5号输出字IO赋值为100)

④ 按位赋值(字节/字数据的指定bit位)

语法:OutB(X).bit(Y) = ON/OFF (X范围0-1727,Y范围0-7,字节的bit位)

示例:OutB(0).bit(2) = ON (将0号输出字节IO的第2位设为开启)

3. 变量读取命令 获取变量值

用于读取变量当前值,可直接调用变量名,或按IO变量的不同维度读取,支持作为参数传入函数。

(1)普通变量读取

语法:变量名(直接调用即可,可用于输出、判断等场景)

示例1(输出变量值):SendMsg 6 "当前等级:" ... HeroLevel (向玩家发送全局变量HeroLevel的值)

示例2(作为函数参数):SetPlayerLevel PlayerName HeroLevel (将变量值作为设置玩家等级的参数)

(2)IO变量读取

① 按bit位读取

语法:变量名 = In(X)/Out(X) (X范围0-13823,读取IO位状态)

示例:B(0) = In(10) (读取10号输入IO位状态,赋值给字节变量B(0))

② 按字节读取

语法:变量名 = InB(X)/OutB(X) (X范围0-1727,读取IO字节数据)

示例:R(0) = InB(20) (读取20号输入字节IO数据,赋值给整型变量R(0))

③ 按字读取

语法:变量名 = InW(X)/OutW(X) (X范围0-863,读取IO字数据)

示例:R(1) = OutW(30) (读取30号输出字IO数据,赋值给整型变量R(1))

④ 按数据类型读取(32位整型/浮点型等)

语法:变量名 = InB(X).Int/InW(X).Float (仅InB/InW/OutB/OutW支持)

示例1(32位整型读取):R(0) = InB(0).Int (读取0号输入字节IO的32位整型数据)

示例2(32位浮点型读取):D(0) = InW(0).Float (读取0号输入字IO的32位浮点数据)

4. 变量判断命令 条件筛选

用于判断变量值是否满足条件,常与if/while等语句搭配,支持比较运算、逻辑运算。

(1)基础比较判断

语法:#IF 变量名 比较运算符 数值/其他变量 (支持=、>、<、<>(不等于)等运算符)

示例1(数值比较):#IF HeroLevel > 30 (判断全局变量HeroLevel是否大于30)

示例2(变量对比):#IF LR_B = R(0) (判断模块变量LR_B与整型变量R(0)是否相等)

(2)逻辑判断(与/或/非)

语法:#IF 条件1 逻辑运算符 条件2 (逻辑运算符:AND(与)、OR(或)、NOT(非))

示例:#IF HeroLevel > 30 AND LB_A = 10 (判断等级大于30且模块变量LB_A等于10)

(3)字符串判断

语法:#IF 字符串变量 = "目标字符串" (判断字符串内容是否一致)

示例:#IF PlayerName = "传奇战士" (判断玩家名称变量是否为指定内容)

5. 变量运算命令 数值计算

支持加减乘除、指数乘方等运算,可直接对变量进行运算赋值,运算结果需匹配变量类型范围。

语法:变量名 = 变量1 运算符 变量2 (运算符:+、-、*、/、^(指数))

示例1(加减乘除):LR_B = (HeroLevel * 2) + 10 (等级乘2加10,赋值给模块变量)

示例2(指数运算):D(0) = 2 ^ 3 (计算2的3次方,赋值给浮点型变量D(0),结果为8)

6. 变量循环命令 批量操作

与循环语句搭配,实现变量值递增/递减批量操作,支持for/while/repeat三种循环类型。

(1)for循环(指定范围递增/递减)

语法:for 变量 = 初值, 终点值, 步进 do ... end (步进省略时默认1)

示例:for i = 1, 10, 2 do LR_B = LR_B + i end (i从1到10,步进2,累加至模块变量LR_B)

(2)while循环(条件满足时持续执行)

语法:while 变量条件 do ... end (条件为真时执行循环体,假时退出)

示例:while HeroLevel < 50 do HeroLevel = HeroLevel + 1 end (等级小于50时持续自增1)

(3)repeat循环(先执行再判断条件)

语法:repeat ... until 变量条件 (先执行循环体,直到条件为真时退出)

示例:repeat LB_A = LB_A + 1 until LB_A = 20 (模块变量LB_A自增,直到等于20时退出)

7. 变量特殊命令 进阶操作

(1)变量交换

语法:变量1, 变量2 = 变量2, 变量1 (无需中间变量,直接交换两个变量值)

示例:a, b = b, a (交换变量a和b的值)

(2)变量清空

语法:变量名 = 0(数值型)/变量名 = ""(字符串型)

示例1(数值型清空):HeroLevel = 0 (将等级变量重置为0)

示例2(字符串型清空):PlayerName = "" (清空玩家名称变量内容)

(3)数组变量操作(批量存储)

语法:变量名(下标) = 数值 (下标为整数,从0开始,支持批量赋值与读取)

示例1(数组赋值):B(0) = 10; B(1) = 20; B(2) = 30 (给字节数组B的3个下标赋值)

示例2(数组读取):LR_B = B(0) + B(1) (读取数组元素并运算)

三、变量命令 实操示例 脚本应用

1. 玩家等级判断 触发奖励

脚本示例:

Global HeroLevel INT = 30 (定义全局等级变量)

(@CheckLevel) #IF HeroLevel >= 40 (判断等级是否≥40)

#ACT SendMsg 6 "等级达标,获得奖励!" (发送提示)

GiveItem "元宝" 100 (发放奖励)

HeroLevel = HeroLevel + 5 (等级变量自增5)

#ELSE SendMsg 6 "等级不足40级,无法领取奖励!"

2. IO变量控制 怪物刷新开关

脚本示例:

(@MonsterSwitch) #IF Out(10) = OFF (判断10号IO位是否关闭)

#ACT Out(10) = ON (开启IO位,触发怪物刷新)

SendMsg 6 "怪物刷新开关已开启!"

#ELSE Out(10) = OFF (关闭IO位,停止怪物刷新)

SendMsg 6 "怪物刷新开关已关闭!"

3. 循环变量 批量设置地图参数

脚本示例:

local MapID INT = 0 (定义局部地图ID变量)

for MapID = 1, 5, 1 do (地图ID从1到5,步进1)

SetMapParam MapID "怪物密度" 10 (设置对应地图怪物密度为10)

end (结束循环)

SendMsg 6 "1-5号地图怪物密度设置完成!"

四、变量命令 常见异常 排查解决

1. 变量赋值报错 超出范围

原因:赋值数值超出变量类型值范围(如BYTE型变量赋值278)。解决方法:更换匹配的变量类型(如改为INT型),或调整赋值数值在有效范围内。

2. 变量读取无效 无返回值

原因:变量未定义、作用域错误(如模块变量跨模块调用)或IO地址错误。解决方法:确认变量已定义,调用范围匹配变量作用域,核对IO地址在有效范围(如In(X)的X为0-13823)。

3. 循环变量卡顿 陷入死循环

原因:循环条件未设置退出阈值(如while循环条件恒为真)。解决方法:添加退出条件(如while HeroLevel < 50 do),避免循环无限制执行。

4. 字符串变量拼接失败 显示异常

原因:拼接符号错误(未用...连接)或变量类型不匹配(数值型与字符串型直接拼接)。解决方法:用...作为拼接符号,数值型变量需先转换为字符串型(如HeroLevel..."")。

五、实操总结 核心要点

1. 命令核心:变量定义需指定类型与作用域,赋值需匹配值范围,读取需确认作用域权限。

2. 脚本适配:所有变量命令需嵌入服务端脚本(如QFunction-0.txt),保存后重启服务端方可生效。

3. 避坑要点:区分变量大小写,IO变量按维度操作,循环添加退出条件,避免语法错误导致功能失效。

综上,传奇服务端变量命令核心是“定义-赋值-读取-判断”的闭环操作,按变量类型与作用域选择对应命令,结合脚本示例即可快速上手。熟练运用变量命令,可实现玩家属性控制、怪物刷新、地图参数设置等核心功能,适配各类服务端定制需求。