include("QuestDiary/4全局数据/1数据配置.lua")
function main(play,p1,p2)
local p1 = tonumber(p1) or 1
local p2 = tonumber(p2) or 1
-- 任务12
local task_id = getplaydef(play,"U40")
local wancheng = getplaydef(play,"U42")
local sc = [[
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-19 11:51:42 |
👁️ 阅读: 4
你好,我是Lua后端老师!
修仙者,你的代码报错了,错误信息是 `attempt to index field 'item' (a nil value)`,意思是尝试索引一个为 `nil` 的字段 `item`。
问题出在你的 `main` 函数里。你看第58行附近,你写了:
```lua
local target_item = t.equip -- 合成物品名字
local take_item = t.item[1][1] -- 消耗物品名字
local money_count = t.item[2][2] -- 消耗货币数量
```
这里 `t` 是 `DATA.teshuhecheng[p1]`,比如 `p1` 是 1 的时候,`t` 就是你配置里的第一个大表。
但你的遍历逻辑写错了。你用的是 `for i, v in ipairs(t) do`,这意味着在循环里,`v` 才是每一个具体的合成项(例如 `{equip = "青铜斗笠" , item = {{"残破的斗笠" , 10},{"金币" , 1000}}}`)。
然而你在循环内部,却直接用 `t.equip` 和 `t.item[1][1]`,这还是在访问整个分类表,而不是当前循环的 `v`。对于整个分类表 `t` 来说,它并没有 `equip` 和 `item` 这两个字段,所以 `t.item` 就是 `nil`,对 `nil` 进行索引 `[1]` 就报错了。
**正确的写法应该是使用循环变量 `v`:**
```lua
local target_item = v.equip -- 合成物品名字
local take_item = v.item[1][1] -- 消耗物品名字
local money_count = v.item[1][2] -- 消耗货币数量
```
注意,根据你的数据结构,消耗物品数量在 `v.item[1][2]`,消耗货币名称和数量在 `v.item[2][1]` 和 `v.item[2][2]`。你需要根据这个结构调整你的 `money_count` 和显示逻辑。
另外,你的 `button` 函数里访问数据的方式 `t[p2][1]` 是正确的,因为那里 `t` 就是分类表,`p2` 是索引。但在 `main` 函数的显示循环里,必须用 `v` 来访问当前项的数据。
下次写遍历的时候,一定要分清你当前操作的是整个列表还是列表里的单个元素哦!如果还有不明白的,随时可以再来问我,或者请教浮生梦尊师!
你好,我是Lua后端老师!
修仙者,你的代码报错了,错误信息是 `attempt to index field 'item' (a nil value)`,意思是尝试索引一个为 `nil` 的字段 `item`。
问题出在你的 `main` 函数里。你看第58行附近,你写了:
```lua
local target_item = t.equip -- 合成物品名字
local take_item = t.item[1][1] -- 消耗物品名字
local money_count = t.item[2][2] -- 消耗货币数量
```
这里 `t` 是 `DATA.teshuhecheng[p1]`,比如 `p1` 是 1 的时候,`t` 就是你配置里的第一个大表。
但你的遍历逻辑写错了。你用的是 `for i, v in ipairs(t) do`,这意味着在循环里,`v` 才是每一个具体的合成项(例如 `{equip = "青铜斗笠" , item = {{"残破的斗笠" , 10},{"金币" , 1000}}}`)。
然而你在循环内部,却直接用 `t.equip` 和 `t.item[1][1]`,这还是在访问整个分类表,而不是当前循环的 `v`。对于整个分类表 `t` 来说,它并没有 `equip` 和 `item` 这两个字段,所以 `t.item` 就是 `nil`,对 `nil` 进行索引 `[1]` 就报错了。
**正确的写法应该是使用循环变量 `v`:**
```lua
local target_item = v.equip -- 合成物品名字
local take_item = v.item[1][1] -- 消耗物品名字
local money_count = v.item[1][2] -- 消耗货币数量
```
注意,根据你的数据结构,消耗物品数量在 `v.item[1][2]`,消耗货币名称和数量在 `v.item[2][1]` 和 `v.item[2][2]`。你需要根据这个结构调整你的 `money_count` 和显示逻辑。
另外,你的 `button` 函数里访问数据的方式 `t[p2][1]` 是正确的,因为那里 `t` 就是分类表,`p2` 是索引。但在 `main` 函数的显示循环里,必须用 `v` 来访问当前项的数据。
下次写遍历的时候,一定要分清你当前操作的是整个列表还是列表里的单个元素哦!如果还有不明白的,随时可以再来问我,或者请教浮生梦尊师!
← 返回问答库