跳转至

随机属性转移系统

本文档介绍随机属性转移系统的全部新增命令,包括执行命令、检测命令和系统变量。

该系统用于实现装备随机属性的转移(从背包装备转移到身上装备)、剔除(删除身上装备的指定随机属性词条)以及转移后自动删除背包材料等功能。


与已有命令的对比

新增命令与已有命令在功能上有关联但定位不同:

新增命令 已有类似命令 区别说明
装备转移随机属性 AddBodyItemLuck AddBodyItemLuck 按属性编号直接添加;新命令从背包装备提取属性转移到身上装备
装备删除随机属性 DelBodyItemRandomAbil DelBodyItemRandomAbil 按属性ID删除;新命令按词条索引(0-3)删除
装备转移并删除 组合命令:转移属性后自动删除背包装备,含保护检查
检测是否穿戴装备 无直接对应 按部位名称检测是否穿戴装备
检测背包格位 CheckBagAttribute CheckBagAttribute 检测背包装备属性值;新命令检测背包格位是否为指定类型装备
检测背包随机属性 CheckAttribute CheckAttribute 按属性编号检测身上装备;新命令检测背包指定格位是否有随机属性
检测转移随机类型 预检查:背包装备的随机属性能否转移到身上装备(类型冲突/数量上限)
检测极品属性可覆盖迁移 预检查:赤月及以上、且源/目标需要职业相同的装备随机属性是否可覆盖迁移到身上同部位(覆盖语义,非追加)
极品属性覆盖迁移 覆盖迁移:源随机属性写入目标并清空源词条,不删装备,不要求源干净

装备穿戴部位参考

以下部位名称在所有命令中通用:

部位名称 编号 部位名称 编号
武器 0 项链 8
衣服 1 左戒指 9
披风 2 右戒指 10
头盔 3 左手镯 11
护肩 4 右手镯 12
护腕 5 勋章 13
腰带 6 玉佩 14
鞋子 7 战具 15

执行命令

装备转移随机属性

功能: 将背包指定格位装备的随机属性转移到身上指定部位的装备上。

格式:

装备转移随机属性 背包格位 部位名称

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 部位名称:装备穿戴部位名称(如 武器、衣服、头盔 等)

使用条件:

  • 身上对应部位必须穿戴有装备
  • 背包指定格位必须有装备且含有随机属性
  • 转移后身上装备的随机属性词条不能超过上限(4条)
  • 不能转移与身上装备已有属性同类型的随机属性

例:

[@转移武器]
#IF
检测背包随机属性 0
#ELSEACT
Break
#ELSESAY
背包装备没有随机属性!

#IF
检测转移随机类型 0 武器
#ACT
装备转移随机属性 0 武器
#SAY
转移完成
#ELSESAY
转移失败:可能超过随机属性词条允许数或有同类型的随机属性


装备删除随机属性

功能: 删除身上指定部位装备的指定索引位置的随机属性词条。

格式:

装备删除随机属性 词条索引 部位名称

参数说明:

  • 词条索引:要删除的随机属性词条位置(从 0 开始,0=第一条,1=第二条,2=第三条,3=第四条)
  • 部位名称:装备穿戴部位名称

说明:

  • DelBodyItemRandomAbil 的区别:DelBodyItemRandomAbil 按随机属性ID删除,本命令按词条索引位置删除
  • 适合配合 <$随机属性N描述(部位)> 变量让玩家选择要剔除的词条

例:

[@武器4]
#SAY
请选择要剔除的随机属性词条<#SO:1><$随机属性1描述(武器)><#SO/><#SO:2><$随机属性2描述(武器)><#SO/><#SO:3><$随机属性3描述(武器)><#SO/><#SO:4><$随机属性4描述(武器)><#SO/>

[@武器4_1]
#ACT
金币数量 - 9000000
装备删除随机属性 0 武器
#SAY
清洗了属性第一条成功!

[@武器4_2]
#ACT
金币数量 - 9000000
装备删除随机属性 1 武器
#SAY
清洗了属性第二条成功!


装备转移并删除

功能: 将背包指定格位装备的随机属性转移到身上指定部位装备后,自动删除背包中的该装备。

格式:

装备转移并删除 背包格位 部位名称

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 部位名称:装备穿戴部位名称

保护检查:

执行前会自动检查背包装备是否具有以下特殊属性,任一命中则中止操作并提示玩家:

