ShaChengZhanShenBangOBJ = {}
ShaChengZhanShenBangOBJ.__cname = "ShaChengZhanShenBangOBJ"
--ShaChengZhanShenBangOBJ.config = ssrRequireCsvCfg("cfg_ShaChengZhanShenBang")
ShaChengZhanShenBangOBJ.cost = { {} }
ShaChengZhanShenBangOBJ.give = {
{ "至尊宝箱", 1 },
{ "钻石宝箱", 1 },
{ "黄金宝箱", 1 },
{ "白银宝箱", 1 },
{ "白银宝箱", 1 },
{ "白银宝箱", 1 },
}
ShaChengZhanShenBangOBJ.eventName = "ShaChengZhanShenBangOBJ"
-------------------------------↓↓↓ UI操作 ↓↓↓---------------------------------------
function ShaChengZhanShenBangOBJ:main(objcfg)
local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, true, true, objcfg.NPCID)
GUI:LoadExport(parent, objcfg.UI_PATH)
self._parent = parent
self.ui = GUI:ui_delegate(parent)
ssrSetWidgetPosition(parent, self.ui.ImageBG, 2, -20)
GUI:addOnClickEvent(self.ui.ImageBG, function()
--ssrPrint("我是防点击穿透")
end)
--关闭按钮
GUI:addOnClickEvent(self.ui.CloseButton, function()
GUI:Win_Close(self._parent)
end)
-- 打开窗口缩放动画
GUI:Timeline_Window1(self._parent)
--网络消息示例
GUI:addOnClickEvent(self.ui.Button_1, function()
ssrMessage:sendmsg(ssrNetMsgCfg.ShaChengZhanShenBang_Request)
end)
self:UpdateUI()
end
function ShaChengZhanShenBangOBJ:UpdateUI()
local gongshaData = Player:getServerVar("A1")
local Tdata = SL:JsonDecode(gongshaData)
if not Tdata then
sendmsg9("暂无排名!#249")
end
local gongshaRank = {}
for i, v in pairs(Tdata or {}) do
for key, value in pairs(v) do
table.insert(gongshaRank,
{ name = key,
point = value
}
)
end
end
table.sort(gongshaRank, function(a, b)
return a.point > b.point
end)
-- 限制排行榜显示数量,最多显示前6名
-- 如果排行榜数据超过6条记录,则删除多余的记录
if #gongshaRank > 6 then
-- 从数组末尾开始,逆序删除第7名及以后的所有记录
-- 循环从数组长度开始,到第7个位置结束,步长为-1
for i = #gongshaRank, 7, -1 do
table.remove(gongshaRank, i) -- 移除指定索引位置的元素
end
end
-- 遍历处理后的排行榜数据,为每个排名创建对应的UI显示元素
for i, v in ipairs(gongshaRank) do
-- 为每个排名项创建一个UI容器控件
-- 参数说明:父容器、控件名称、x坐标、y坐标、宽度、高度
local widget = GUI:Widget_Create(self.ui.ListView_1, "widget_" .. i, 0, 0, 670, 46)
-- 加载排行榜单元格的UI模板
GUI:LoadExport(widget, "A/ShaChengZhanShenBang_cell_UI")
-- 获取UI控件的代理对象,用于后续操作UI元素
local ui = GUI:ui_delegate(widget)
-- 设置显示行会名称(Text_1控件显示排名项的名称)
GUI:Text_setString(ui.Text_1, v.name)
-- 设置显示积分数值(Text_1_1控件显示排名项的积分)
GUI:Text_setString(ui.Text_1_1, v.point)
-- 根据排名位置获取对应的奖励物品配置
-- self.give[i] 对应该排名的奖励物品(如至尊宝箱、钻石宝箱等)
local give = { self.give[i] }
-- 在奖励面板中添加物品图标显示
-- 参数:面板容器、物品数据、物品前缀名、显示配置(包含底图资源路径)
ssrAddItemListX(ui.Panel_give, give, "item_", { imgRes = "res/custom/ShaChengZhanShenBang/item.png" })
end
end
--显示左侧排行
-- 显示左侧排行榜的函数
-- @param ui UI界面对象,包含需要操作的UI控件
-- @param gongshaRank 攻沙排行榜数据数组,包含各行会的排名信息
function ShaChengZhanShenBangOBJ:LeftRankShow(ui, gongshaRank)
-- 参数有效性检查:确保排行榜数据和UI对象都存在
if not gongshaRank or not ui then
return -- 如果参数无效,直接返回,避免后续操作出错
end
-- 声明局部变量用于存储当前玩家的排名和积分
local myRank, myPoint
-- 获取当前登录玩家的用户名,用于在排行榜中查找自己的位置
local userName = SL:GetMetaValue("USER_NAME")
-- 清空左侧排行榜列表的所有现有项目,为重新加载数据做准备
GUI:ListView_removeAllItems(ui.ListView_1)
-- 遍历排行榜数据,为每个排名项创建UI显示元素
for i, v in ipairs(gongshaRank) do
-- 检查当前遍历的排名项是否为当前玩家
if v.name == userName then
myRank = i -- 记录当前玩家的排名位置
myPoint = v.point -- 记录当前玩家的积分数值
end
-- 为每个排名项创建一个UI容器控件
-- 参数说明:父容器、控件名称、x坐标、y坐标、宽度(200)、高度(22)
local widget = GUI:Widget_Create(ui.ListView_1, "widget_" .. i, 0, 0, 200, 22)
-- 加载攻沙排名单元格的UI模板
GUI:LoadExport(widget, "A/GongShaRank_cell_UI")
-- 获取UI控件的代理对象,用于操作单元格内的具体UI元素
local left_ui = GUI:ui_delegate(widget)
-- 设置排名序号显示(Text_1控件显示第几名)
GUI:Text_setString(left_ui.Text_1, i)
-- 注释掉的代码:原本用于设置行会名称的静态文本显示
--GUI:Text_setString(left_ui.Text_2, v.name)
-- 创建滚动文本控件来显示行会名称,支持长名称的滚动显示
-- 参数:父容器、控件名、x坐标(46)、y坐标(2)、宽度(100)、高度(16)、颜色、显示文本
local scrollText = GUI:ScrollText_Create(left_ui.Image_1, "scrollText", 46, 2, 100, 16, "#C7BB99", v.name)
-- 为滚动文本添加黑色描边效果,增强文字的可读性
GUI:ScrollText_enableOutline(scrollText, "#000000", 1)
-- 设置积分数值显示(Text_3控件显示该行会的积分)
GUI:Text_setString(left_ui.Text_3, v.point)
end
-- 设置当前玩家的排名显示
-- 如果玩家在排行榜中则显示实际排名,否则显示0
GUI:Text_setString(ui.Text_MyRank, myRank or 0)
-- 设置当前玩家的积分显示
-- 如果玩家在排行榜中则显示实际积分,否则显示"未上榜"
GUI:Text_setString(ui.Text_MyPoint, myPoint or "未上榜")
end
function ShaChengZhanShenBangOBJ:UpdateLeftRank()
if SL:GetMetaValue("KFSTATE") then
return
end
local obj = GUI:Win_FindParent(110)
local left_bg = GUI:getChildByName(obj, "left_bg")
if GUI:Win_IsNotNull(left_bg) then
local ui = GUI:ui_delegate(left_bg)
local gongshaData = Player:getServerVar("A1")
local Tdata = SL:JsonDecode(gongshaData)
local gongshaRank = {}
for i, v in pairs(Tdata or {}) do
for key, value in pairs(v) do
table.insert(gongshaRank,
{ name = key,
point = value
}
)
end
end
table.sort(gongshaRank, function(a, b)
return a.point > b.point
end)
self:LeftRankShow(ui, gongshaRank)
end
end
SL:RegisterLUAEvent(LUA_EVENT_MAP_SIEGEAREA_CHANGE, ShaChengZhanShenBangOBJ.eventName, function(bool)
--如果在跨服里面,不显示数据。
if SL:GetMetaValue("KFSTATE") then
return
end
local obj = GUI:Win_FindParent(110)
if bool then
GUI:removeChildByName(obj, "left_bg")
GUI:LoadExport(obj, "A/GongShaRankUI")
local ui = GUI:ui_delegate(obj)
--先执行一次
ShaChengZhanShenBangOBJ:UpdateLeftRank()
GUI:schedule(ui.left_bg, function()
ShaChengZhanShenBangOBJ:UpdateLeftRank()
end, 3)
else
GUI:removeChildByName(obj, "left_bg")
end
end)
--SL:RegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, ShaChengZhanShenBangOBJ.eventName, function(t)
-- local obj = GUI:Win_FindParent(110)
-- local left_bg = GUI:getChildByName(obj, "left_bg")
-- if GUI:Win_IsNotNull(left_bg) then
-- if t.key == "A1" then
-- local Tdata = SL:JsonDecode(t.value)
-- local gongshaRank = {}
-- for i, v in pairs(Tdata) do
-- for key, value in pairs(v) do
-- table.insert(gongshaRank,
-- { name = key,
-- point = value
-- }
-- )
-- end
-- end
-- table.sort(gongshaRank, function(a, b)
-- return a.point > b.point
-- end)
-- if #gongshaRank > 6 then
-- for i = #gongshaRank, 7, -1 do
-- table.remove(gongshaRank, i)
-- end
-- end
-- for i, v in ipairs(gongshaRank) do
-- SL:dump(i)
-- local widget = GUI:Widget_Create(self.ui.ListView_1, "widget_" .. i, 0, 0, 670, 46)
-- GUI:LoadExport(widget, "A/ShaChengZhanShenBang_cell_UI")
-- local ui = GUI:ui_delegate(widget)
-- GUI:Text_setString(ui.Text_1, v.name)
-- GUI:Text_setString(ui.Text_1_1, v.point)
-- local give = { self.give[i] }
-- ssrAddItemListX(ui.Panel_give, give, "item_", { imgRes = "res/custom/ShaChengZhanShenBang/item.png" })
-- end
--
-- end
-- end
--end)
-------------------------------↓↓↓ 网络消息 ↓↓↓---------------------------------------
function ShaChengZhanShenBangOBJ:SyncResponse(arg1, arg2, arg3, data)
if GUI:GetWindow(nil, self.__cname) then
self:UpdateUI()
end
end
return ShaChengZhanShenBangOBJ