很多私人服务器服主想在土城安全区添加一个泡经验 NPC,让玩家不用传送地图,只要在指定范围里就能定时获得经验,同时扣除一定金币。这样的脚本怎么实现呢?其实按步骤操作,用基础脚本命令就能完成,下面详细说说具体做法。
怎么做好设置前的准备?
首先要确定几个关键参数:土城安全区的坐标范围、每次扣除的金币数量、对应的经验值以及间隔时间。比如想设置 “每 10 分钟扣 10000 金币,给 10000 经验”,就要记好这几个数值。
然后找到私人服务器服务端的脚本文件存放位置,通常在 “MirServer\Mir200\Envir\Market_Def” 文件夹里,需要用到的是 “QFunction-0.txt”(功能触发文件)和 “NPC 对话脚本”(比如土城的 NPC 脚本文件)。另外,土城的地图编号是 3,安全区中心坐标一般在(330,330)左右,范围可以设为 5 格(数值越大范围越广),这些数据后续会用到。
怎么设置 NPC 的对话脚本?
打开土城的 NPC 脚本文件(比如 “土城老兵.txt” 或自定义 NPC 文件),添加一个新的 NPC 对话入口。脚本开头要让 NPC 显示对话选项,比如:
[@main]
#IF
#ACT
SENDMSG 6 欢迎使用安全区泡经验功能!每10分钟将扣除10000金币并发放10000经验。
SENDMSG 6 请确认是否开启?
#SAY
开启泡经验功能\ <@start_exp>
关闭泡经验功能\ <@stop_exp>
这里的<@start_exp>和<@stop_exp>是两个触发命令,分别对应开启和关闭功能。玩家点击 “开启” 后,就会进入定时触发流程。
怎么配置定时扣除金币和发放经验?
在 “QFunction-0.txt” 里添加定时触发的核心脚本,需要用到定时器命令SETONTIMER和经验、金币操作命令。比如设置定时器 1,每 600 秒(10 分钟)执行一次操作:
[@start_exp]
#IF
CHECKGAMEGOLD > 9999 // 检查金币是否足够
CheckHumInRange 3 330 330 5 // 检查是否在土城安全区范围内
#ACT
SETONTIMER 1 600 // 启动定时器1,每600秒执行一次
SENDMSG 6 泡经验已开启,保持在安全区内即可获得奖励。
#ELSEACT
SENDMSG 6 金币不足10000或不在安全区,无法开启。
[@Timer1] // 定时器1的执行内容
#IF
CheckHumInRange 3 330 330 5 // 再次确认是否在范围内
CHECKGAMEGOLD > 9999
#ACT
GAMEGOLD - 10000 // 扣除10000金币
CHANGEEXP + 10000 // 增加10000经验
SENDMSG 6 已扣除10000金币,获得10000经验。
#ELSEACT
SETOFFTIMER 1 // 不在范围内或金币不足,关闭定时器
SENDMSG 6 已退出泡经验范围或金币不足,功能已关闭。
这里的CheckHumInRange命令用来检测玩家是否在土城(地图 3)坐标(330,330)周围 5 格内,超出范围就会自动关闭功能。CHANGEEXP命令用于增加经验,GAMEGOLD用于金币扣除,定时器时间单位是秒,所以 10 分钟要写成 600。
怎么让玩家离开范围后自动关闭功能?
除了定时器里的范围检查,还可以在玩家移动时触发检测。在 “QFunction-0.txt” 里添加移动触发脚本:
[@Move]
#IF
CheckTimer 1 // 检查定时器1是否在运行
CheckHumInRange 3 330 330 5 // 不在安全区时
#ACT
SETOFFTIMER 1
SENDMSG 6 已离开安全区,泡经验功能关闭。
这样玩家一旦走出设定的范围,脚本会立即关闭定时器,避免出现不在安全区还能获得经验的情况。
怎么测试和调整脚本效果?
设置完成后,保存所有脚本文件,重启私人服务器服务端让配置生效。登录游戏后找到新增的 NPC,点击开启泡经验功能,然后做以下测试:
站在安全区内,等待 10 分钟,查看金币是否扣除、经验是否增加;
开启功能后走到安全区外,看是否会自动关闭并提示;
金币不足 10000 时开启功能,检查是否会提示 “金币不足”。
如果发现定时器不触发,可能是脚本格式错误(比如符号用了中文全角);如果范围检测不准,可以调整CheckHumInRange命令里的坐标或范围数值(比如把 5 改成 10 扩大范围)。
按照这些步骤,就能做出一个在土城安全区运行的泡经验 NPC 脚本。核心是用好定时器、范围检测和资源操作命令,多测试几次就能让功能稳定运行,给玩家提供更灵活的升级方式。

