local UIGuildInvitedInPanel = UIViewClass() function UIGuildInvitedInPanel:OnOpened(context) self:RegistSystemEvent(EventID.UI_Guild_GuildInvitedList,self.UpdateInvitedList) self:RegistSystemEvent(EventID.UI_Guild_GuildSetupRefresh,self.RefreshAutoAccept) self:RegistSystemEvent(EventID.UI_Guild_TargetGuildFull,self.OnCheckTargetGuildFull) self:RegistSystemEvent(EventID.UI_Guild_Leave,self.OnLeaveCurGuild) self:RefreshAutoAccept() self:UpdateInvitedList(CTL.Guild.GetInvitedList()) self:UpdateTimeOut() UIUtils.SetLabelText(self.UICommonPopUp.txt_Title,Const_IDS.IDS_GuildIvite_PageTitle) end function UIGuildInvitedInPanel:RefreshAutoAccept() self.toggle_AutoAccept.isOn = MDL.Guild.GetMyGuildInfo().isAcceptFriendInvite or false end function UIGuildInvitedInPanel:UpdateInvitedList(list) self.LoopScroll_GuildInvitedIneList:ClearCells() if list and #list > 0 then self.curList = {} for i, v in ipairs(list) do local timeout = CTL.Guild.GetInviteTimeoutOffset(v) if v.inviteTime + timeout >= UTL.Time.GetServerTimestamp() then self.LoopScroll_GuildInvitedIneList:AddData(v, 0) table.insert(self.curList, v) end end end end function UIGuildInvitedInPanel:UpdateTimeOut() if #self.curList == 0 then return end local minLeftTime = CTL.Guild.GetMaxInviteCDTimer() + 1 for i, v in ipairs(self.curList) do local timeout = CTL.Guild.GetInviteTimeoutOffset(v) local leftTime = v.inviteTime + timeout - UTL.Time.GetServerTimestamp() if leftTime < minLeftTime then minLeftTime = leftTime self.latestIndex = i end end self:StartRepeatFunc(self.OnUpdateFun, minLeftTime) end function UIGuildInvitedInPanel:OnValueChanged(comp, value) if comp == self.toggle_AutoAccept then local v = nil if value then v = "true" else v = "false" end if MDL.Guild.GetMyGuildInfo().isAcceptFriendInvite ~= value then MDL.Guild.GuildSetupReq(MDL.Guild.GuildUpdateType.FriendInvite,v) end end end function UIGuildInvitedInPanel:OnUpdateFun(deltaTime, timeSinceUpdate) table.remove(self.curList, self.latestIndex) self.LoopScroll_GuildInvitedIneList:RemoveIndex(self.latestIndex - 1) self:StopRepeatFunc(self.OnUpdateFun) self:UpdateTimeOut() end function UIGuildInvitedInPanel:OnBackButtonPressed() self:OnButtonClicked(self.UICommonPopUp.btn_Close) end function UIGuildInvitedInPanel:OnButtonClicked(comp) if comp == self.btn_IgnoreAll then MDL.Guild.GuildInviteHandleReq(nil, true,true) self.LoopScroll_GuildInvitedIneList:ClearCells() self:StopRepeatFunc(self.OnUpdateFun) self.curList = {} elseif comp == self.UICommonPopUp.btn_Close then self:CloseView() end end function UIGuildInvitedInPanel:OnCellInit(scrollRect, index, cellTable, data) cellTable.txt_Info.text = string.FormatByIdsId(Const_IDS.IDS_GuildIvite_InfoContent, data.inviteName, data.guildName) UIUtils.SetActive(cellTable.bg_Famous, CTL.Guild.IsFamousInvite(data)) local timeStr = UIUtils.GetLocalizedTxt(Const_IDS.IDS_TeamUI_Myteam_RecruitingTime) local timeout = CTL.Guild.GetInviteTimeoutOffset(data) timeout = data.inviteTime + timeout - UTL.Time.GetServerTimestamp() if CTL.Guild.NeedShowInviteCDTimer(timeout) then UIUtils.SetActive(cellTable.txt_IgnoreCountTime, true) cellTable.txt_IgnoreCountTime:ResetAndBeginCustomTimer(false, timeout, 0, timeStr, 1) else UIUtils.SetActive(cellTable.txt_IgnoreCountTime, false) end end function UIGuildInvitedInPanel:OnCellClicked(scrollRect, index, cellTable, target, data) if target == cellTable.btn_Refuse then MDL.Guild.GuildInviteHandleReq(data.guildId, false, false) elseif target == cellTable.btn_Accept then self.checkFullBeforeQuitSelf = false MDL.Guild.CheckGuildFullReq(data.guildId) --接受势力邀请前,1.首次判断目标势力是否满员 self.targetGuildId = data.guildId self.targetGuildName = data.guildName end end function UIGuildInvitedInPanel:OnCheckTargetGuildFull(isFull) if isFull then --目标势力已满,接受邀请无效 CTL.Tips.AddTipsMsg(Const_IDS.IDS_Guild_MemberLimitTip) self:CloseView() else --我在势力中的情况。 --有个通用逻辑应该是加入势力会清除所有的势力邀请,且服务器保证:1、智能邀请不会发给同势力成员,2、手动邀请不能发给有势力的人。 --所以我的当前势力肯定不是邀请势力。 if MDL.Guild.IsHasGuild() then if self.checkFullBeforeQuitSelf then self.checkFullBeforeQuitSelf = false --4.最终确认对方势力不满员,则执行退出当前势力 local myGuildId = MDL.Guild.GetMyGuildId() if myGuildId then MDL.Guild.GuildLeaveReq(myGuildId) --在事件回调里处理加入新势力 end else --2.首次判断势力不满员后,则弹窗提示是否要退出当前势力 UTL.MessageBox.ShowOKCancelBox(nil, string.FormatByIdsId(Const_IDS.IDS_Guild_AcceptAutoInivteConfirm, self.targetGuildName), function() --点确定后,走退出势力的通用逻辑 CTL.GuildEscort.GuildEscortQuit(function() local labelIDS = Const_IDS.IDS_GuildQuitConfirm_Label if CTL.WarZone.IsWarZoneOpen() then labelIDS = Const_IDS.IDS_GuildQuitConfirm_Label2 end UTL.MessageBox.ShowOKCancelBox(Const_IDS.IDS_GuildQuitConfirm_Title, labelIDS, function() --3,最终点确定退出势力后,再次拉取一次目标势力是否满员,防止这段弹窗时间目标满了,我自己就白退了 self.checkFullBeforeQuitSelf = true MDL.Guild.CheckGuildFullReq(self.targetGuildId) end, nil) end) end) end else MDL.Guild.GuildInviteHandleReq(self.targetGuildId, true, false) --2.直接接受邀请 end end end function UIGuildInvitedInPanel:OnLeaveCurGuild() if self.targetGuildId then --5.离开当前势力后,立刻加入新目标势力 MDL.Guild.GuildInviteHandleReq(self.targetGuildId, true, false) self.targetGuildId = nil end end return UIGuildInvitedInPanel