针对“庄园管家”这类NPC实现时间限制扣费,核心是利用传奇脚本的个人定时器(OnTimer)机制。这并非简单的单次对话,而是需要一套“开启计时-循环扣费-余额检测”的完整逻辑。以下是基于GOM、GEE等主流引擎的脚本实现方案。
一、脚本核心架构:三步闭环
庄园管家扣费脚本通常包含三个核心段落,缺一不可:
1.入口触发(@baomu):玩家点击雇佣,开启定时器。
2.循环扣费(@OnTimerX):定时器每秒或每分钟执行的扣费动作。
3.异常中断(@Stop):元宝不足或手动解雇时关闭定时器。
二、完整脚本示例(每60秒扣100元宝)
假设NPC脚本文件名为ZhuangYuanButler.txt,以下是具体代码:
[@main]
#ACT
MOVS0庄园管家
BREAK
SAY
欢迎光临庄园,我是管家<S>$STR(S0)</S>。\\
雇佣我为您打理庄园,可以自动收获作物、清理杂草。\\
<收费标准:每60秒自动扣除100元宝,余额不足自动解雇>\\
<雇佣管家/@baomu><解雇管家/@stop><离开>
[@baomu]
#IF
CHECKONTIMER1=1;检测1号定时器是否已开启
#ACT
MESSAGEBOX提示:您已经雇佣了管家,无需重复操作!
BREAK
#IF
CHECKGAMEGOLD>99;检测元宝是否大于99
#ACT
SETONTIMER160;开启1号定时器,间隔60秒
SENDMSG6提示:庄园管家雇佣成功!开始计时收费。
GOTO@main
#ELSESAY
你的元宝不足100,无法雇佣管家。
[@OnTimer1];1号定时器触发段
#IF
CHECKGAMEGOLD>99;检测当前元宝是否够扣
#ACT
GAMEGOLD-100;扣除100元宝
;此处可添加管家服务效果,如自动收获代码
SENDMSG6提示:庄园管家服务中,已扣除100元宝。
BREAK
#ELSEACT;元宝不足时触发
GOTO@stop
[@stop]
#IF
CHECKONTIMER1=1
#ACT
SETOFFTIMER1;强制关闭1号定时器
SENDMSG6提示:庄园管家已被解雇,服务终止。
#ELSEACT
MESSAGEBOX提示:您当前并未雇佣管家。
GOTO@main
三、关键命令与参数修改指南
如果你需要调整扣费频率或金额,只需修改以下参数:
脚本命令作用修改示例
SETONTIMER160开启定时器将60改为1即为每秒触发
GAMEGOLD-100扣费金额将100改为500即扣500元宝
CHECKGAMEGOLD>99余额检测阈值金额需比扣费数少1,防止负数
注意事项:
1.定时器索引:SETONTIMER后的数字(如1)是定时器编号,必须与@OnTimer1对应,且不能与其他系统功能冲突。
2.地图判定:严谨的脚本应在@OnTimer1段首加入ISONMAP庄园检测,确保玩家不在庄园地图时停止扣费。
3.变量存储:若需记录总消费时长,可在扣费段使用INC命令递增一个自定义变量(如INCU101)。
四、常见问题排查(为什么扣费不生效?)
•现象:点击后无反应:检查Merchant.txt中该NPC的脚本文件名是否与ZhuangYuanButler.txt一致。
•现象:定时器开了但不扣钱:检查QManage.txt文件中是否重载(覆盖)了@OnTimer1的触发逻辑。
•现象:负数BUG:务必在扣费前(@OnTimer1段)进行CHECKGAMEGOLD检测,否则可能导致元宝扣成负数。
此脚本为标准模板,实际应用时需根据服务端的“庄园系统”具体功能,在@OnTimer1段内补充自动收获、浇水等具体服务代码。
一、脚本核心架构:三步闭环
庄园管家扣费脚本通常包含三个核心段落,缺一不可:
1.入口触发(@baomu):玩家点击雇佣,开启定时器。
2.循环扣费(@OnTimerX):定时器每秒或每分钟执行的扣费动作。
3.异常中断(@Stop):元宝不足或手动解雇时关闭定时器。
二、完整脚本示例(每60秒扣100元宝)
假设NPC脚本文件名为ZhuangYuanButler.txt,以下是具体代码:
[@main]
#ACT
MOVS0庄园管家
BREAK
SAY
欢迎光临庄园,我是管家<S>$STR(S0)</S>。\\
雇佣我为您打理庄园,可以自动收获作物、清理杂草。\\
<收费标准:每60秒自动扣除100元宝,余额不足自动解雇>\\
<雇佣管家/@baomu><解雇管家/@stop><离开>
[@baomu]
#IF
CHECKONTIMER1=1;检测1号定时器是否已开启
#ACT
MESSAGEBOX提示:您已经雇佣了管家,无需重复操作!
BREAK
#IF
CHECKGAMEGOLD>99;检测元宝是否大于99
#ACT
SETONTIMER160;开启1号定时器,间隔60秒
SENDMSG6提示:庄园管家雇佣成功!开始计时收费。
GOTO@main
#ELSESAY
你的元宝不足100,无法雇佣管家。
[@OnTimer1];1号定时器触发段
#IF
CHECKGAMEGOLD>99;检测当前元宝是否够扣
#ACT
GAMEGOLD-100;扣除100元宝
;此处可添加管家服务效果,如自动收获代码
SENDMSG6提示:庄园管家服务中,已扣除100元宝。
BREAK
#ELSEACT;元宝不足时触发
GOTO@stop
[@stop]
#IF
CHECKONTIMER1=1
#ACT
SETOFFTIMER1;强制关闭1号定时器
SENDMSG6提示:庄园管家已被解雇,服务终止。
#ELSEACT
MESSAGEBOX提示:您当前并未雇佣管家。
GOTO@main
三、关键命令与参数修改指南
如果你需要调整扣费频率或金额,只需修改以下参数:
脚本命令作用修改示例
SETONTIMER160开启定时器将60改为1即为每秒触发
GAMEGOLD-100扣费金额将100改为500即扣500元宝
CHECKGAMEGOLD>99余额检测阈值金额需比扣费数少1,防止负数
注意事项:
1.定时器索引:SETONTIMER后的数字(如1)是定时器编号,必须与@OnTimer1对应,且不能与其他系统功能冲突。
2.地图判定:严谨的脚本应在@OnTimer1段首加入ISONMAP庄园检测,确保玩家不在庄园地图时停止扣费。
3.变量存储:若需记录总消费时长,可在扣费段使用INC命令递增一个自定义变量(如INCU101)。
四、常见问题排查(为什么扣费不生效?)
•现象:点击后无反应:检查Merchant.txt中该NPC的脚本文件名是否与ZhuangYuanButler.txt一致。
•现象:定时器开了但不扣钱:检查QManage.txt文件中是否重载(覆盖)了@OnTimer1的触发逻辑。
•现象:负数BUG:务必在扣费前(@OnTimer1段)进行CHECKGAMEGOLD检测,否则可能导致元宝扣成负数。
此脚本为标准模板,实际应用时需根据服务端的“庄园系统”具体功能,在@OnTimer1段内补充自动收获、浇水等具体服务代码。

