传奇会员光环脚本添加与特效命令配置详解

来源: 作者: 点击:
会员光环属于角色外观特效,在人物脚下或头顶生成一圈持续播放的光效。实现方式是在QManage.txt的登录触发段中检测会员等级,按等级调用PlayEffect命令播放不同的光环特效编号,配合会员时间变量实现限时光环的自动开启和关闭。以下从脚本范例入手,逐段拆解编写方法。

##登录触发光环脚本完整范例

在QManage.txt的[@Login]段中添加会员光环检测逻辑:

```
[@Login]
#IF
CHECKVARHUMAN会员等级>0
#ACT
GOTO@会员光环

[@会员光环]
#IF
CHECKVARHUMAN会员等级=1
#ACT
PlayEffect8811
SENDMSG6白银会员光环已开启。
BREAK
#IF
CHECKVARHUMAN会员等级=2
#ACT
PlayEffect8911
SENDMSG6黄金会员光环已开启。
BREAK
#IF
CHECKVARHUMAN会员等级=3
#ACT
PlayEffect9011
SENDMSG6至尊会员光环已开启。
BREAK
```

CHECKVARHUMAN会员等级>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
VARINTEGERHUMAN会员等级
VARINTEGERHUMAN会员到期时间
LOADVARHUMAN会员等级..\QuestDiary\数据文件\会员等级.txt
LOADVARHUMAN会员到期时间..\QuestDiary\数据文件\会员到期.txt
```

VARINTEGERHUMAN会员等级声明一个整数型人物变量。LOADVAR命令从指定文件加载上次存储的变量值,路径写法使用“..\QuestDiary\数据文件\”的相对路径。

会员开通脚本中修改和保存变量:

```
[@开通黄金会员]
#IF
CHECKGAMEGOLD>29999
#ACT
GAMEGOLD-30000
CALCVARHUMAN会员等级=2
CALCVARHUMAN会员到期时间=<$STR(G999)>
SAVEVARHUMAN会员等级..\QuestDiary\数据文件\会员等级.txt
SAVEVARHUMAN会员到期时间..\QuestDiary\数据文件\会员到期.txt
PlayEffect8911
SENDMSG6恭喜开通黄金会员,光环已激活。
BREAK
```

CALCVARHUMAN会员等级=2将变量值直接赋为2。G999是引擎的系统时间变量,配合CALCVAR计算出到期时间戳。SAVEVAR在每次修改后立即执行,确保数据不会因服务端异常关闭而丢失。

##光环限时到期自动关闭

会员光环需要在到期后自动关闭。在QFunction.txt中设置定时器,定期检测会员到期时间:

```
[@OnTimer0]
#IF
CHECKVARHUMAN会员到期时间>0
CHECKVARHUMAN会员到期时间<$G999
#ACT
CALCVARHUMAN会员等级=0
SAVEVARHUMAN会员等级..\QuestDiary\数据文件\会员等级.txt
StopEffect88
StopEffect89
StopEffect90
SENDMSG6你的会员已到期,光环效果已关闭。
BREAK
```

CHECKVARHUMAN会员到期时间<$G999判断当前时间是否超过了存储的到期时间。如果已过期,CALCVARHUMAN会员等级=0将等级归零,StopEffect命令停止对应编号的特效播放。StopEffect的参数为特效编号,必须与PlayEffect中使用的编号一致才能正确停止。

定时器需要在AutoRunRobot.txt中注册:

```
#AutoRunNPCMIN1@OnTimer0
```

MIN1表示每分钟触发一次检测,及时发现过期会员并关闭光环。

##多档位光环特效编号映射

不同会员等级使用不同的光环特效编号。特效编号需要与客户端Effect.wil中的动画衷应。常见的光环特效编号参考:

白银会员光环对应编号88,外观为白色圆形光效,帧数较少,视觉简洁。黄金会员光环对应编号89,外观为金色火焰环绕效果,帧数中等。至尊会员光环对应编号90,外观为紫红色龙纹光效,帧数较多,视觉效果最华丽。

在M2控制台的“查看→列表信息→特效列表”中可以查看当前版本支持的所有特效编号及其对应外观。如果客户端Effect.wil中缺少某个编号的帧数据,PlayEffect命令会静默失败,角色身上不会显示任何光效。此时需要将特效编号更换为客户端中实际存在的编号。

##光环特效与装备绑定的替代方案

除了通过变量控制光环,还可以将光环效果绑定到特定装备上。在装备DB的Reserved字段中设置特效编号,或者通过脚本在穿戴装备时触发PlayEffect:

```
[@WearEquipment]
#IF
CHECKITEM会员勋章1
#ACT
PlayEffect8911
SENDMSG6会员勋章已装备,光环效果激活。
BREAK
```

[@WearEquipment]是QFunction.txt中的装备穿戴触发标签。穿戴会员勋章时自动播放光环特效,脱下装备时通过[@TakeOffEquipment]标签调用StopEffect停止特效。这种方案的优势是光环跟随装备而非人物变量,玩家交易勋章后光环效果随之转移。

##光环叠加与互斥处理

多个光环同时播放会导致光效重叠,影响视觉体验。在播放新光环前需要先停止所有旧光环:

```
[@会员光环]
#IF
CHECKVARHUMAN会员等级>0
#ACT
StopEffect88
StopEffect89
StopEffect90
GOTO@播放光环

[@播放光环]
#IF
CHECKVARHUMAN会员等级=1
#ACT
PlayEffect8811
BREAK
#IF
CHECKVARHUMAN会员等级=2
#ACT
PlayEffect8911
BREAK
#IF
CHECKVARHUMAN会员等级=3
#ACT
PlayEffect9011
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。
[顶部]