检查项 说明
灵魂绑定 装备已灵魂绑定
铸魂次数 装备已铸魂
装备神佑 装备有神佑属性
祈祷次数 装备已祈祷
镶嵌灵石 装备已镶嵌灵石
升级次数 装备已升级
精炼次数 装备已精炼
铭文 装备有铭文
铭文技能 装备有铭文技能
绑定状态 装备已绑定
锁定状态 装备已锁定

注意

被保护的装备无法通过此命令删除,系统会发送提示消息告知玩家具体原因。

例:

[@转移并删除武器]
#IF
检测背包随机属性 0
#ELSEACT
Break
#ELSESAY
背包装备没有随机属性!

#IF
检测转移随机类型 0 武器
#ACT
装备转移并删除 0 武器
#SAY
转移完成,背包材料已自动回收
#ELSESAY
转移失败:可能超过随机属性词条允许数或有同类型的随机属性


极品属性覆盖迁移

功能: 将背包指定格位装备的随机属性覆盖到身上指定部位装备上:目标原有随机属性先清空再写入源词条,源装备保留在背包但随机属性清空。

格式:

极品属性覆盖迁移 背包格位 部位名称

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 部位名称:装备穿戴部位名称(如 左戒指、右戒指、左手镯、右手镯 等)

原子执行步骤:

  1. 再次执行与 检测极品属性可覆盖迁移 相同的硬校验;任一失败则静默中止,不修改任何装备
  2. 清空目标装备的 随机属性 列表
  3. 将源装备的随机属性词条拷贝到目标
  4. 清空源装备的 随机属性 列表(源装备仍留在背包)
  5. 向客户端发送双方 玩家物品变动 封包
  6. 刷新目标装备的属性加成、战力加成,并更新玩家属性与战力

同页同步执行

本命令在 Act 侧复校验失败时会静默中止;调用脚本必须保证 检测极品属性可覆盖迁移、扣费与本命令处于同一次页面遍历且相邻,中间不得插入 goto / DelayGoto / 新页面,否则可能出现扣费成功但未迁移的情况。

与旧转移命令的区别:

命令 目标词条处理 源装备 源须干净 套装门槛 词条数/同类型
装备转移随机属性 追加到目标 保留,词条仍在 受上限与同类型限制
装备转移并删除 追加到目标 删除 (保护检查) 受上限与同类型限制
极品属性覆盖迁移 覆盖目标旧词条 保留,词条清空 双方 ≥ 赤月装备且需要职业相同 不做追加校验

费用与脚本

本命令不含扣费逻辑。典型用法由 NPC 脚本在 #ACT 前用 CheckGameGold >= 80000 校验、执行时 GameGold - 80000(显示 800 元宝 = 存值 80000)。

上锁处理

