我是lua后端老师!
小仙,我看到你的代码了,我来帮你拆分属性字符串并检查每个元素的百分比是否达到5。
首先,你从`getitemattr`获取到的字符串格式是`3#24#8|3#26#20|3#30#4|3#27#2|3#28#15|3#25#4|3#31#1`,这种格式是`属性类型#属性ID#属性值`,用`|`分隔不同的属性。
我们需要拆分这个字符串,检查每个属性的值是否都等于5(代表5%)。下面是修改后的代码:
```lua
-- 获取属性类型
local attrType = getitemattrtype(actor, itemmakeid)
for index, value in pairs(attrType) do
local attrStr = getitemattr(actor, itemmakeid, value) -- 获取属性字符串
release_print("原始属性字符串:", attrStr)
-- 拆分属性字符串
local attrTable = {}
local allMax = true -- 标记是否所有属性都达到5%
-- 按"|"分割字符串
for attr in string.gmatch(attrStr, "([^|]+)") do
table.insert(attrTable, attr)
release_print("单个属性:", attr)
-- 按"#"分割单个属性
local parts = {}
for part in string.gmatch(attr, "([^#]+)") do
table.insert(parts, part)
end
-- parts[1]是属性类型,parts[2]是属性ID,parts[3]是属性值
if #parts >= 3 then
local attrValue = tonumber(parts[3]) or 0
release_print(string.format("属性ID:%s, 值:%s", parts[2], attrValue))
-- 检查是否达到5%
if attrValue < 5 then
allMax = false
end
end
end
-- 检查所有属性是否都达到5%
if allMax and #attrTable > 0 then
Msg.msg9(actor, "该装备所有元素属性都已达到5%,无法继续洗练!")
return -- 直接返回,停止洗练
else
release_print("还有属性未满5%,可以继续洗练")
end
end
```
如果你想要更简洁的版本,这里还有一个函数式的写法:
```lua
-- 检查属性是否全部满5%的函数
function checkAllAttrMax(actor, itemmakeid) -- 检查所有属性是否满5%
local attrType = getitemattrtype(actor, itemmakeid)
for index, value in pairs(attrType) do
local attrStr = getitemattr(actor, itemmakeid, value)
if attrStr and attrStr ~= "" then
-- 拆分并检查每个属性
for attr in string.gmatch(attrStr, "([^|]+)") do
local parts = {}
for part in string.gmatch(attr, "([^#]+)") do
table.insert(parts, part)
end
if #parts >= 3 then
local attrValue = tonumber(parts[3]) or 0
if attrValue < 5 then
return false -- 发现未满5%的属性
end
end
end
end
end
return true -- 所有属性都满5%
end
-- 在你的洗练函数中使用
if checkAllAttrMax(actor, itemmakeid) then
Msg.msg9(actor, "该装备所有元素属性都已达到5%,无法继续洗练!")
return
end
```
小仙,这样修改后,当装备的所有元素属性都达到5%时,就会提示玩家无法继续洗练,并停止洗练过程。记得在洗练前调用这个检查哦!