传奇庄园管家定时扣元宝脚本逻辑与实现

来源: 作者: 点击:
针对“庄园管家”这类NPC实现时间限制扣费,核心是利用传奇脚本的个人定时器(OnTimer)机制。这并非简单的单次对话,而是需要一套“开启计时-循环扣费-余额检测”的完整逻辑。以下是基于GOM、GEE等主流引擎的脚本实现方案。

一、 脚本核心架构:三步闭环

庄园管家扣费脚本通常包含三个核心段落,缺一不可:
1. 入口触发(@baomu):玩家点击雇佣,开启定时器。
2. 循环扣费(@OnTimerX):定时器每秒或每分钟执行的扣费动作。
3. 异常中断(@Stop):元宝不足或手动解雇时关闭定时器。

二、 完整脚本示例(每60秒扣100元宝)

假设NPC脚本文件名为 ZhuangYuanButler.txt,以下是具体代码:
[@main]
#ACT
MOV S0 庄园管家
BREAK
SAY
欢迎光临庄园,我是管家<S>$STR(S0)</S>。\ \
雇佣我为您打理庄园,可以自动收获作物、清理杂草。\ \
<收费标准:每60秒自动扣除100元宝,余额不足自动解雇>\ \
<雇佣管家/@baomu> <解雇管家/@stop> <离开>

[@baomu]
#IF
CHECKONTIMER 1 = 1 ;检测1号定时器是否已开启
#ACT
MESSAGEBOX 提示:您已经雇佣了管家,无需重复操作!
BREAK
#IF
CHECKGAMEGOLD > 99 ;检测元宝是否大于99
#ACT
SETONTIMER 1 60 ;开启1号定时器,间隔60秒
SENDMSG 6 提示:庄园管家雇佣成功!开始计时收费。
GOTO @main
#ELSESAY
你的元宝不足100,无法雇佣管家。

[@OnTimer1] ;1号定时器触发段
#IF
CHECKGAMEGOLD > 99 ;检测当前元宝是否够扣
#ACT
GAMEGOLD - 100 ;扣除100元宝
;此处可添加管家服务效果,如自动收获代码
SENDMSG 6 提示:庄园管家服务中,已扣除100元宝。
BREAK
#ELSEACT ;元宝不足时触发
GOTO @stop

[@stop]
#IF
CHECKONTIMER 1 = 1
#ACT
SETOFFTIMER 1 ;强制关闭1号定时器
SENDMSG 6 提示:庄园管家已被解雇,服务终止。
#ELSEACT
MESSAGEBOX 提示:您当前并未雇佣管家。
GOTO @main


三、 关键命令与参数修改指南

如果你需要调整扣费频率或金额,只需修改以下参数:

脚本命令 作用 修改示例

SETONTIMER 1 60 开启定时器 将 60 改为 1 即为每秒触发

GAMEGOLD - 100 扣费金额 将 100 改为 500 即扣500元宝

CHECKGAMEGOLD > 99 余额检测阈值 金额需比扣费数少1,防止负数

注意事项:
1. 定时器索引:SETONTIMER 后的数字(如 1)是定时器编号,必须与 @OnTimer1 对应,且不能与其他系统功能冲突。
2. 地图判定:严谨的脚本应在 @OnTimer1 段首加入 ISONMAP 庄园 检测,确保玩家不在庄园地图时停止扣费。
3. 变量存储:若需记录总消费时长,可在扣费段使用 INC 命令递增一个自定义变量(如 INC U10 1)。

四、 常见问题排查(为什么扣费不生效?)

• 现象:点击后无反应:检查 Merchant.txt 中该NPC的脚本文件名是否与 ZhuangYuanButler.txt 一致。

• 现象:定时器开了但不扣钱:检查 QManage.txt 文件中是否重载(覆盖)了 @OnTimer1 的触发逻辑。

• 现象:负数BUG:务必在扣费前(@OnTimer1段)进行 CHECKGAMEGOLD 检测,否则可能导致元宝扣成负数。

此脚本为标准模板,实际应用时需根据服务端的“庄园系统”具体功能,在 @OnTimer1 段内补充自动收获、浇水等具体服务代码。