传奇归来庄园管家限时扣元宝NPC脚本编写与时间计费功能实现教程

来源: 作者: 点击:
庄园管家NPC用于庄园使用权限计时扣费,按照在线时长自动扣除元宝,是时长收费类脚本常用案例,核心依靠计时器、变量存储、周期检测、元宝扣减逻辑组合实现,下面从NPC注册、完整脚本、参数说明、故障排查全部讲解。

首先创建NPC注册文件,文件路径Mir200\Envir\Npcs,新建文本文件命名为zhuangyuan.txt,写入NPC基础信息,庄园管家 0 325 328 10 0。参数含义依次为NPC名称,地图编号,X坐标,Y坐标,人物形象编号,0代表NPC不会自动走动。保存文件,打开Mir200\Envir\Npc.txt,在文件末尾添加zhuangyuan.txt,保存后重载NPC即可在地图上生成庄园管家。

脚本文件放置在Mir200\Envir\Market_Def,脚本命名zhuangyuan-0.txt,和NPC注册文件名称、地图编号对应。脚本核心逻辑,玩家点击NPC可以开通庄园使用权限,记录开启时间,使用定时检测脚本对比当前时间,到达设定间隔就扣除对应元宝,退出庄园地图或者下线停止计时扣费。

完整脚本示例:
[@main]
#SAY
庄园管家:欢迎来到庄园,进入庄园将按时长扣除元宝。\
每60秒扣除50元宝。\
<开启庄园权限/@open>\
<关闭庄园权限/@close>\
<查看剩余计时/@checktime>\
<离开/@exit>
[@open]
#IF
CHECKGAMEGOLD > 49
#ACT
MOV HUMAN S0 <$\(DATETIME>
MOV HUMAN N0 1
MOV HUMAN N1 60
MOV HUMAN N2 50
SENDMSG 6 庄园权限开启成功,每60秒扣除50元宝。
TIMERSET 1 60
#SAY
庄园计时已启动,每60秒自动扣除50元宝。\
<返回/@main>
#ELSEACT
SENDMSG 6 元宝不足,无法开启庄园权限
#SAY
元宝数量不足,无法开启庄园。\
<返回/@main>
[@close]
#ACT
TIMERSET 1 0
MOV HUMAN N0 0
SENDMSG 6 庄园权限已关闭,停止计时扣费
#SAY
庄园计时关闭,不再扣除元宝。\
<返回/@main>
[@checktime]
#IF
CHECKVAR HUMAN N0 = 1
#ACT
SENDMSG 6 庄园计时正在运行,扣费间隔60秒,单次扣50元宝
#SAY
庄园计时状态:已开启。扣费周期60秒,单次扣费50元宝\
<返回/@main>
#ELSEACT
SENDMSG 6 庄园计时未开启
#SAY
庄园计时状态:未开启。\
<返回/@main>
#IF
ISDROPTIMER 1
CHECKVAR HUMAN N0 = 1
#ACT
#IF
CHECKGAMEGOLD > 49
#ACT
GAMEGOLD -50
WRITELOG ..\Log\庄园扣费.txt 角色:<\)$USERNAME> 扣费时间:<$DATETIME> 扣除元宝50
TIMERSET 1 60
SENDMSG 6 庄园计时扣费,扣除50元宝
#ELSEACT
TIMERSET 1 0
MOV HUMAN N0 0
SENDMSG 6 元宝不足,庄园权限自动关闭
#ELSEACT
BREAK
[@exit]
#ACT
CLOSE

脚本参数说明,TIMERSET是人物计时器命令,第一个数字为计时器编号,第二个数字是计时秒数,TIMERSET 1 60代表1号计时器60秒触发一次,TIMERSET 1 0代表关闭计时器。自定义变量N0用来标记庄园状态,等于1代表计时开启,0代表关闭。N1存储扣费间隔秒数,N2存储单次扣除元宝数量,可以直接修改这两个数值调整扣费规则。S0变量用来记录开启庄园的时间,可按需增加时长统计展示。WRITELOG命令记录每一次扣费日志,保存到Log目录下,方便核对扣费记录。

增加地图判断逻辑,玩家离开庄园地图自动停止计时,需要在QFunction-0.txt增加地图离开触发器,进入Mir200\Envir\QFunction-0.txt,添加如下代码:
[@LeaveMap]
#IF
CHECKVAR HUMAN N0 = 1
#ACT
TIMERSET 1 0
MOV HUMAN N0 0
SENDMSG 6 离开庄园地图,庄园计时停止,不再扣费

增加下线停止计时逻辑,玩家下线清空计时标记,同样写入QFunction-0.txt:
[@Logout]
#IF
CHECKVAR HUMAN N0 = 1
#ACT
TIMERSET 1 0
MOV HUMAN N0 0
WRITELOG ..\Log\庄园扣费.txt 角色:<$USERNAME> 下线,庄园计时终止

常见问题与修复方案,第一,计时器不触发扣费,优先检查QFunction-0是否开启对应触发器,确认计时器编号不与其他脚本计时器冲突,同一个角色多个脚本不要复用同一个计时器编号。第二,元宝被扣负数,脚本开头必须增加元宝数量判断,CHECKGAMEGOLD > 49,元宝不足就直接关闭计时器,避免扣除之后元宝变成负数。第三,玩家重复点击开启按钮,计时器重复叠加,多次开启会出现同时多个计时器同时扣费。优化方案,在[@open]标签增加状态判断,只有N0等于0才可以开启。
优化后的[@open]
[@open]
#IF
CHECKVAR HUMAN N0 = 0
CHECKGAMEGOLD > 49
#ACT
MOV HUMAN S0 <$DATETIME>
MOV HUMAN N0 1
MOV HUMAN N1 60
MOV HUMAN N2 50
SENDMSG 6 庄园权限开启成功,每60秒扣除50元宝。
TIMERSET 1 60
#SAY
庄园计时已启动,每60秒自动扣除50元宝。\
<返回/@main>
#ELSEACT
#IF
CHECKVAR HUMAN N0 = 1
#ACT
SENDMSG 6 庄园计时已经开启,无需重复操作
#SAY
庄园计时处于开启状态,请勿重复点击。\
<返回/@main>
#ELSEACT
SENDMSG 6 元宝不足,无法开启庄园权限
#SAY
元宝数量不足,无法开启庄园。\
<返回/@main>

第四,重载脚本后计时异常,人物计时器属于角色绑定,重载NPC不会重置玩家身上已经运行的计时器,测试时需要玩家小退重登清除旧计时器。第五,日志文件无法生成,确认Mir200下Log文件夹存在,部分系统权限不足无法写入文件,手动新建Log文件夹即可。

拓展调整方式,如果想要改成按总使用时长一次性扣费,而不是周期扣元宝,可以修改脚本逻辑,记录开启时间,关闭庄园时计算时间差,一次性扣除对应元宝。修改扣费间隔,直接修改N1和N2的数值,例如N1=120,N2=100,代表120秒扣除100元宝。也可以增加庄园内禁止传送、自动提示剩余扣费次数等附加逻辑,在庄园地图MapInfo增加地图参数,限制庄园内的部分功能。

脚本调试操作,修改完成全部文件保存,引擎控制台执行重载NPC和重载QFunction,使用小号测试,开启庄园观察计时器扣费提示,测试元宝不足自动关闭、离开地图终止计时、下线停止计时等场景。查看M2控制台窗口,脚本语法错误会直接输出报错信息,依据报错定位代码行,修正符号、换行、变量书写错误。全部功能测试无误后,再正式投入使用。