[@main]
#IF
#ACT
; 初始化变量
MOV N$总几率 0
MOV N$总纯度 0
MOV N$增加持久值 0
MOV N$附加属性值 0
; 默认升级攻击
MOV N$升级性质 0
#say
<Img|x=107.0|y=129.0|width=675|height=367|move=0|bg=1|reset=1|img=public/bg_npc_01.png|show=0|loadDelay=1>
<Layout|x=545|y=0|width=80|height=80|l
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-05-28 17:41:13 |
👁️ 阅读: 1
根据课程日志记录,你的脚本存在几个逻辑问题:
1. **材料检测不完整**:在`[@开始升级]`中,你只检测了黑铁矿总纯度和铜矿,但没有检测项链、戒指、手镯等材料是否放入。这会导致即使这些框没放材料也能升级。
2. **成功率计算有误**:黑铁矿纯度每10点增加1%成功率,但你的`DIV N$总纯度 10`会直接修改`N$总纯度`的值,导致后续计算持久值时使用的`N$总纯度`已经是除以10后的结果。
3. **材料消耗逻辑**:升级失败时,无论是否破碎都消耗所有材料,但破碎判定后的`#ELSEACT`里又写了一次材料消耗,逻辑重复。
4. **OK框编号不一致**:界面中`<ITEMBOX>`的`boxindex`从0到10,但`[@ItemIntoBox10]`检测铜矿时,`CheckBoxItemCount 10`可能无法正确检测到第10号框(索引为10)是否有物品。
以下是修改后的关键部分:
```txt
[@开始升级]
#IF
NOT CHECKUSEITEM 1
#ACT
messagebox 请先穿戴上武器再来升级!
break
#IF
GETITEMADDVALUE 1 <$STR(N$升级性质)> N$附加属性值 0
LARGE N$附加属性值 6
#ACT
messagebox 武器该属性最大升级点数为7点,已经达到上限!
break
#IF
; 检查所有必需材料是否放入
SMALL N$总纯度 10
#ACT
messagebox 黑铁矿总纯度必须大于等于10,当前总纯度:<$STR(N$总纯度)>
break
#IF
NOT CheckBoxItemCount 5
#ACT
messagebox 请放入项链!
break
#IF
NOT CheckBoxItemCount 6
#ACT
messagebox 请放入戒指!
break
#IF
NOT CheckBoxItemCount 7
#ACT
messagebox 请放入第二个戒指!
break
#IF
NOT CheckBoxItemCount 8
#ACT
messagebox 请放入手镯!
break
#IF
NOT CheckBoxItemCount 9
#ACT
messagebox 请放入第二个手镯!
break
#IF
NOT CheckBoxItemCount 10
#ACT
messagebox 请放入铜矿!
break
#IF
#ACT
; 计算基础成功率(备份总纯度)
MOV N$纯度备份 <$STR(N$总纯度)>
DIV N$纯度备份 10
INC N$总几率 <$STR(N$纯度备份)>
; 铜矿增加10%成功率
INC N$总几率 10
; 计算增加持久(使用原始总纯度)
FORMULATION <$STR(N$总纯度)>*100 N$增加持久值
; 设置升级属性名称
#IF
EQUAL N$升级性质 0
#ACT
MOV S$升级属性名 攻击
#IF
EQUAL N$升级性质 1
#ACT
MOV S$升级属性名 魔法
#IF
EQUAL N$升级性质 2
#ACT
MOV S$升级属性名 道术
SENDMSG 5 武器【<$STR(S$升级属性名)>】升级准备就绪!成功率:<$STR(N$总几率)>%
#IF
RANDOMEX <$STR(N$总几率)> 100
#ACT
SETQUALITY 1 <$STR(N$升级性质)> + 1
ChangeItemDura 1 + <$STR(N$增加持久值)> 1
SENDMSG 0 恭喜玩家<$USERNAME>成功将武器【<$STR(S$升级属性名)>】属性+1!
GOTO @清空材料并刷新
break
#ELSEACT
MOVR N$破碎判定 1 3
#IF
EQUAL N$破碎判定 1
#ACT
SENDMSG 0 很遗憾!玩家<$USERNAME>武器【<$STR(S$升级属性名)>】升级失败,武器已破碎!
takew <$WEAPON> 1 1
GOTO @清空材料并刷新
break
#ELSEACT
SENDMSG 6 武器【<$STR(S$升级属性名)>】升级失败,但武器未破碎。
GOTO @清空材料并刷新
break
[@清空材料并刷新]
#ACT
; 清空所有OK框材料
MOV N$清空索引 0
WHILE N$清空索引 < 11
DELBOXITEM <$STR(N$清空索引)>
INC N$清空索引 1
ENDWHILE
; 重置变量
MOV N$总几率 0
MOV N$总纯度 0
GOTO @main
break
```
主要修改点:
1. 增加了每个材料框的检测,确保所有必需材料都已放入。
2. 使用`N$纯度备份`来计算成功率,避免修改原始纯度值。
3. 使用`FORMULATION`计算持久值。
4. 将材料消耗统一到`[@清空材料并刷新]`段,避免重复代码。
5. 使用`WHILE`循环清空所有OK框。
这样修改后,只有所有材料框都放入正确物品,升级才会进行,并且能正确增加武器属性。
← 返回问答库