if p1 == 7 then
local t = DATA.fulihuishou
local page = 1
if p2 == "上" and page > 1 then
page = page - 1
end
if p2 == "下" then
local num = math.floor(#t / 5)
if page + 1 > nu
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-30 14:44:06 |
👁️ 阅读: 14
我是lua后端老师!
修仙者,你这翻页排序的问题,是因为`page`变量在每次翻页时都重新初始化为`1`导致的。
在`if p1 == 7`这个判断内部,你一开始就写`local page = 1`,这样每次打开界面或点击翻页,`page`都会重置为1,所以第二页之后的数据就乱了。
要解决这个问题,你需要**把`page`作为状态保存起来**,比如用玩家的自定义变量(`setplayvar`/`getplayvar`)来记录当前页码。
下面是修改后的关键部分(只展示需要改动的逻辑):
```lua
if p1 == 7 then
local t = DATA.fulihuishou
local page = getplayvar(play, "FULI_HUISHOU_PAGE") -- 先读取保存的页码
if page == "" or page == nil then
page = 1 -- 如果没记录过,默认第一页
else
page = tonumber(page) -- 确保是数字
end
-- 翻页逻辑
if p2 == "上" and page > 1 then
page = page - 1
end
if p2 == "下" then
local totalPage = math.ceil(#t / 5) -- 计算总页数(用向上取整)
if page >= totalPage then
sendmsg(play, 1, '{"Msg":"<font color=\'#ff0000\'>已经是最后一页!!</font>","Type":9}')
else
page = page + 1
end
end
-- 保存当前页码
setplayvar(play, "FULI_HUISHOU_PAGE", tostring(page))
-- 后续界面生成代码(你的sc拼接部分)...
sc = sc .. [[
<Img|x=171.0|y=51.0|esc=0|img=public/button/5fuli/xian1.png>
...(这里是你原来的界面代码,注意page变量已经更新)
]]
-- 计算当前页显示的数据范围
local num_up = (page - 1) * 5 + 1 -- 修正计算公式
local num_down = math.min(page * 5, #t) -- 防止最后一页超出数据总数
release_print(num_up, num_down)
for i = num_up, num_down, 1 do
-- 你的ItemShow和Button生成代码...
end
end
say(play, sc)
```
**主要改动点**:
1. 用`getplayvar`读取之前保存的页码,避免每次重置为1。
2. 翻页后立即用`setplayvar`保存新页码。
3. 计算`num_up`和`num_down`时,公式改为`(page-1)*5+1`到`min(page*5, #t)`,这样第一页是1-5,第二页是6-10,以此类推。
4. 总页数计算用`math.ceil(#t / 5)`(向上取整),这样数据不足一页时也能正确显示。
这样改完,翻页时页码状态就能持续保存,排序就不会乱了。如果还有问题,可以再问我,或者请教浮生梦尊师!
我是lua后端老师!
修仙者,你这翻页排序的问题,是因为`page`变量在每次翻页时都重新初始化为`1`导致的。
在`if p1 == 7`这个判断内部,你一开始就写`local page = 1`,这样每次打开界面或点击翻页,`page`都会重置为1,所以第二页之后的数据就乱了。
要解决这个问题,你需要**把`page`作为状态保存起来**,比如用玩家的自定义变量(`setplayvar`/`getplayvar`)来记录当前页码。
下面是修改后的关键部分(只展示需要改动的逻辑):
```lua
if p1 == 7 then
local t = DATA.fulihuishou
local page = getplayvar(play, "FULI_HUISHOU_PAGE") -- 先读取保存的页码
if page == "" or page == nil then
page = 1 -- 如果没记录过,默认第一页
else
page = tonumber(page) -- 确保是数字
end
-- 翻页逻辑
if p2 == "上" and page > 1 then
page = page - 1
end
if p2 == "下" then
local totalPage = math.ceil(#t / 5) -- 计算总页数(用向上取整)
if page >= totalPage then
sendmsg(play, 1, '{"Msg":"<font color=\'#ff0000\'>已经是最后一页!!</font>","Type":9}')
else
page = page + 1
end
end
-- 保存当前页码
setplayvar(play, "FULI_HUISHOU_PAGE", tostring(page))
-- 后续界面生成代码(你的sc拼接部分)...
sc = sc .. [[
<Img|x=171.0|y=51.0|esc=0|img=public/button/5fuli/xian1.png>
...(这里是你原来的界面代码,注意page变量已经更新)
]]
-- 计算当前页显示的数据范围
local num_up = (page - 1) * 5 + 1 -- 修正计算公式
local num_down = math.min(page * 5, #t) -- 防止最后一页超出数据总数
release_print(num_up, num_down)
for i = num_up, num_down, 1 do
-- 你的ItemShow和Button生成代码...
end
end
say(play, sc)
```
**主要改动点**:
1. 用`getplayvar`读取之前保存的页码,避免每次重置为1。
2. 翻页后立即用`setplayvar`保存新页码。
3. 计算`num_up`和`num_down`时,公式改为`(page-1)*5+1`到`min(page*5, #t)`,这样第一页是1-5,第二页是6-10,以此类推。
4. 总页数计算用`math.ceil(#t / 5)`(向上取整),这样数据不足一页时也能正确显示。
这样改完,翻页时页码状态就能持续保存,排序就不会乱了。如果还有问题,可以再问我,或者请教浮生梦尊师!
← 返回问答库