[@main]
#ACT
; 清空所有OK框(防止残留物品)
DelBoxItem 0 999
DelBoxItem 1 999
DelBoxItem 2 999
#SAY
<Img|img=public/bg_npc_01.png|loadDelay=1|move=0|reset=1|show=0|bg=1>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=546|y=0|nimg=public/1900000510.pn
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-06-04 17:57:25 |
👁️ 阅读: 6
根据课程日志记录,你的脚本存在以下问题:
1. **嵌套#IF结构错误**:在`[@开始合成检测]`段中,多个`#IF`直接嵌套使用,这是不允许的。TXT语法中`#IF`必须与`#ACT`、`#SAY`、`#ELSESAY`、`#ELSEACT`等成对出现,不能嵌套。
2. **BREAK使用位置错误**:`BREAK`命令只能用在循环(WHILE...ENDWHILE)中,不能用在条件判断中。
3. **检测逻辑不完整**:材料检测部分没有正确处理材料为空的情况。
以下是修正后的脚本:
```txt
[@main]
#ACT
; 清空所有OK框(防止残留物品)
DelBoxItem 0 999
DelBoxItem 1 999
DelBoxItem 2 999
#SAY
<Img|img=public/bg_npc_01.png|loadDelay=1|move=0|reset=1|show=0|bg=1>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=546|y=0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit>
请先选择配方:\
<合成斩马刀/@合成配方1> (木剑×3 + 10元宝)\
<合成屠龙刀/@合成配方2> (斩马刀×3 + 50元宝)\
<合成强效金创药/@合成配方3> (鹿茸×3 + 5元宝)\
<合成木剑/@合成配方4> (铁矿×1 铜矿×1 银矿×1 + 5元宝)\
<ITEMBOX|x=74.0|y=98.0|width=70|height=70|boxindex=0|stdmode=*|img=public/icon_zhezhao_02025.png>
<ITEMBOX|x=190.0|y=97.0|width=70|height=70|boxindex=1|stdmode=*|img=public/icon_zhezhao_02025.png>
<ITEMBOX|x=302.0|y=97.0|width=70|height=70|boxindex=2|stdmode=*|img=public/icon_zhezhao_02025.png>
材料1 材料2 材料3\
;===============================================================
; 各配方链接(设置行号后跳转到统一检测)
;===============================================================
[@合成配方1]
#ACT
MOV N$配方行 1
GOTO @开始合成检测
[@合成配方2]
#ACT
MOV N$配方行 2
GOTO @开始合成检测
[@合成配方3]
#ACT
MOV N$配方行 3
GOTO @开始合成检测
[@合成配方4]
#ACT
MOV N$配方行 4
GOTO @开始合成检测
;===============================================================
; 统一合成检测(根据 N$配方行 读取 CSV)
;===============================================================
[@开始合成检测]
#ACT
; 读取配方数据
MOV S$产物 <$cfg_装备合成(<$STR(N$配方行)>_0)>
MOV S$材料1 <$cfg_装备合成(<$STR(N$配方行)>_1)>
MOV N$数量1 <$cfg_装备合成(<$STR(N$配方行)>_2)>
MOV S$材料2 <$cfg_装备合成(<$STR(N$配方行)>_3)>
MOV N$数量2 <$cfg_装备合成(<$STR(N$配方行)>_4)>
MOV S$材料3 <$cfg_装备合成(<$STR(N$配方行)>_5)>
MOV N$数量3 <$cfg_装备合成(<$STR(N$配方行)>_6)>
MOV N$元宝消耗 <$cfg_装备合成(<$STR(N$配方行)>_7)>
; 检测材料1
#IF
NOT EQUAL S$材料1 ""
CheckBoxItemCount 0 <$STR(N$数量1)>
EQUAL <$BOXITEM[0].NAME> <$STR(S$材料1)>
#ACT
GOTO @检测材料2
#ELSEACT
SENDMSG 6 材料1不匹配或数量不足,需要:<$STR(N$数量1)>个<$STR(S$材料1)>
GOTO @main
[@检测材料2]
#IF
NOT EQUAL S$材料2 ""
CheckBoxItemCount 1 <$STR(N$数量2)>
EQUAL <$BOXITEM[1].NAME> <$STR(S$材料2)>
#ACT
GOTO @检测材料3
#ELSEACT
SENDMSG 6 材料2不匹配或数量不足,需要:<$STR(N$数量2)>个<$STR(S$材料2)>
GOTO @main
[@检测材料3]
#IF
NOT EQUAL S$材料3 ""
CheckBoxItemCount 2 <$STR(N$数量3)>
EQUAL <$BOXITEM[2].NAME> <$STR(S$材料3)>
#ACT
GOTO @检测元宝
#ELSEACT
SENDMSG 6 材料3不匹配或数量不足,需要:<$STR(N$数量3)>个<$STR(S$材料3)>
GOTO @main
[@检测元宝]
#IF
LARGE N$元宝消耗 0
CHECKGAMEGOLD > <$STR(N$元宝消耗)>
#ACT
GOTO @执行合成
#ELSEACT
SENDMSG 6 元宝不足,需要:<$STR(N$元宝消耗)>元宝
GOTO @main
; 执行合成
[@执行合成]
#ACT
; 扣除材料
#IF
NOT EQUAL S$材料1 ""
#ACT
DelBoxItem 0 <$STR(N$数量1)>
#IF
NOT EQUAL S$材料2 ""
#ACT
DelBoxItem 1 <$STR(N$数量2)>
#IF
NOT EQUAL S$材料3 ""
#ACT
DelBoxItem 2 <$STR(N$数量3)>
; 扣除元宝
#IF
LARGE N$元宝消耗 0
#ACT
GAMEGOLD - <$STR(N$元宝消耗)>
; 给予产物
GIVE <$STR(S$产物)> 1
SENDMSG 6 恭喜你合成了【<$STR(S$产物)>】!
GOTO @main
```
主要修改:
1. 将嵌套的`#IF`合并为单个`#IF`下的多个条件
2. 移除了`BREAK`命令
3. 统一了错误提示信息
4. 确保每个条件判断都有对应的`#ACT`和`#ELSEACT`
← 返回问答库