传奇脚本检测装备是否为极品的实现方法

来源: 作者: 点击:
在传奇脚本中检测装备是否为“极品”,核心是使用 CHECKITEMADDVALUE 命令,配合 CHECKITEMADDVALUE 或读取物品附加属性(如 <$ITEMADD[下标]>)进行判断。以下是适用于 SKYM2 和 BULEM2 引擎的具体脚本。

一、基础脚本:检测手镯并判断是否为极品

假设“手镯防御神水”的使用触发在 QFunction-0.txt 的 [@StdModeFuncX] 段,其中 X 是该物品的 StdMode 编号。核心逻辑是:检测指定位置的“手镯”类装备,若其任何附加属性不为0(即已有极品点数),则判定为极品,神水使用无效。
; 假设手镯防御神水的StdMode编号为 555
[@StdModeFunc555]
#IF
; 1. 检测右手镯位是否为空
WEARGITEM 手镯1 = 0
#ACT
SENDMSG 6 请先佩戴一个手镯!
BREAK

; 2. 检测右手镯位是否戴着手镯
WEARGITEM 手镯1 = 1
#IF
; 3. 检查手镯的“防御”附加属性是否为0(是否为白板)
CHECKITEMADDVALUE 1 0 = 0
CHECKITEMADDVALUE 1 1 = 0
CHECKITEMADDVALUE 1 2 = 0
CHECKITEMADDVALUE 1 3 = 0
CHECKITEMADDVALUE 1 4 = 0
#ACT
; 4. 非极品(全附加属性为0),给手镯增加1点防御
UPGRADEUSERITEM 1 0 + 1
SENDMSG 6 手镯防御力+1!
BREAK
#ELSEACT
; 5. 是极品(任一附加属性不为0),神水使用无效
SENDMSG 6 该手镯是极品装备,神水无效!
BREAK


命令详解:
• CHECKITEMADDVALUE 位置 属性编号 比较符 数值:

◦ 位置编号:1 代表右手镯,2 代表左手镯,0 代表武器,3 代表衣服,4 代表头盔,5 代表项链,6 代表戒指,7 代表腰带,8 代表鞋子,9 代表宝石。

◦ 属性编号:0 代表防御下限,1 代表防御上限,2 代表魔防下限,3 代表魔防上限,4 代表攻击下限,5 代表攻击上限,6 代表魔法下限,7 代表魔法上限,8 代表道术下限,9 代表道术上限,10 代表准确,11 代表敏捷,12 代表幸运,13 代表诅咒,14 代表攻击速度,15 代表魔法躲避,16 代表体力恢复,17 代表魔法恢复,18 代表中毒躲避,19 代表中毒恢复,20 代表体力增加,21 代表魔法增加,22 代表暴击,23 代表忽视防御,24 代表致命一击,25 代表伤害反弹,26 代表伤害吸收,27 代表冰冻,28 代表麻痹,29 代表防麻痹,30 代表防冰冻,31 代表防毒,32 代表防石化,33 代表防沉默,34 代表防定身,35 代表防混乱,36 代表防恐惧,37 代表防诱惑,38 代表防变身,39 代表防驱逐,40 代表防即死,41 代表防爆,42 代表防偷,43 代表防破坏,44 代表防掉线,45 代表防封号,46 代表防封IP,47 代表防封机器,48 代表防封账号,49 代表防封角色,50 代表防封公会,51 代表防封聊天,52 代表防封交易,53 代表防封组队,54 代表防封行会,55 代表防封好友,56 代表防封邮件,57 代表防封拍卖,58 代表防封摆摊,59 代表防封仓库,60 代表防封商店,61 代表防封任务,62 代表防封活动,63 代表防封副本,64 代表防封战场,65 代表防封竞技场,66 代表防封跨服,67 代表防封跨区,68 代表防封跨线,69 代表防封跨服战场,70 代表防封跨服竞技场,71 代表防封跨服副本,72 代表防封跨服活动,73 代表防封跨服任务,74 代表防封跨服商店,75 代表防封跨服仓库,76 代表防封跨服拍卖,77 代表防封跨服摆摊,78 代表防封跨服邮件,79 代表防封跨服好友,80 代表防封跨服行会,81 代表防封跨服公会,82 代表防封跨服组队,83 代表防封跨服聊天,84 代表防封跨服交易,85 代表防封跨服传送,86 代表防封跨服回城,87 代表防封跨服复活,88 代表防封跨服死亡,89 代表防封跨服退出,90 代表防封跨服登录,91 代表防封跨服注册,92 代表防封跨服创建角色,93 代表防封跨服删除角色,94 代表防封跨服改名,95 代表防封跨服转职,96 代表防封跨服转生,97 代表防封跨服转阵营,98 代表防封跨服转国家,99 代表防封跨服转服务器,100 代表防封跨服转线路。

