local npc = {}
npc.table = {
[1] = {
[1] = { equalshow = { "木剑", "屠龙", "木剑", "木剑", "木剑", "木剑", "木剑" }, condition = "免费", money = 1, btname = "幽冥洞穴" },
[2] = { equalshow = { "木剑", "木剑", "井中月", "木剑", "木剑", "木剑", "木剑" }, condition =
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-20 15:05:35 |
👁️ 阅读: 5
我是lua后端老师!
小仙你好,看了你的代码,问题在于你刚进入NPC时,`playmapmove`函数里显示的二级菜单(也就是四个地图按钮)的掉落物品展示,固定写死了是`npc.table[btpr][1]`的数据(即每个分类下的第一个地图)。
你想要的效果是:点击不同的二级菜单按钮(比如“幽冥洞穴”、“毒蜈洞穴”),下面的“怪物掉落”物品展示和“地图条件”能跟着变化,对吧?
解决方法是在`btmap`函数里,当玩家点击了具体的地图按钮后,你需要重新生成并发送一次界面,这次界面里填充的数据,要来自你点击的那个具体地图项,也就是`npc.table[aa][btmp]`。
这里给你修改后的`btmap`函数作为参考:
```lua
function btmap(actor, btpr, btmappt)
local btmp = tonumber(btmappt)
local aa = tonumber(btpr)
release_print(type(aa), aa, btmp, btmappt)
-- 获取当前选中的一级菜单索引,用于高亮按钮
local select1_btn1 = aa == 1 and 251 or 255
local select1_btn2 = aa == 2 and 251 or 255
local select1_btn3 = aa == 3 and 251 or 255
-- 获取当前点击的具体地图数据
local currentMapData = npc.table[aa][btmp]
-- 重新生成并发送界面,使用当前点击的地图数据填充
local npcmap = string.format([[
<Img|move=0|loadDelay=1|esc=1|reset=1|show=4|img=public/1900000610.png|bg=1>
<Layout|x=771.0|y=50.0|width=80|height=80|link=@exit>
<Button|x=802.0|y=69.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<Text|x=125.0|y=71.0|size=20|color=255|text=传送功能>
<Img|x=188.0|y=101.0|width=593|height=445|esc=0|img=public/1900000605.png|scale9l=30|scale9b=30|scale9r=30|scale9t=30>
<Button|x=67.0|y=119|size=18|nimg=public/1900000660.png|color=%s|text=初级地图|link=@playmapmove,1>
<Button|x=67.0|y=177|size=18|nimg=public/1900000660.png|color=%s|text=中级地图|link=@playmapmove,2>
<Button|x=67.0|y=235|size=18|nimg=public/1900000660.png|color=%s|text=高级地图|link=@playmapmove,3>
<Text|x=445.0|y=265.0|size=20|color=255|text=怪物掉落>
<Button|x=223|y=138|size=18|color=255|nimg=public/1900000662.png|text=%s|link=@btmap,%s,1>
<Button|x=359|y=138|size=18|color=255|nimg=public/1900000662.png|text=%s|link=@btmap,%s,2>
<Button|x=495|y=138|size=18|color=255|nimg=public/1900000662.png|text=%s|link=@btmap,%s,3>
<Button|x=631|y=138|size=18|color=255|nimg=public/1900000662.png|text=%s|link=@btmap,%s,4>
<ItemShow|x=199|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=367|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=283|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=451|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=619|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=535|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=703|y=304.0|width=70|height=70|itemname=%s|itemcount=1|showtips=1|bgtype=1>
<RText|x=427.0|y=403.0|size=18|color=255|text=<地图条件:/FCOLOR=255><%s/FCOLOR=254>>
<Button|x=435.0|y=456.0|color=251|size=18|nimg=public/1900000680.png|text=进入地图>
]], select1_btn1, select1_btn2, select1_btn3,
npc.table[aa][1].btname, aa,
npc.table[aa][2].btname, aa,
npc.table[aa][3].btname, aa,
npc.table[aa][4].btname, aa,
currentMapData.equalshow[1],
currentMapData.equalshow[2],
currentMapData.equalshow[3],
currentMapData.equalshow[4],
currentMapData.equalshow[5],
currentMapData.equalshow[6],
currentMapData.equalshow[7],
currentMapData.condition) -- 这里更新了地图条件显示
say(actor, npcmap)
end
```
核心改动就两点:
1. **获取当前数据**:用 `local currentMapData = npc.table[aa][btmp]` 拿到你点击的那个按钮对应的完整数据表。
2. **更新界面数据**:在重新生成的界面字符串里,下面“怪物掉落”的7个`ItemShow`,它们的`itemname`参数不再写死为第一个地图(`npc.table[aa][1]`)的数据,而是改为 `currentMapData.equalshow[1]` 到 `[7]`。同时,“地图条件”那里也改为了 `currentMapData.condition`。
这样,无论你点击哪个二级地图按钮,下面显示的内容都会实时更新为对应地图的信息了。代码哪里没看懂随时问我,不懂的也可以请教浮生梦尊师!
← 返回问答库