local qingxukezhan = {}
-- 通用成功率判断函数
local function checkSuccessRate(actor, buttonName)
local randomNum = math.random(1, 100)
if randomNum <= 20 then
p(buttonName .. " 抽取成功")
return true
else
p(buttonName .. " 抽取
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-14 16:20:21 |
👁️ 阅读: 6
我是lua后端老师!
小仙,我来帮你看看这段代码的问题。从你的描述来看,问题出在"没有材料也能解忧弹出解忧失败,运气不佳"这个情况。
让我分析一下你的代码逻辑:
```lua
-- 问题分析:
-- 1. 在arg2 == 0到arg2 == 5的各个分支中,你首先检查成功率
-- 2. 如果成功率检查失败,就直接返回"解忧失败,运气不佳"
-- 3. 但是!你是在检查材料之前就进行了成功率判断
-- 以arg2 == 0为例:
if arg2 == 0 then
local rlv1 = lib:getvalueb(actor, "U37") or 0
p("当前白月光等级:" .. rlv1)
-- 这里先检查成功率
if not checkSuccessRate(actor, "白月光") then
lib:msg(actor, "解忧失败,运气不佳", 1)
return -- 直接返回,没有检查材料
end
-- 只有成功率通过才会检查材料
local needItemCount = 1
local currentItemCount = getbagitemcount(actor, "封印の情绪I")
if currentItemCount < needItemCount then
lib:msg(actor, "你还没有封印の情绪I", 1)
else
-- ...后续逻辑
end
return
end
```
**问题所在:**
你的逻辑顺序有问题!应该先检查材料,再检查成功率。现在的流程是:
1. 先检查成功率(20%成功)
2. 如果成功率失败(80%概率),就提示"解忧失败,运气不佳"
3. **根本没有检查玩家是否有材料**
**正确的逻辑顺序应该是:**
1. 先检查是否有材料
2. 如果有材料,再检查成功率
3. 根据成功率决定是否扣除材料和升级
**修改建议:**
```lua
if arg2 == 0 then
local rlv1 = lib:getvalueb(actor, "U37") or 0
release_print("当前白月光等级:" .. rlv1) -- 修正:使用release_print
-- 先检查材料!!!
local needItemCount = 1
local currentItemCount = getbagitemcount(actor, "封印の情绪I")
if currentItemCount < needItemCount then
lib:msg(actor, "你还没有封印の情绪I", 1)
return -- 没有材料直接返回
end
-- 有材料才检查成功率
if not checkSuccessRate(actor, "白月光") then
lib:msg(actor, "解忧失败,运气不佳", 1)
return
end
-- 成功率通过,扣除材料并升级
takeitem(actor, "封印の情绪I", needItemCount)
lib:setvalueb(actor, "U37", rlv1 + 1)
lib:msg(actor, "白月光解忧成功", 1)
-- 增加属性
addattlist(actor, "解忧攻击力", "+", "3#202#20")
return
end
```
**需要修改的地方:**
1. 所有arg2 == 0到arg2 == 5的分支都需要调整逻辑顺序
2. 把`p()`函数改为`release_print()`函数(根据引擎要求)
3. 先检查材料,材料不足直接返回
4. 有材料再检查成功率
**优化建议:**
1. 这种重复的逻辑可以封装成一个函数
2. 使用`release_print()`而不是`p()`来输出调试信息
3. 注意代码的耗时,避免在频繁触发的函数中做复杂计算
小仙,这个错误是典型的逻辑顺序问题。下次写代码时要注意:先验证必要条件(如材料、权限等),再进行随机判断。这样既符合逻辑,也能避免不必要的计算消耗。
如果还有其他问题,随时问我!不懂的也可以问浮生梦尊师哦!
← 返回问答库