传奇服务端添加元宝充值NPC脚本编写与配置教程

来源: 作者: 点击:
一、MerChant.txt 添加NPC基础配置

服务端NPC列表文件位于 MirServer\Mir200\Envir\MerChant.txt。在该文件末尾新增一行,定义NPC在地图中的位置与外观。

配置格式详解:
3 330 320 元宝充值使者 0 8 0
• 3:地图编号(3通常为盟重省,新手村为0)。

- 330 320:NPC在地图中的X、Y坐标。
• 元宝充值使者:NPC显示名称。

• 0:NPC面向方向。

- 8:NPC外观代码(8为普通商人形象,可修改)。
• 0:是否属于沙巴克城(0为否)。

保存文件后,需重启M2Server或使用GM命令 @重读NPC 使配置生效。此时游戏内对应坐标会出现NPC,但点击无反应,需下一步编写脚本。

二、Market_Def 脚本编写(GOM/GEE引擎)

NPC功能脚本存放在 MirServer\Mir200\Envir\Market_Def 目录。新建文本文件并重命名为 元宝充值使者-3.txt(注意:文件名必须与MerChant.txt中的NPC名及地图号严格一致)。

基础发放脚本(无支付验证)

此脚本适用于单机测试或GM后台发放,点击直接给元宝。
[@main]
#SAY
欢迎使用元宝充值系统!\ \
<充值1000元宝/@充值1000>\
<充值5000元宝/@充值5000>\
<离开/@exit>

[@充值1000]
#ACT
GAMEGOLD + 1000
SENDMSG 6 提示:成功充值1000元宝!
BREAK

[@充值5000]
#ACT
GAMEGOLD + 5000
SENDMSG 6 提示:成功充值5000元宝!
BREAK


模拟真实充值(扣除物品)

若需模拟真实流程(如消耗“充值卡”物品),需加入检测逻辑。
[@main]
#SAY
请先获取充值卡,然后兑换元宝。\ \
<使用10元卡兑换1000元宝/@兑换10元>

[@兑换10元]
#IF
CHECKITEM 10元充值卡 1
#ACT
TAKE 10元充值卡 1
GAMEGOLD + 1000
SENDMSG 6 提示:10元卡兑换成功,获得1000元宝!
#ELSEACT
MESSAGEBOX 兑换失败:背包中没有10元充值卡!
BREAK


关键命令说明:
• GAMEGOLD +:增加元宝(GOM/GEE引擎通用)。

• CHECKITEM:检测背包是否拥有指定物品。

- SENDMSG 6:发送私人提示消息。

三、HERO引擎脚本差异

若使用HERO引擎(常见于老版本),脚本命令与GOM略有不同,主要区别在于元宝变量。

HERO引擎脚本示例:
[@main]
欢迎使用元宝充值。\ \
<领取1000元宝/@领1000>

[@领1000]
#IF
TRUE
#ACT
GIVE 元宝 1000 ; HERO引擎通常使用GIVE命令发放元宝物品
SENDMSG 6 充值成功!
BREAK


注意: HERO引擎中元宝有时以“物品”形式存在(数据库中有“元宝”物品),而GOM引擎直接操作 GAMEGOLD 变量。若脚本报错,请检查引擎说明书确认元宝命令。

四、高级功能:对接支付系统

对于开服需求,需将NPC与支付平台(如PAYJS、码支付)对接。此部分涉及外部HTTP请求,需使用引擎的插件或扩展脚本功能。

逻辑流程:
1. 玩家点击NPC生成订单号,并跳转至支付页面。
2. 服务端通过 #CALL 指令调用外部脚本,轮询检查支付状态。
3. 支付成功后,脚本自动执行 GAMEGOLD + 操作并发送全服公告。

简易回调脚本框架(需配合插件):
[@生成订单]
#ACT
; 假设生成订单号存入P0变量
MOV P0 <$STR(S$订单前缀)><$DATETIME>
; 调用外部日记记录订单
CALL [\充值系统\订单记录.txt] @记录订单
; 发送支付链接给玩家
SENDMSG 6 请支付10元,订单号:<$STR(P0)>
; 开启定时器检查订单状态
SetOnTimer 1 2
BREAK


此部分实现较为复杂,建议直接使用引擎官方提供的支付NPC模板进行二次修改。

五、常见报错与排查

1. NPC点击无反应:检查 Market_Def 目录下的脚本文件名是否与 MerChant.txt 中的NPC名称、地图号完全一致(包括空格和符号)。
2. 脚本报错:检查命令拼写(如 GAMEGOLD 写成了 GAMEGOLD),以及变量是否支持(老引擎可能不支持 GAMEGOLD)。
3. 元宝未到账:确认引擎类型,HERO引擎可能需要发放“元宝”物品而非修改变量。使用GM命令 @GameGold + 1000 测试变量是否有效。

安全提醒: 开服时务必在脚本中加入严格的支付验证逻辑(如订单去重、金额校验),防止玩家通过抓包伪造充值请求。