传奇泡点功能的核心是让玩家在线时自动获得经验,不需要打怪升级。实现方式主要有两种:一种是通过个人定时器定时触发脚本发放经验,另一种是通过引擎内置的自动泡点命令。不同引擎支持的命令不同,下面以常见 GOM/GEE 类引擎为例,按可直接套用的思路写示例。
第一种:个人定时器实现泡点
这是最通用的泡点写法。玩家通过 NPC 开启泡点后,引擎每隔固定秒数执行一次脚本,检测玩家是否在指定地图、是否满足等级条件,然后发放经验。
实现步骤分三步:
第一步,在 QManage.txt 中编写定时器执行标签。打开 MirServerMir200EnvirMapQuest_DefQManage.txt,添加以下内容:
[@OnTimer15]
IF
CHECKMAPNAME 3
CHECKLEVELEX > 49
CHECKLEVELEX < 80
ACT
CHANGEEXP + 50000
SENDMSG 7 2500 初级泡点,每秒获得5万经验
[@OnTimer16]
IF
CHECKMAPNAME 3
CHECKLEVELEX > 99
CHECKLEVELEX < 200
ACT
CHANGEEXP + 60000
SENDMSG 7 2500 高级泡点,每秒获得6万经验
这里 CHECKMAPNAME 后面跟地图编号,3 代表盟重地图,不同版本地图编号需要对照 MapInfo.txt 确认。CHANGEEXP + 50000 表示每次触发增加 50000 经验。定时器编号 15、16 可以自定义,但必须确保未被其他脚本占用。
第二步,在 NPC 脚本中开启定时器。在 Market_Def 目录下创建 NPC 文件,例如 泡点使者-3.txt:
[@main]
IF
ACT
SAY
请选择泡点服务:\
<初级泡点/@初级泡点> 50-80级 每秒5万经验\
<高级泡点/@高级泡点> 100-200级 每秒6万经验\
<关闭泡点/@关闭泡点>\
<离开/@exit>
[@初级泡点]
IF
CHECKLEVELEX > 49
CHECKLEVELEX < 80
ACT
SETOFFTIMER 16
SETONTIMER 15 1
SENDMSG 6 已开启初级泡点,每秒获得5万经验
ELSEACT
SENDMSG 6 等级不符合条件
[@高级泡点]
IF
CHECKLEVELEX > 99
CHECKLEVELEX < 200
ACT
SETOFFTIMER 15
SETONTIMER 16 1
SENDMSG 6 已开启高级泡点,每秒获得6万经验
ELSEACT
SENDMSG 6 等级不符合条件
[@关闭泡点]
IF
ACT
SETOFFTIMER 15
SETOFFTIMER 16
SENDMSG 6 已关闭泡点功能
SETONTIMER 15 1 表示开启 15 号定时器,每 1 秒执行一次。SETOFFTIMER 用于关闭指定定时器,切换泡点档位时需要先关闭其他定时器,避免同时触发。
第三步,在 QManage.txt 的 [@Login] 标签中设置登录时自动开启泡点。如果希望玩家上线后自动享受泡点,可以这样写:
[@Login]
IF
CHECKLEVELEX > 49
CHECKLEVELEX < 80
ACT
SETONTIMER 15 1
这样玩家每次登录时,如果等级在 50 到 79 之间,就会自动开启初级泡点。
第二种:SETAUTOGETEXP 自动泡点命令
部分 GOM/GEE 引擎支持 SETAUTOGETEXP 命令,可以直接开启自动获取经验功能,不需要手动编写定时器标签。
示例:
[@Login]
IF
CHECKLEVELEX > 35
ACT
SETAUTOGETEXP 1 2000 1 3
参数含义通常是:第一个 1 表示开启状态,2000 表示每次获得的经验值,第二个 1 表示执行间隔秒数,3 表示地图编号。不同引擎参数顺序可能不同,需要对照当前引擎说明确认。
这种写法更简洁,但兼容性不如个人定时器。如果当前引擎不支持该命令,就需要回到第一种写法。
第三种:收费泡点实现
收费泡点在免费泡点基础上增加金币或元宝扣除逻辑。玩家每次获得经验时,脚本检测并扣除对应货币。
示例:
[@OnTimer17]
IF
CHECKMAPNAME 3
CHECKLEVELEX > 49
CHECKGOLD 10000
ACT
TAKEGOLD 10000
CHANGEEXP + 500000
SENDMSG 7 2500 金币泡点,扣除1万金币获得50万经验
ELSEACT
SETOFFTIMER 17
SENDMSG 6 金币不足,泡点已自动关闭
元宝泡点写法类似:
[@OnTimer18]
IF
CHECKMAPNAME 3
CHECKLEVELEX > 49
CHECKGAMEGOLD > 0
ACT
GAMEGOLD - 1
CHANGEEXP + 5000000
SENDMSG 7 2500 元宝泡点,扣除1元宝获得500万经验
ELSEACT
SETOFFTIMER 18
SENDMSG 6 元宝不足,泡点已自动关闭
NPC 开启部分:
[@金币泡点]
IF
CHECKLEVELEX > 49
ACT
SETOFFTIMER 15
SETOFFTIMER 16
SETOFFTIMER 18
SETONTIMER 17 1
SENDMSG 6 已开启金币泡点
[@元宝泡点]
IF
CHECKLEVELEX > 49
ACT
SETOFFTIMER 15
SETOFFTIMER 16
SETOFFTIMER 17
SETONTIMER 18 1
SENDMSG 6 已开启元宝泡点
第四种:安全区泡点限制
如果希望泡点仅在安全区生效,可以在定时器检测中增加安全区判断:
[@OnTimer15]
IF
CHECKMAPNAME 3
CHECKLEVELEX > 49
CHECKLEVELEX < 80
CHECKINSAFEZONE
ACT
CHANGEEXP + 50000
ELSEACT
SETOFFTIMER 15
SENDMSG 6 已离开安全区,泡点已关闭
CHECKINSAFEZONE 用于检测玩家是否在安全区内。离开安全区后自动关闭定时器,防止玩家在野外无风险泡点。
第五种:性能优化
当在线人数较多时,每秒触发一次的定时器会产生大量脚本运算。可以采用以下优化方式:
将泡点间隔从 1 秒改为 5 秒,每次发放 5 倍经验,减少触发频率:
SETONTIMER 15 5
CHANGEEXP + 250000
将泡点地图按坐标分区,不同区域使用不同定时器错开执行时间,避免同一时刻所有玩家同时触发脚本。
第六种:部署与调试
修改 QManage.txt 后,在 M2 控制台执行 @ReloadManage 重新加载登录脚本。修改 NPC 文件后,执行 @ReloadNpc 重新加载 NPC。
调试时按以下顺序检查:
定时器编号是否与其他脚本冲突,可用查找替换功能确认
CHECKMAPNAME 后面的地图编号是否与 MapInfo.txt 一致
CHANGEEXP 是否能正常增加经验
SETONTIMER 和 SETOFFTIMER 编号是否对应
收费泡点中货币扣除是否正常
离开地图或安全区后定时器是否自动关闭
登录时自动开启泡点是否生效
如果泡点不触发,先检查定时器编号是否被占用,再确认 CHECKMAPNAME 地图编号是否正确。如果经验不增加,检查 CHANGEEXP 命令是否被当前引擎支持,部分引擎可能使用其他经验发放命令。如果收费泡点不扣货币,检查 CHECKGOLD 或 CHECKGAMEGOLD 写法是否与当前引擎一致。
传奇泡点功能实现方案:个人定时器、地图限制与收费经验奖励脚本
来源:
作者:
点击:

