当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

热度:

传奇服务端变量按作用域分全局、模块、局部变量,按类型分数值、字符串、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(数值型全局变量):GlobalHeroLevelINT=30(定义全局变量HeroLevel,类型为4字节整型,初始值30)

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

(2)模块变量定义

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

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

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

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

(3)局部变量定义

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

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

示例:localCFloat=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(输出变量值):SendMsg6"当前等级:"...HeroLevel(向玩家发送全局变量HeroLevel的值)

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

(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(数值比较):#IFHeroLevel>30(判断全局变量HeroLevel是否大于30)

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

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

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

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

(3)字符串判断

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

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

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)

示例:fori=1102doLR_B=LR_B+iend(i从1到10,步进2,累加至模块变量LR_B)

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

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

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

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

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

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

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

(1)变量交换

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

示例:ab=ba(交换变量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.玩家等级判断触发奖励

脚本示例:

GlobalHeroLevelINT=30(定义全局等级变量)

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

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

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

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

#ELSESendMsg6"等级不足40级,无法领取奖励!"

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

脚本示例:

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

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

SendMsg6"怪物刷新开关已开启!"

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

SendMsg6"怪物刷新开关已关闭!"

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

脚本示例:

localMapIDINT=0(定义局部地图ID变量)

forMapID=151do(地图ID从1到5,步进1)

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

end(结束循环)

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

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

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

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

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

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

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

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

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

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

五、实操总结核心要点

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

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

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

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

[顶部]