传奇装备锁定脚本完整写法:NPC触发、消耗道具、指定部位锁定与解锁全流程配置

来源: 作者: 点击:
传奇装备锁定脚本,一般是指玩家通过NPC对话,把身上或背包里的指定装备标记为“不可掉落”“不可交易”“不可丢弃”,防止PK死亡、打怪死亡、误操作造成装备丢失。完整脚本通常写在 QFunction-0.txt 中,由NPC对话标签触发,再配合物品检测、部位判断、变量记录、锁定状态判断来完成。

不同引擎、不同版本支持的命令名称可能不完全一样。下面脚本以常见 GOM、GeeM2、BLUE 类脚本结构作为参考,实际使用时需要结合当前版本支持的命令进行微调。

一、装备锁定脚本的基本思路

装备锁定脚本一般分为四个部分:

NPC对话入口
玩家点击NPC后,弹出锁定、解锁、查看状态等选项。

条件判断
判断玩家是否拥有锁定道具、装备是否在指定位置、装备是否已经被锁定。

执行锁定或解锁
扣除锁定道具,给装备或角色部位写入锁定状态。

死亡掉落保护
在玩家死亡时判断装备是否被锁定,如果已锁定则不掉落。

常见触发位置:

MirServerMir200EnvirMapQuest_defQFunction-0.txt

如果版本使用其他脚本文件,需要放到对应脚本目录中。

二、NPC对话入口脚本

下面是一个装备锁定NPC的基础对话脚本。

[@装备锁定NPC]
IF
SAY
我可以帮你锁定重要装备。\
锁定后的装备不会轻易掉落。\
请选择你要进行的操作:\
<锁定装备/@锁定装备>\
<解除锁定/@解除锁定>\
<查看锁定状态/@查看锁定状态>\
<关闭/@exit>

[@锁定装备]
IF
SAY
锁定装备需要消耗1个【装备锁定符】。\
请确认你要锁定的装备已经穿戴在身上。\
<开始锁定武器/@锁定武器>\
<返回/@装备锁定NPC>

[@解除锁定]
IF
SAY
解除锁定需要消耗1个【解锁凭证】。\
请确认你要解除的装备已经穿戴在身上。\
<开始解除武器锁定/@解锁武器>\
<返回/@装备锁定NPC>

[@查看锁定状态]
IF
SAY
当前武器锁定状态:<WEAPON_LOCK_STATUS>\
当前衣服锁定状态:<ARMOR_LOCK_STATUS>\
<返回/@装备锁定NPC>

脚本说明:

[@装备锁定NPC]:NPC对话主入口。
<锁定装备/@锁定装备>:点击后跳转到锁定选项。
<解除锁定/@解除锁定>:点击后跳转到解锁选项。
<查看锁定状态/@查看锁定状态>:查看当前装备是否被锁定。
<WEAPON_LOCK_STATUS>、<ARMOR_LOCK_STATUS>:用于显示锁定状态变量。

如果版本不支持自定义变量显示,可以改成普通文字提示。

三、武器锁定完整脚本

下面以武器锁定为例,写一个比较完整的锁定流程。

[@锁定武器]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @检查武器位置
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@检查武器位置]
IF
CHECKWEAPON > 0
ACT
GOTO @执行武器锁定
ELSESAY
你没有穿戴武器,无法锁定。

[@执行武器锁定]
IF
ACT
TAKE 装备锁定符 1
SETFLAG 武器锁定状态 1
SENDMSG 6 你的武器已成功锁定。
SENDMSG 5 武器锁定后,死亡时不会掉落。
BREAK

脚本说明:

CHECKITEM 装备锁定符 1:检测玩家是否拥有1个装备锁定符。
CHECKWEAPON > 0:判断玩家是否穿戴武器。
TAKE 装备锁定符 1:扣除1个装备锁定符。
SETFLAG 武器锁定状态 1:把武器锁定状态设置为1。
SENDMSG 6:显示系统提示。
SENDMSG 5:显示角色自身提示。

如果版本支持物品属性标记,可以把 SETFLAG 替换成对应引擎的物品标记命令。

四、武器解锁完整脚本

解锁脚本和锁定脚本类似,只是判断条件和执行动作相反。

