if arg2 == 6 then
-- 检测所有变量是否达到500,并为未达标的变量补足属性和扣除材料
local maxLevel = 500
local itemMap = {
["U37"] = {itemName = "封印の情绪I", attId = 202, valuePerLevel = 20},
["U38"] = {itemName = "封印の情绪Il", attId = 1,
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-14 15:28:13 |
👁️ 阅读: 6
我是lua后端老师!
小仙,我看了你的代码,发现你理解错需求了。你是想检查每个变量,如果没到500级就给它升一级,而不是一次性补足到500级,对吧?
让我帮你修改一下代码:
```lua
if arg2 == 6 then
-- 检测变量是否达到500,未达标的变量升一级并扣除材料
local maxLevel = 500
local itemMap = {
["U37"] = {itemName = "封印の情绪I", attId = 202, valuePerLevel = 20},
["U38"] = {itemName = "封印の情绪Il", attId = 1, valuePerLevel = 200},
["U39"] = {itemName = "封印の情绪Ill", attId = 215, valuePerLevel = 100},
["U40"] = {itemName = "封印の情绪IV", attId = 216, valuePerLevel = 50},
["U41"] = {itemName = "封印の情结V", attId = 34, valuePerLevel = 100},
["U42"] = {itemName = "封印の情结VI", attId = 221, valuePerLevel = 0.25}
}
local varList = {"U37", "U38", "U39", "U40", "U41", "U42"}
local hasUpgraded = false
-- 遍历所有变量,检查并升级
for _, varName in ipairs(varList) do
local currentLevel = lib:getvalueb(actor, varName) or 0
-- 如果当前等级小于500,可以升级
if currentLevel < maxLevel then
local itemInfo = itemMap[varName]
-- 检查背包是否有对应材料
if checkitems(actor, itemInfo.itemName .. "#1", 0, 0) then
-- 扣除材料
takes(actor, itemInfo.itemName .. "#1", 0, 0)
-- 更新变量等级(升一级)
local newLevel = currentLevel + 1
lib:setvalueb(actor, varName, newLevel)
-- 增加对应的属性
addattlist(actor, "解忧加成", "+", "3#" .. itemInfo.attId .. "#" .. itemInfo.valuePerLevel)
release_print(varName .. " 升级成功,当前等级:" .. newLevel .. ",消耗1个" .. itemInfo.itemName)
lib:msg(actor, itemInfo.itemName .. " 升级成功,当前等级:" .. newLevel, 1)
hasUpgraded = true
else
lib:msg(actor, itemInfo.itemName .. " 数量不足,无法升级", 1)
end
else
release_print(varName .. " 已满500级,无需操作")
end
end
-- 如果没有进行任何升级操作
if not hasUpgraded then
lib:msg(actor, "所有情绪均已满级或材料不足!", 1)
end
end
```
主要修改点:
1. 去掉了`totalNeedItems`的复杂计算,改为每次只升一级
2. 使用`checkitems`函数检查材料是否足够(每次1个)
3. 使用`takes`函数扣除材料(每次1个)
4. 每次只增加一级的属性值
5. 添加了`hasUpgraded`标志,用于判断是否有升级发生
这样就是逐个检查、逐个升级的逻辑了,每个变量如果没到500级,就消耗1个对应材料升一级。如果还有不明白的地方,随时问我哦!
← 返回问答库