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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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


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

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

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

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

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

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