[@解锁武器]
IF
CHECKITEM 解锁凭证 1
ACT
GOTO @检查武器解锁条件
ELSESAY
你没有【解锁凭证】,无法解除锁定。

[@检查武器解锁条件]
IF
CHECKWEAPON > 0
ACT
GOTO @执行武器解锁
ELSESAY
你没有穿戴武器,无法解除锁定。

[@执行武器解锁]
IF
ACT
TAKE 解锁凭证 1
SETFLAG 武器锁定状态 0
SENDMSG 6 你的武器已成功解除锁定。
BREAK

脚本说明:

CHECKITEM 解锁凭证 1:检测玩家是否拥有解锁凭证。
SETFLAG 武器锁定状态 0:把武器锁定状态设置为0,表示未锁定。
解锁后,装备恢复普通掉落规则。

如果版本使用数字变量,可以写成:

SETFLAG 武器锁定状态 0

如果版本使用字符串变量,可以写成:

SETSTR S10 未锁定

具体写法以当前引擎支持的变量命令为准。

五、衣服、头盔、项链、手镯、戒指锁定脚本

如果希望锁定多个部位,可以按部位分别写标签。

衣服锁定脚本

[@锁定衣服]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @执行衣服锁定
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@执行衣服锁定]
IF
CHECKARMOR > 0
ACT
TAKE 装备锁定符 1
SETFLAG 衣服锁定状态 1
SENDMSG 6 你的衣服已成功锁定。
BREAK
ELSESAY
你没有穿戴衣服,无法锁定。

头盔锁定脚本

[@锁定头盔]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @执行头盔锁定
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@执行头盔锁定]
IF
CHECKHELMET > 0
ACT
TAKE 装备锁定符 1
SETFLAG 头盔锁定状态 1
SENDMSG 6 你的头盔已成功锁定。
BREAK
ELSESAY
你没有穿戴头盔,无法锁定。

项链锁定脚本

[@锁定项链]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @执行项链锁定
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@执行项链锁定]
IF
CHECKNECKLACE > 0
ACT
TAKE 装备锁定符 1
SETFLAG 项链锁定状态 1
SENDMSG 6 你的项链已成功锁定。
BREAK
ELSESAY
你没有穿戴项链,无法锁定。

手镯锁定脚本

[@锁定手镯]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @执行手镯锁定
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@执行手镯锁定]
IF
CHECKRING > 0
ACT
TAKE 装备锁定符 1
SETFLAG 手镯锁定状态 1
SENDMSG 6 你的手镯已成功锁定。
BREAK
ELSESAY
你没有穿戴手镯,无法锁定。

戒指锁定脚本

[@锁定戒指]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @执行戒指锁定
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@执行戒指锁定]
IF
CHECKRING > 0
ACT
TAKE 装备锁定符 1
SETFLAG 戒指锁定状态 1
SENDMSG 6 你的戒指已成功锁定。
BREAK
ELSESAY
你没有穿戴戒指,无法锁定。

这些脚本的结构基本相同,区别在于检测部位和写入的锁定状态变量。

六、死亡掉落保护脚本

装备锁定脚本最关键的部分,是玩家死亡时判断装备是否被锁定。

下面是一个死亡掉落保护示例。

[@PlayDie]
IF
CHECKFLAG 武器锁定状态 1
ACT
SENDMSG 6 你的武器已被锁定,本次不会掉落。
ELSEACT
GOTO @正常武器掉落

[@正常武器掉落]
IF
ACT
HumanDropUseItem 0 S11
IF
NOT EQUAL S11
ACT
SENDMSG 0 玩家死亡掉落装备:<STR(S11)>
BREAK

脚本说明:

[@PlayDie]:玩家死亡触发。
CHECKFLAG 武器锁定状态 1:判断武器是否处于锁定状态。
如果武器已锁定,则不执行掉落,只显示保护提示。
如果武器未锁定,则跳转到 @正常武器掉落。
HumanDropUseItem 0 S11:强制掉落武器位置装备,装备名称存入变量 S11。
NOT EQUAL S11:判断变量 S11 是否有值。
SENDMSG 0:向全服发送掉落提示。

