传奇服务端神器限时与全局唯一性脚本修复方案

来源: 作者: 点击:
你遇到的“小退不消失、全区多把”问题,核心原因是变量选型错误。原脚本使用了“持久化变量”(如U/T变量),导致数据被写入数据库,无法实现小退清零。要实现“全区唯一”且“下线消失”,必须改用全局状态变量配合临时个人变量。

一、核心逻辑:更换变量类型

原脚本的致命缺陷在于将神器状态绑定在了个人数据库变量上。正确的变量配置如下:

变量类型 代码示例 作用 是否持久化

全局开关 G101 标记神器是否已被获取(0=未出,1=已出) 服务器重启重置

持有者标识 A101 记录当前持有者的账号或角色名 服务器重启重置

个人计时 N100 记录人物在线倒计时(小退归零) 小退消失

关键点:必须弃用 U、T、自定义 等写入数据库的变量,改用 N(小退归零)和 G(全局唯一)变量。

二、脚本重写:打死怪物触发段

当玩家击杀挑战怪物(如“终极BOSS”)时,执行以下逻辑:
[@KillMob]
#IF
; 条件:怪物名为终极BOSS,且全局标记G101为0(神器未出)
CheckKillMonName 终极BOSS
EQUAL G101 0
#ACT
; 设置全局标记为1(神器已出)
MOV G101 1
; 记录持有者账号(防止他人抢夺后触发回收)
MOV A101 <$USERID>
; 给予神器物品
GIVE 神器战刃 1
; 启动个人计时器N100,1800秒=30分钟
SetScTimer 1 1800
MOV N100 1
; 刷新怪物(立即重置BOSS)
Param1 终极BOSS
Param2 5
MonGenEx
#SAY
恭喜你获得【神器战刃】,该武器限时30分钟,小退或下线自动消失!
#ELSESAY
神器已被他人获取,请等待刷新。


三、脚本重写:登录与离线触发

这部分是解决“小退不消失”的关键,需在 QManage.txt(登录脚本)和 QFunction-0.txt(功能脚本)中配置。

1. 登录触发(QManage.txt)
[@Login]
#IF
; 检查是否为神器持有者,且计时变量N100已失效(说明是小退上线)
EQUAL A101 <$USERID>
EQUAL N100 0
#ACT
; 强制回收神器
Take 神器战刃 1
; 重置全局状态
MOV G101 0
MOV A101 ""
; 刷新怪物
Param1 终极BOSS
Param2 5
MonGenEx
#SAY
由于你异常下线,神器已被系统回收。


2. 离线触发(QFunction-0.txt)
[@PlayOffline]
#IF
EQUAL A101 <$USERID>
#ACT
; 离线时立即回收物品并重置状态
Take 神器战刃 1
MOV G101 0
MOV A101 ""
Param1 终极BOSS
Param2 5
MonGenEx


四、脚本重写:计时器到期触发

在 QFunction-0.txt 中监听计时器到期事件:
[@OnTimer1]
#IF
; 计时器1到期(30分钟到)
#ACT
; 回收神器
Take 神器战刃 1
; 重置全局状态
MOV G101 0
MOV A101 ""
; 刷新怪物
Param1 终极BOSS
Param2 5
MonGenEx
SendMsg 5 神器使用时间已到,已被系统回收。


五、关键排查点与修复步骤

1. 彻底清除旧变量:在M2引擎的“管理→全局变量”中,删除与神器相关的旧 G 变量。在数据库中清理可能残留的 U 变量。
2. 测试顺序:
◦ 打死怪 → 神器进包(G101=1)。

◦ 小退 → 再上线检查神器是否消失、怪物是否刷新。

◦ 等待30分钟 → 检查是否自动回收。

3. 引擎差异:SetScTimer 是通用计时命令,若你的引擎不支持(如BLUE),需改用 SetOfflineTimer 或机器人脚本模拟计时。

总结:将原脚本中的“数据库变量”全部替换为“内存临时变量”(N/G/A),利用 N 变量小退归零的特性强制触发回收,即可实现“全区唯一”且“下线即没”的效果。