[@main]
#SAY
<Img|x=124.0|y=80.0|width=546|height=396|loadDelay=1|show=0|img=public/bg_npc_01.png|bg=1|reset=1|move=0>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=669.0|y=87.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-06-04 20:02:02 |
👁️ 阅读: 14
根据课程日志记录,要实现装备合成保留附加属性,核心思路是:在合成新装备时,先读取旧装备的属性,然后将这些属性附加到新装备上。
目前你的脚本完成了基础的材料消耗和物品给予。要实现属性保留,需要以下步骤:
1. **确定属性来源**:通常,需要保留的属性来自作为“材料”的装备。你的脚本中有材料1、材料2、材料3,需要决定保留哪一件(通常是主材料)的属性。
2. **读取旧装备属性**:根据课程日志,TXT脚本没有直接获取装备所有属性值的命令。你需要通过记录的方式,比如在装备生成时就将关键属性(如极品属性、强化等级等)存入变量或自定义属性组。或者,可以使用`ADDATTLIST`命令配合属性组来管理和转移属性。
3. **将属性附加到新装备**:使用`ADDATTLIST`命令,将读取到的属性字符串附加到新生成的装备上。
**修改建议**:
在`[@执行合成]`段落的`GIVE`命令之前或之后,加入属性转移的逻辑。假设我们保留“材料1”(S$材料1)的属性,并假设其属性已记录在一个名为“OldEquipAttr”的自定义属性组中。
```txt
[@执行合成]
#ACT
; ... (原有的TAKE、GAMEGOLD等消耗命令)
; 假设在放入材料时,已经将其属性记录到属性组“OldEquipAttr”
; 这里将“OldEquipAttr”属性组附加到新给的装备上
ADDATTLIST OldEquipAttr + <$STR(S$属性字符串)> 1
; 参数说明:
; 参数1: 自定义属性组名称 "OldEquipAttr"
; 参数2: 操作符 "+"
; 参数3: 属性字符串 (例如 "3#1#100|3#2#100"),这里需要你从变量中获取
; 参数4: 1 (表示增加固定值,不计算套装属性)
GIVE <$STR(S$产物)> 1
MOV N$合成成功 1
SENDMSG 6 合成成功:<$STR(S$产物)>
; 合成后,可以清除临时属性组
DELATTLIST OldEquipAttr
```
**关键点**:
* **属性字符串**:你需要事先构建好属性字符串(格式如`3#1#100|3#2#100`),这通常需要在玩家放入材料时,通过脚本读取并记录到变量中。课程日志指出,这需要参照`cfg_equip.xls`的属性字段。
* **属性记录时机**:你的脚本目前是点击合成时遍历材料。更合理的流程可能是:玩家通过一个界面(如OK框)放入材料时,就立刻读取并记录该材料的属性到变量或属性组,然后在合成时直接使用。
由于你的脚本当前是直接从背包检测材料,缺少了“放入”并“记录属性”的中间步骤,因此需要调整流程。一个常见的做法是使用`ITEMBOX`组件让玩家放入材料,在`ITEMBOX`的`link`事件中读取物品属性并记录。
**总结**:
你的脚本框架正确,但缺少属性转移的具体实现。你需要补充:
1. 一个让玩家放入材料并触发属性记录的界面(使用`ITEMBOX`)。
2. 在对应事件中,使用`ADDATTLIST`或类似方法记录材料装备的属性到变量。
3. 在合成执行段,将记录的属性通过`ADDATTLIST`附加到新装备。
如果无法确定具体使用哪条命令来读取装备的详细属性值,可能是因为该功能需要更详细的属性记录机制,或者需要结合其他方式(如通过Lua)来实现。根据课程日志,直接获取人物或装备属性值的命令有限。
← 返回问答库