-- <*
|
|
-- @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("发起方可容纳数需大于对方社团总人数(当前社团可容纳<color=%s>%s</color>人)\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("开服第<color=#3be85c>%s</color>天开放社团合并!", self.merge_condition.max_day + 1)
|
|
else
|
|
-- empty_tip = "社团评价为 <color=#66abff>一般</color> 时才可被合并!"
|
|
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
|