--<* -- @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("社团评价为 一般 时才可被合并!") 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("%s/%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