BOSSqueryOBJ = Up_BaseClassOBJ:new() BOSSqueryOBJ.__cname = "BOSSqueryOBJ" -- UI导出文件路径 BOSSqueryOBJ.UIfile = "game/Tongyong/BOSSqueryUI" -- 数据 BOSSqueryOBJ.cfg = {} ---* 窗口创建入口 function BOSSqueryOBJ:main(arg1, arg2, arg3, data) -- 防止重复打开 if GUI:Win_IsNotNull(self.__cname) then GUI:Win_Close(self.__cname) end local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, false) if not parent then return false end -- 加载UI导出文件 GUI:LoadExport(parent, self.UIfile) self._parent = parent self.ui = GUI:ui_delegate(parent) -- 窗口居中 ssrUIManager:OpenAlgin(self) -- 背景图点击关闭 GUI:addOnClickEvent(self.ui.bg_close, function() GUI:Win_Close(self._parent) end) -- 关闭按钮 GUI:addOnClickEvent(self.ui.btn_close, function() GUI:Win_Close(self._parent) end) -- 绑定事件 self:EventBind() -- 接收服务端数据 if data and data.cfg then self.cfg = data.cfg end -- 创建 TableView(在img_bg上,与Title下方对齐) self.dataList = {} self:CreateTableView() -- 构建数据并刷新 self:buildDataList() if self.ui.tableView then GUI:TableView_reloadData(self.ui.tableView) end end ---* 创建 TableView function BOSSqueryOBJ:CreateTableView() -- TableView 已在 UI 文件中创建,此处只配置回调 -- 设置行数 GUI:TableView_setTableViewCellsNumHandler(self.ui.tableView, function() return self.dataList and #self.dataList or 0 end) -- cell创建回调 GUI:TableView_setCellCreateEvent(self.ui.tableView, function(cellParent, idx) local realIdx = (tonumber(idx) or 0) local item = self.dataList[realIdx] if not item then return end self:buildCell(cellParent, item) end) end ---* 构建数据列表 function BOSSqueryOBJ:buildDataList() local cfg = self.cfg or {} self.dataList = {} for i, v in ipairs(cfg) do -- 根据绝对复活时间戳计算剩余秒数 local respawnTime = 0 local reviveStamp = v.reviveStamp or 0 if not v.alive and reviveStamp > 0 then local now = SL:GetValue("SERVER_TIME") or 0 respawnTime = math.max(0, reviveStamp - now) end local item = { idx = i, map = v.map or "", name = v.name or "", level = v.level or "S级", alive = v.alive or false, respawnTime = respawnTime, appr = v.appr or 0, } table.insert(self.dataList, item) end end ---* 构建每行UI function BOSSqueryOBJ:buildCell(cellParent, item) -- cellParent会被复用,先清空 GUI:removeAllChildren(cellParent) -- 行背景图片 (cell宽498, 高56, 垂直居中 y=28) local cell_bg = GUI:Image_Create(cellParent, "cell_bg_" .. item.idx, 0, 0, "res/custom/43/3.png") GUI:setTouchEnabled(cell_bg, true) GUI:setSwallowTouches(cell_bg, false) -- cell点击事件 GUI:addOnClickEvent(cell_bg, function() self.selectedIdx = item.idx GUI:TableView_reloadDataEx(self.ui.tableView) self:showBossModel(item) end) -- 地图名称 local text_map = GUI:Text_Create(cell_bg, "text_map_" .. item.idx, 64, 28, 15, "#CCAA66", item.map) GUI:setAnchorPoint(text_map, 0.50, 0.50) -- BOSS名称 local text_name = GUI:Text_Create(cell_bg, "text_name_" .. item.idx, 190, 28, 16, "#FFFFFF", item.name) GUI:setAnchorPoint(text_name, 0.50, 0.50) GUI:Text_enableOutline(text_name, "#000000", 1) -- 等级标签 local levelColor = "#FF4444" if item.level == "S级" then levelColor = "#FF4444" elseif item.level == "A级" then levelColor = "#FF8800" elseif item.level == "B级" then levelColor = "#FFCC00" end local text_level = GUI:Text_Create(cell_bg, "text_level_" .. item.idx, 380, 28, 15, levelColor, item.level) GUI:setAnchorPoint(text_level, 0.00, 0.50) GUI:Text_enableOutline(text_level, "#000000", 1) -- 刷新状态 local refreshStr, refreshColor if item.alive then refreshStr = "已刷新" refreshColor = "#33FF33" else refreshStr = "未刷新" refreshColor = "#FF4444" end local text_refresh = GUI:Text_Create(cell_bg, "text_refresh_" .. item.idx, 420, 28, 15, refreshColor, refreshStr) GUI:setAnchorPoint(text_refresh, 0.00, 0.50) GUI:Text_enableOutline(text_refresh, "#000000", 1) SL:dump(item.respawnTime) -- 倒计时 local text_countdown = GUI:Text_Create(cell_bg, "text_countdown_" .. item.idx, 276, 28, 15, "#FFCC00", "") GUI:setAnchorPoint(text_countdown, 0.00, 0.50) GUI:Text_enableOutline(text_countdown, "#000000", 1) if not item.alive then local respawn = item.respawnTime or 0 if respawn > 0 then GUI:Text_COUNTDOWN(text_countdown, respawn, nil, 1) end end -- 选中高亮覆盖图 if item.idx == self.selectedIdx then GUI:Image_Create(cell_bg, "cell_select_" .. item.idx, 0, 0, "res/custom/43/4.png") end return cell_bg end ---* 展示BOSS模型 function BOSSqueryOBJ:showBossModel(item) if not self.ui.boss_model_node then return end -- 清除旧模型 GUI:removeAllChildren(self.ui.boss_model_node) local appr = item.appr or 0 if appr <= 0 then return end -- 使用 Effect_Create 展示怪物模型 (effecttype=2=怪物) local model = GUI:Effect_Create( self.ui.boss_model_node, "boss_model", 100, -- x (200宽节点居中) 140, -- y (280高节点居中) 2, -- effecttype: 怪物 appr, -- effectid: 怪物appr 0, -- sex 0, -- act: 待机 3, -- dir 1 -- speed ) GUI:setScale(model, 1.0) end ---* 事件绑定 function BOSSqueryOBJ:EventBind() --关闭窗口 SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname, function(widgetName) self:OnClose(widgetName) end) end --关闭窗口 function BOSSqueryOBJ:OnClose(widgetName) if widgetName == self.__cname then self:UnRegisterEvent() end end ---* 注销事件 function BOSSqueryOBJ:UnRegisterEvent() SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname) end return BOSSqueryOBJ