源战役客户端
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.
 
 
 
 
 

415 lines
19 KiB

--<*
-- @Author: Saber
-- @Description: 社团主信息界面
--*>
GuildInfoView = GuildInfoView or BaseClass(BaseItem)
local GuildInfoView = GuildInfoView
function GuildInfoView:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "guild"
self.layout_file = "GuildInfoView"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.leader_head_item = nil
self.vice_leader_head_item = {}
self.treasure_head_item = {}
self.baged_item = {} -- 社团勋章列表
self.model = GuildModel:getInstance()
self.main_vo = RoleManager.Instance.mainRoleInfo
-- 刷新最新的社团基本信息
self.model:Fire(GuildModel.RequestGuildBaseInfoEvt)
self.model:Fire(GuildModel.RequestMemberViewMemberInfoEvt)
self:Load()
end
function GuildInfoView:Load_callback()
self.nodes = {
-- 左侧信息部分
"left/guild_icon:img", "left/change_anounce_btn:obj", "left/exp_fill:img",
"left/anounce_scroll/Viewport/anounce_con", "left/anounce_scroll/Viewport/anounce_con/guild_anounce:tmp",
"left/guild_name:tmp", "left/guild_lv:tmp", "left/guild_exp:tmp", "left/guild_rating:img", "left/guild_menber:tmp",
"left/honorwall_con", "left/honor_mask:obj", "left/change_gName_btn:obj",
-- 中间信息部分
"right/operate_btn:obj", "right/log_btn:obj", "right/redpocket_btn:obj", "right/enter_btn:obj",
"right/operate_btn/operate_btn_red:obj",
"right/role_head_1", "right/role_head_2",
"right/redpacket_red:obj",
"right/member_scroll", "right/member_scroll/Viewport/member_con",
"right/operate_con:obj:img",
"right/operate_con/apply_btn:obj",
"right/operate_con/impeach_btn:obj",
"right/operate_con/posmgr_btn:obj",
"right/operate_con/quit_btn:obj",
"right/operate_con/merge_btn:obj", "right/operate_con/merge_btn/merge_btn_red:obj",
"right/operate_con/impeach_tip:tmp",
"right/operate_con/operate_mask:obj",
"right/ques_btn:obj",
"right/allot_pos:obj",
-- "right/allot_pos/allot_pos_red:obj",
-- "right/allot_pos/allot_pos_num:tmp", -- 职位分配红点暂时屏蔽
}
self:GetChildren(self.nodes)
self.operate_con_img.enabled = true
self:AddEvents()
self:UpdateView()
-- self:UpdateMemberBtnRed()
self:UpdateRedPacketRed()
self:UpdateOperateBtnAndRelatedBtnRed()
self:UpdateRightHeadData(GuildModel.GuildPosition.Leader)
self:UpdateRightHeadData(GuildModel.GuildPosition.ViceLeader)
self:UpdateGuildMember()
self:UpdateOperateBtnCon()
end
function GuildInfoView:AddEvents( )
local function click_event(target)
if target == self.enter_btn_obj then -- 进入社团驻地
self.model:Fire(GuildModel.ENTER_GUILD_BASE)
elseif target == self.change_anounce_btn_obj then -- 修改社团公告
if self.model:HasOperatePermission(GuildModel.MgrPermission.ChangeAnnounce) then
self.model:Fire(GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW, true)
else
Message.show("团长/副团长可修改")
end
-- elseif target == self.fund_ques_btn_obj then -- 弹出资金功能介绍
-- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40001)
-- elseif target == self.lv_ques_btn_obj then -- 弹出等级功能介绍
-- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40002)
elseif target == self.operate_btn_obj then -- 操作按钮
self:ShowOperateBtnCon(true)
-- self.model:Fire(GuildModel.OPEN_MEMBER_MANAGE_VIEW, true)
-- 点击后更新一下按钮的红点
-- self:UpdateMemberBtnRed()
elseif target == self.log_btn_obj then -- 社团日志按钮
self.model:Fire(GuildModel.OPEN_GUILD_LOG_VIEW, true)
elseif target == self.redpocket_btn_obj then -- 社团红包按钮
RedPacketModel:GetInstance():Fire(RedPacketModel.OPEN_GUILD_REDPACKET_VIEW, true)
elseif target == self.honor_mask_obj then -- 社团徽章蒙版
if self.honor_click_callback then
self.honor_click_callback()
end
self.honor_mask_obj:SetActive(false)
elseif target == self.operate_mask_obj then -- 社团操作蒙版
self:ShowOperateBtnCon(false)
elseif target == self.apply_btn_obj then -- 社团操作--职位申请
self.model:Fire(GuildModel.OPEN_POSITION_APPLY_VIEW, true)
self:ShowOperateBtnCon(false)
elseif target == self.impeach_btn_obj then -- 社团操作--弹劾团长
self:OnImpeachBtnClick()
self:ShowOperateBtnCon(false)
elseif target == self.quit_btn_obj then -- 社团操作--退出社团
self.model:Fire(GuildModel.RequestQuitGuildEvt)
self:ShowOperateBtnCon(false)
elseif target == self.posmgr_btn_obj then -- 社团操作--职位分配
self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true)
elseif target == self.merge_btn_obj then -- 社团操作--发起社团合并
local merge_cfg = self.model:GetGuildMergeConditionCfg()
if merge_cfg then
local guild_info = self.model:GetGuildBaseInfo()
local guild_division = guild_info and guild_info.division or 0
local division_lv_list = stringtotable(merge_cfg.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.model:Fire(GuildModel.OPEN_REQUEST_MERGE_VIEW, true)
else
if merge_cfg.id < #Config.Guildmerge then
local str = string.format("开服第%s天开放社团合并功能", merge_cfg.max_day + 1)
Message.show(str, "fault")
else
-- Message.show("社团评价为 <color=#66abff>一般</color> 时才可被合并!")
self.model:Fire(GuildModel.OPEN_REQUEST_MERGE_VIEW, true)
end
end
end
elseif target == self.change_gName_btn_obj then -- 社团改名
if self.model:HasOperatePermission(GuildModel.MgrPermission.ChangeName) then
self.model:Fire(GuildModel.OPEN_GUILD_RENAME_VIEW, true)
else
Message.show("您没有权限修改社团名称", "fault")
end
elseif target == self.ques_btn_obj then -- 社团介绍
GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40004)
elseif target == self.allot_pos_obj then -- 可分配职位按钮
-- 有权限的玩家打开职位分配界面,否则打开职位申请界面
if self.model:HasOperatePermission(GuildModel.MgrPermission.PassPosApply) then
self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true)
else
self.model:Fire(GuildModel.OPEN_POSITION_APPLY_VIEW, true)
end
end
end
AddClickEvent(self.enter_btn_obj, click_event)
AddClickEvent(self.change_anounce_btn_obj, click_event)
-- AddClickEvent(self.fund_ques_btn_obj, click_event, 2)
-- AddClickEvent(self.lv_ques_btn_obj, click_event, 2)
AddClickEvent(self.operate_btn_obj, click_event)
AddClickEvent(self.log_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.redpocket_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.honor_mask_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.operate_mask_obj, click_event)
AddClickEvent(self.apply_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.impeach_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.quit_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.posmgr_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.merge_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.change_gName_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.ques_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.allot_pos_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
--刷新社团基础信息
local function on_refresh_guild_baseinfo()
self:UpdateView()
end
self:BindEvent(self.model, GuildModel.RefreshGuildInfoEvt, on_refresh_guild_baseinfo)
-- 刷新社团职位信息
local function on_refresh_guild_member()
self:UpdateRightHeadData(GuildModel.GuildPosition.Leader)
self:UpdateRightHeadData(GuildModel.GuildPosition.ViceLeader)
-- 社团成员变动时刷新主界面社团成员列表数据
self:UpdateGuildMember()
end
self:BindEvent(self.model, GuildModel.RefreshMainViewMemberInfoEvt, on_refresh_guild_member)
--刷新社团公告信息
local function on_update_anounce(str, num)
self:SetAnnounceText(str)
-- Message.show("修改成功")
-- local total = Config.Gangkv[27].value
-- local str = string.format("公告发布成功,今日剩余发布次数:%s次",num)
-- Message.show(str)
end
self:BindEvent(self.model, GuildModel.RefreshGuildAnnounceEvt, on_update_anounce)
local function update_red(view_type)
if not view_type or view_type == Config.ConfigGuild.TabId.MainInfo then
-- self:UpdateMemberBtnRed()
self:UpdateRedPacketRed()
self:UpdateOperateBtnAndRelatedBtnRed()
end
end
self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_red)
-- 玩家职位变动的时候刷新一下操作按钮的弹窗
local function update_operate_con()
self:UpdateOperateBtnCon()
end
self.update_operate_con_id = self.main_vo:BindOne("position", update_operate_con)
end
function GuildInfoView:UpdateView( )
local vo = self.model:GetGuildBaseInfo()
if IsTableEmpty(vo) then return end
self.guild_name_tmp.text = vo.guild_name
self.guild_lv_tmp.text = string.format("%s级", vo.guild_lv)
local guild_lv_cfg = Config.Guildlv[vo.guild_lv]
local total_exp = guild_lv_cfg.exp
local percent = vo.guild_exp / total_exp
self.exp_fill_img.fillAmount = percent
self.guild_exp_tmp.text = string.format("%s/%s", vo.guild_exp, total_exp)
self.guild_menber_tmp.text = string.format("<color=#2cf86f>%s</color>/%s", vo.member_num, guild_lv_cfg.member_capacity + GuildModel:getInstance():GetAddMemNum())
lua_resM:setImageSprite(self, self.guild_rating_img, "guild_asset", "guild_rank" .. vo.division, true)
self:SetAnnounceText(vo.announce) --设置社团主页公告信息
lua_resM:setImageSprite(self, self.guild_icon_img, "guildIcon_asset", "guild_icon" .. vo.guild_flag, true)
self:UpdateGuildBadgeItem()
end
--设置社团公告内容
function GuildInfoView:SetAnnounceText(str)
if not str or str == "" then
self.guild_anounce_tmp.text = Config.ConfigGuild.GuildDesc
else
self.guild_anounce_tmp.text = str
end
self.anounce_con.sizeDelta = Vector2(self.anounce_con.sizeDelta.x, self.guild_anounce_tmp.preferredHeight + 20)
end
function GuildInfoView:UpdateRightHeadData(position)
local position_member_list = self.model:GetMemberDataByPosition(position)
local member_num = #position_member_list
local pos_num = self.model:GetPositionNum(position)
for k = 1, pos_num do
self["pos"..position.."_head_list"] = self["pos"..position.."_head_list"] or {}
local head_item = self["pos"..position.."_head_list"][k]
if not head_item then
head_item = GuildCommonHeadItem.New(self["role_head_"..position])
self["pos"..position.."_head_list"][k] = head_item
end
-- 是否拥有该位置的社员数据
local have_data = k <= member_num
local head_data_vo = {
head_data = {
vo = {
role_id = have_data and position_member_list[k].role_id or 0,
server_id = have_data and position_member_list[k].server_id or 0,
-- career = have_data and position_member_list[k].career or 0,
-- sex = have_data and position_member_list[k].sex or 0,
turn = have_data and position_member_list[k].turn or 0,
picture_ver = have_data and position_member_list[k].picture_ver or 0,
picture = have_data and position_member_list[k].picture or "",
profile_photo_id = have_data and position_member_list[k].profile_photo_id or 0,
level = have_data and position_member_list[k].level or nil,
dress_board_id = have_data and (position_member_list[k].dress_id or position_member_list[k].dress_board) or nil,
empty_head = not have_data,
},
show_tip = have_data,
},
show_position = position,
show_name = have_data and position_member_list[k].name or "",
no_data = not have_data,
-- pos = Vector2(self["role_head_"..position].sizeDelta.x/2 + (k-1-pos_num/2) * 210 + 20, 0),
pos = Vector2((k-1) * 390, 0),
size = 94,
}
head_item:SetData(head_data_vo)
end
end
-- 更新社团成员管理按钮红点
-- function GuildInfoView:UpdateMemberBtnRed()
-- self.member_red_obj:SetActive(self.model:GetGuildMemberApplyRed())
-- end
-- 更新社团红包红点
function GuildInfoView:UpdateRedPacketRed( )
self.redpacket_red_obj:SetActive(RedPacketModel:GetInstance():GetGuildRedPacketRed())
end
-- 操作按钮相关红点
function GuildInfoView:UpdateOperateBtnAndRelatedBtnRed( )
local bool = self.model:GetGuildMergeTipRed()
self.merge_btn_red_obj:SetActive(bool)
self.operate_btn_red_obj:SetActive(bool)
end
function GuildInfoView:UpdateGuildBadgeItem( )
local vo = self.model:GetGuildBaseInfo()
local badge_list = vo.badges or {}
local function mask_callback(click_callback)
self.honor_mask_obj:SetActive(true)
self.honor_click_callback = click_callback
end
-- 没数据的处理
-- if not badge_list[2] then
-- badge_list[2] = {id = 2001, start_time = 0, end_time = 0} -- 战力榜外数据
-- end
-- if not badge_list[3] then
-- badge_list[3] = {is_empty = true} -- 跨服勋章数据
-- end
local item
for k, v in pairs(badge_list) do
item = self.baged_item[k]
if not item then
item = GuildBadgeItem.New(self.honorwall_con)
self.baged_item[k] = item
end
item:SetAnchoredPosition((k-1) * 105 + 32, -5)
item:SetData(v, true, mask_callback)
end
end
-- 2020年5月20日修改 信息界面增加社团成员滚动容器
function GuildInfoView:UpdateGuildMember( )
-- 社团成员数据来源 40006
local data = self.model:GetGuildMemberListForInfoView()
self.member_item_creator = self.member_item_creator or self:AddUIComponent(UI.ItemListCreator)
local info = {
data_list = data,
item_con = self.member_con,
scroll_view = self.member_scroll,
item_class = GuildInfoMemberItem,
item_height = 37,
create_frequency = 0.01,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
item:SetData(v, i)
end,
}
self.member_item_creator:UpdateItems(info)
end
-- 更新操作界面按钮
function GuildInfoView:UpdateOperateBtnCon( )
local is_leader = RoleManager.Instance.mainRoleInfo.position == GuildModel.GuildPosition.Leader
self.apply_btn_obj:SetActive(not is_leader)
self.impeach_btn_obj:SetActive(not is_leader)
self.posmgr_btn_obj:SetActive(is_leader)
self.merge_btn_obj:SetActive(is_leader)
self.impeach_tip_tmp.text = is_leader and "" or "(需团长离线3天后)"
SetSizeDeltaY(self.operate_con, is_leader and 192 or 211)
end
function GuildInfoView:ShowOperateBtnCon(show)
if self.operate_con_obj.activeSelf ~= show then
self.operate_con_obj:SetActive(show)
end
end
function GuildInfoView:OnImpeachBtnClick( )
-- 虽然身为团长不应该出现这个按钮,但还是判断一下保险
local position = RoleManager.Instance.mainRoleInfo.position
if position == GuildModel.GuildPosition.Leader then
Message.show("无法弹劾自己")
else
local leader_data = self.model:GetMemberDataByPosition(GuildModel.GuildPosition.Leader)[1]
if leader_data then
local offline_time = leader_data.offline_time
-- 社长超过3天未上限时,可弹劾现任会长
local can_apply_agency = TimeUtil:getServerTime() - offline_time >= 3 * 86400
if can_apply_agency then
local function ok( ... )
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40018, GuildModel.GuildPosition.Leader)
end
local ask_str = "团长超过3天未上线,被弹劾后您将成为新的团长\n是否继续?"
Alert.show(ask_str,Alert.Type.Two,ok,nil,"确定","取消")
else
Message.show("团长离线时间不足3天,无法弹劾")
end
end
end
end
function GuildInfoView:__delete( )
if self["pos"..GuildModel.GuildPosition.Leader.."_head_list"] then
for k, v in pairs(self["pos"..GuildModel.GuildPosition.Leader.."_head_list"]) do
v:DeleteMe()
v = nil
end
end
self["pos"..GuildModel.GuildPosition.Leader.."_head_list"] = {}
if self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"] then
for k, v in pairs(self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"]) do
v:DeleteMe()
v = nil
end
self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"] = {}
end
-- if self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"] then
-- for k, v in pairs(self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"]) do
-- v:DeleteMe()
-- v = nil
-- end
-- self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"] = {}
-- end
for k, v in pairs(self.baged_item) do
v:DeleteMe()
v = nil
end
self.baged_item = nil
if self.update_operate_con_id then
self.main_vo:UnBind(self.update_operate_con_id)
self.update_operate_con_id = nil
end
end