传奇服务端元宝充值NPC添加方法与脚本编写实操教程

来源: 作者: 点击:
搭建游戏内元宝充值NPC,需要完成NPC文件新建、地图坐标放置、功能脚本编写、元宝变量校验等多个环节,任何一处参数填写错误,都会出现NPC不显示、点击无反应、元宝不到账等问题,下面从文件路径到完整脚本分步讲解。

首先确认引擎NPC文件存放目录,常规路径为Mir200\Envir\Npcs,该文件夹用来存放所有NPC的定义文件。新建文本文档,修改后缀为txt,文件名自定义,例如chongzhi.txt。打开这个文件编写NPC基础注册信息,格式为NPC名称|地图编号|X坐标|Y坐标|形象编号|是否自动走动,示例:元宝充值使者 0 330 330 8 0。代表NPC名称为元宝充值使者,放置在0号地图,坐标330,330,形象编号8,禁止自动移动。编辑完成保存,再打开Mir200\Envir\Npc.txt,在文件末尾新增一行引用,写入chongzhi.txt,重启引擎或者重载NPC,人物进入对应地图就可以看到这个NPC。

进入NPC脚本编写环节,脚本文件路径Mir200\Envir\Market_Def,新建脚本文件,文件名需要和NPC注册文件名称保持一致,上面例子注册文件是chongzhi.txt,脚本就命名为chongzhi-0.txt,后缀txt,0代表地图编号。脚本开头为[@main],作为点击NPC的主入口。
基础模板示例:
[@main]
#ACT
MOV S10 <$USERNAME>
#SAY
欢迎使用元宝充值服务\
<充值100元宝/@chongzhi100>\
<充值500元宝/@chongzhi500>\
<充值1000元宝/@chongzhi1000>\
<关闭/@exit>
[@chongzhi100]
#ACT
GAMEGOLD +100
SENDMSG 7 充值成功,获得100元宝
#SAY
本次充值100元宝已到账。\
<返回/@main>
[@chongzhi500]
#ACT
GAMEGOLD +500
SENDMSG 7 充值成功,获得500元宝
#SAY
本次充值500元宝已到账。\
<返回/@main>
[@chongzhi1000]
#ACT
GAMEGOLD +1000
SENDMSG 7 充值成功,获得1000元宝
#SAY
本次充值1000元宝已到账。\
<返回/@main>
[@exit]
#ACT
CLOSE

GAMEGOLD为元宝内置变量,加号代表增加元宝数值,减号可以扣除元宝。SENDMSG用来给玩家弹出提示信息,数字7是消息展示类型,在屏幕上方滚动显示。\是脚本换行符,#SAY模块内每一处换行都需要添加这个符号,缺少会导致文字排版错乱,对话框内容挤在同一行。

简单脚本只能实现点击直接发放元宝,实际使用需要增加校验逻辑,防止恶意刷取。可以增加充值记录保存,使用文本记录每一次充值角色名称、时间、元宝数量,写入文本的命令为WRITELOG。
带日志记录的充值段示例:
[@chongzhi100]
#ACT
GAMEGOLD +100
WRITELOG ..\Log\充值记录.txt 角色名称:<$USERNAME> 充值100元宝 时间:<$DATETIME>
SENDMSG 7 充值成功,获得100元宝
#SAY
本次充值100元宝已到账,充值记录已保存。\
<返回/@main>

如果需要增加二次确认弹窗,避免误点充值,可以新增确认标签:
[@chongzhi100]
#SAY
确认充值100元宝?\
<确认充值/@yes100>\
<取消/@main>
[@yes100]
#ACT
GAMEGOLD +100
WRITELOG ..\Log\充值记录.txt 角色名称:<$USERNAME> 充值100元宝 时间:<$DATETIME>
SENDMSG 7 充值成功,获得100元宝
#SAY
本次充值100元宝已到账。\
<返回/@main>

添加NPC过程常见故障排查,第一,NPC加载之后地图上看不到人物,优先检查Npc.txt里面的引用文件名大小写,部分引擎区分大小写,注册文件与引用名称不一致就无法加载;其次核对地图编号和坐标,坐标超出地图范围会不刷新NPC。第二,点击NPC无对话框弹出,检查Market_Def内脚本文件名,文件名格式为注册名-地图号.txt,符号不能写错,另外检查脚本编码,部分引擎只支持ANSI编码,UTF8编码会导致脚本读取失败。第三,元宝点击之后不增加,确认变量GAMEGOLD,不要误写成GAMEGOLDPOINT,GAMEGOLDPOINT一般为积分变量,二者不能混用。第四,换行文字重叠,遗漏\换行符,删除多余空行,脚本内#SAY标签中间不要随意换行。

还有进阶功能拓展,可增加充值礼包附带道具,在#ACT段增加GIVE命令,例如GIVE 金条 1,充值元宝同时赠送金条。也可以增加充值上限限制,使用MOV和IF条件判断角色当前元宝数量,防止超出设定上限。示例限制代码:
[@chongzhi100]
#IF
LARGE GAMEGOLD 999999
#ACT
SENDMSG 7 你的元宝数量已达到上限,无法继续充值
#SAY
元宝数量已满,不能继续充值。\
<返回/@main>
#ELSEACT
GAMEGOLD +100
SENDMSG 7 充值成功,获得100元宝
#SAY
本次充值100元宝已到账。\
<返回/@main>

全部脚本编写完成,保存文件之后,在引擎控制台执行重载NPC命令,不需要完全重启服务端,重载后直接登录测试。测试阶段使用小号反复测试各个充值档位,检查元宝数值变化、日志文件是否正常写入、弹窗跳转逻辑是否正常,确认没有异常之后再正式启用。测试时留意引擎M2控制台窗口,脚本语法错误会直接在控制台打印报错信息,根据报错行数快速定位问题。