一、变量基础规则:命名与分类核心规范
1. 命名规则
变量名由字母、数字及下划线组成,仅能以字母开头,长度不超过32个字符,且区分大小写。自定义变量禁止以P、D、M、N、S、I、G、A开头,避免与系统默认变量冲突。
2. 变量分类(按作用域与保存特性)
私人变量(仅对应单个玩家,分可保存与不可保存):P0-P999(数字型,关闭对话框重置为0)、D0-D999(数字型,下线不保存)、M0-M999(数字型,切换地图清空)、N0-N999(数字型,小退归0)、S0-S999(字符型,小退归0)、U0-U99(数字型,可保存至人物数据库,值范围正负21亿)、T0-T99(字符型,可保存至人物数据库)、J0-J255(数字型,可保存,每晚12点自动重置)。
全局变量(全服通用,分可保存与不可保存):I0-I999(数字型,不可保存,服务器重启重置为0)、G0-G999(数字型,可保存至Mir200/GlobalVal.ini)、A0-A999(字符型,可保存至Mir200/GlobalVal.ini)。
特殊变量:含数值变量(B/LB/R/LR等,对应不同值范围)、字符串变量(STR/String,长度256个字符)、IO变量(IN/OUT等,用于读写控制)等,适配不同脚本需求。
二、核心变量命令:赋值与运算类(基础必备)
1. 赋值命令
1. MOV(变量赋值):格式为「MOV 变量 数值/字符」,功能是将指定数值或字符赋给变量,示例:MOV N0 1(将1赋值给N0变量)、MOV S0 传送戒指(将“传送戒指”字符赋给S0变量)。
2. MOVR(随机赋值):格式为「MOVR 变量 数值」,功能是将0至指定数值间的随机正数赋给变量,示例:MOVR N1 10(N1变量随机获得0-10间的数值)。
2. 运算命令
1. INC(变量相加):格式为「INC 变量 数值」,功能是将变量值与指定数值相加,结果覆盖原变量,示例:INC N0 2(N0变量值在原有基础上加2)。
2. DEC(变量相减):格式为「DEC 变量 数值」,功能是将变量值与指定数值相减,结果覆盖原变量,示例:DEC N0 1(N0变量值在原有基础上减1)。
3. MUL(变量相乘):格式为「MUL 变量 数值」或「MUL 变量 数值1 数值2」,仅支持数值变量,不支持字符串变量,示例:MUL N0 2(N0变量值乘以2)、MUL N0 100 2(N0变量值等于100乘以2)。
4. DIV(变量整除):格式为「DIV 变量 数值」或「DIV 变量 数值1 数值2」,仅支持数值变量,结果为整除结果,示例:DIV N0 2(N0变量值除以2取整)、DIV N0 100 2(N0变量值等于100除以2)。
5. SUM(变量求和):格式需先初始化求和变量,再依次累加,示例:MOV X 0(初始化X变量为0)、SUM A B(X=A+B)、SUM C(X=X+C),最终X变量值为A+B+C的总和,单独使用SUM命令无意义,需配合初始化步骤。
三、变量判断命令:条件比对类(脚本逻辑核心)
1. SMALL(小于判断):格式为「SMALL 变量 数值」,功能是判断变量值是否小于指定数值,成立则执行后续脚本,示例:#IF SMALL N0 5(判断N0变量值是否小于5,成立则触发下方ACT动作)。
2. LARGE(大于判断):格式为「LARGE 变量 数值」,功能是判断变量值是否大于指定数值,成立则执行后续脚本,示例:#IF LARGE N0 10(判断N0变量值是否大于10,成立则触发下方ACT动作)。
3. EQUAL(等于判断):格式为「EQUAL 变量 数值/字符」,功能是判断变量值是否等于指定数值或字符,成立则执行后续脚本,示例:#IF EQUAL S0 传送戒指(判断S0变量值是否为“传送戒指”,成立则触发下方ACT动作)。
4. RANDOM(随机判断):格式为「RANDOM 数值」,功能是当随机数等于指定数值时返回1(成立),否则返回0(不成立),示例:#IF RANDOM 5(随机生成0-4间数字,等于5时成立,概率为五分之一)。
四、变量实用命令:显示与控制类(交互与执行)
1. 变量显示命令:格式为「< $STR(变量) >」,需用在#SAY命令后,功能是将变量值显示在游戏界面对话框中,示例:#SAY 当前积分:< $STR(U0) >(在对话框显示U0变量对应的积分值)。
2. GOTO(脚本跳转):格式为「GOTO @标签」,功能是跳转至指定脚本标签处执行,可配合变量判断实现逻辑流转,示例:#ACT GOTO @Get_Item_01(跳转至@Get_Item_01标签对应的脚本段)。
3. BREAK(脚本终止):格式为「BREAK」,功能是终止当前脚本执行,常配合变量判断实现条件终止,示例:#IF EQUAL N0 0 #ACT BREAK(当N0变量值为0时,终止当前脚本)。
4. SETBUTCHOK(变量关联触发):格式为「SETBUTCHOK」,功能是允许人物获得变量关联的物品,常与挖尸体触发脚本配合,示例:@ButchMon5 #IF #ACT SETBUTCHOK(挖尸体触发该脚本,允许获得S0变量对应的物品)。
五、变量实操案例:常见场景应用(快速上手)
1. 挖尸体触发物品获取(变量S0应用)
脚本示例:
(@ButchMon5)
#IF EQUAL S0 传送戒指(判断挖到的物品为传送戒指,S0变量存储物品名称)
#ACT GOTO @Get_Item_01(跳转至指定脚本段)
Break
#IF EQUAL S0 麻痹戒指(判断挖到的物品为麻痹戒指)
#ACT GOTO @Get_Item_01
Break
#IF #ACT SETBUTCHOK(无特殊条件时,直接允许获得物品)
Break
(@Get_Item_01)
#IF CheckGameGird > 9(判断灵符数量大于9)
#ACT SetButchOK(允许获得物品)
GameGird - 10(扣除10个灵符)
#ELSESAY 灵符不足,无法获得该物品(条件不成立时提示)
2. 等级触发自动打怪(变量N0应用)
脚本示例:
(@mn)
#IF CheckLevel 30(判断玩家等级达到30级)
#SAY 已达到30级,开始自动打怪
#ACT MOV N0 1(将1赋值给N0变量,标记开启自动打怪)
Goto @start(跳转至打怪脚本段)
(@start)
#IF EQUAL N0 1(判断自动打怪标记为开启)
CheckMonster 月岛 狼 X Y(检测月岛指定坐标是否有狼)
#SAY 发现狼,准备攻击
#ACT Attack -1(攻击目标)
Goto @start(循环检测攻击)
#IF CheckLevel 50(判断玩家等级达到50级)
#SAY 已达到50级,结束自动打怪
#ACT MOV N0 0(重置N0变量为0,关闭自动打怪)
Break(终止脚本)
六、变量使用注意事项(规避常见问题)
1. 变量类型匹配:运算命令(MUL、DIV等)仅支持数值变量,不可用于字符串变量,否则会导致脚本报错;字符串变量仅可用于赋值、显示与等于判断。
2. 保存特性适配:不可保存变量(如D0、M0)适合临时标记(如摇筛子、地图切换相关),可保存变量(如U0、G0)适合长期数据存储(如积分、全服活动状态)。
3. 脚本格式规范:变量命令需严格遵循格式要求,#IF后接判断命令,#ACT后接执行命令,跳转标签(@XXX)需单独成行,避免语法错误导致变量失效。
4. 全局变量维护:G0、A0等全局变量保存于GlobalVal.ini,修改后需重启引擎生效;J0-J255变量每晚12点重置,合区或关停服务器需错开该时间。
5. 冲突规避:自定义变量不可使用系统默认变量前缀,避免与现有脚本变量冲突;变量赋值时需注意值范围,如U0变量最大值不可超过21亿。