如果版本不支持 HumanDropUseItem,可以改成引擎自带的死亡掉落命令。

七、多部位死亡保护脚本

如果希望同时保护武器、衣服、头盔等多个部位,可以分别判断。

[@PlayDie]
IF
CHECKFLAG 武器锁定状态 1
ACT
SENDMSG 6 武器已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 0 S11

IF
CHECKFLAG 衣服锁定状态 1
ACT
SENDMSG 6 衣服已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 1 S12

IF
CHECKFLAG 头盔锁定状态 1
ACT
SENDMSG 6 头盔已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 2 S13

IF
CHECKFLAG 项链锁定状态 1
ACT
SENDMSG 6 项链已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 3 S14

IF
CHECKFLAG 手镯锁定状态 1
ACT
SENDMSG 6 手镯已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 4 S15

IF
CHECKFLAG 戒指锁定状态 1
ACT
SENDMSG 6 戒指已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 5 S16
BREAK

脚本说明:

每个部位单独判断锁定状态。
如果已锁定,则跳过掉落。
如果未锁定,则执行对应部位掉落。
HumanDropUseItem 后面的数字代表装备部位编号。
S11、S12、S13 等变量用于保存掉落装备名称。

部位编号需要根据当前版本确认。常见编号规则如下:
编号范围 对应部位
0到16 武器、衣服、头盔、项链、手镯、戒指等基础部位

17到18 时装衣服、时装武器等外观部位

19到30 生肖或特殊装备部位

如果版本编号不同,需要修改对应数字。

八、锁定状态显示脚本

玩家查看锁定状态时,可以读取对应变量进行显示。

[@查看锁定状态]
IF
CHECKFLAG 武器锁定状态 1
SAY
武器状态:已锁定\
ELSESAY
武器状态:未锁定\

IF
CHECKFLAG 衣服锁定状态 1
SAY
衣服状态:已锁定\
ELSESAY
衣服状态:未锁定\

IF
CHECKFLAG 头盔锁定状态 1
SAY
头盔状态:已锁定\
ELSESAY
头盔状态:未锁定\

IF
CHECKFLAG 项链锁定状态 1
SAY
项链状态:已锁定\
ELSESAY
项链状态:未锁定\

IF
CHECKFLAG 手镯锁定状态 1
SAY
手镯状态:已锁定\
ELSESAY
手镯状态:未锁定\

IF
CHECKFLAG 戒指锁定状态 1
SAY
戒指状态:已锁定\
ELSESAY
戒指状态:未锁定\

如果版本支持字符串变量,也可以写成:

[@查看锁定状态]
IF
SAY
武器状态:<WEAPON_LOCK_STATUS>\
衣服状态:<ARMOR_LOCK_STATUS>\
头盔状态:<HELMET_LOCK_STATUS>\
项链状态:<NECKLACE_LOCK_STATUS>\
手镯状态:<BRACELET_LOCK_STATUS>\
戒指状态:<$RING_LOCK_STATUS>\
<返回/@装备锁定NPC>

这种方式显示更直观,但需要版本支持自定义变量显示。

九、完整装备锁定功能组合脚本

下面是一个比较完整的装备锁定功能脚本,包含NPC入口、锁定、解锁、死亡保护、状态查看。

[@装备锁定NPC]
IF
SAY
我可以帮你锁定重要装备。\
锁定后的装备不会轻易掉落。\
<锁定装备/@锁定装备>\
<解除锁定/@解除锁定>\
<查看锁定状态/@查看锁定状态>\
<关闭/@exit>

[@锁定装备]
IF
SAY
锁定装备需要消耗1个【装备锁定符】。\
请选择要锁定的部位:\
<锁定武器/@锁定武器>\
<锁定衣服/@锁定衣服>\
<锁定头盔/@锁定头盔>\
<锁定项链/@锁定项链>\
<返回/@装备锁定NPC>

[@解除锁定]
IF
SAY
解除锁定需要消耗1个【解锁凭证】。\
请选择要解除的部位:\
<解除武器锁定/@解锁武器>\
<解除衣服锁定/@解锁衣服>\
<解除头盔锁定/@解锁头盔>\
<解除项链锁定/@解锁项链>\
<返回/@装备锁定NPC>

[@查看锁定状态]
IF
SAY
当前装备锁定状态如下:\
<查看武器状态/@查看武器状态>\
<查看衣服状态/@查看衣服状态>\
<查看头盔状态/@查看头盔状态>\
<查看项链状态/@查看项链状态>\
<返回/@装备锁定NPC>

[@锁定武器]
IF
CHECKITEM 装备锁定符 1
ACT
GOTO @检查武器位置
ELSESAY
你没有【装备锁定符】,无法锁定装备。

[@检查武器位置]
IF
CHECKWEAPON > 0
ACT
GOTO @执行武器锁定
ELSESAY
你没有穿戴武器,无法锁定。

[@执行武器锁定]
IF
ACT
TAKE 装备锁定符 1
SETFLAG 武器锁定状态 1
SENDMSG 6 你的武器已成功锁定。
BREAK

[@解锁武器]
IF
CHECKITEM 解锁凭证 1
ACT
GOTO @检查武器解锁条件
ELSESAY
你没有【解锁凭证】,无法解除锁定。

[@检查武器解锁条件]
IF
CHECKWEAPON > 0
ACT
GOTO @执行武器解锁
ELSESAY
你没有穿戴武器,无法解除锁定。

[@执行武器解锁]
IF
ACT
TAKE 解锁凭证 1
SETFLAG 武器锁定状态 0
SENDMSG 6 你的武器已成功解除锁定。
BREAK

[@查看武器状态]
IF
CHECKFLAG 武器锁定状态 1
SAY
武器状态:已锁定\
<返回/@查看锁定状态>
ELSESAY
武器状态:未锁定\
<返回/@查看锁定状态>

[@PlayDie]
IF
CHECKFLAG 武器锁定状态 1
ACT
SENDMSG 6 武器已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 0 S11

IF
CHECKFLAG 衣服锁定状态 1
ACT
SENDMSG 6 衣服已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 1 S12

IF
CHECKFLAG 头盔锁定状态 1
ACT
SENDMSG 6 头盔已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 2 S13

IF
CHECKFLAG 项链锁定状态 1
ACT
SENDMSG 6 项链已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem 3 S14
BREAK

这个脚本的执行流程是:

玩家点击装备锁定NPC。
选择锁定、解锁或查看状态。
锁定前检测是否拥有锁定道具。
检测装备是否穿戴在指定位置。
扣除道具后写入锁定状态。
玩家死亡时判断装备是否锁定。
已锁定装备不掉落,未锁定装备按正常规则掉落。

十、脚本使用注意事项

脚本文件位置
多数版本放在:
MirServerMir200EnvirMapQuest_defQFunction-0.txt

修改后需要重新加载
修改脚本后,通常需要在 M2Server 控制台重新加载脚本。

锁定命令名称可能不同
有的版本使用 SETFLAG,有的版本使用物品属性标记、特殊属性命令或自定义变量。如果脚本不生效,需要查看当前引擎支持的命令。

部位编号需要确认
HumanDropUseItem 后面的部位编号不是所有版本都一样。武器、衣服、头盔、项链、手镯、戒指的编号需要以当前版本为准。

锁定道具名称需要一致
脚本中的 装备锁定符、解锁凭证 必须和物品数据库中的名称一致。

不要重复写 [@PlayDie]
同一个脚本文件中,死亡触发标签一般不要重复写多个,否则可能只执行其中一个。

锁定不等于绝对保护
如果版本有其他掉落机制、强制掉落命令、活动掉落规则,可能需要单独处理。

变量不要冲突
武器锁定状态、衣服锁定状态 等变量名不要和其他功能重复,避免状态被错误覆盖。

传奇装备锁定脚本的核心是:通过NPC对话触发锁定选项,使用 CHECKITEM 检测锁定道具,使用 TAKE 扣除道具,使用 SETFLAG 或对应变量命令记录锁定状态,再在 [@PlayDie] 死亡触发中判断装备是否锁定,已锁定装备跳过掉落,未锁定装备执行正常掉落。不同引擎命令可能不同,实际使用时需要结合版本支持的脚本指令进行调整。