一、核心逻辑:实现全区唯一+限时+下线清除功能
脚本核心通过全局变量控制神器唯一性,搭配人物绑定变量计时、下线触发事件,解决三大问题:人物小退下线神器不消失、全区多把神器共存、怪物刷新与神器状态不同步。整体分为怪物死亡掉落、限时计时、下线清除、怪物刷新四大模块,适配主流GOM、GEE、HERO引擎。
核心变量规划:全局变量G1(控制神器状态,0无神器、1神器存在)、人物变量U1(记录神器持有时间戳)、人物变量U2(标记是否持有神器),通过变量联动确保全区仅存一把神器,状态同步更新。
二、完整脚本代码(可直接复制使用)
脚本文件说明
1. 主脚本命名为“GodWeapon.txt”,存放路径:服务端“MirServer\Mir200\Envir\QuestDiary”;
2. 辅助触发脚本写入“Qmanage.txt”(下线检测、定时器触发),确保功能全覆盖。
模块1:挑战怪物死亡掉落神器脚本
绑定挑战怪物死亡事件,仅当无神器存在时掉落,确保全区唯一,代码写入“GodWeapon.txt”:
[@挑战怪物死亡]
#IF
EQUAL G1 0 ; 检测全区无神器
#ACT
MOV G1 1 ; 标记神器已存在
GIVE 神器名称 1 ; 替换为实际神器名称
MOV U2 1 ; 标记当前玩家持有神器
MOV U1 $TIME ; 记录持有时间戳(秒级)
STARTSCTIMER 1 1800 ; 启动1800秒(30分钟)定时器
SENDMSG 0 恭喜玩家%s击杀挑战怪物,获得限时神器(30分钟)!
#elseact
SENDMSG 6 当前全区已有神器存在,无法再次获得!
RESPAWN 挑战怪物名称 1 ; 怪物直接刷新,无需等待
模块2:神器限时消失+怪物刷新脚本
定时器触发,30分钟后清除神器并刷新怪物,代码写入“GodWeapon.txt”:
[@OnTimer1]
#IF
EQUAL U2 1 ; 检测玩家持有神器
#ACT
TAKE 神器名称 1 ; 清除背包/佩戴中的神器
MOV U2 0 ; 取消持有标记
MOV G1 0 ; 标记神器已消失
RESPAWN 挑战怪物名称 1 ; 刷新挑战怪物
SENDMSG 6 你的限时神器已过期,怪物已重新刷新!
SENDMSG 0 玩家%s的限时神器已过期,挑战怪物重新刷新!
KILLSCTIMER 1 ; 关闭定时器
#elseact
MOV G1 0
RESPAWN 挑战怪物名称 1
KILLSCTIMER 1
模块3:人物下线/小退清除神器脚本
检测玩家下线动作,立即清除神器并刷新怪物,代码写入服务端“MirServer\Mir200\Envir\Qmanage.txt”末尾:
[@OnUserLogout]
#IF
EQUAL U2 1 ; 检测玩家持有神器
#ACT
TAKE 神器名称 1 ; 强制清除神器
MOV U2 0
MOV G1 0 ; 重置神器状态
RESPAWN 挑战怪物名称 1 ; 立即刷新怪物
SENDMSG 0 持有神器的玩家%s已下线,神器已清除,怪物重新刷新!
KILLSCTIMER 1 ; 关闭定时器
#elseact
BREAK
[@OnUserQuit] ; 小退触发事件
#IF
EQUAL U2 1
#ACT
TAKE 神器名称 1
MOV U2 0
MOV G1 0
RESPAWN 挑战怪物名称 1
SENDMSG 0 持有神器的玩家%s已小退,神器已清除,怪物重新刷新!
KILLSCTIMER 1
#elseact
BREAK
模块4:实时计时校验脚本(防定时器失效)
补充实时校验逻辑,避免定时器异常导致神器超时不消失,代码写入“Qmanage.txt”,搭配自动检测:
[@CheckWeaponTime]
#IF
EQUAL U2 1 ; 持有神器
$TIME - U1 > 1800 ; 持有时间超过30分钟
#ACT
TAKE 神器名称 1
MOV U2 0
MOV G1 0
RESPAWN 挑战怪物名称 1
SENDMSG 6 你的限时神器已过期,怪物已重新刷新!
SENDMSG 0 玩家%s的限时神器已过期,挑战怪物重新刷新!
KILLSCTIMER 1
#elseact
GOTO @Main
; 加入自动检测,每秒触发一次
#AutoRun NPC SEC 1 @CheckWeaponTime
三、脚本修改及适配方法(无需代码基础)
基础替换调整
1. 神器名称替换:将脚本中“神器名称”改为实际名称(如“屠龙”“裁决之杖”),需与数据库中物品名称完全一致;
2. 怪物名称替换:将“挑战怪物名称”改为目标怪物全称(如“终极BOSS”“远古巨龙”),匹配游戏内怪物名;
3. 时间调整:若需修改限时时长,将“1800”改为对应秒数(如900秒为15分钟),所有涉及1800的位置需统一修改。
变量冲突排查
1. 检查全局变量G1、人物变量U1、U2是否已被其他脚本使用,若冲突可替换为未使用变量(如G20、U10、U11),需同步修改所有对应变量名;
2. 定时器编号1若被占用,可改为其他未使用编号(如2、3),确保STARTSCTIMER、KILLSCTIMER、@OnTimer编号一致。
四、脚本部署步骤(3步生效)
第一步:创建主脚本文件
1. 新建系统记事本,复制模块1、模块2代码粘贴,按需求替换名称、变量;
2. 点击“文件-另存为”,文件名填“GodWeapon.txt”,编码选“ANSI”,保存至指定路径。
第二步:写入辅助触发脚本
1. 打开“Qmanage.txt”,复制模块3、模块4代码粘贴至文件末尾;
2. 保存文件,关闭记事本,确保代码无多余空格、换行。
第三步:绑定怪物死亡事件
1. 进入服务端“MirServer\Mir200\Envir\MonItems”文件夹,找到挑战怪物对应的TXT文件(如“远古巨龙.txt”);
2. 在文件末尾添加一行:#DEATH @挑战怪物死亡,绑定死亡触发事件;
3. 关闭服务端所有程序,重新启动服务器,脚本即可生效。
五、常见问题排查(解决现有异常)
问题1:人物下线/小退神器不消失
排查方向:1. 确认“@OnUserLogout”“@OnUserQuit”脚本已正确写入Qmanage.txt,无拼写错误;2. 检查U2变量是否正常标记,可在游戏内用GM命令查看变量值(@查看变量 U2);3. 确保TAKE命令中神器名称正确,无多余空格。
问题2:全区出现多把神器
排查方向:1. 检查G1变量是否正常联动,怪物死亡前G1是否为0;2. 确认脚本中所有“MOV G1 1”“MOV G1 0”操作无遗漏,神器消失后及时重置G1;3. 避免多人同时击杀怪物,可在脚本中添加怪物死亡冷却(如添加“MOV G2 $TIME”,下次死亡需间隔10秒)。
问题3:神器消失后怪物不刷新
排查方向:1. 检查RESPAWN命令中怪物名称是否正确,参数1代表立即刷新;2. 确认脚本中神器消失后(定时器触发、下线触发)均有RESPAWN命令;3. 若怪物刷新受其他脚本控制,暂时关闭对应脚本,避免冲突。
问题4:30分钟后神器未消失
排查方向:1. 检查定时器编号是否一致,STARTSCTIMER与@OnTimer编号需相同;2. 启用模块4实时校验脚本,弥补定时器失效问题;3. 确认时间戳变量U1获取正常,$TIME命令是否被引擎支持(部分引擎用$SYSTIME)。
六、使用注意事项
1. 脚本部署前备份Qmanage.txt及MonItems对应怪物文件,误改可快速恢复;
2. 测试时用GM号击杀挑战怪物,验证神器掉落、限时、下线清除、怪物刷新全流程,无异常再开放给玩家;
3. 若引擎不支持$TIME、STARTSCTIMER命令,替换为对应兼容命令(如HERO引擎用TIMER代替SCTIMER);
4. 全区唯一逻辑依赖全局变量G1,服务器重启后G1重置为0,怪物会重新掉落神器,属于正常现象。