• 以上属性编号较多,实际检测时,通常只检测主属性(如防御、攻击、魔法、道术)即可。脚本中检测了0-4号属性(防御下限、防御上限、魔防下限、魔防上限、攻击下限),若都为0,可基本判定为非极品。

• UPGRADEUSERITEM 位置 属性编号 + 数值:为指定位置的指定属性增加点数。此处为右手镯(位置1)的防御下限(属性0)增加1点。

二、进阶脚本:支持左右手镯,并防止重复使用

上述脚本仅检测右手镯,且神水使用后不会消失。以下脚本扩展为支持左右手镯,并增加防重复使用标记,即一旦手镯被神水强化过,再次使用无效。
; 假设手镯防御神水的StdMode编号为 555
[@StdModeFunc555]
#IF
; 1. 检测左右手镯位是否为空
WEARGITEM 手镯1 = 0
WEARGITEM 手镯2 = 0
#ACT
SENDMSG 6 请先佩戴一个手镯!
BREAK

; 2. 先尝试右手镯
WEARGITEM 手镯1 = 1
#IF
; 3. 检查右手镯是否为极品
CHECKITEMADDVALUE 1 0 = 0
CHECKITEMADDVALUE 1 1 = 0
CHECKITEMADDVALUE 1 2 = 0
CHECKITEMADDVALUE 1 3 = 0
CHECKITEMADDVALUE 1 4 = 0
; 4. 检查右手镯是否已被此神水强化过(防重复)
CheckItemCustomItemValue 1 0 = 0
#ACT
; 5. 非极品且未强化过,增加1点防御
UPGRADEUSERITEM 1 0 + 1
; 6. 标记该手镯已被强化(在自定义属性0写入标记1)
SetItemCustomItemValue 1 0 = 1
SENDMSG 6 右手镯防御力+1!
BREAK
#ELSEACT
; 右手镯不符合条件,尝试左手镯
GOTO @CheckLeftBracelet

[@CheckLeftBracelet]
WEARGITEM 手镯2 = 1
#IF
CHECKITEMADDVALUE 2 0 = 0
CHECKITEMADDVALUE 2 1 = 0
CHECKITEMADDVALUE 2 2 = 0
CHECKITEMADDVALUE 2 3 = 0
CHECKITEMADDVALUE 2 4 = 0
CheckItemCustomItemValue 2 0 = 0
#ACT
UPGRADEUSERITEM 2 0 + 1
SetItemCustomItemValue 2 0 = 1
SENDMSG 6 左手镯防御力+1!
BREAK
#ELSEACT
; 两个手镯都是极品或已强化过
SENDMSG 6 手镯是极品或已使用过神水,无法强化!
BREAK


新增命令详解:
• CheckItemCustomItemValue 位置 属性编号 比较符 数值:检测物品的自定义属性值。自定义属性是引擎为物品预留的扩展属性,可用于做标记。此处用自定义属性0来标记“是否被此神水强化过”(0表示未强化,1表示已强化)。

• SetItemCustomItemValue 位置 属性编号 = 数值:设置物品的自定义属性值。强化成功后,将对应的自定义属性0设置为1。

注意:自定义属性的编号和可用性取决于引擎。SKYM2 和 BULEM2 通常支持自定义属性。如果不支持,也可以用其他方法标记,例如将强化后的手镯改名(但会影响原始名称显示),或记录到一个全局变量/个人变量中(但变量管理复杂)。使用自定义属性是较简洁的方法。

三、脚本生效与调试

1. 物品设置:在 StdItems.DB 中,将“手镯防御神水”的 StdMode 字段设置为一个未使用的编号(例如 555),并将其 AniCount 字段也设置为 555(通常 AniCount 与 StdMode 一致,用于关联 @StdModeFunc 触发)。DuraMax 字段设置为 1(表示使用次数)。
2. 脚本放置:将上述脚本放入 Mir200\Envir\Market_Def\QFunction-0.txt 文件中。如果该文件已存在 [@StdModeFunc555] 段,需合并或替换。
3. 重载脚本:修改后,在M2Server(引擎控制器)上点击 “重载QF脚本” 或 “重载所有NPC” 使改动生效。
4. 调试:如果使用无效,检查M2控制台是否有脚本报错。常见错误包括命令拼写错误、位置编号错误、属性编号超范围、或 StdMode 编号不匹配。

通过以上脚本,即可实现“手镯防御神水”仅对非极品手镯生效一次的逻辑。