function Rank.UpdateRankList()
local data = SL:GetMetaValue("RANK_DATA_BY_TYPE", Rank._showDataType)
local myID = SL:GetMetaValue("USER_ID")
if Rank._selectType == 2 then -- 英雄排行榜
myID = SL:GetMetaValue("HERO_ID")
end
loc
你的代码问题在于只在自己匹配时才给 `v.level` 赋值,其他玩家的数据没有处理。循环内的 `if` 判断只给当前玩家赋值,其他玩家数据会缺少 `level` 字段。
修改后的代码:
```lua
function Rank.UpdateRankList()
local data = SL:GetMetaValue("RANK_DATA_BY_TYPE", Rank._showDataType) or {}
local myID = SL:GetMetaValue("USER_ID")
if Rank._selectType == 2 then -- 英雄排行榜
myID = SL:GetMetaValue("HERO_ID")
end
local myInfo = {rank = 0, guildName = ""}
-- 给所有玩家数据添加level字段
for i, v in ipairs(data) do
v.level = SL:GetMetaValue("ACTOR_LEVEL", v.UserID) or 0
if v.UserID and v.UserID == myID then
myInfo.rank = i
myInfo.guildName = v.GuildName
end
end
Rank.UpdateMyInfoPanel(myInfo)
SL:dump(data)
GUI:removeAllChildren(Rank._rankList)
Rank._selectItemRk = nil
for i, v in ipairs(data) do
v.rank = i
GUI:QuickCell_Create(Rank._rankList, "rank" .. i, 0, 0, 370, 33, function(parent)
local cell = Rank.CreateListCell(parent, v)
if not Rank._selectItemRk then
Rank.ResetSelectItem(v)
end
return cell
end)
end
end
```
**修改说明:**
1. 将 `v.level` 赋值移到 `if` 判断之前,确保所有玩家数据都有 `level` 字段
2. 移除了 `break`,因为需要处理完所有玩家数据
3. 给 `data` 添加了 `or {}` 默认值,避免数据为nil时报错
这样修改后,排行榜中所有玩家都会显示对应的等级信息。