贵宾特使脚本的核心功能是检测玩家是否为贵宾账号并发放对应等级奖励。脚本存放在MirServer\Mir200\Envir\Market_Def目录下,文件命名格式为“NPC名-地图号.txt”,例如盟重省的贵宾特使文件命名为“贵宾特使-3.txt”。脚本需要通过CHECKNAMELIST命令读取贵宾名单文件来判断玩家身份,贵宾名单文件路径通常为QuestDiary\数据文件\贵宾名单\贵宾名单.txt。
## 一、贵宾名单文件的配置方法
在QuestDiary\数据文件\目录下新建贵宾名单文件夹,在其中创建贵宾名单.txt文件。该文件每行存放一个角色名,格式为纯文本。当玩家通过激活码或充值方式获得贵宾资格后,脚本自动将该角色名写入此文件。脚本中使用CHECKNAMELIST ..\QuestDiary\数据文件\贵宾名单\贵宾名单.txt命令检测当前角色是否在名单中,命中则执行贵宾专属逻辑,未命中则提示无权限。
## 二、脚本主框架的完整代码
以下脚本实现完整的贵宾特使功能,包含身份检测、凭证领取、等级奖励分段发放、多余凭证回收四个模块。
```
[@main]
#IF
CHECKNAMELIST ..\QuestDiary\数据文件\贵宾名单\贵宾名单.txt
#SAY
尊敬的贵宾玩家,欢迎来到玛法大陆。\
你可以在以下等级段领取对应奖励:\
35级、40级、45级、50级、60级。\
\
<领取贵宾凭证/@领取凭证>\
<领取等级奖励/@等级奖励>\
<递交多余凭证/@递交凭证>\
<离开/@exit>
#ELSESAY
你不是贵宾账号,无法使用此功能。\
如需成为贵宾,请前往官方渠道激活。
[@领取凭证]
#IF
CHECKITEM 贵宾凭证 1
#ACT
MESSAGEBOX 你身上已经有了贵宾凭证,不需要重复领取。
BREAK
#ELSEACT
GIVE 贵宾凭证 1
SENDMSG 6 贵宾凭证已放入你的包裹,双击后即可激活贵宾身份。
BREAK
```
脚本中CHECKNAMELIST是身份判断的关键命令,只有贵宾名单中的角色才能看到完整菜单。GIVE命令发放贵宾凭证物品,该物品需要在StdItems.DB中预先定义,Stdmode字段设为31或对应双击触发类型,并在QFunction-0.txt中编写双击触发脚本将角色名写入贵宾名单。
## 三、等级奖励分段发放脚本
等级奖励需要按35、40、45、50、60五个等级段分别判断,每段只允许领取一次。使用私人变量或全局变量记录领取状态,推荐使用私人变量避免多玩家冲突。
```
[@等级奖励]
#IF
CHECKLEVELEX > 34
#ACT
#ELSEACT
MESSAGEBOX 你的等级不足35级,无法领取贵宾奖励。
BREAK
#IF
CHECKLEVELEX > 34
CHECK [500] 0
#ACT
SET [500] 1
GIVE 金创药(大) 50
GIVE 魔法药(大) 50
SENDMSG 6 恭喜领取35级贵宾奖励。
BREAK
#IF
CHECKLEVELEX > 39
CHECK [501] 0
#ACT
SET [501] 1
GIVE 祝福油 3
GIVE 随机传送石 5
SENDMSG 6 恭喜领取40级贵宾奖励。
BREAK
#IF
CHECKLEVELEX > 44
CHECK [502] 0
#ACT
SET [502] 1
GIVE 金刚石 10
GIVE 声望卷 5
SENDMSG 6 恭喜领取45级贵宾奖励。
BREAK
#IF
CHECKLEVELEX > 49
CHECK [503] 0
#ACT
SET [503] 1
GIVE 元宝 50000
GIVE 经验卷 10
SENDMSG 6 恭喜领取50级贵宾奖励。
BREAK
#IF
CHECKLEVELEX > 59
CHECK [504] 0
#ACT
SET [504] 1
GIVE 高级转生证明 1
GIVE 极品项链 1
SENDMSG 6 恭喜领取60级贵宾奖励。
BREAK
MESSAGEBOX 你当前等级段的奖励已经领取过了。
```
脚本中CHECKLEVELEX检测等级,CHECK [500] 0检测私人变量500是否为0(未领取状态),SET [500] 1将变量设为1标记为已领取。玩家升级后再次与NPC对话,已领取的段位会被跳过,未领取的段位继续发放。
## 四、多余凭证递交功能
部分玩家可能通过多次活动获得多张贵宾凭证,需要提供递交回收功能。
```
[@递交凭证]
#IF
CHECKITEM 贵宾凭证 1
#ACT
TAKE 贵宾凭证 1
GIVE 金创药(大) 10
SENDMSG 6 多余凭证已递交,获得10瓶金创药(大)。
BREAK
#ELSESAY
你身上没有多余的贵宾凭证。
```
TAKE命令回收物品,GIVE命令给予补偿物品。递交后凭证从包裹中移除,避免玩家重复使用同一张凭证激活贵宾身份。
## 五、凭证双击触发脚本
贵宾凭证物品需要在QFunction-0.txt中配置双击触发逻辑,将使用者的角色名写入贵宾名单文件。
```
[@StdModeFunc31]
#IF
CHECKNAMELIST ..\QuestDiary\数据文件\贵宾名单\贵宾名单.txt
#ACT
MESSAGEBOX 你已经是贵宾账号,无需重复激活。
BREAK
#ELSEACT
ADDNAMELIST ..\QuestDiary\数据文件\贵宾名单\贵宾名单.txt
TAKE 贵宾凭证 1
SENDMSG 0 恭喜玩家『%s』成功激活贵宾账号,享受专属等级奖励!
BREAK
```
StdModeFunc31中的31需要与StdItems.DB中贵宾凭证物品的Stdmode字段值一致。ADDNAMELIST将角色名写入名单文件,SENDMSG 0发送全服公告。脚本中的%a会被引擎自动替换为当前角色名。
## 六、NPC外观与坐标配置
贵宾特使的NPC外观和位置需要在MerChant.txt中配置。文件位于MirServer\Mir200\Envir目录下,每一行定义一条NPC记录,格式为:脚本名称 地图名称 X坐标 Y坐标 NPC名称 标志 形象 是否属于沙巴克 是否移动 移动间隔 是否允许变色 变色速度。
以盟重省为例,配置行如下:
```
贵宾特使 3 330 330 贵宾特使 0 8 0 0 0 0 0
```
其中3代表盟重省地图编号,330 330为NPC所在坐标,形象8对应Data\Npc.wil中的图片编号。配置完成后需要在M2Server控制台中执行“重新加载NPC”命令使新NPC生效。
## 七、跨引擎适配要点
Legend和Herom2引擎对CHECKNAMELIST、ADDNAMELIST、GIVE、TAKE、CHECKLEVELEX命令支持完整,可直接使用上述脚本。
GOM引擎需要在M2控制器中确认CHECKNAMELIST命令的路径格式,部分版本要求使用双反斜杠或正斜杠替代单反斜杠。如果CHECKNAMELIST无法识别路径,可将脚本中的“..\QuestDiary”改为“..\\QuestDiary”或将路径改为绝对路径。
GEE引擎的路径分隔符统一使用“..\”格式,与Herom2一致。GEE引擎的ADDNAMELIST命令支持追加模式,但需要注意名单文件的编码格式必须为ANSI,UTF-8编码会导致中文字符识别异常。
996引擎的CHECKLEVELEX命令需要改为CHECKLEVEL,变量检测命令CHECK [500] 0需要改为CHECKVAR HUMAN 500 = 0的格式。SET命令改为SETVAR HUMAN 500 1。SENDMSG命令保持不变。
所有引擎通用的一条规则是:修改脚本后必须在M2Server控制台执行“重新加载NPC”或重启服务端,否则改动不会生效。修改DB文件后还需要执行“重新加载数据库”命令。
贵宾特使传奇外传NPC脚本完整编写部署与等级奖励发放实现方法全流程详解
来源:
作者:
点击:

