-- <* -- @Author: Saber -- @Description: 社团系统 社团合并请求发起界面 -- *> GuildRequestMergeView = GuildRequestMergeView or BaseClass(BaseView) local GuildRequestMergeView = GuildRequestMergeView function GuildRequestMergeView:__init() self.base_file = "guild" self.layout_file = "GuildRequestMergeView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.change_scene_close = true --是否切换场景时关闭(弹出界面使用) self.model = GuildModel:getInstance() self.guild_merge_list = {} -- 社团列表 self.sroll_end_req_evt = false -- 滑动到底时请求协议 self.cur_page = 1 -- 当前加载了多少页的社团数据(搜索用) self.rank_req_flag = 1 -- 当前加载的排行榜开始标识(默认从1开始请求) self.rank_max_num = 100 -- 当前榜单最大数据量 self.total_page = 0 -- 总页数 self.page_size = 20 --向服务器发送一页的个数 self.search_name = "" -- 当前搜索的社团名称 self.search_filter = 0 -- 搜索过滤已满社团 1:使用过滤 self.select_index = 0 -- 选中的社团index self.selected_guild_id = nil -- 选中的社团id self.merge_condition = self.model:GetGuildMergeConditionCfg() -- 自动搜索社团功能参数 self.last_change_input_time = Status.NowTime self.need_search = false self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end function GuildRequestMergeView:Open( ) --self.data = data BaseView.Open(self) end function GuildRequestMergeView:LoadSuccess() local nodes = { "content", "content/merge_btn_con/undo_btn:obj", "content/merge_btn_con/send_merge_btn:obj", "content/merge_btn_con/search_input:tmpInput", "content/merge_btn_con/merge_tip:tmp", "content/merge_scroll:obj", "content/merge_scroll/Viewport/merge_con", "content/empty_node:obj", "content/empty_node/empty_girl:raw", "content/empty_node/empty_tip:tmp", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.empty_girl_raw, GameResPath.GetRoleBg("guild_empty_girl_697_560"), false) local function close_callback() self:Close() end self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmallNoTab, nil, nil, false) self.tabWindowComponent:SetTitleText("社团合并") self.tabWindowComponent:SetBackgroundRes("WindowNew2_bg") end function GuildRequestMergeView:AddEvent() local function click_event(target) if target == self.undo_btn_obj then -- 撤销申请 local merge_info = self.model:GetGuildMergeInfo() if not merge_info then return elseif merge_info.t_guild_id ~= 0 then -- 有合并信息 self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40034) -- 取消合并 end elseif target == self.send_merge_btn_obj then -- 发起合并申请 if self.selected_guild_id then self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40031, self.selected_guild_id) else Message.show("请选择要合并的社团") end end end AddClickEvent(self.undo_btn_obj, click_event) AddClickEvent(self.send_merge_btn_obj, click_event) -- 搜索输入监听 self.search_input_tmpInput.onValueChanged:AddListener(function() self.need_search = true self.last_change_input_time = Status.NowTime end) -- 更新社团列表数据 local function update_guild_merge_list(vo, rank_type) if not rank_type or rank_type == GuildModel.GuildActiveRankType then self:SetMergeGuildListData(vo) end end self:BindEvent(self.model, GuildModel.RefreshGuildListEvt, update_guild_merge_list) self:BindEvent(self.model, GuildModel.UPDATE_GUILDACTIVE_RANK_DATA, update_guild_merge_list) local function update_guild_merge_info() self:UpdateMergeGuildList() end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_MERGE_INFO, update_guild_merge_info) -- 初次加载完协议更新监听,就请求一次社团列表信息 self:RequestMergeGuildData() end function GuildRequestMergeView:UpdateView() self:UpdateMergeTips() self:AutoSearchGuildTimer() end function GuildRequestMergeView:UpdateMergeTips( ) -- 合并界面下方tips local guild_info = self.model:GetGuildBaseInfo() local tips = "" if guild_info then local guild_lv_cfg = Config.Guildlv[guild_info.guild_lv] local cap_num = guild_lv_cfg.member_capacity - guild_info.member_num + guild_info.add_mem_num tips = string.format("发起方可容纳数需大于对方社团总人数(当前社团可容纳%s人)\n合并请求需要对方团长同意,同意后立即合并", guild_lv_cfg.member_capacity + guild_info.add_mem_num >= guild_info.member_num and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK, cap_num < 0 and 0 or cap_num) end self.merge_tip_tmp.text = tips -- 空信息界面tips local empty_tip = "" if self.merge_condition then local guild_info = self.model:GetGuildBaseInfo() local guild_division = guild_info and guild_info.division or 0 local division_lv_list = stringtotable(self.merge_condition.merge_lv) local can_merge = false for k,v in pairs(division_lv_list) do if v == guild_division then can_merge = true end end if not can_merge then -- 这个配置代表这个阶段天数内不开合并,后面需要+1天 if self.merge_condition.id < #Config.Guildmerge then empty_tip = string.format("开服第%s天开放社团合并!", self.merge_condition.max_day + 1) else -- empty_tip = "社团评价为 一般 时才可被合并!" empty_tip = "暂无可合并社团信息" end else empty_tip = "暂无可合并社团信息" end else empty_tip = "暂无可合并社团信息" end self.empty_tip_tmp.text = empty_tip end -- 更新社团列表(仅通过协议返回进行更新) function GuildRequestMergeView:SetMergeGuildListData(vo) if self.search_name == "" then self.rank_max_num = vo.sum self:UpdateMergeGuildList(vo.rank_list) else self.total_page = vo.page_total self.cur_page = vo.page_no self:UpdateMergeGuildList(vo.guild_list) end end function GuildRequestMergeView:UpdateMergeGuildList(new_list) local need_auto_select = TableSize(self.guild_merge_list) == 0 -- 有协议返回的列表则更新,没有的话只做刷新处理 -- 新增开服天数对社团排行的限制 -- local require_active = self.merge_condition and self.merge_condition.active or 0 if new_list and #new_list > 0 then for k, data in pairs(new_list) do -- local active = data.week_labor_last or data.first_value or 0 -- if active <= require_active then -- self.guild_merge_list[#self.guild_merge_list+1] = data -- end local guild_division = data.division local division_lv_list = stringtotable(self.merge_condition.merge_lv) local can_merge = false for k,v in pairs(division_lv_list) do if v == guild_division then can_merge = true end end if can_merge then self.guild_merge_list[#self.guild_merge_list+1] = data end end self.sroll_end_req_evt = false end -- 做一份深拷贝,因为需要做排序但不影响数据原先的顺序 local dc_data = DeepCopy(self.guild_merge_list) -- 在数据中去掉自己的社团信息 local guild_id = RoleManager.Instance.mainRoleInfo.guild_id for k, v in pairs(dc_data) do if v.guild_id == guild_id then table.remove(dc_data, k) break end end -- 筛选出合并信息 local merge_info = self.model:GetGuildMergeInfo() local has_merge_data = false if merge_info and merge_info.t_guild_id and merge_info.t_guild_id ~= 0 then has_merge_data = true local target_guild_vo = nil for k = #dc_data, 1, -1 do if dc_data[k].guild_id == merge_info.t_guild_id then target_guild_vo = table.remove(dc_data, k) break end end -- 将目标合并的社团排到最前面 if target_guild_vo then table.insert(dc_data, 1, target_guild_vo) else local merge_guild_data = { guild_id = merge_info.t_guild_id, guild_name = merge_info.t_guild_name, guild_flag = merge_info.t_guild_flag, guild_lv = merge_info.t_guild_lv, week_labor_last = merge_info.t_week_labor_last, combat_power = merge_info.t_combat_power, role_id = merge_info.role_id, sex = merge_info.sex, name = merge_info.name, vip_flag = merge_info.vip_flag, sup_vip_type = merge_info.sup_vip_type, fighting = merge_info.fighting, member_num = merge_info.t_member_num, add_mem_num = merge_info.t_add_member_num, } table.insert(dc_data, 1, merge_guild_data) end end local empty_data = IsTableEmpty(dc_data) self.empty_node_obj:SetActive(empty_data) self.merge_scroll_obj:SetActive(not empty_data) if empty_data then return end ----------------------- local function callback(index, guild_id) -- 若存在合并信息且点击的社团index不是1的话,需要飘字提醒 if has_merge_data and index ~= 1 then Message.show("等待被申请社团回应中", "fault") end index = has_merge_data and 1 or index guild_id = has_merge_data and dc_data[1].guild_id or guild_id self.select_index = index self.merge_item_creator:IterateItems(function( item, i ) -- 如果有合并信息,只让第一个item保持选中 item:SetSelected(i == self.select_index) end) -- 记录选中的社团id self.selected_guild_id = guild_id end self.merge_item_creator = self.merge_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = dc_data, item_con = self.merge_con, scroll_view = self.merge_scroll, item_class = GuildRequestMergeItem, item_height = 99, start_y = -2, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, reuse_item_num = 7, on_update_item = function(item, i, v) if i == #self.guild_merge_list - 1 and not self.sroll_end_req_evt then if self.search_name ~= "" then -- 搜索 if self.cur_page < self.total_page then -- 调整标志量,请求协议 self.cur_page = self.cur_page + 1 self.sroll_end_req_evt = true self:RequestMergeGuildData() end else -- 按排行查询 if self.rank_req_flag + self.page_size <= self.rank_max_num then -- 调整标志量,请求协议 self.rank_req_flag = self.rank_req_flag + self.page_size self.sroll_end_req_evt = true self:RequestMergeGuildData() end end end item:SetData(v, i, callback) item:SetSelected(i == self.select_index) end, } self.merge_item_creator:UpdateItems(info) -- 首次刷新或有合并社团情况下默认选中第一个item if (need_auto_select or has_merge_data) and #dc_data > 0 then callback(1, dc_data[1].guild_id) end end function GuildRequestMergeView:RequestMergeGuildData() if self.search_name == "" then RankModel:getInstance():Fire(RankModel.REQUEST_CCMD_EVENT, 22102, GuildModel.GuildActiveRankType, self.rank_req_flag, self.page_size) else self.model:Fire(GuildModel.RequestGuildListEvt, self.search_name, self.search_filter, self.page_size, self.cur_page) end end function GuildRequestMergeView:AutoSearchGuildTimer( ) local function auto_search_func() -- 停止社团名称输入0.5秒后请求协议 if self.need_search and Status.NowTime - self.last_change_input_time > 0.5 then self:OnSearchBtnClick() self.need_search = false end end self:ClearAutoSearchGuildTimer() self.auto_search_func_id = GlobalTimerQuest:AddPeriodQuest(auto_search_func, 0.3, -1) end function GuildRequestMergeView:ClearAutoSearchGuildTimer( ) if self.auto_search_func_id then GlobalTimerQuest:CancelQuest(self.auto_search_func_id) self.auto_search_func_id = nil end end -- 更新点击搜索按钮事件 function GuildRequestMergeView:OnSearchBtnClick( ) local name = self.search_input_tmpInput.text local _, title_filter = LanguageFilter.FilterMsg(name) if title_filter == false then Message.show("内容有敏感词") return end --相同搜索-- if name and name~="" and name == self.search_name then return end self.search_name = name self.cur_page = 1 self:RequestMergeGuildData() -- 手动搜索时清空先前的缓存数据 self.selected_guild_id = nil self.guild_merge_list = {} self.total_page = 0 self.rank_req_flag = 1 end function GuildRequestMergeView:DestroySuccess( ) if self.tabWindowComponent then self.tabWindowComponent:DeleteMe() self.tabWindowComponent = nil end self:ClearAutoSearchGuildTimer() self.model:SetGuildSaveMergeCacheTimeFlag(true) end