源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

365 lines
14 KiB

-- <*
-- @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