会员光环属于角色外观特效,在人物脚下或头顶生成一圈持续播放的光效。实现方式是在QManage.txt的登录触发段中检测会员等级,按等级调用PlayEffect命令播放不同的光环特效编号,配合会员时间变量实现限时光环的自动开启和关闭。以下从脚本范例入手,逐段拆解编写方法。
## 登录触发光环脚本完整范例
在QManage.txt的[@Login]段中添加会员光环检测逻辑:
```
[@Login]
#IF
CHECKVAR HUMAN 会员等级 > 0
#ACT
GOTO @会员光环
[@会员光环]
#IF
CHECKVAR HUMAN 会员等级 = 1
#ACT
PlayEffect 88 1 1
SENDMSG 6 白银会员光环已开启。
BREAK
#IF
CHECKVAR HUMAN 会员等级 = 2
#ACT
PlayEffect 89 1 1
SENDMSG 6 黄金会员光环已开启。
BREAK
#IF
CHECKVAR HUMAN 会员等级 = 3
#ACT
PlayEffect 90 1 1
SENDMSG 6 至尊会员光环已开启。
BREAK
```
CHECKVAR HUMAN 会员等级 > 0检测人物自定义变量会员等级是否大于0。变量值1、2、3分别对应白银、黄金、至尊三个会员档位,每档调用不同的特效编号。PlayEffect命令的三个参数依次为特效编号、循环次数、特效速度。特效编号88、89、90对应客户端Effect.wil中的不同光环动画帧序列,循环次数1表示无限循环播放,特效速度1为标准速度。
如果版本使用GOM引擎,PlayEffect命令格式相同但需要确认特效编号在客户端Effect.wil中存在对应帧。如果版本使用Hero引擎,需要改用PlayEffectEx命令,参数顺序为“特效编号 循环次数 速度 模式”。
## 会员变量声明与持久化
会员等级变量需要在QManage.txt的[@Login]段中提前声明和加载:
```
[@Login]
#IF
ISNEWHUMAN
#ACT
VAR INTEGER HUMAN 会员等级
VAR INTEGER HUMAN 会员到期时间
LOADVAR HUMAN 会员等级 ..\QuestDiary\数据文件\会员等级.txt
LOADVAR HUMAN 会员到期时间 ..\QuestDiary\数据文件\会员到期.txt
```
VAR INTEGER HUMAN 会员等级声明一个整数型人物变量。LOADVAR命令从指定文件加载上次存储的变量值,路径写法使用“..\QuestDiary\数据文件\”的相对路径。
会员开通脚本中修改和保存变量:
```
[@开通黄金会员]
#IF
CHECKGAMEGOLD > 29999
#ACT
GAMEGOLD - 30000
CALCVAR HUMAN 会员等级 = 2
CALCVAR HUMAN 会员到期时间 = <$STR(G999)>
SAVEVAR HUMAN 会员等级 ..\QuestDiary\数据文件\会员等级.txt
SAVEVAR HUMAN 会员到期时间 ..\QuestDiary\数据文件\会员到期.txt
PlayEffect 89 1 1
SENDMSG 6 恭喜开通黄金会员,光环已激活。
BREAK
```
CALCVAR HUMAN 会员等级 = 2将变量值直接赋为2。G999是引擎的系统时间变量,配合CALCVAR计算出到期时间戳。SAVEVAR在每次修改后立即执行,确保数据不会因服务端异常关闭而丢失。
## 光环限时到期自动关闭
会员光环需要在到期后自动关闭。在QFunction.txt中设置定时器,定期检测会员到期时间:
```
[@OnTimer0]
#IF
CHECKVAR HUMAN 会员到期时间 > 0
CHECKVAR HUMAN 会员到期时间 < $G999
#ACT
CALCVAR HUMAN 会员等级 = 0
SAVEVAR HUMAN 会员等级 ..\QuestDiary\数据文件\会员等级.txt
StopEffect 88
StopEffect 89
StopEffect 90
SENDMSG 6 你的会员已到期,光环效果已关闭。
BREAK
```
CHECKVAR HUMAN 会员到期时间 < $G999判断当前时间是否超过了存储的到期时间。如果已过期,CALCVAR HUMAN 会员等级 = 0将等级归零,StopEffect命令停止对应编号的特效播放。StopEffect的参数为特效编号,必须与PlayEffect中使用的编号一致才能正确停止。
定时器需要在AutoRunRobot.txt中注册:
```
#AutoRunNPC MIN 1 @OnTimer0
```
MIN 1表示每分钟触发一次检测,及时发现过期会员并关闭光环。
## 多档位光环特效编号映射
不同会员等级使用不同的光环特效编号。特效编号需要与客户端Effect.wil中的动画帧对应。常见的光环特效编号参考:
白银会员光环对应编号88,外观为白色圆形光效,帧数较少,视觉简洁。黄金会员光环对应编号89,外观为金色火焰环绕效果,帧数中等。至尊会员光环对应编号90,外观为紫红色龙纹光效,帧数较多,视觉效果最华丽。
在M2控制台的“查看→列表信息→特效列表”中可以查看当前版本支持的所有特效编号及其对应外观。如果客户端Effect.wil中缺少某个编号的帧数据,PlayEffect命令会静默失败,角色身上不会显示任何光效。此时需要将特效编号更换为客户端中实际存在的编号。
## 光环特效与装备绑定的替代方案
除了通过变量控制光环,还可以将光环效果绑定到特定装备上。在装备DB的Reserved字段中设置特效编号,或者通过脚本在穿戴装备时触发PlayEffect:
```
[@WearEquipment]
#IF
CHECKITEM 会员勋章 1
#ACT
PlayEffect 89 1 1
SENDMSG 6 会员勋章已装备,光环效果激活。
BREAK
```
[@WearEquipment]是QFunction.txt中的装备穿戴触发标签。穿戴会员勋章时自动播放光环特效,脱下装备时通过[@TakeOffEquipment]标签调用StopEffect停止特效。这种方案的优势是光环跟随装备而非人物变量,玩家交易勋章后光环效果随之转移。
## 光环叠加与互斥处理
多个光环同时播放会导致光效重叠,影响视觉体验。在播放新光环前需要先停止所有旧光环:
```
[@会员光环]
#IF
CHECKVAR HUMAN 会员等级 > 0
#ACT
StopEffect 88
StopEffect 89
StopEffect 90
GOTO @播放光环
[@播放光环]
#IF
CHECKVAR HUMAN 会员等级 = 1
#ACT
PlayEffect 88 1 1
BREAK
#IF
CHECKVAR HUMAN 会员等级 = 2
#ACT
PlayEffect 89 1 1
BREAK
#IF
CHECKVAR HUMAN 会员等级 = 3
#ACT
PlayEffect 90 1 1
BREAK
```
先执行三条StopEffect命令清空所有可能存在的旧光环,再根据当前会员等级播放新的光环。这个顺序不能颠倒,否则旧光环会覆盖新光环的显示效果。
## 引擎适配差异
GOM引擎的PlayEffect命令支持三个参数,特效编号范围通常为1至200。GOM引擎的光环特效在人物脚下渲染,如果需要头顶光环效果,需要使用PlayEffectEx命令并指定模式参数。
Hero引擎的PlayEffect命令写作PlayEffectEx,参数格式为“特效编号 循环次数 速度 模式”。模式0为脚下光环,模式1为头顶光环,模式2为全身环绕。Hero引擎的StopEffect命令写作StopEffectEx,参数格式与PlayEffectEx对应。
GEE引擎支持PlayEffect和PlayEffectEx两种命令,同时提供SetPlayerEffect命令用于同时控制多个光环的播放和停止。GEE引擎的光环特效编号范围扩展至500,支持更多自定义特效。
BLUE引擎的PlayEffect命令参数中增加了地图限制,格式为“PlayEffect 特效编号 循环次数 速度 地图编号”,只有在地图编号匹配时才播放特效。地图编号设为0表示所有地图均播放。
## 部署验证步骤
脚本文件写入QManage.txt后,在M2控制台执行重新加载QM脚本。用一个会员等级为1的测试角色上线,检查是否收到“白银会员光环已开启”的系统提示,以及角色脚下是否出现白色光圈效果。然后用GM命令将角色的会员等级改为3,重新上线后确认光环是否切换为紫红色龙纹效果。最后将会员到期时间改为过去的时间,等待定时器触发后确认光环是否正确关闭。
如果光环不显示,按以下顺序排查:检查客户端Effect.wil中是否存在脚本中使用的特效编号;检查PlayEffect命令的参数数量是否与引擎规范一致;检查M2控制台中是否开启了“允许播放特效”总开关。如果光环显示后无法关闭,检查StopEffect命令的特效编号是否与PlayEffect中使用的编号完全一致,编号不匹配会导致停止命令无效。如果光环在切换地图后消失,检查PlayEffect命令是否需要配合地图参数使用,部分引擎在MAPMOVE后会自动清除所有特效,需要在进入新地图的触发脚本中重新调用PlayEffect。
传奇会员光环脚本添加与特效命令配置详解
来源:
作者:
点击:

