当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇装备锁定脚本完整写法: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
SENDMSG6你的武器已成功锁定。
SENDMSG5武器锁定后,死亡时不会掉落。
BREAK

脚本说明:

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

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

四、武器解锁完整脚本

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

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

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

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

脚本说明:

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

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

SETFLAG武器锁定状态0

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

SETSTRS10未锁定

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

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

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

衣服锁定脚本

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

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

头盔锁定脚本

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

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

项链锁定脚本

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

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

手镯锁定脚本

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

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

戒指锁定脚本

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

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

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

六、死亡掉落保护脚本

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

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

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

[@正常武器掉落]
IF
ACT
HumanDropUseItem0S11
IF
NOTEQUALS11
ACT
SENDMSG0玩家死亡掉落装备:<STR(S11)>
BREAK

脚本说明:

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

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

七、多部位死亡保护脚本

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

[@PlayDie]
IF
CHECKFLAG武器锁定状态1
ACT
SENDMSG6武器已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem0S11

IF
CHECKFLAG衣服锁定状态1
ACT
SENDMSG6衣服已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem1S12

IF
CHECKFLAG头盔锁定状态1
ACT
SENDMSG6头盔已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem2S13

IF
CHECKFLAG项链锁定状态1
ACT
SENDMSG6项链已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem3S14

IF
CHECKFLAG手镯锁定状态1
ACT
SENDMSG6手镯已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem4S15

IF
CHECKFLAG戒指锁定状态1
ACT
SENDMSG6戒指已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem5S16
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
SENDMSG6你的武器已成功锁定。
BREAK

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

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

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

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

[@PlayDie]
IF
CHECKFLAG武器锁定状态1
ACT
SENDMSG6武器已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem0S11

IF
CHECKFLAG衣服锁定状态1
ACT
SENDMSG6衣服已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem1S12

IF
CHECKFLAG头盔锁定状态1
ACT
SENDMSG6头盔已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem2S13

IF
CHECKFLAG项链锁定状态1
ACT
SENDMSG6项链已锁定,本次不会掉落。
ELSEACT
HumanDropUseItem3S14
BREAK

这个脚本的执行流程是:

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

十、脚本使用注意事项

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

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

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

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

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

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

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

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

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