local npc = {}
function npc.Init(baoming, rest1, rest2, rest3)
-- 这里直接拿到 baoming!
npc.baoming = baoming
npc.npcid = rest1
npc.str2 = SL:JsonDecode(rest2)
npc.str3 = rest3
SL:print(npc.baoming)
local jiemian = 1
npc.main(jiemian)
end
-- 独立函数
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-07 19:02:58 |
👁️ 阅读: 0
你的代码有几个错误需要修正:
```lua
local npc = {}
function npc.Init(baoming, rest1, rest2, rest3)
-- 这里直接拿到 baoming!
npc.baoming = baoming
npc.npcid = rest1
npc.str2 = SL:JsonDecode(rest2)
npc.str3 = rest3
SL:print(npc.baoming)
local jiemian = 1
npc.main(jiemian)
end
-- 独立函数:从表中随机取 5 个【不重复】的值
-- 传入:你的表 b
-- 返回:5 个独立的值 a,b,c,d,e
function get5Random(tbl)
-- 复制表,不破坏原数据
local temp = {}
for i = 1, #tbl do
temp[i] = tbl[i]
end
-- 取5个不重复
local res = {}
for i = 1, 5 do
local idx = math.random(#temp)
res[i] = temp[idx]
table.remove(temp, idx)
end
-- 返回 5 个值
return res[1], res[2], res[3], res[4], res[5]
end
function npc.main(par)
local win = GUI:Win_Create("Win_1", 0, 0, 1136, 640)
GUI:LoadExport(win, "bl_main/" .. npc.baoming)
local ui = GUI:ui_delegate(win)
local screenW, screenH = SL:GetMetaValue("SCREEN_WIDTH"), SL:GetMetaValue("SCREEN_HEIGHT") ---获取元变量的宽和高
GUI:setPosition(ui.Image_1,0, 0 )
local pos = GUI:getContentSize(ui.Image_1)
GUI:setPosition(ui.Image_1,(screenW-pos.width)/2, (screenH-pos.height)/2 )
--关闭按钮
GUI:addOnClickEvent(ui.close, function()
GUI:Win_CloseAll()
end)
local id1, id2, id3, id4, id5 = get5Random(npc.str2)
-- 错误1:缺少 end 匹配
for i = 1, 6 do
local pos = GUI:getPosition(ui['ItemShow_' .. i])
GUI:ItemShow_Create(ui.Panel_1, "ItemShow_"..i, pos.x, pos.y, {
index = id1,
count = 1,
look = true,
bgVisible = false,
})
SL:print("=============="..id1)
end -- 这里缺少的 end 补上了
-- 错误2:函数缺少结束的 end
GUI:addOnClickEvent(ui.Button_2, function()
SL:print("点击了"..npc.npcid)
SL:SendLuaNetMsg(10087, npc.npcid, 2, 3, "天天上班要不得")
end)
end -- 这里缺少的 end 补上了
return npc
```
**主要错误:**
1. `npc.main` 函数缺少结束的 `end` 关键字
2. `for` 循环后面缺少 `end` 关键字
**其他问题:**
- 循环中所有 `ItemShow` 都使用了 `id1`,应该是 `id1, id2, id3, id4, id5` 分别对应不同的位置
- 循环从 1 到 6,但只取了 5 个随机值,第6个会重复使用 `id1`
建议把循环改成:
```lua
local ids = {id1, id2, id3, id4, id5}
for i = 1, 5 do
local pos = GUI:getPosition(ui['ItemShow_' .. i])
GUI:ItemShow_Create(ui.Panel_1, "ItemShow_"..i, pos.x, pos.y, {
index = ids[i],
count = 1,
look = true,
bgVisible = false,
})
SL:print("=============="..ids[i])
end
```
这是常见的语法错误,下次写代码时注意检查每个 `function`、`for`、`if` 等语句都要有对应的 `end` 结尾。
← 返回问答库