if id*1 == 0 then
release_print(1111)
local b = getitemcustomabil(actor,itemobj)
-- 使用tbl2json的反向函数json2tbl来解析JSON字符串
local data = json2tbl(b) -- 将JSON字符串转换为Lua表
-- 现在data是一个表,我们可以获取abil数组的第一个元素的v值
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-27 18:41:18 |
👁️ 阅读: 8
我是lua后端老师!小仙,你这个问题看起来是代码逻辑上的问题,让我帮你分析一下。
首先,我注意到你的代码结构有些问题。最外层的 `if id*1 == 0 then` 缺少对应的 `end`,而且你后面写的是 `elseif id*1 == 1 then`,但又在最后多了一个 `end`,这会导致语法错误。
让我帮你整理一下代码结构:
```lua
if id*1 == 0 then
release_print(1111)
local b = getitemcustomabil(actor,itemobj)
-- 使用tbl2json的反向函数json2tbl来解析JSON字符串
local data = json2tbl(b) -- 将JSON字符串转换为Lua表
-- 现在data是一个表,我们可以获取abil数组的第一个元素的v值
if data and data.abil and #data.abil > 0 then
local shuxing = {
[4] = { duiying = 31,v= 0 , weizhi = 1},
[6] = { duiying = 32,v= 0 , weizhi = 2},
[8] = { duiying = 33,v= 0 , weizhi = 3},
[1] = { duiying = 34,v= 0 , weizhi = 4},
[2] = { duiying = 35,v= 0 , weizhi = 5},
[10] = { duiying = 36,v= 0 , weizhi = 6},
[12] = { duiying = 37,v= 0 , weizhi = 7},
}
local vValue = data.abil[1].v -- 获取第一个abil的v值
-- 如果你想要v数组里面的具体数值
for i = 1 , 7 do
local innerArray = vValue[i] -- 获取v数组的第一个元素
if innerArray and #innerArray > 0 then
shuxing[(innerArray[2])*1].v = (innerArray[3])*1
end
end
local jiadian = shuxing[4].v+shuxing[6].v+shuxing[8].v+shuxing[1].v/10+shuxing[2].v/10+shuxing[10].v+shuxing[12].v
if jiadian >= config[longxin].shuxingnum then
sendmsg(actor, 1, '{"Msg":"<outline color=\'#000000\' size=\'2\'><font color=\'#ff0000\' size=\'18\'>你没有可分配的属性点!!</font></outline>","Type":9}')
return
end
local str = "4|6|8|1|2|10|12"
local num,xing = ransjstr(str, 0, 3)
local shuzi = 1
if num == '1' or num == 1 or num == '2' or num == 2 then
shuzi = 10
end
local weizhi = shuxing[num*1].weizhi
local attrIndex = num
local attrValue = shuxing[num*1].duiying
changecustomitemtext(actor, itemobj, "[极品洗炼]:", 0)
changecustomitemtextcolor(actor, itemobj, 253, 0)
changecustomitemabil(actor,itemobj,weizhi,0,214,0)
changecustomitemabil(actor,itemobj,weizhi,1,num,0)
changecustomitemabil(actor,itemobj,weizhi,2,attrValue,0)
changecustomitemabil(actor,itemobj,weizhi,3,0,0)
changecustomitemabil(actor,itemobj,weizhi,4,weizhi,0)
changecustomitemvalue(actor,itemobj,weizhi,"+",shuzi,0)
refreshitem(actor,itemobj)
sendmsg(actor, 1, '{"Msg":"<outline color=\'#000000\' size=\'2\'><font color=\'#ff0000\' size=\'18\'>你已经满转了!!</font></outline>","Type":9}')
return
end
elseif id*1 == 1 then
release_print(112221)
-- 这里写id==1时要执行的代码
end
```
小仙,问题可能出在:
1. 代码结构混乱,导致 `id==1` 的部分没有被正确执行
2. 在 `id==0` 的情况下,如果前面的代码执行了 `return`,那么 `id==1` 的部分就不会被执行了
建议你在 `id==1` 的部分也加上一些调试信息,比如:
```lua
elseif id*1 == 1 then
release_print("进入id==1分支")
-- 这里写id==1时要执行的代码
end
```
这样你就能看到是否真的进入了这个分支。另外,检查一下你的 `id` 变量是否真的是数字类型,有时候可能是字符串类型,虽然你用了 `id*1` 来转换,但最好还是确认一下。
如果还有问题,可以告诉我更多上下文信息,比如这个代码是在什么触发器中执行的,`id` 变量是怎么来的,这样我才能更好地帮你解决问题!
我是lua后端老师!小仙,你这个问题看起来是代码逻辑上的问题,让我帮你分析一下。
首先,我注意到你的代码结构有些问题。最外层的 `if id*1 == 0 then` 缺少对应的 `end`,而且你后面写的是 `elseif id*1 == 1 then`,但又在最后多了一个 `end`,这会导致语法错误。
让我帮你整理一下代码结构:
```lua
if id*1 == 0 then
release_print(1111)
local b = getitemcustomabil(actor,itemobj)
-- 使用tbl2json的反向函数json2tbl来解析JSON字符串
local data = json2tbl(b) -- 将JSON字符串转换为Lua表
-- 现在data是一个表,我们可以获取abil数组的第一个元素的v值
if data and data.abil and #data.abil > 0 then
local shuxing = {
[4] = { duiying = 31,v= 0 , weizhi = 1},
[6] = { duiying = 32,v= 0 , weizhi = 2},
[8] = { duiying = 33,v= 0 , weizhi = 3},
[1] = { duiying = 34,v= 0 , weizhi = 4},
[2] = { duiying = 35,v= 0 , weizhi = 5},
[10] = { duiying = 36,v= 0 , weizhi = 6},
[12] = { duiying = 37,v= 0 , weizhi = 7},
}
local vValue = data.abil[1].v -- 获取第一个abil的v值
-- 如果你想要v数组里面的具体数值
for i = 1 , 7 do
local innerArray = vValue[i] -- 获取v数组的第一个元素
if innerArray and #innerArray > 0 then
shuxing[(innerArray[2])*1].v = (innerArray[3])*1
end
end
local jiadian = shuxing[4].v+shuxing[6].v+shuxing[8].v+shuxing[1].v/10+shuxing[2].v/10+shuxing[10].v+shuxing[12].v
if jiadian >= config[longxin].shuxingnum then
sendmsg(actor, 1, '{"Msg":"<outline color=\'#000000\' size=\'2\'><font color=\'#ff0000\' size=\'18\'>你没有可分配的属性点!!</font></outline>","Type":9}')
return
end
local str = "4|6|8|1|2|10|12"
local num,xing = ransjstr(str, 0, 3)
local shuzi = 1
if num == '1' or num == 1 or num == '2' or num == 2 then
shuzi = 10
end
local weizhi = shuxing[num*1].weizhi
local attrIndex = num
local attrValue = shuxing[num*1].duiying
changecustomitemtext(actor, itemobj, "[极品洗炼]:", 0)
changecustomitemtextcolor(actor, itemobj, 253, 0)
changecustomitemabil(actor,itemobj,weizhi,0,214,0)
changecustomitemabil(actor,itemobj,weizhi,1,num,0)
changecustomitemabil(actor,itemobj,weizhi,2,attrValue,0)
changecustomitemabil(actor,itemobj,weizhi,3,0,0)
changecustomitemabil(actor,itemobj,weizhi,4,weizhi,0)
changecustomitemvalue(actor,itemobj,weizhi,"+",shuzi,0)
refreshitem(actor,itemobj)
sendmsg(actor, 1, '{"Msg":"<outline color=\'#000000\' size=\'2\'><font color=\'#ff0000\' size=\'18\'>你已经满转了!!</font></outline>","Type":9}')
return
end
elseif id*1 == 1 then
release_print(112221)
-- 这里写id==1时要执行的代码
end
```
小仙,问题可能出在:
1. 代码结构混乱,导致 `id==1` 的部分没有被正确执行
2. 在 `id==0` 的情况下,如果前面的代码执行了 `return`,那么 `id==1` 的部分就不会被执行了
建议你在 `id==1` 的部分也加上一些调试信息,比如:
```lua
elseif id*1 == 1 then
release_print("进入id==1分支")
-- 这里写id==1时要执行的代码
end
```
这样你就能看到是否真的进入了这个分支。另外,检查一下你的 `id` 变量是否真的是数字类型,有时候可能是字符串类型,虽然你用了 `id*1` 来转换,但最好还是确认一下。
如果还有问题,可以告诉我更多上下文信息,比如这个代码是在什么触发器中执行的,`id` 变量是怎么来的,这样我才能更好地帮你解决问题!
← 返回问答库