源或目标装备 是否上锁 时,检测命令会拒绝并发送系统消息提示玩家自行解锁;执行命令静默中止。其他失败原因在检测命令中静默失败(供 #ELSESAY 统一提示)。

例:

;入口标签用数字页([@1]),返回按钮 <#SO:999> 按标签累加规则跳转 [@1_999]
[@1]
#IF
检测是否穿戴装备 左戒指
#ELSEACT
Break
#ELSESAY
请先穿戴左戒指!

#IF
检测背包格位 0 戒指
#ELSEACT
Break
#ELSESAY
请将要迁移的戒指放在背包第1格!

#IF
检测极品属性可覆盖迁移 0 左戒指
#ELSEACT
Break
#ELSESAY
无法迁移:需两边都是赤月及以上,且背包戒指有随机属性;若装备已上锁请先自行解锁!

#IF
CheckGameGold >= 80000
#ELSEACT
Break
#ELSESAY
元宝不足800,无法迁移!

#ACT
GameGold - 80000
极品属性覆盖迁移 0 左戒指
#SAY
迁移成功!目标左戒指已覆盖极品属性,源戒指随机属性已清空。<#SO:999>返回<#SO/>

[@1_999]
#ACT
goto @MAIN


检测命令

检测是否穿戴装备

功能: 检测玩家身上指定部位是否穿戴了装备。

格式:

检测是否穿戴装备 部位名称

参数说明:

  • 部位名称:装备穿戴部位名称(武器、衣服、头盔、披风、护肩、护腕、腰带、鞋子、项链、左戒指、右戒指、左手镯、右手镯、勋章、玉佩、战具)

返回: 条件成立(穿戴了装备)或不成立(未穿戴)

例:

[@检查武器]
#IF
检测是否穿戴装备 武器
#ELSEACT
Break
#ELSESAY
没穿戴武器装备


检测背包格位

功能: 检测背包指定格位的物品是否为指定类型的装备。

格式:

检测背包格位 背包格位 物品使用分类

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 物品使用分类:装备的使用分类名称

物品使用分类对照表:

脚本中名称 分类枚举 编号
上装 衣服 1
背饰 披风 2
腰带 腰带 3
鞋子 鞋子 4
项链 项链 5
戒指 戒指 6
手镯 手镯 7
肩甲 护肩 8
武器 武器 9
护腕 护腕 10
头盔 头盔 11
勋章 勋章 12
玉佩 玉佩 13
战具 战具 14

提示

脚本中使用的名称(如"上装"、"背饰"、"肩甲")会自动映射到对应的物品使用分类枚举。注意这里的分类与"装备穿戴部位"是不同的枚举体系。

例:

;检测背包第一格是否为武器类装备
#IF
检测背包格位 0 武器
#SAY
背包第一格是武器装备
#ELSESAY
背包第一格不是武器或为空


检测背包随机属性

功能: 检测背包指定格位的装备是否拥有随机属性。

格式:

检测背包随机属性 背包格位

参数说明:

  • 背包格位:背包格位索引(0-63)

返回: 条件成立(有随机属性)或不成立(无随机属性或格位为空)

例:

#IF
检测背包随机属性 0
#ELSEACT
Break
#ELSESAY
背包装备没有随机属性!


检测转移随机类型

功能: 预检查背包指定格位装备的随机属性是否可以转移到身上指定部位的装备上。

格式:

检测转移随机类型 背包格位 部位名称

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 部位名称:装备穿戴部位名称

检查内容:

  1. 转移后身上装备的随机属性词条总数不超过上限(4条)
  2. 背包装备的随机属性类型与身上装备已有的随机属性类型不冲突

例:

#IF
检测转移随机类型 0 武器
#ACT
装备转移随机属性 0 武器
#SAY
转移完成
#ELSESAY
转移失败:可能超过随机属性词条允许数或有同类型的随机属性


检测极品属性可覆盖迁移

功能: 预检查背包指定格位装备的随机属性是否可按覆盖语义迁移到身上指定部位装备(赤月极品属性覆盖迁移专用)。

格式:

检测极品属性可覆盖迁移 背包格位 部位名称

参数说明:

  • 背包格位:背包格位索引(0-63)
  • 部位名称:装备穿戴部位名称(如 左戒指、右戒指、左手镯、右手镯 等)

校验条件(全部满足则条件成立):

# 条件 失败时
1 背包格位有 装备数据 静默失败
2 身上对应部位已穿戴装备 静默失败
3 源装备 物品类型 与目标穿戴部位对应分类一致 静默失败
4 装备模板.装备套装 >= 游戏装备套装.赤月装备 静默失败
5 目标 装备模板.装备套装 >= 游戏装备套装.赤月装备 静默失败
6 随机属性.Count >= 1 静默失败
7 源、目标均未上锁(!是否上锁 系统消息提示自行解锁
8 源、目标 需要职业 完全相同(含通用对通用) 系统消息提示职业不一致

校验顺序:上锁(#7)优先于职业(#8)与套装/词条(#4~#6),保证上锁场景始终提示解锁。

不做: 元宝检查(由脚本 CheckGameGold 负责);不做「干净装备」保护(强化/精炼/铭文/神佑/绑定等不阻断);不校验当前玩家职业能否穿戴(只比两件装备职业)。

NOT 模式

NOT 检测极品属性可覆盖迁移 时不发送上锁系统消息,避免语义倒置。

例:

#IF
检测极品属性可覆盖迁移 0 左戒指
CheckGameGold >= 80000
#ACT
GameGold - 80000
极品属性覆盖迁移 0 左戒指
#SAY
迁移成功!
#ELSESAY
无法迁移:需两边都是赤月及以上,且背包戒指有随机属性;若装备已上锁请先自行解锁!


系统变量

<$随机属性数量(部位)>

功能: 获取身上指定部位装备的随机属性词条数量。

格式:

<$随机属性数量(部位名称)>

返回值: 数字(0-4),表示当前装备拥有的随机属性词条数量。

例:

;判断武器是否有随机属性
#IF
检测计算 <$随机属性数量(武器)> == 0
#ACT
Break
#SAY
武器没有随机属性!

;根据属性数量跳转不同标签
#IF
检测计算 <$随机属性数量(武器)> == 4
#ACT
goto @武器4
Break
#IF
检测计算 <$随机属性数量(武器)> == 3
#ACT
goto @武器3
Break


<$随机属性N描述(部位)>

功能: 获取身上指定部位装备第 N 条随机属性的文字描述。

格式:

<$随机属性N描述(部位名称)>

  • N:词条序号(1-4)

返回值: 随机属性的文字描述(如"攻击+5"、"幸运+2"等),无该词条时返回空。

例:

;显示武器的全部随机属性
#SAY
武器随机属性(<$随机属性数量(武器)>条):<BR><$随机属性1描述(武器)><BR><$随机属性2描述(武器)><BR><$随机属性3描述(武器)><BR><$随机属性4描述(武器)>

;让玩家选择要剔除的词条
[@武器3]
#SAY
请选择要剔除的随机属性词条<#SO:1><$随机属性1描述(武器)><#SO/><#SO:2><$随机属性2描述(武器)><#SO/><#SO:3><$随机属性3描述(武器)><#SO/>


完整脚本示例

以下是一个完整的武器随机属性转移和剔除流程:

[@MAIN]
#SAY
随机属性转移和剔除<#SO:1>武器<#SO/>

;==武器入口==
[@1]
#IF
检测是否穿戴装备 武器
#ELSEACT
Break
#ELSESAY
没穿戴武器装备

#IF
检测背包格位 0 武器
#SAY
转移随机属性需要300万金币<BR>
剔除一条随机属性需要900万金币<BR>
注意:随机属性词条最大为4条
<#SO:1>开始转移武器随机属性<#SO/>
<#SO:2>开始剔除武器随机属性<#SO/>
#ELSESAY
背包第一格不是武器或为空<BR>
只能剔除随机属性词条
<#SO:2>开始剔除武器随机属性<#SO/>

;==转移流程==
[@1_1]
#IF
检测背包随机属性 0
#ELSEACT
Break
#ELSESAY
背包装备没有随机属性!

#IF
检测金币 >= 3000000
#ELSEACT
Break
#ELSESAY
金币不足300万,无法转移!

#IF
检测转移随机类型 0 武器
#ACT
金币数量 - 3000000
装备转移随机属性 0 武器
#SAY
转移完成
#ELSESAY
转移失败:超过词条上限或有同类型属性

;==剔除流程==
[@1_2]
#IF
检测计算 <$随机属性数量(武器)> == 0
#ACT
Break
#SAY
武器没有随机属性!

#IF
检测金币 >= 9000000
#ELSEACT
Break
#ELSESAY
金币不足900万,无法剔除!

#IF
检测计算 <$随机属性数量(武器)> == 2
#ACT
goto @武器2
Break
#IF
检测计算 <$随机属性数量(武器)> == 1
#ACT
goto @武器1
Break

;==选择剔除词条==
[@武器2]
#SAY
请选择要剔除的随机属性词条
<#SO:1><$随机属性1描述(武器)><#SO/>
<#SO:2><$随机属性2描述(武器)><#SO/>

[@武器1]
#SAY
请选择要剔除的随机属性词条
<#SO:1><$随机属性1描述(武器)><#SO/>

[@武器2_1]
#ACT
金币数量 - 9000000
装备删除随机属性 0 武器
#SAY
清洗了属性第一条成功!

[@武器2_2]
#ACT
金币数量 - 9000000
装备删除随机属性 1 武器
#SAY
清洗了属性第二条成功!

[@武器1_1]
#ACT
金币数量 - 9000000
装备删除随机属性 0 武器
#SAY
清洗了属性第一条成功!

脚本编写提示

  • 转移前务必先用 检测背包随机属性检测转移随机类型 做前置检查
  • 剔除前用 <$随机属性数量(部位)> 判断词条数,根据数量跳转到对应标签
  • 标签命名遵循累加规则:[@1] + <#SO:1>[@1_1][@1_1] + <#SO:2>[@1_1_2]
  • 装备转移并删除 命令自带保护检查,适合需要自动回收材料的场景