写一个装备合成的脚本
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-20 22:29:42 |
👁️ 阅读: 9
根据课程日志记录,装备合成可以通过两种主要方式实现:使用引擎内置的合成系统,或者通过纯脚本编写。
**一、使用引擎内置合成系统(推荐)**
此方法通过读取 `cfg_makeitems.csv` 配置表实现,前端面板由引擎自动生成。
1. **配置合成表**:在 `..\Data\cfg_makeitems.csv` 文件中配置合成公式,包括所需材料、消耗货币、成功概率(固定100%)及产出道具。
2. **脚本触发**:在 `QFunction-0.txt` 中编写以下触发脚本:
```txt
[@G_CompoundItem10000]
#IF
; 检查材料是否足够(示例读取表中第8、9列的材料需求)
CHECKITEMS <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_8)> 0 1
CHECKITEMS <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_9)> 0 1
; 检查货币是否足够(示例读取表中第10列的货币需求)
CHECKGAMEGOLD > <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_10)>
#ACT
; 扣除材料
TAKE <$CFGMAKEITEMS(<$STR(S$STR(S$系统合成初始行判断)>_8)> 1
TAKE <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_9)> 1
; 扣除货币
GAMEGOLD - <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_10)>
; 给予合成产物(示例读取表中第11列的产出)
GIVE <$CFGMAKEITEMS(<$STR(S$系统合成初始行判断)>_11)> 1
; 通知前端合成成功
SENDACTIONOFJSON 10000 {"action":"event","data":{"recog":0,"param1":<$PARAM1>}}
#ELSESAY
; 若条件不满足,通知前端失败(例如-1为货币不足)
SENDACTIONOFJSON 10000 {"action":"event","data":{"recog":-1,"param1":0}}
```
**注意**:脚本中的 `S$系统合成初始行判断` 变量需要在合成触发前,通过 `<$GetTypeBRow>` 命令根据前端传来的 `<$PARAM1>`(即`cfg_makeitems.csv`中的IDX)计算得出并赋值。
**二、纯脚本合成(自定义逻辑)**
如果合成表系统无法满足复杂需求(如非100%成功率、保留原装备属性),则需要完全通过脚本实现。
1. **基础框架示例**:
```txt
[@main]
#SAY
请放入需要合成的装备。
<Item|id=0>
<Button|text=开始合成|link=@HeCheng>
[@HeCheng]
#IF
; 检查背包指定位置是否有装备
CHECKITEMADDVALUE 0 -1 > 0
; 检查其他合成材料
CHECKITEM 金币 100
; 可以加入成功率检测,例如70%
RANDOMEX 70
#ACT
; 扣除材料
TAKE 金币 100
; 先读取原装备的附加属性(此处需要用到属性组或自定义属性相关命令,具体指令需根据属性存储方式确定)
; 例如:GETITEMADDVALUE 0 -1 S$原有属性
; 然后移除旧装备
TAKE 0 1
; 给予新装备
GIVE 雷霆战甲 1
; 将读取的原有属性加到新装备上(例如使用ADDATTLIST命令)
; ADDATTLIST 合成属性组 + <$STR(S$原有属性)>
SENDMSG 6 合成成功!
#ELSESAY
合成失败,材料不足或运气不佳。
```
**重要提示**:
* 内置合成表的成功率固定为100%。如需非100%成功率或动态概率,必须使用纯脚本方式,并在 `#IF` 下使用 `RANDOMEX` 指令进行概率判定。
* 若需实现“装备合成保留附加属性”,核心思路是:**先通过脚本命令读取原装备的属性信息,存储到变量中;合成后,再将存储的属性附加到新装备上**。具体使用的属性读取和附加命令(如 `GETITEMADDVALUE`, `ADDATTLIST`)需根据您的属性设计来调用。
* 合成系统涉及自定义按钮或面板时,可参考 `OpenWindows`、`AddButton` 等命令。
← 返回问答库