-- 新手任务二期 local XUiNewbieSelectGift = XLuaUiManager.Register(XLuaUi, "UiNewbieSelectGift") local CsGetText = CS.XTextManager.GetText function XUiNewbieSelectGift:OnAwake() self:RegisterUiEvents() self.RewardItems = {} end function XUiNewbieSelectGift:OnStart(id, closeCb) self.ItemId = id self.CloseCb = closeCb self.RewardId = XDataCenter.ItemManager.GetSelectGiftRewardId(id) self.GridDatas = {} local rewardItems = XRewardManager.GetRewardList(self.RewardId) for index, data in pairs(rewardItems) do table.insert(self.GridDatas, { Data = data, GridIndex = index }) end local onCreate = function(item, data) item:Refresh(data, false, true, true) item:SetOwnedStatus(XRewardManager.CheckRewardOwn(data.Data.RewardType, data.Data.TemplateId)) end self.GridRewardItem.gameObject:SetActiveEx(false) XUiHelper.CreateTemplates(self, self.RewardItems, self.GridDatas, XUiGridSelectGift.New, self.GridRewardItem.gameObject, self.PanelReward, onCreate) local count = #self.GridDatas local grid for i = 1, count do grid = self.RewardItems[i] if grid then grid:SetClickCallback(function(gridData, tmpGrid) self:SelectRewardGrid(gridData, tmpGrid) end) local gridData = self.GridDatas[i].Data grid:SetClickCallback2(function() self:OpenDetailUi(gridData) end) end end self.SelectGridIndexs = {} self.SelectCount = 0 self.LastSelectGrid = nil local template = XDataCenter.ItemManager.GetItem(id).Template self.SupposedCount = template.SelectCount self.TxtGiftName.text = template.Name self.TxtCanSelectNum.text = CS.XTextManager.GetText("SelectGiftCount", template.SelectCount) self.TxtGfitCount.text = CS.XTextManager.GetText("ItemHaveSelectedCount", self.SelectCount, self.SupposedCount) self.PanelCantConfirm.gameObject:SetActiveEx(self.SelectCount ~= self.SupposedCount) self.BtnConfirm.gameObject:SetActiveEx(self.SelectCount == self.SupposedCount) self:PlayAnimation("AnimSelectGiftEnable") end function XUiNewbieSelectGift:SelectRewardGrid(gridData, grid) local id = gridData.Data.TemplateId if not self.SelectGridIndexs[id] then if self.SupposedCount == 1 then if self.LastSelectGrid then self.SelectGridIndexs = {} self.LastSelectGrid:SetSelectState(false) self.SelectCount = 0 end self.LastSelectGrid = grid else if self.SelectCount >= self.SupposedCount then XUiManager.TipText("SelectGiftMaxCount") return end end self.SelectCount = self.SelectCount + 1 self.SelectGridIndexs[id] = gridData.GridIndex grid:SetSelectState(true) else self.SelectCount = self.SelectCount - 1 self.SelectGridIndexs[id] = nil grid:SetSelectState(false) end self.TxtGfitCount.text = CS.XTextManager.GetText("ItemHaveSelectedCount", self.SelectCount, self.SupposedCount) self.BtnConfirm.gameObject:SetActiveEx(self.SelectCount == self.SupposedCount) self.PanelCantConfirm.gameObject:SetActiveEx(self.SelectCount ~= self.SupposedCount) end function XUiNewbieSelectGift:OpenDetailUi(data) if data.RewardType == XRewardManager.XRewardType.Character then XLuaUiManager.Open("UiCharacterDetail", data.TemplateId) elseif data.RewardType == XRewardManager.XRewardType.Equip then XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipPreview(data.TemplateId) elseif data.RewardType == XRewardManager.XRewardType.Fashion then XLuaUiManager.Open("UiFashionDetail", data.TemplateId, false, nil) elseif data.RewardType == XRewardManager.XRewardType.Partner then local partnerData = {Id = 0,TemplateId = data.TemplateId} local partner = XDataCenter.PartnerManager.CreatePartnerEntityByPartnerData(partnerData, true) XLuaUiManager.Open("UiPartnerPreview", partner) else if XDataCenter.ItemManager.IsWeaponFashion(data.TemplateId) then local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(data.TemplateId) XLuaUiManager.Open("UiFashionDetail", weaponFashionId, true, nil) else XLuaUiManager.Open("UiTip", data, true) end end end function XUiNewbieSelectGift:HandleConfirmClick(itemId ,rewardIds, rewardHasOwnTypeList) local handle = function() local weaponFashionTemplateIdList = {} --如果武器涂装增加了时间,则循环提示 local loopTips loopTips = function() if #weaponFashionTemplateIdList > 0 then local currentRewardTemplateId = table.remove(weaponFashionTemplateIdList) --判断是不是武器涂装类型 local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(currentRewardTemplateId) local weaponFashion = XDataCenter.WeaponFashionManager.GetWeaponFashion(weaponFashionId) local time = XDataCenter.ItemManager.GetWeaponFashionAddTime(currentRewardTemplateId) if weaponFashion and weaponFashion:IsTimeLimit() and time then --此时提示叠加时长信息 local addTime = XUiHelper.GetTime(time, XUiHelper.TimeFormatType.DEFAULT) local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(currentRewardTemplateId) local weaponFashionName = XDataCenter.WeaponFashionManager.GetWeaponFashionName(weaponFashionId) local descStr = CsGetText("WeaponFashionLimitGetAlreadyHaveLimit", weaponFashionName, addTime) XUiManager.TipMsg(descStr, nil, loopTips) end else return end end local callback = function(rewardGoodsList) local resultGoodsList = {} --如果武器涂装增加了时间,则逐条显示遍历 local isNotifyWeaponFashionTransform = XDataCenter.WeaponFashionManager.GetIsNotifyWeaponFashionTransform() weaponFashionTemplateIdList = {} for _, rewardGoodsId in pairs(rewardGoodsList) do if XDataCenter.ItemManager.IsWeaponFashion(rewardGoodsId.TemplateId) and isNotifyWeaponFashionTransform then table.insert(weaponFashionTemplateIdList, rewardGoodsId.TemplateId) else table.insert(resultGoodsList, rewardGoodsId) end end XDataCenter.WeaponFashionManager.ResetIsNotifyWeaponFashionTransform() if #resultGoodsList > 0 then XUiManager.OpenUiObtain(resultGoodsList) end loopTips(weaponFashionTemplateIdList) end XDataCenter.ItemManager.Use(itemId, nil, 1, callback, rewardIds) self:OnBtnBackClick() end local confirmCallback local confirmLoop confirmCallback = function() if #rewardHasOwnTypeList > 0 then if confirmLoop then confirmLoop() end else handle() end end confirmLoop = function() local tab = table.remove(rewardHasOwnTypeList) if XDataCenter.ItemManager.IsWeaponFashion(tab.templateId) then local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(tab.templateId) local time = XDataCenter.ItemManager.GetWeaponFashionAddTime(tab.templateId) local weaponFashion = XDataCenter.WeaponFashionManager.GetWeaponFashion(weaponFashionId) local title = CsGetText("WeaponFashionGetTitleInfo") local msg --判断武器时装是不是永久的 if weaponFashion and weaponFashion:IsTimeLimit() then if not time then msg = CsGetText("WeaponFashionForeverGetAlreadyHaveLimit") else confirmCallback() return end else if not time then msg = CsGetText("WeaponFashionForeverGetAlreadyHaveForever") else msg = CsGetText("WeaponFashionLimitGetAlreadyHaveForever") end end XUiManager.DialogTip( title, msg, XUiManager.DialogType.Normal, nil, confirmCallback ) else local template = XRewardConfigs.GetRewardConfirmTemplate(tab.type) local title = template.Title local msg = template.Content XUiManager.DialogTip( title, msg, XUiManager.DialogType.Normal, nil, confirmCallback ) end end if rewardHasOwnTypeList then table.sort(rewardHasOwnTypeList, function(a, b) local aTemplate = XRewardConfigs.GetRewardConfirmTemplate(a.type) local bTemplate = XRewardConfigs.GetRewardConfirmTemplate(b.type) local aPriority = aTemplate and aTemplate.Priority or 1 local bPriority = bTemplate and bTemplate.Priority or 1 return aPriority > bPriority end) confirmLoop() else handle() end end function XUiNewbieSelectGift:RegisterUiEvents() XUiHelper.RegisterClickEvent(self, self.BtnClose, self.OnBtnBackClick) XUiHelper.RegisterClickEvent(self, self.BtnCloseAllScreen, self.OnBtnBackClick) XUiHelper.RegisterClickEvent(self, self.BtnConfirm, self.OnBtnConfirmClick) XUiHelper.RegisterClickEvent(self, self.BtnClearSelection, self.OnBtnClearSelectionClick) end function XUiNewbieSelectGift:OnBtnBackClick() self:Close() if self.CloseCb then self.CloseCb() end end function XUiNewbieSelectGift:OnBtnConfirmClick() if self.SelectCount ~= self.SupposedCount then return end local rewardHasOwnTypeDic local gridData local rewardIds = {} for _, index in pairs(self.SelectGridIndexs) do table.insert(rewardIds, XRewardManager.GetRewardSubId(self.RewardId, index)) gridData = self.GridDatas[index].Data if XRewardManager.CheckRewardOwn(gridData.RewardType, gridData.TemplateId) then rewardHasOwnTypeDic = rewardHasOwnTypeDic or {} rewardHasOwnTypeDic[gridData.RewardType] = gridData.TemplateId end end local rewardHasOwnTypeList if rewardHasOwnTypeDic then rewardHasOwnTypeList = {} for type, templateId in pairs(rewardHasOwnTypeDic) do local tab = {} tab.type = type tab.templateId = templateId table.insert(rewardHasOwnTypeList, tab) end end self:HandleConfirmClick(self.ItemId, rewardIds, rewardHasOwnTypeList) end function XUiNewbieSelectGift:OnBtnClearSelectionClick() for _, index in pairs(self.SelectGridIndexs)do self:SelectRewardGrid(self.GridDatas[index], self.RewardItems[index]) end self.PanelCantConfirm.gameObject:SetActiveEx(self.SelectCount ~= self.SupposedCount) self.BtnConfirm.gameObject:SetActiveEx(self.SelectCount == self.SupposedCount) end return XUiNewbieSelectGift