TaskShowOBJ = Up_BaseClassOBJ:new() TaskShowOBJ.__cname = "TaskShowOBJ" local function getUifile() if hk.getmapid() == "勇者大乱斗" then return "game/TaskShow/daluandou" end return "game/Tongyong/TaskShowUI" end TaskShowOBJ.UIfile = getUifile() TaskShowOBJ.mainLineData = nil local CUSTOMER_WECHAT = "ly8238791" local CUSTOMER_QRCODE = "res/custom/wxcode.png" local CUSTOMER_QRCODE_SIZE = 78 local function canRouteMainLine(data) return data ~= nil and tonumber(data.status or 0) == 0 and not data.finish end local function getShortDesc(data) local status = tonumber(data.status or 0) or 0 if data.finish then return "联系客服:" end if status == 1 then return "任意地图击杀怪物" end return "拜访目标后击杀5只怪" end local function getRewardItems(data) local items = {} for _, item in ipairs(data.rewardItems or {}) do table.insert(items, item) end if #items <= 0 then for _, item in ipairs(data.rewardMoneys or {}) do table.insert(items, item) end end if #items <= 0 and data.rewardText and data.rewardText ~= "" and data.rewardText ~= "无" then for part in string.gmatch(data.rewardText, "[^、,,%s]+") do local name, count = string.match(part, "^(.+)%*(%d+)$") if not name then name, count = string.match(part, "^(.-)(%d+)万$") if name and count then count = tonumber(count) * 10000 end end if not name then name, count = string.match(part, "^(.-)(%d+)$") end if not name and string.find(part, "一本", 1, true) then name = string.gsub(part, "一本", "") count = 1 end if name and name ~= "" then table.insert(items, { name = name, count = tonumber(count) or 1 }) end end end return items end function TaskShowOBJ:createMainLineTouch() if not self.ui or GUI:Win_IsNull(self.ui.TaskShow_Layout) then return end self.ui.MainLineTouch_Layout = GUI:Layout_Create(self.ui.TaskShow_Layout, "MainLineTouch_Layout", 0, 58, 202, 130, false) GUI:setTouchEnabled(self.ui.MainLineTouch_Layout, false) GUI:addOnClickEvent(self.ui.MainLineTouch_Layout, function() local data = self.mainLineData or (MainLineTaskOBJ and MainLineTaskOBJ.data) if canRouteMainLine(data) then ssrMessage:SubLink("MainLineTaskOBJ_route") end end) end function TaskShowOBJ:updateMainLineTouch(data) if self.ui and self.ui.MainLineTouch_Layout and GUI:Win_IsNotNull(self.ui.MainLineTouch_Layout) then GUI:setTouchEnabled(self.ui.MainLineTouch_Layout, canRouteMainLine(data)) end end function TaskShowOBJ:updateMainLineLayout(isFinish) if not self.ui then return end if GUI:Win_IsNotNull(self.ui.TaskTitle_Text) then GUI:setVisible(self.ui.TaskTitle_Text, not isFinish) end if GUI:Win_IsNotNull(self.ui.TaskStatus_Text) then GUI:setVisible(self.ui.TaskStatus_Text, not isFinish) end if GUI:Win_IsNotNull(self.ui.TaskDesc_Text) then GUI:setPosition(self.ui.TaskDesc_Text, 8, isFinish and 158 or 134) end if GUI:Win_IsNotNull(self.ui.TaskProgress_Text) then GUI:setPosition(self.ui.TaskProgress_Text, 8, isFinish and 137 or 104) end if GUI:Win_IsNotNull(self.ui.TaskReward_Text) then GUI:setPosition(self.ui.TaskReward_Text, 8, isFinish and 116 or 75) end if GUI:Win_IsNotNull(self.ui.RewardItems_Layout) then GUI:setPosition(self.ui.RewardItems_Layout, 8, isFinish and 24 or 6) GUI:setContentSize(self.ui.RewardItems_Layout, 186, isFinish and 84 or 58) end end function TaskShowOBJ:renderCustomerService() if not self.ui or GUI:Win_IsNull(self.ui.RewardItems_Layout) then return end local qrX = 54 local qrY = 2 local CustomerQRCode_Image = GUI:Image_Create(self.ui.RewardItems_Layout, "CustomerQRCode_Image", qrX, qrY, CUSTOMER_QRCODE) if GUI:Win_IsNotNull(CustomerQRCode_Image) then GUI:setIgnoreContentAdaptWithSize(CustomerQRCode_Image, false) GUI:setContentSize(CustomerQRCode_Image, CUSTOMER_QRCODE_SIZE, CUSTOMER_QRCODE_SIZE) end end function TaskShowOBJ:main() local parent = GUI:Win_FindParent(110) if GUI:Win_IsNotNull(parent) then GUI:removeAllChildren(parent) GUI:LoadExport(parent, self.UIfile) self._parent = parent self.ui = GUI:ui_delegate(parent) if self.UIfile == "game/Tongyong/TaskShowUI" then self:createMainLineTouch() self:renderMainLine(self.mainLineData or (MainLineTaskOBJ and MainLineTaskOBJ.data)) ssrMessage:SubLink("MainLineTaskOBJ_query") SL:ScheduleOnce(function() ssrMessage:SubLink("MainLineTaskOBJ_query") end, 0.35) end end end function TaskShowOBJ:syncMainLine(data) self.mainLineData = data if self.UIfile ~= "game/Tongyong/TaskShowUI" then return end if not self.ui or GUI:Win_IsNull(self._parent) then self:main() return end self:renderMainLine(data) end function TaskShowOBJ:renderMainLine(data) if not data or not self.ui then self:updateMainLineTouch(nil) return end self:updateMainLineLayout(data.finish) if GUI:Win_IsNotNull(self.ui.TaskTitle_Text) then GUI:Text_setString(self.ui.TaskTitle_Text, data.title or "[主线]任务") end if GUI:Win_IsNotNull(self.ui.TaskStatus_Text) then GUI:Text_setString(self.ui.TaskStatus_Text, data.statusText or "") end if GUI:Win_IsNotNull(self.ui.TaskDesc_Text) then GUI:Text_setString(self.ui.TaskDesc_Text, getShortDesc(data)) end if GUI:Win_IsNotNull(self.ui.TaskProgress_Text) then local need = tonumber(data.need or 0) or 0 local progress = tonumber(data.progress or 0) or 0 local progressText = "微信:" .. CUSTOMER_WECHAT if not data.finish then progressText = need > 0 and string.format("进度:%d/%d", progress, need) or "进度:已完成" end GUI:Text_setString(self.ui.TaskProgress_Text, progressText) end if GUI:Win_IsNotNull(self.ui.TaskReward_Text) then GUI:Text_setString(self.ui.TaskReward_Text, data.finish and "扫码联系客服:" or "奖励:") end self:updateMainLineTouch(data) if GUI:Win_IsNotNull(self.ui.RewardItems_Layout) then GUI:removeAllChildren(self.ui.RewardItems_Layout) if data.finish then self:renderCustomerService() return end local items = getRewardItems(data) if #items <= 0 then local EmptyReward_Text = GUI:Text_Create(self.ui.RewardItems_Layout, "EmptyReward_Text", 0, 24, 12, "#ffd36a", "无") GUI:setAnchorPoint(EmptyReward_Text, 0.00, 0.50) GUI:Text_enableOutline(EmptyReward_Text, "#000000", 1) return end local rewardShowList = {} for _, item in ipairs(items) do local name = item.name or item[1] if name then table.insert(rewardShowList, { name, tonumber(item.count or item[2]) or 1 }) end end if #rewardShowList <= 0 then local EmptyReward_Text = GUI:Text_Create(self.ui.RewardItems_Layout, "EmptyReward_Text", 0, 24, 12, "#ffd36a", "无") GUI:setAnchorPoint(EmptyReward_Text, 0.00, 0.50) GUI:Text_enableOutline(EmptyReward_Text, "#000000", 1) return end hk.SettingXhShow(self.ui, self.ui.RewardItems_Layout, rewardShowList, nil, nil, nil, 0, nil, 0, 0.8, false) end end function TaskShowOBJ:upLuanDou(data) if self.UIfile == "game/TaskShow/daluandou" then GUI:ListView_removeAllItems(self.ui.rank_list) for i, v in ipairs(data.Rank or {}) do local list_Layout = string.format("list_Layout_%d", i) self.ui[list_Layout] = GUI:Layout_Create(self.ui.rank_list, list_Layout, 0, 0, 200, 30, false) local list_rank = string.format("list_rank_%d", i) self.ui[list_rank] = GUI:Text_Create(self.ui[list_Layout], list_rank, 27, 16, 16, SL:GetHexColorByStyleId(255 - i), i) GUI:setAnchorPoint(self.ui[list_rank], 0.50, 0.50) local list_name = string.format("list_name_%d", i) self.ui[list_name] = GUI:Text_Create(self.ui[list_Layout], list_name, 101, 16, 16, SL:GetHexColorByStyleId(255 - i), v[2]) GUI:setAnchorPoint(self.ui[list_name], 0.50, 0.50) local list_jifen = string.format("list_jifen_%d", i) self.ui[list_jifen] = GUI:Text_Create(self.ui[list_Layout], list_jifen, 172, 16, 16, SL:GetHexColorByStyleId(255 - i), v[3]) GUI:setAnchorPoint(self.ui[list_jifen], 0.50, 0.50) end GUI:Text_setString(self.ui.self_rank, data.self.Rank) GUI:Text_setString(self.ui.self_num, data.self.jifen) end end local function synData(msgID, arg1, arg2, arg3, jsonstr) local msgData = jsonstr and SL:JsonDecode(jsonstr) or nil if not msgData then return end TaskShowOBJ:upLuanDou(msgData) end SL:RegisterLuaNetMsg(10001, synData) ---* 切换地图 local function TaskShow_reload(data) if data.mapID == "勇者大乱斗" then TaskShowOBJ.UIfile = "game/TaskShow/daluandou" TaskShowOBJ:main() ssrMessage:SubLink("HuodongzhongxinOBJ_luandouGetData", 10001) else TaskShowOBJ.UIfile = "game/Tongyong/TaskShowUI" TaskShowOBJ:main() end end SL:RegisterLUAEvent(LUA_EVENT_MAP_INFO_CHANGE, TaskShowOBJ.__cname, TaskShow_reload) return TaskShowOBJ