|
|
- GuildSceneView = GuildSceneView or BaseClass(BaseView)
- local GuildSceneView = GuildSceneView
- local LuaSoundManager = LuaSoundManager
-
- function GuildSceneView:__init()
- self.base_file = "guildScene"
- self.layout_file = "GuildSceneView"
- self.layer_name = "Main"
- self.destroy_imm = true
- self.change_scene_close = false
- self.append_to_ctl_queue = false --是否要添加进界面堆栈
- self.need_show_money = false --是否要显示顶部的金钱栏
- self.auto_change_party_music = false
- self.req_roll_data = false -- 是否请求了roll点信息
- self.auto_change_boss_music = false
- self.model = GuildModel:getInstance()
- self.scene_mgr = SceneManager:getInstance()
- self.init_exit_btn = false
- self.right_top_visible = true -- 当前右上角界面显示flag
- self.right_tab_index = 1 -- 右侧信息显示index 1 = 活动, 2 = 组队
- self.rightIcon_tween = {}--右上角缓动动画列表
- self.need_reset_scene_bgm = false -- 是否需要重置背景音乐
- self.cur_guildboss_type = GuildEventType.GuildBossNoon -- 确定本次社团boss的boss类型,默认午间boss类型
- self.cur_guildboss_act_type = 1 -- 社团boss的活动子类型,默认午间boss类型
- self.guildboss_tabIndex = 1 -- 社团boss排行榜tabindex
- self.guildboss_ranktype = GuildBossRankType.Guild -- 当前查看的社团排行类型
- self.guildboss_sub_rank_item = nil -- 社团boss个体排行item
- self.guild_boss_alert_cache = {} -- 社团boss预警状态缓存标志量
- self.is_gboss_encourage_clicked = false
- self.show_guildTv_tips = false -- 是否展示过跑马的specialTip
- -- self.main_ui_right_top_hide = true -- 主界面右上角按钮是否处于收起状态
- self.main_vo = RoleManager.Instance.mainRoleInfo
- self.dance_last_status = -1 -- 上次缓存的社团热舞坐标配置index,默认-1激活静默挂机的计时器
- self.last_use_skill_time = Status.NowTime -- 上次使用技能的时间
- self.is_moving_to_dance = false -- 是否正在寻路前往热舞
- self.collect_stay_time = self.model:GetGuildEventStayTime(GuildModel.GuildCollectModuleId,0) --整个持续时间
- self.tip_show_type = nil -- 已经展示过了的tips类型缓存
- self.fun_icon_cache = {} -- 社团内功能按钮缓存
- self.fun_icon_list = {} -- 社团内功能按钮列表
- self.guild_auction_item = false --社团拍卖提示界面
- GuildTVModel:getInstance():Fire(GuildTVConst.REQ_GTV_SCMD, 14215)
- self.guild_collect_support_tip_item_list = {}--社团协助右侧协助tips
- 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 GuildSceneView:Open( )
- BaseView.Open(self)
- end
-
- function GuildSceneView:LoadSuccess()
- local nodes = {
- -- 界面隐藏按钮和子节点容器相关
- "hide_btn:obj", "hide_btn/hide_arrow",
- "right_info_con:obj",
- "right_info_con/btn_con",
- "right_info_con/btn_con/img_event:img", "right_info_con/btn_con/img_team:img",
- "right_info_con/btn_con/btn_team:obj", "right_info_con/btn_con/btn_event:obj",
- "right_info_con/data_con:obj", "right_info_con/team_con:obj",
- -- 社团采集活动相关
- "right_info_con/data_con/collect_info_con:obj",--午间采集玩法右上角信息栏
- "right_info_con/data_con/collect_info_con/leftTime:tmp",--活动时间倒计时
- "right_info_con/data_con/collect_info_con/activityTimes:tmp",--今天活动参与次数
- "right_info_con/data_con/collect_info_con/sealTimes:tmp",--本次活动封印次数
- "right_info_con/data_con/collect_info_con/reward_scroll_collect/Viewport/reward_con_collect", --展示奖励
- "right_info_con/data_con/collect_info_con/reward_scroll_collect",
- "rightIconCon/guildCollectRewardBtn:obj", --封印裂隙奖励预览按钮
- "guild_collect_left_con:obj:img", --左上角封印裂隙信息栏
- "guild_collect_left_con/left_collect_mon_label:tmp", --剩余采集怪数量
- "guild_collect_left_con/next_collect_wave_label:tmp", --下一波倒计时
- "right_info_con/data_con/collect_info_con/collect_info_bg:img",
- "guild_help_con:obj", --社团协助栏父容器
- "guild_support_tip_con:obj", --封印裂隙侧边协助tips
- "guild_support_tip_con/check_more_support_label:obj", --查看更多协助
-
- -- 右上角退出按钮
- "rightIconCon:obj",
- -- "rightIconCon/exitBtn:obj",
- "rightIconCon/inspireBtn:obj",
- "rightIconCon/inspireBtn/inspireBtn_effect",
- "rightIconCon/inspireBtn/inspire_btn_red:obj",
- "rightIconCon/inspireBtn/inspire_btn_red/inspire_btn_red_lb:tmp",
- "rightIconCon/inspireBtn/inspire_lb:tmp",
- "rightIconCon/guild_boss_pv_btn:obj",
- -- 右上角按钮tips节点
- "rightIconCon/tip_timer_bg:obj", "rightIconCon/tip_timer_bg/tip_timer:tmp",
- -- 社团boss相关
- "right_info_con/data_con/boss_rank:obj",
- "right_info_con/data_con/boss_rank/boss_tab_selected",
- "right_info_con/data_con/boss_rank/boss_my_rank_bg",
- "right_info_con/data_con/boss_rank/boss_rank_scroll",
- "right_info_con/data_con/boss_rank/boss_rank_scroll/Viewport/boss_rank_con",
- "right_info_con/data_con/boss_rank/boss_tab1:obj:tmp",
- "right_info_con/data_con/boss_rank/boss_tab2:obj:tmp",
- "right_info_con/data_con/boss_rank/right_boss_percentage:tmp",
- "right_info_con/data_con/boss_rank/right_boss_hp_fill:img",
- "right_info_con/data_con/boss_rank/right_boss_head:obj",
- "right_info_con/data_con/boss_rank/right_boss_name:tmp",
- -- 社团派对相关(晚间派对)
- "right_info_con/data_con/party_con:obj:img",
- "right_info_con/data_con/party_con/party_ques:obj",
- "right_info_con/data_con/party_con/party_timer:tmp",
- "right_info_con/data_con/party_con/party_exp:tmp",
- "right_info_con/data_con/party_con/party_buff:tmp",
- "right_info_con/data_con/party_con/chosen_con/party_btn2/party_btn2_chosen:obj",
- "right_info_con/data_con/party_con/chosen_con/party_btn1/party_btn1_chosen:obj",
- "right_info_con/data_con/party_con/chosen_con/party_btn2:obj",
- "right_info_con/data_con/party_con/chosen_con/party_btn1:obj",
- -- 社团派对经验效率节点
- "dance_eff_con:obj:cg",
- "dance_eff_con/dance_exp_eff:tmp",
- "dance_eff_con/dance_eff_lb:tmp",
- "dance_eff_con/dance_mem_num:tmp",
- "dance_eff_con/dance_ques_btn:obj",
- "dance_eff_con/dance_mem_eff_con:obj",
- -- 社团活动预告界面(无当前进行中活动时展示)
- "right_info_con/data_con/trailer_con:obj:img",
- "right_info_con/data_con/trailer_con/trailer_event_iconBg/trailer_event_icon:img",
- "right_info_con/data_con/trailer_con/trailer_countdown:tmp",
- "right_info_con/data_con/trailer_con/trailer_start_time:tmp",
- "right_info_con/data_con/trailer_con/trailer_reward_scroll",
- "right_info_con/data_con/trailer_con/trailer_reward_scroll/Viewport/trailer_reward_con",
- -- 空预告界面
- "right_info_con/data_con/trailer_empty:obj:img",
- "right_info_con/data_con/trailer_empty/trailer_empty_lb:tmp",
- -- 社团界面内功能按钮容器
- "func_btn_con:obj",
- -- 社团boss采集表现界面容器
- "boos_collect_con",
- --社团拍卖提示
- "guild_aucion_con",
- --社团材料提交BUFF相关
- "right_info_con/data_con/party_con/buffBtn:obj:img",
- }
- self:GetChildren(nodes)
-
-
- --组队页签透明度
- self.hide_btn_cg = self:GetChild("hide_btn"):GetComponent("CanvasGroup")
- self.right_info_con_cg = self:GetChild("right_info_con"):GetComponent("CanvasGroup")
-
- -- 获取社团晚间派对效率阶段节点
- self.dance_eff_num_list = {}
- self.dance_eff_val_list = {}
- for i = 1, 3 do
- self.dance_eff_num_list[i] = {}
- self.dance_eff_num_list[i].txt = self:GetChild("dance_eff_con/dance_mem_eff_con/d_m_num_" .. i):GetComponent("TextMeshProUGUI")
- self.dance_eff_val_list[i] = {}
- self.dance_eff_val_list[i].txt = self:GetChild("dance_eff_con/dance_mem_eff_con/d_m_val_" .. i):GetComponent("TextMeshProUGUI")
- end
-
- --设置sceneView的自适应
- self.transform.sizeDelta = Vector2(0,0)
- self.transform.localPosition = Vector3(0,0,0)
- -- if ClientConfig.iphone_x_model then
- -- self.transform.offsetMin = Vector2(ClientConfig.iphone_x_offset_left,0)
- -- self.transform.offsetMax = Vector2(-ClientConfig.iphone_x_offset_right,0)
- -- end
-
- self.tip_timer_bg_canvas = self.tip_timer_bg:GetComponent("CanvasGroup")
-
- local posX, posY = GetAnchoredPosition(self.right_info_con)
- self.origin_pos_x = posX
- self.origin_pos_y = posY
- self.right_info_con_width = GetSizeDeltaX(self.right_info_con)
-
- -- 加载组队节点
- self.team_view = self.team_view or TeamView.New(self.team_con)
- self:AutoDelete(self.team_view)
- self.team_view:SetData()
- self.team_view:SetAnchoredPosition(0,0)
- -- 创建采集节点
- self.collect_view = GuildSceneCollectView.New(self.boos_collect_con)
- self.collect_view:SetVisible(false)
- -- 先隐藏派对经验挂机效率节点
- self.dance_eff_con_obj:SetActive(false)
- --看看是否需要显示跑马界面
- if GuildTVModel:getInstance():IsGuildTVOpen() then
- local function delay_method( )
- GlobalEventSystem:Fire(GuildTVConst.OPEN_GUILDTV_MAIN_VIEW)
- end
- setTimeout(delay_method, 1)
- end
-
- --封印裂隙社团协助栏
- self.guild_collect_help_view = self:CreateItem(GuildCollectHelpRankView, self.guild_help_con, self.layer_name)
- SetAnchoredPositionY(self.guild_help_con,-240)
-
- -- 拍卖节点固定到界面正中心
- self.guild_aucion_con_posx = -ScreenWidth / 2 + 110
- SetAnchoredPosition(self.guild_aucion_con, self.guild_aucion_con_posx, 0)
-
- lua_resM:setOutsideImageSprite(self, self.collect_info_bg_img, GameResPath.GetViewBigBg("common_right_top_img2"))
- lua_resM:setOutsideImageSprite(self, self.party_con_img, GameResPath.GetViewBigBg("common_right_top_img2"))
- lua_resM:setOutsideImageSprite(self, self.trailer_con_img, GameResPath.GetViewBigBg("common_right_top_img2"))
-
- -- 新版 通用退出按钮
- if not self.init_exit_btn then
- self.init_exit_btn = true
- local function call_back( ... )
- local function exit_scene()
- CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW)
- self.model:Fire(GuildModel.LEAVE_GUILD_BASE)
- end
- Alert.show("您确定退出社团驻地吗?", Alert.Type.Two, exit_scene)
- end
- local data = {call_back = call_back, pos = {x = 243, y = 311}}
- GlobalEventSystem:Fire(EventName.SHOW_EXIT_BTN_STATE, data)
- end
- self:InitLittleMove()
- end
-
- function GuildSceneView:InitLittleMove( )
- self.rightIconCon.anchoredPosition = Vector2(-164 - ClientConfig.iphone_x_offset_right, 0)
- -- self.right_info_con.anchoredPosition = Vector2(1 + ClientConfig.iphone_x_offset_left, -163)
- -- self.hide_btn.anchoredPosition = Vector2(18 + ClientConfig.iphone_x_offset_left, -246)
- -- self.dance_eff_con.anchoredPosition = Vector2(0 - ClientConfig.iphone_x_offset_right, -71.5)
- -- self.guild_help_con.anchoredPosition = Vector2(0 - ClientConfig.iphone_x_offset_right, -148)
- -- self.guild_collect_left_con.anchoredPosition = Vector2(0 - ClientConfig.iphone_x_offset_right, -64)
-
- self:BindLittleMove(self.rightIconCon, BaseView.LittleMoveDir.Top, 0)
- self:BindLittleMove(self.func_btn_con, BaseView.LittleMoveDir.Bottom, 143.5)
-
- -- BindLittleMove 里会算offset,但是我们已经算过了,所以得把它抵消 by msh
- local offset_temp = 0
- self:BindLittleMove(self.hide_btn, BaseView.LittleMoveDir.Left, 1 + offset_temp)
- self:BindLittleMove(self.right_info_con, BaseView.LittleMoveDir.Left, 1 + offset_temp)
-
- local offset_temp_r = 0
- self:BindLittleMove(self.dance_eff_con, BaseView.LittleMoveDir.Right, 0 + offset_temp_r)
- self:BindLittleMove(self.guild_collect_left_con, BaseView.LittleMoveDir.Right, 0 + offset_temp_r)
- self:BindLittleMove(self.guild_help_con, BaseView.LittleMoveDir.Right, 0 + offset_temp_r)
- self:BindLittleMove(self.guild_support_tip_con, BaseView.LittleMoveDir.Right, 0 + offset_temp_r)
- self:BindLittleMove(self.guild_aucion_con, BaseView.LittleMoveDir.Right, self.guild_aucion_con_posx + offset_temp_r)
- end
-
- function GuildSceneView:AddEvent()
- local on_click = function ( click_obj )
- if self.hide_btn_obj == click_obj then --隐藏/显示右侧信息按钮
- self:SwitchInfoVisible(not self.right_top_visible)
- elseif self.btn_team_obj == click_obj then -- 切换到组队页签
- self:SwitchInfoTab(2)
- elseif self.btn_event_obj == click_obj then -- 切换到活动页签
- self:SwitchInfoTab(1)
- -- elseif self.exitBtn_obj == click_obj then --退出按钮
- -- local function exit_scene()
- -- CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW)
- -- self.model:Fire(GuildModel.LEAVE_GUILD_BASE)
- -- end
- -- Alert.show("您确定退出社团驻地吗?",Alert.Type.Two,exit_scene)
- elseif self.boss_tab1_obj == click_obj then -- 选中晚间社团boss社团排行
- self:ChangeGuildBossTab(1)
- elseif self.boss_tab2_obj == click_obj then -- 选中晚间社团boss个人排行
- self:ChangeGuildBossTab(2)
- elseif self.party_ques_obj == click_obj then -- 社团派对活动介绍
- EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 40007)
- elseif self.right_boss_head_obj == click_obj then -- 寻路到boss
- self:FindGuildBossWay()
- elseif self.inspireBtn_obj == click_obj then -- 战力鼓舞
- self:ShowGuildBossEncourage(EncourageTips.ShowType.Open)
- elseif self.guild_boss_pv_btn_obj == click_obj then -- 社团boss奖励预览界面
- self.model:Fire(GuildModel.OPEN_BOSS_ROLL_PREVIEW_VIEW, true)
- elseif self.party_btn1_obj == click_obj then -- 劲音之王music——1
- self:OnClickChangeBGM(1)
- elseif self.party_btn2_obj == click_obj then -- 劲音之王music——2
- self:OnClickChangeBGM(2)
- elseif self.guildCollectRewardBtn_obj == click_obj then -- 封印裂隙奖励说明展示
- self.model:Fire(GuildModel.OPEN_GUILD_COLLECT_REWARD_VIEW)
- elseif self.dance_ques_btn_obj == click_obj then -- 社团晚宴挂机人数加成按钮
- self.dance_mem_eff_con_obj:SetActive(not self.dance_mem_eff_con_obj.activeSelf)
- elseif self.check_more_support_label_obj == click_obj then --查看更多协助
- self.model:Fire(GuildModel.OPEN_GUILD_SUPPORT_IFNO_VIEW,GuildModel.SupportTab.List)
- elseif self.buffBtn_obj == click_obj then --材料提交BUFF
- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.PEACH_EXP --触发加成后,玩家赏金幻魔/专属幻魔掉落概率+100%
- local buff_cfg,buff_info,dot = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
- local abs_pos = click_obj.transform:TransformPoint(Vector3.zero)
- local sub_type = CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.MATERIAL_SUBMIT)
- local act_list = CustomActivityModel:getInstance():getActList(CustomActivityModel.CustomActBaseType.MATERIAL_SUBMIT, sub_type)
- if act_list then
- local buff_data = nil
- for k,v in pairs(act_list.condition_list) do--[{role_lv,80},{sub,1},{cost,30},{group,5}]
- if v[1] == "suit" then--全服进度套件ID
- buff_data = OperateActivityModel:getInstance():GetMaterialSubmitServerCfg(tonumber(v[2]),dot)
- break
- end
- end
- if buff_data then
- local data = {
- sub_type = sub_type,
- buff_data = buff_data,
- pos_x = abs_pos.x,
- pos_y = abs_pos.y,
- is_outside = true,
- }
- OperateActivityModel:getInstance():Fire(OperateActivityModel.OPEN_MATERIAL_SUBMIT_BUFF_VIEW,data)
- end
- end
- end
- end
- AddClickEvent(self.hide_btn_obj, on_click)
- AddClickEvent(self.btn_team_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.btn_event_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- -- AddClickEvent(self.exitBtn_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.boss_tab1_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.boss_tab2_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.party_ques_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.right_boss_head_obj, on_click)
- AddClickEvent(self.inspireBtn_obj, on_click)
- AddClickEvent(self.guild_boss_pv_btn_obj, on_click)
- AddClickEvent(self.party_btn1_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.party_btn2_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.guildCollectRewardBtn_obj, on_click, LuaSoundManager.SOUND_UI.SWITCH)
- AddClickEvent(self.dance_ques_btn_obj, on_click)
- AddClickEvent(self.check_more_support_label_obj, on_click)
- AddClickEvent(self.buffBtn_obj, on_click)
-
-
- local function changeFunc(is_hide)
- -- for k,v in pairs(self.rightIcon_tween) do
- -- TweenLite.Stop(v)
- -- end
- -- self.rightIcon_tween = {}
- -- if is_hide then
- -- table.insert(self.rightIcon_tween,TweenLite.to(self, self.rightIconCon_obj, TweenLite.UiAnimationType.ALPHA_ALL, 1, 0.3))
- -- else
- -- table.insert(self.rightIcon_tween,TweenLite.to(self, self.rightIconCon_obj, TweenLite.UiAnimationType.ALPHA_ALL, 0, 0.3))
- -- end
- self.rightIconCon_obj:SetActive(is_hide)
- end
- self:BindEvent(GlobalEventSystem, EventName.CHANGE_RIGHT_TIP_ICON, changeFunc)--更新右上角活动图标状态
-
- -- 社团驻地内活动协议更新
- local function update_guildBase_event(type)
- local event_flag = false
- if type == GuildEventType.GuildBossNoon or type == GuildEventType.GuildBossNight then -- 社团boss
- event_flag = event_flag or self:CheckGuildBossEvent()
- elseif type == GuildEventType.NoonCollect then -- 社团午间采集
- event_flag = event_flag or self:CheckGuildCollectEvent()
- elseif type == GuildEventType.GuildParty then
- event_flag = event_flag or self:CheckGuildPartyEvent()
- elseif type == GuildEventType.GuildTV then
- event_flag = event_flag or self:CheckGuildTVEvent()
- -- self:CheckGuildPartyEvent()
- end
- if not event_flag then -- 当前的活动是进入关闭阶段,则需要重新检查一下界面右侧的展示内容
- self:UpdateView()
- else -- 存在活动的情况,关闭无活动的展示界面
- self:ShowDefaultEvent(event_flag)
- end
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_EVENT_BY_TYPE, update_guildBase_event)
-
- local function onOrientationChange()
- if self.transform then
- if ClientConfig.iphone_x_model then
- self.rightIconCon.anchoredPosition = Vector2(-164 - ClientConfig.iphone_x_offset_right, 0)
- end
- end
- end
- self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)--位置适配
-
- --午间采集活动倒计时
- local function onUpateCollectLeftTimeHandler(time)
- self:UpdateCollectLeftTime(time)
- end
- self:BindEvent(self.model,GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME,onUpateCollectLeftTimeHandler)
-
- --刷新午间采集活动右上角信息栏
- local function onUpdateCollectInfoConHandler()
- self:UpdateCollectInfoCon()
- end
- self:BindEvent(self.model,GuildModel.UPDATE_GUILD_COLLECT_INFO_CON,onUpdateCollectInfoConHandler)
-
- --剩余采集怪数量刷新
- local function onUpdateCollectLeftCollectMon()
- self:UpdateGuildCollectLeftCollectMonNum()
- end
- self:BindEvent(self.model,GuildModel.UPDATE_GUILD_COLLECT_LEFT_COLLECT_MON_NUM,onUpdateCollectLeftCollectMon)
-
- local function LEFT_FUN_OPEN_VISIBLE( bool )
- if self.guild_collect_help_view then
- self.guild_collect_help_view.gameObject:SetActive(not bool)
- end
- end
- self:BindEvent(GlobalEventSystem, EventName.LEFT_FUN_OPEN_VISIBLE, LEFT_FUN_OPEN_VISIBLE)
-
- -- 社团boss社团排行刷新
- local function update_rank_data(type)
- if self.guildboss_ranktype == type then
- self:UpdateGuildBossRank()
- end
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_RANK, update_rank_data)
- -- 社团boss个人排行刷新
- local function update_personal_rank_data(type)
- if self.guildboss_ranktype == type then
- self:UpdateBossPersonalRank()
- end
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK, update_personal_rank_data)
-
- -- 更新社团boss血量
- local function update_guildboss_hp(var, vo)
- self:UpdateGuildBossHp(vo)
- end
- self.update_guildboss_hp_id = self.model:BindOne("guild_boss_hp_data", update_guildboss_hp)
-
- local function updateGuildBossInvincible(vo)
- self:UpdateGuildBossInvincible(vo)
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILDBOSS_INVINCIBLE, updateGuildBossInvincible)
-
- local function updateGuildPartyExp()
- self:UpdateGuildPartyExp()
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILDPARTY_EXPDATA, updateGuildPartyExp)
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_SCENE_MEMBER_NUM, updateGuildPartyExp)
-
- local function update_guild_boss_encourage_view1( )
- local extra_param_list = {}
- extra_param_list.show_encourage_times = true
- self:ShowGuildBossEncourage(EncourageTips.ShowType.Update,extra_param_list)
- -- 更新免费次数的红点
- self:UpdateInspireBtnRed()
- end
- self.update_encourage_handler_1 = self.model:BindOne("encourage_free_times", update_guild_boss_encourage_view1)
- self.update_encourage_handler_2 = self.model:BindOne("encourage_cost_times", update_guild_boss_encourage_view1)
- local function update_guild_boss_encourage_view2( )
- local extra_param_list = {}
- extra_param_list.show_encourage_percentage = true
- self:ShowGuildBossEncourage(EncourageTips.ShowType.Update,extra_param_list)
- end
- self.update_encourage_handler_3 = self.model:BindOne("encourage_guild_times", update_guild_boss_encourage_view2)
-
- -- 取消自动战斗后,就清除采集忽略列表
- local function clear_guild_collect_ignore_list()
- if self.model:IsGuildCollectActive() then return end--封印裂隙改变自动战斗状态时先不要忽略列表
- self.model:ClearGuildIgnoreCollection()
- end
- self:BindEvent(GlobalEventSystem, EventName.STOPAUTOFIGHT, clear_guild_collect_ignore_list)
-
- -- 社团boss活动,掉落通知显示横幅
- local function on_guildboss_drop_event(vo)
- self:ShowGuildBossDropDialogueTip(vo)
- end
- self:BindEvent(self.model, GuildModel.GUILD_BOSS_DROP_EVENT, on_guildboss_drop_event)
-
- local function update_guild_boss_roll_data()
- -- 添加roll点的按钮
- self:UpdateBossRollBtn(true)
- end
- self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_DATA, update_guild_boss_roll_data)
-
-
- -- local function on_change_guild_collect_left_con_state(bool)
- -- if self.model:IsGuildCollectActive() then
- -- self.guild_support_tip_con_obj:SetActive(bool)
- -- else
- -- self.guild_support_tip_con_obj:SetActive(false)
- -- end
- -- end
- -- self:BindEvent(self.model, GuildModel.CHANGE_GUILD_COLLECT_LEFT_CON_STATE, on_change_guild_collect_left_con_state)
-
- local function hide_dance_eff_node()
- self:ShowDanceEffNode(false)
- self:ShowInfoNode(false)
- end
- local function show_dance_eff_node()
- self:ShowDanceEffNode(true)
- self:ShowInfoNode(true)
- end
- self:BindEvent(GlobalEventSystem, EventName.START_COM_DIALOGUE_SHOW_ANIM, hide_dance_eff_node)
- self:BindEvent(GlobalEventSystem, EventName.FINISHED_COM_DIALOGUE_SHOW_ANIM, show_dance_eff_node)
-
- -- local function on_update_guild_info()
- -- self:CheckGuildAuctionTipsShow()
- -- end
- -- self.refresh_guild_info_id = self.model:Bind(GuildModel.UPDATE_GUILD_BOSS_INFO, on_update_guild_info)
- -- self:CheckGuildAuctionTipsShow()
-
- self:BindMainUIExpandEvent( self.func_btn_con )
-
- local function updata_buff_state(id)
- if id == KfActivityModel.TabID.MaterialSubmit and self.is_loaded then
- self:UpdateGuildPartyExp()
- end
- end
- self:BindEvent(KfActivityModel:getInstance(), KfActivityModel.ANS_UPDATE_VIEW, updata_buff_state)
-
- --刷新封印裂隙协助信息
- local function updateGuildSupportDataInfo( )
- if not self.is_loaded then return end
- if not self.model:IsGuildCollectActive() then return end
- self:UpdateCollectRightSupportTipCon()
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_SUPPOR_INFO, updateGuildSupportDataInfo)--刷新协助信息列表
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST, updateGuildSupportDataInfo)--刷新协助信息列表
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_COLLECT_NOW_SUPPORT_ID, updateGuildSupportDataInfo)
- end
-
-
- -- 打开场景UI后,直接检查一遍所有的社团驻地内活动
- function GuildSceneView:UpdateView()
- self:SwitchInfoTab()
- self:ShowInfoNode(not MainUIModel:getInstance():GetDialogueActionFlag(), true)
- local has_event = false -- 是否有活动正在进行
- -- 检查活动进行情况
- has_event = has_event or self:CheckGuildBossEvent() -- 检查晚间boss活动
- has_event = has_event or self:CheckGuildCollectEvent() -- 检查午间采集活动
- has_event = has_event or self:CheckGuildPartyEvent() -- 检查社团派对活动
- self:CheckGuildTVEvent()--更新竞速按钮
- -- 如图没有活动正在进行,则需要打开下一个即将开启的活动展示,如果是全部都进行完了,则需要展示最后一个活动
- self:ShowDefaultEvent(has_event)
- end
-
- --获取当前正在进行的活动index,用于打开界面时跳转
- function GuildSceneView:ShowDefaultEvent(has_event)
- self:ClearEventTrailerTimer()
- if has_event then
- self.trailer_con_obj:SetActive(false)
- self.trailer_empty_obj:SetActive(false)
- return
- end
- -- 今天是星期几,映射到周一~周日 = 1~7
- local cur_wday = os.date("*t", TimeUtil:getServerTime()).wday - 1
- if cur_wday > 7 then
- cur_wday = cur_wday - 7
- elseif cur_wday < 1 then
- cur_wday = cur_wday + 7
- end
- local event_list = self.model:GetGuildEventByWday(cur_wday)
- -- 如果当前没有活动在进行中,则需要通过当前的系统时间来决定定位到哪个即将开启的活动上(2020年3月14日策划需求,如果出现时区定位不准的问题找策划)
- local date = os.date("*t", TimeUtil:getServerTime())
- local zero_min = date.hour * 60 + date.min -- 当前时区距0点的分钟数
- local evt_start_time, evt_time_start, evt_start_hour, evt_start_min
- local event_index = 0 -- 没有找到活动开启时处理为今日活动已经进行完
- local icon_res = ""
- for k, v in ipairs(event_list) do
- icon_res = GuildTrailerEventType[tonumber(v.module_id .. v.module_sub)] or ""
- if icon_res ~= "" then
- evt_start_time = Split(v.time_str, "~")[1]
- evt_time_start = Split(evt_start_time,":")
- evt_start_hour = evt_time_start[1]
- evt_start_min = evt_time_start[2]
- if evt_start_hour * 60 + evt_start_min >= zero_min then
- event_index = k
- break
- end
- end
- end
- -- 根据下一场活动的数据来展示预告信息
- local event_cfg = event_list[event_index]
- local has_cfg = not IsTableEmpty(event_cfg)
- self.trailer_con_obj:SetActive(has_cfg)
- self.trailer_empty_obj:SetActive(not has_cfg)
- if has_cfg then
- -- 加载活动图标
- lua_resM:setImageSprite(self, self.trailer_event_icon_img, "activityIcon_asset", icon_res, false)
- SetSizeDelta(self.trailer_event_icon,60,60)
- -- 加载活动时间
- self.trailer_start_time_tmp.text = evt_start_time.."开启"
- -- 推算活动开始的时间戳,加载倒计时
- local event_start_time_stamp = TimeUtil:GetFutureZeroStampServer(0) + (evt_start_hour * 60 + evt_start_min) * 60
- local function trailer_timer_func()
- local left_time = event_start_time_stamp - TimeUtil:getServerTime()
- left_time = left_time < 0 and 0 or left_time
- self.trailer_countdown_tmp.text = string.format("活动倒计时:<%s><size=18>%s</size></color>", ColorUtil.GREEN_TIPS, TimeUtil:timeConvert3(left_time))
- if left_time <= 0 then
- self:ClearEventTrailerTimer()
- end
- end
- trailer_timer_func()
- self.trailer_event_timer = GlobalTimerQuest:AddPeriodQuest(trailer_timer_func, 0.5, -1)
- -- 加载活动奖励
- local reward_data = DailyModel:getInstance():GetRewardList(event_cfg.module_id, event_cfg.module_sub, 1)
- self.trailer_reward_creator = self.trailer_reward_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = reward_data,
- item_con = self.trailer_reward_con,
- scroll_view = self.trailer_reward_scroll,
- obj_pool_type = UIObjPool.UIType.AwardItem,
- item_width = 59,
- start_x = 7,
- start_y = -5,
- space_x = 20,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- on_update_item = function(item, i, v)
- local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
- if goodVo then
- item:SetItemSize(59, 59)
- item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock)
- end
- end,
- }
- self.trailer_reward_creator:UpdateItems(info)
- else
- self.trailer_empty_lb_tmp.text = "今日社团活动已结束\n明天尽早参加哦~"
- end
- end
-
- -- 清除活动预告的活动倒计时
- function GuildSceneView:ClearEventTrailerTimer( )
- if self.trailer_event_timer then
- GlobalTimerQuest:CancelQuest(self.trailer_event_timer)
- self.trailer_event_timer = nil
- end
- end
-
- -- 切换显示右侧信息界面
- function GuildSceneView:SwitchInfoVisible( visible )
- if self.right_top_visible == visible then
- return
- end
- self.right_top_visible = visible
- SetLocalScale(self.hide_arrow, visible and 1 or -1, 1, 1)
-
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.right_info_con)
- local targetX = visible and self.origin_pos_x or self.origin_pos_x-(self.right_info_con_width+70)
- if ClientConfig.iphone_x_model then
- targetX = ClientConfig.iphone_x_offset_left + targetX
- end
- local moveAction = cc.MoveTo.createAnchoredType(0.5, targetX, self.origin_pos_y)
- moveAction = cc.EaseExponentialOut.New(moveAction)
- local action
- if visible then
- self.right_info_con_obj:SetActive(true)
- action = moveAction
- else
- action = cc.Sequence.New(moveAction, cc.CallFunc.New(function()
- self.right_info_con_obj:SetActive(false)
- end))
- end
- self:AddAction(action, self.right_info_con)
- end
-
- -- 活动/组队页签切换
- function GuildSceneView:SwitchInfoTab(index)
- self.right_tab_index = index or self.right_tab_index
- self.data_con_obj:SetActive(self.right_tab_index == 1)
- self.team_con_obj:SetActive(self.right_tab_index == 2)
- lua_resM:setImageSprite(self, self.img_event_img, "guildScene_asset", self.right_tab_index == 1 and "guild_task_btn_sel" or "guild_task_btn_nor", true)
- lua_resM:setImageSprite(self, self.img_team_img, "guildScene_asset", self.right_tab_index == 2 and "guild_team_btn_sel" or "guild_team_btn_nor", true)
- SetAnchoredPosition(self.img_event, self.right_tab_index == 1 and -1 or 6, self.right_tab_index == 1 and -40 or -47)
- SetAnchoredPosition(self.img_team, self.right_tab_index == 2 and -3 or 3, self.right_tab_index == 2 and -118 or -124)
- end
-
- function GuildSceneView:ShowInfoNode(show, force)
- local target_alpha = show and 1 or 0
- if force then
- self.hide_btn_cg.alpha = target_alpha
- self.right_info_con_cg.alpha = target_alpha
- else
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.right_info_con)
- local function action_alpha_callback(percent)
- self.hide_btn_cg.alpha = show and percent or (1 - percent)
- self.right_info_con_cg.alpha = show and percent or (1 - percent)
- end
- local action_alpha = cc.CustomUpdate.New(0.3, action_alpha_callback)
- --cc.ActionManager:getInstance():addAction(action_alpha, self.hide_btn)
- cc.ActionManager:getInstance():addAction(action_alpha, self.right_info_con)
- end
- end
- ----------- 午间采集活动 -----------start
-
- --检查设置午间采集活动的UI展示
- function GuildSceneView:CheckGuildCollectEvent( )
- self.model:ClearGuildIgnoreCollection()
-
- local nc_data = self.model:GetGuildEventByType(GuildEventType.NoonCollect)
- if nc_data and nc_data.is_active then -- 采集活动进行中
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40806)
- self.collect_info_con_obj:SetActive(true)--展示采集活动右上角数据信息栏
- self.guild_support_tip_con_obj:SetActive(true)
- self.guildCollectRewardBtn_obj:SetActive(true)--奖励预览按钮
- self:UpdateCollectInfoCon()
- self:UpdateCollectRewardItem(408,0,1)
- self.guild_collect_left_con_obj:SetActive(true)--左上角采集信息栏
- self:SetGuildSceneFuncBtn(true, {fun_id = 408, name = "封印裂隙", sort_id = 3})
- self:SetGuildSceneFuncBtn(true, {fun_id = 40899, name = "召唤社员", sort_id = 5})
-
- self:UpdateCollectRightSupportTipCon()--右侧协助栏
-
-
- --先判断进来场景是否协助的,如果是协助就需要请求40808然后去打怪
- self.model.guild_collect_confim_into_guild_scene = true
-
- --如果只是从驻地外用40808过来寻怪的,就直接寻怪
- if self.model.only_find_way_to_guild_collect_mon then
- if self.model.temp_guild_collect_mon_data then
- self.model:Fire(GuildModel.FIND_WAY_TO_GUILD_COLLECT_HELP_MON,self.model.temp_guild_collect_mon_data)
- end
- self.model.only_find_way_to_guild_collect_mon = false
- self.model.temp_guild_collect_mon_data = nil
- return true
- end
-
-
- local collect_support_data = nil
- local guild_collect_support_id = self.model:GetSelfGuildCollectSupportId()
- local info = self.model:GetGuildSupportInfo()
- for k,v in pairs(info) do
- if v.support_sid == guild_collect_support_id then
- collect_support_data = v
- break
- end
- end
-
- if collect_support_data and guild_collect_support_id ~= 0 then
- if collect_support_data.role_id ~= RoleManager.Instance.mainRoleInfo.role_id then
- --主动寻路去击杀协助对应的宝箱怪
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40808,collect_support_data.support_sid)
- self.model.need_go_support_guild_collect_after_40046 = false
- return true
- end
- end
- ----------------------------------------------------------
-
- -- -- 进入场景后根据采集次数判断是否需要进入自动采集状态,如果是不能采集,就转为自动挂机状态打场景中的宝箱怪
- -- GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT)
- -- if not self.model:GuildCollectAutoFightIgnoreCollectMon() then--如果依然还有采集次数,需要主动开启自动采集状态
- -- self.model:SetAutoGuildCollectState(true)--切换采集状态
- -- self.model:Fire(GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE)--通知按钮变化
- -- else
- -- EventSystem.Fire(GlobalEventSystem,EventName.STARTAUTOFIGHT, false, true)
- -- end
-
- EventSystem.Fire(GlobalEventSystem,EventName.STARTAUTOFIGHT, false, true)
-
- return true
- else
- self.collect_info_con_obj:SetActive(false)--隐藏采集活动右上角数据信息栏
- self.guild_support_tip_con_obj:SetActive(false)
- self.guildCollectRewardBtn_obj:SetActive(false)--奖励预览按钮
- self.guild_collect_left_con_obj:SetActive(false)--左上角采集信息栏
- self:SetGuildSceneFuncBtn(false, {fun_id = 408, name = "封印裂隙", sort_id = 3})
- self:SetGuildSceneFuncBtn(false, {fun_id = 40899, name = "召唤社员", sort_id = 5})
- return false
- end
- return false
- end
-
- --刷新午间采集活动的信息栏
- function GuildSceneView:UpdateCollectInfoCon()
-
-
- --封印总次数
- local MaxCollectDayTimes = self.model:GetGuildCollectKvByKey("join_time_day").value
- local NowCollectDayTimes = self.model:GetDayTotalCollectTimes()
- -- local day_collect_color = NowCollectDayTimes < MaxCollectDayTimes and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
- local left_day_collect_times = MaxCollectDayTimes-NowCollectDayTimes >= 0 and MaxCollectDayTimes-NowCollectDayTimes or 0
- local day_collect_color = left_day_collect_times > 0 and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
- -- self.activityTimes_tmp.text = string.format("今日可封印次数:<size=20><color=%s>%s</color>/%s</size>",day_collect_color,left_day_collect_times,MaxCollectDayTimes)
- self.activityTimes_tmp.text = string.format("今日可封印次数:<size=20><color=%s>%s</color></size>",day_collect_color,left_day_collect_times)
-
- --本次活动封印次数
- local MaxCollectSealTimes = self.model:GetGuildCollectKvByKey("collet_time").value -- 单次午间采集活动封印的最大次数
- local NowCollectSealTimes = self.model:GetNowCollectSealTimes()
- -- local seal_color = NowCollectSealTimes < MaxCollectSealTimes and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
- local left_seal_times = MaxCollectSealTimes-NowCollectSealTimes >= 0 and MaxCollectSealTimes-NowCollectSealTimes or 0
- local true_left_seal_times = left_seal_times <= left_day_collect_times and left_seal_times or left_day_collect_times
- local seal_color = true_left_seal_times > 0 and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
- -- self.sealTimes_tmp.text = string.format("本场可封印次数:<size=20><color=%s>%s</color>/%s</size>",seal_color,left_seal_times,MaxCollectSealTimes)
- self.sealTimes_tmp.text = string.format("本场可封印次数:<size=20><color=%s>%s</color></size>",seal_color,true_left_seal_times)
-
-
- --如果采集数达到限制了,关闭自动采集状态
- if self.model:GuildCollectAutoFightIgnoreCollectMon() then
- self.model:SetAutoGuildCollectState(false)--切换采集状态
- self.model:Fire(GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE)--通知按钮变化
- end
- end
-
- --活动item展示
- function GuildSceneView:UpdateCollectRewardItem(ac_num1,ac_num2,ac_num3)
- local reward_data = DailyModel.Instance:GetRewardList(ac_num1,ac_num2,ac_num3)
- self.reward_item_creator = self.reward_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = reward_data,
- item_con = self.reward_con_collect,
- scroll_view = self.reward_scroll_collect,
- obj_pool_type = UIObjPool.UIType.AwardItem,
- item_width = 59,
- start_x = 7,
- start_y = -5,
- space_x = 20,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- on_update_item = function(item, i, v)
- local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
- if goodVo then
- item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock)
- end
- end,
- }
- self.reward_item_creator:UpdateItems(info)
- end
-
-
- --午间采集活动倒计时处理
- function GuildSceneView:UpdateCollectLeftTime(time)
- local wave_interval_time = self.model:GetGuildCollectKvByKey("total_wave").value -1
- local refresh_mon_time = self.model:GetGuildCollectKvByKey("refresh_mon_time").value
- local restTime = self.collect_stay_time - wave_interval_time*refresh_mon_time-10 --几波过完后剩余的休息时间
- local pre_str = ""
- if time >= restTime then
- if time >= self.collect_stay_time - 10 then--开场10秒立即刷怪
- time = 10 - (self.collect_stay_time - time)
- else
- time = time - restTime
- for i=1,wave_interval_time do
- if time > refresh_mon_time then
- time = time - refresh_mon_time
- end
- end
- end
- pre_str = "下一波:"
- self.next_collect_wave_label_tmp.text = string.format("下一波:<color=#fdffc2>%s</color>",TimeUtil:timeConversion(time, "MM-ss"))
- if time > 0 and time <= 10 then--此处展示倒计时
- if not self.guild_collect_tips_on then
- if self.model:IsGuildCollectActive() and self.scene_mgr:IsGuildScene() then
- local special_tip_data = {
- type = SpecialTipType.Timer2,
- sepeical_str = "下一波裂隙来袭 %s",
- show_time = time,
- }
- CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW, special_tip_data)
- self.guild_collect_tips_on = true
- else
- CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW)
- end
- end
- else
- self.guild_collect_tips_on = false
- end
- else
- pre_str = "结束时间:"
- self.next_collect_wave_label_tmp.text = "已无下一波"
- end
- self.leftTime_tmp.text = string.format("%s<size=18><color=#2CF86F>%s</color></size>",pre_str,TimeUtil:timeConversion(time, "MM-ss"))
- end
-
- --刷新场景内剩余采集怪数量显示
- function GuildSceneView:UpdateGuildCollectLeftCollectMonNum( )
- local mon_num = self.model:GetGuildCollectLeftMon()
- self.left_collect_mon_label_tmp.text = string.format("剩余裂隙:<color=#2CF86F>%s</color>",mon_num)
- end
-
- function GuildSceneView:UpdateCollectRightSupportTipCon( )
- local support_list = self.model:GetGuildSupportInfo() or {}
- support_list = DeepCopy(support_list)
- local show_support_list = {}
- local self_support_sid = self.model:GetSelfGuildCollectSupportId()
- for k,v in pairs(support_list) do
- --找到所有封印裂隙协助(包括自己请求的,协助是一个宝箱怪对应一条协助,而不是一个人对应一条,需按召唤时间先后排序)
- if v.support_cfg_id == 2 then
- v.is_in_my_support = self_support_sid == v.support_sid
- v.is_my_support = v.role_id == RoleManager.Instance.mainRoleInfo.role_id
- table.insert(show_support_list,v)
- end
- end
-
- --越早召唤的排序越前
- local sort_func = function ( a, b )
- return a.show_time < b.show_time
- end
- table.sort(show_support_list, sort_func)
-
- local finnal_show_list = {}
- finnal_show_list[1] = show_support_list[1]
- finnal_show_list[2] = show_support_list[2]
- finnal_show_list[3] = show_support_list[3]
-
- for k,v in pairs(self.guild_collect_support_tip_item_list) do
- v:SetVisible(false)
- end
- for i,v in ipairs(finnal_show_list) do
- local item = self.guild_collect_support_tip_item_list[i]
- if not item then
- item = GuildCollectSupportTip.New(self.guild_support_tip_con)
- self.guild_collect_support_tip_item_list[i] = item
- end
- item:SetVisible(true)
- item:SetData(v)
- item:SetAnchoredPosition(-1, -1-(i-1)*73)
- end
-
- --超过三个以上封印裂隙要显示查看更多协助按钮
- self.check_more_support_label_obj:SetActive(#show_support_list>3)
- end
-
- ----------- 午间采集活动 -----------end
-
- ----------- 社团boss相关逻辑 -----------start
- function GuildSceneView:CheckGuildBossEvent( )
- local noonboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNoon)
- local nightboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNight)
- local noon_open = noonboss_data and noonboss_data.is_evt_open
- local night_open = nightboss_data and nightboss_data.is_evt_open
- if noon_open or night_open then -- 活动正在进行
- self.cur_guildboss_type = noon_open and GuildEventType.GuildBossNoon or GuildEventType.GuildBossNight -- 确定本次社团boss的boss类型
- self.cur_guildboss_act_type = noon_open and 1 or 2 -- 社团boss的活动子类型
- self.boss_rank_obj:SetActive(true)
- self.inspireBtn_obj:SetActive(true)--鼓舞按钮和boss排行同时出现与消失
- self.guild_boss_pv_btn_obj:SetActive(true)
- self:UpdateInspireBtnRed()
- self:ChangeGuildBossTab(self.guildboss_tabIndex)
- self:UpdateGuildBossHp(self.model:GetGuildBossHp())
- self:UpdateGuildBossName()
- self:UpdateGuildBossInvincible(self.model:GetGuildBossInvincible())
- self:UpdateInspirePrecentage()
- self:CheckGuildBossEncourgeTipsShow(self.cur_guildboss_type)
- if not self.guild_boss_alert_cache[self.cur_guildboss_act_type] then -- 播放一次预警
- CommonController.Instance:Fire(EventName.OPEN_BOSS_ALERT_VIEW, true, 40601)
- self.guild_boss_alert_cache[self.cur_guildboss_act_type] = true
- end
- if not self.req_roll_data then
- self.req_roll_data = true
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40613)
- end
- -- 玩法开启时立即进入自动战斗
- GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
- -- 添加击杀boss的按钮
- self:SetGuildSceneFuncBtn(true, {fun_id = 406, name = "", sort_id = 4})
- self:UpdateBossRollBtn(true)
- self:SetGuildSceneFuncBtn(true, {fun_id = 40699, name = "召唤社员", sort_id = 6})
- -- 切换音乐
- --BOSS开启播放指定战斗音乐
- if not self.auto_change_boss_music then
- LuaSoundManager.Instance:StopBacksound()
- LuaSoundManager.Instance:PlayBackgroundSound("dungeon4", LuaSoundManager.SOUND_TYPE.SCENE, true)
- self.auto_change_boss_music = true
- end
- return true
- else -- 活动未开启或已结束
- self:ClearGuildBossHpTimer()
- self.boss_rank_obj:SetActive(false)
- self.inspireBtn_obj:SetActive(false)--鼓舞按钮和boss排行同时出现与消失
- self.guild_boss_pv_btn_obj:SetActive(false)
- if self.tip_show_type == self.cur_guildboss_type then -- 当前进行的是社团boss鼓舞的按钮tips,则销毁动画
- self:StopRightTopBtnTipsAction()
- self.tip_timer_bg_obj:SetActive(false)
- self.tip_show_type = nil
- end
- self:SetGuildSceneFuncBtn(false, {fun_id = 406, name = "", sort_id = 4})
- self:UpdateBossRollBtn(false)
- self:SetGuildSceneFuncBtn(false, {fun_id = 40699, name = "召唤社员", sort_id = 6})
- --BOSS结束播放会当前场景的背景音乐
- if self.auto_change_boss_music then
- LuaSoundManager.Instance:StopBacksound()
- LuaSoundManager.Instance:PlayBackground(SceneManager:getInstance():GetSceneId())
- self.auto_change_boss_music = false
- end
- return false
- end
- return false
- end
- -- 更新社团bossroll点表现
- function GuildSceneView:UpdateBossRollBtn(show_btn)
- local roll_data = self.model:GetGuildBossRollData()
- if TableSize(roll_data) > 0 or not show_btn then -- 销毁按钮的情况一定要能进去
- self:SetGuildSceneFuncBtn(show_btn, {fun_id = 4062, name = "装备掷点", sort_id = 5})
- end
- end
- -- 更新免费鼓舞按钮红点
- function GuildSceneView:UpdateInspireBtnRed( )
- local limit_free = self.model:GetGuildBossKV("free_encourage")
- local free_time = self.model:GetLeftFreeEncourageTimes()
- local has_red = limit_free - free_time > 0
- self.inspire_btn_red_obj:SetActive(has_red)
- self.inspire_btn_red_lb_tmp.text = limit_free - free_time
- if not has_red then -- 没有红点的情况,需要手动删除一次特效
- self:ClearUIEffect(self.inspireBtn_effect)
- end
- -- 没有红点且已经提示过一次tips或者点开过鼓舞界面则消除tips
- if (not has_red and self.tip_show_type == self.cur_guildboss_type) or self.is_gboss_encourage_clicked then
- -- 没红点之后就干掉这个动画
- self:StopRightTopBtnTipsAction()
- self.tip_timer_bg_obj:SetActive(false)
- self.tip_show_type = nil
- else
- if self.inspireBtn_obj.activeSelf then -- 鼓舞按钮出现了再打开动画,不然啥都不干
- self:CheckGuildBossEncourgeTipsShow(self.cur_guildboss_type)
- end
- end
- end
-
- function GuildSceneView:ChangeGuildBossTab(index)
- self.guildboss_tabIndex = index
- self.guildboss_ranktype = index == 1 and GuildBossRankType.Guild or GuildBossRankType.Personal
- -- 请求两个榜单,请求后后端会根据类型推送40604
- if self.guildboss_ranktype == GuildBossRankType.Guild then
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40603, self.cur_guildboss_act_type)
- elseif self.guildboss_ranktype == GuildBossRankType.Personal then
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40602, self.cur_guildboss_act_type)
- end
- local color_selected, color_unselected = ColorUtil:ConvertHexToRGBColor("ffffff"), ColorUtil:ConvertHexToRGBColor("9eb3cf")
- self.boss_tab1_tmp.color = index == 1 and color_selected or color_unselected
- self.boss_tab2_tmp.color = index == 2 and color_selected or color_unselected
- SetTMPSharedMaterial(self.boss_tab1_tmp, index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
- SetTMPSharedMaterial(self.boss_tab2_tmp, index == 2 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
- self.boss_tab_selected.anchoredPosition = self["boss_tab"..index].anchoredPosition
- self:UpdateGuildBossRank()
- self:UpdateBossPersonalRank()
- end
- -- 更新排行数据
- function GuildSceneView:UpdateGuildBossRank( )
- local data = self.model:GetGuildBossRank(self.cur_guildboss_type, self.guildboss_ranktype)
- self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = data,
- scroll_view = self.boss_rank_scroll,
- item_con = self.boss_rank_con,
- item_class = GuildSceneBossRankItem,
- item_height = 32,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- on_update_item = function(item, i, v)
- item:SetData(v, true)
- end,
- }
- self.rank_item_creator:UpdateItems(info)
- end
- -- 更新个体排行数据
- function GuildSceneView:UpdateBossPersonalRank( )
- -- 更新额外的排行信息
- local sub_data = self.model:GetGuildBossPersonalRank(self.cur_guildboss_type, self.guildboss_ranktype)
- if not self.guildboss_sub_rank_item then
- self.guildboss_sub_rank_item = GuildSceneBossRankItem.New(self.boss_my_rank_bg)
- end
- local mainVo = RoleManager.Instance.mainRoleInfo
- local data = {
- rank = sub_data and sub_data.rank or false,
- name = self.guildboss_ranktype == GuildBossRankType.Personal and mainVo.name or mainVo.guild_name,
- hurt = sub_data and sub_data.hp or 0,
- }
- self.guildboss_sub_rank_item:SetData(data, false, true)
- self.guildboss_sub_rank_item:SetAnchoredPosition(3, 0)
- end
- ----------- 社团boss血条 -----------start
- -- 更新boss名称(只需要跑一次,就单独写出来)
- function GuildSceneView:UpdateGuildBossName( )
- local mon_basic = ConfigItemMgr.Instance:GetMonsterDataItem(GuildModel.GuildBossId)
- self.right_boss_name_tmp.text = Trim(mon_basic.name)
- end
- -- 更新社团boss血条
- function GuildSceneView:UpdateGuildBossHp(hp_vo)
- local boos_lives = ConfigItemMgr.Instance:GetMonsterDataItem(GuildModel.GuildBossId).hp_num
-
- -- 如果怪物血量还没有压下来且前端已经存在经验表现则不进行后面的逻辑
- if hp_vo and hp_vo.hp > 1000 and self.guild_boss_hp_timer_id then return end
- -- 获取活动开始和结束的时间戳
- local evt_data = self.model:GetGuildEventByType(self.cur_guildboss_type)
- if not evt_data then return end
- local start_time = evt_data.stime
- local evt_time = Config.Guilddemonkv["continue_time"] and Config.Guilddemonkv["continue_time"].value or 600
- local end_time = (start_time + evt_time) * 1000
-
- local function guild_boss_hp_timer()
- local percentage = 0
- if not hp_vo or hp_vo.hp > 1000 then -- 血量还没压下来,前端做表现
- local left_time = (end_time - TimeUtil:getServerTimeMs()) * 0.001
- percentage = Mathf.Clamp(left_time / evt_time, 0.01, 1)
- else
- percentage = hp_vo.hp / hp_vo.hp_limit
- end
- -- 右侧的boss血条,以百分比形式展示
- self.right_boss_hp_fill_img.fillAmount = percentage
- self.right_boss_percentage_tmp.text = math.ceil(percentage * 100) .. "%"
- -- 刷新boss假血量
- self.model:SetGuildBossHpSimulation(percentage/(1/boos_lives))
- -------------------------------------------
- end
- self:ClearGuildBossHpTimer()
- self.guild_boss_hp_timer_id = GlobalTimerQuest:AddPeriodQuest(guild_boss_hp_timer, 0.2, -1)
- guild_boss_hp_timer()
- end
- function GuildSceneView:ClearGuildBossHpTimer( )
- if self.guild_boss_hp_timer_id then
- GlobalTimerQuest:CancelQuest(self.guild_boss_hp_timer_id)
- self.guild_boss_hp_timer_id = nil
- end
- end
- ----------- 社团boss血条 -----------end
- -- 更新晚间boss的狂暴特效
- function GuildSceneView:UpdateGuildBossInvincible(vo)
- if not vo then
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40606) -- 获取boss的狂暴状态
- return
- end
- local monsterVo = Scene:getInstance():GetMonsterByTypeId(GuildModel.GuildBossId)
- if monsterVo then
- if vo.mon_state == 1 then
- monsterVo:GuildBossInvincibleEffect(true, vo.etime - TimeUtil:getServerTime())
- local special_tip_data = {
- sepeical_str = "boss施放无敌技能,击破法术球可解除",
- show_time = 2,
- -- need_flash = true,
- }
- -- 打开预警文本
- CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW_TWO, special_tip_data)
- else
- monsterVo:GuildBossInvincibleEffect(false)
- -- 手动关闭预警文本
- CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW_TWO)
- end
- end
- end
- -- 社团boss寻路
- function GuildSceneView:FindGuildBossWay( )
- local call_back = function ()
- GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
- end
- -- 社团场景有两个,所以直接改为获取当前场景即可
- local scene_id = self.scene_mgr:GetSceneId()
- local pos_x,pos_y = self.model:GetGuildBossPos()
- local findVo = FindVo.New()
- findVo.type = FindVo.POINT
- findVo.sceneId = scene_id
- findVo.x = pos_x / SceneObj.LogicRealRatio.x
- findVo.y = pos_y / SceneObj.LogicRealRatio.y
- findVo.call_back = call_back
- GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT)
- Scene:getInstance():FindElement(findVo)
- end
-
- -- 社团boss鼓舞
- function GuildSceneView:ShowGuildBossEncourage(show_type,extra_param_list)
- local free_encourage_call = function()--免费鼓舞
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40608,0)
- end
- local gold_encourage_call = function()--红钻鼓舞
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40608,1)
- end
- local data = {
- [1] ={
- type_id = false,-- 鼓舞类型(免费)
- use_time = 0,-- 已鼓舞次数
- click_call = false,--点击回调
- },
- [2] ={
- type_id = false,-- 鼓舞类型(付费)
- use_time = 0,-- 已鼓舞次数
- click_call = false,--点击回调
- }
- }
- local limit_free = self.model:GetGuildBossKV("free_encourage")
- local limit_gold = stringtotable(self.model:GetGuildBossKV("bgold_encourage_cost"))[2]
- for i=1,2 do
- data[i].type_id = i
- data[i].limit = i == 1 and limit_free or limit_gold-- 鼓舞最大次数
- data[i].click_call = i == 1 and free_encourage_call or gold_encourage_call
- data[i].use_time = i == 1 and self.model:GetLeftFreeEncourageTimes()
- or self.model:GetleftCostEncourageTimes()
- end
-
- local encourageType = EncourageTips.EncourageType.GuildBoss
- GlobalEventSystem:Fire(EventName.SHOW_ENCOURAGE_TIPS,show_type,data,encourageType,extra_param_list)
- -- 更新鼓舞加成百分比
- self:UpdateInspirePrecentage()
- -- 已经点击了鼓舞按钮,需要更新按钮tips
- if not self.is_gboss_encourage_clicked then
- self.is_gboss_encourage_clicked = true
- self:UpdateInspireBtnRed()
- end
- end
- -- 更新鼓舞加成百分比
- function GuildSceneView:UpdateInspirePrecentage( )
- local insipre_times = self.model:GetEncourageGuildTimes()
- local damage_percentage = self.model:GetGuildBossKV("encourage_hurt") / 100 --万分比伤害,这里除去100拿百分比伤害
- self.inspire_lb_tmp.text = string.format("当前%s%%", HtmlColorTxt("+" .. insipre_times * damage_percentage, "#fdffc2"))
- end
- -- boss掉落小窗提示
- function GuildSceneView:ShowGuildBossDropDialogueTip(vo)
- local boss_tips = {
- [1] = "不痛不痒,这点奖励就赏赐给你们吧!",
- [2] = "不痛不痒,这点奖励就赏赐给你们吧!",
- [3] = "你们很强,这点奖励就赏赐给你们吧!",
- [4] = "你们很强,这点奖励就赏赐给你们吧!",
- [5] = "你们让我感受到了一点点吃力!这是给你们的赏赐!",
- [6] = "你们让我感受到了一点点吃力!这是给你们的赏赐!",
- [7] = "你们让我感受到了一点点吃力!这是给你们的赏赐!",
- [8] = "可恶!我快坚持不住了,给你们我的宝物!",
- [9] = "可恶!我快坚持不住了,给你们我的宝物!",
- [10] = "可恶!我的宝物都给你们,放过我吧!",
- }
- local mon_cfg = ConfigItemMgr.Instance:GetMonsterDataItem(vo.boss)
- local dialogue_data = {
- head_type = 1000,
- desc = boss_tips[vo.click],
- head_name = Trim(mon_cfg.name),
- hide_time = 3,
- dalay_time = 0.1,
- is_task_type = false,
- }
- GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW, dialogue_data)
- end
- -- 检查社团boss鼓舞按钮tips
- function GuildSceneView:CheckGuildBossEncourgeTipsShow(type)
- if self.tip_show_type == type then return end -- 已经存在了就什么也不做
- local limit_free = self.model:GetGuildBossKV("free_encourage")
- local free_time = self.model:GetLeftFreeEncourageTimes()
- if limit_free - free_time > 0 then -- 存在次数,就展示tips
- -- local tips_data = {
- -- str = "鼓舞可增加社团全体成员伤害",
- -- time = -1,
- -- pos = Vector2(-90, -85) + self.inspireBtn.anchoredPosition,
- -- }
- -- self:StartRightTopBtnTipsAction(tips_data)
- self.tip_show_type = type
- self:ClearUIEffect(self.inspireBtn_effect)
- self:AddUIEffect("ui_bianqiang", self.inspireBtn_effect, "Scene", nil, {x=1,y=1}, true, nil,nil,nil,nil,nil,UIPartical.RenderingOther_List.UIBackward)
- end
- end
- ----------- 社团boss相关逻辑 -----------end
-
- ----------- 社团派对相关逻辑 -----------start
- function GuildSceneView:CheckGuildPartyEvent( )
- local party_data = self.model:GetGuildEventByType(GuildEventType.GuildParty)
- if party_data and party_data.is_evt_open then
- self.party_con_obj:SetActive(true)
- self.dance_eff_con_obj:SetActive(true)
- self:UpdatePartyExpEffData()
- self:UpdateGuildPartyTimer()
- self:GuildPartyGoDance()
- self:UpdateGuildPartyExp()
- self:BindPartyManulEvent()
- self:CreatePartyRoleEffect()
- self.model:CreateGuildPartyMonster()
- self:ShowDanceEffNode(not MainUIModel:getInstance():GetDialogueActionFlag())
- self:SetGuildSceneFuncBtn(true, {fun_id = 4007, name = "", sort_id = 1})
- self:SetGuildSceneFuncBtn(true, {fun_id = 400799, name = "召唤社员", sort_id = 5})
- if not self.auto_change_party_music then
- self:OnClickChangeBGM(1)
- self.auto_change_party_music = true
- end
- return true
- else
- self:ClearGuildPartyTimer()
- self:CancelBindPartyManulEvent()
- self:ClearUserManulEvent()
- self:RemovePartyRoleEffect()
- self.party_con_obj:SetActive(false)
- self.dance_eff_con_obj:SetActive(false)
- self.model:DeleteGuildPartyMonster()
- -- 活动结束直接发取消跳舞的协议
- -- self.model:Fire(GuildModel.CHANGE_GUILDDANCE_ACTION, 0)
- DanceModel:getInstance():Fire(DanceModel.CHANGE_DANCE_STATUS, false)
- self:SetGuildSceneFuncBtn(false, {fun_id = 4007, name = "", sort_id = 1})
- self:SetGuildSceneFuncBtn(false, {fun_id = 400799, name = "召唤社员", sort_id = 5})
- -- self:OnClickChangeBGM(2)
- if self.need_reset_scene_bgm or self.auto_change_party_music then -- 重置为场景的bgm
- LuaSoundManager.Instance:PlayBackground(self.scene_mgr:GetSceneId())
- self.need_reset_scene_bgm = false
- self.auto_change_party_music = false
- end
- return false
- end
- return false
- end
-
- -- 初始化社团派对经验值效率数据
- function GuildSceneView:UpdatePartyExpEffData( )
- local eff_list = self.model:GetGuildPartyEffRadioCfg()
- for i, v in ipairs(eff_list) do
- self.dance_eff_num_list[i].txt.text = string.format("%s-%s", v.num_min, v.num_max)
- self.dance_eff_val_list[i].txt.text = v.radio / 100 .. "%"
- end
- end
-
- -- 设置社团派对倒计时(只加载一次)
- function GuildSceneView:UpdateGuildPartyTimer( )
- self:ClearGuildPartyTimer()
- local party_data = self.model:GetGuildEventByType(GuildEventType.GuildParty)
- if party_data and party_data.stime and party_data.etime then
- local left_time, event_stage, special_tip_data -- 剩余时间,活动阶段和顶部文本结构体
- local function guildPartyTimerFunc()
- left_time = party_data.etime - TimeUtil:getServerTime()
- if left_time > 0 then
- self.party_timer_tmp.text = string.format("<color=%s>%s</color>", ColorUtil.GREEN_DARK,TimeUtil:convertTimeWithoutHour(left_time))
- if TimeUtil:getServerTime() - party_data.stime > 60
- and TimeUtil:getServerTime() - party_data.stime <= 120
- and not self.show_guildTv_tips then -- 活动开始3分钟后5分钟前,展示预告活动
- self.show_guildTv_tips = true
-
- special_tip_data = {
- type = SpecialTipType.Timer1,
- sepeical_str = "赛马竞猜将在%s秒后开始",
- need_flash = false,
- show_time = 60,
- }
- CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW, special_tip_data)
- end
- else
- self.party_timer_tmp.text = "<color=#fa1022>已结束</color>"
- end
- end
- guildPartyTimerFunc()
- self.guild_party_timer_id = GlobalTimerQuest:AddPeriodQuest(guildPartyTimerFunc, 1, -1)
- end
- end
- function GuildSceneView:ClearGuildPartyTimer( )
- if self.guild_party_timer_id then
- GlobalTimerQuest:CancelQuest(self.guild_party_timer_id)
- self.guild_party_timer_id = nil
- end
- end
-
- -- 仅在社团热舞活动中开启对玩家操作的监听,如果在热舞状态下进行某些操作则要发送协议中断热舞
- function GuildSceneView:CancelDanceWhileUserManul(skill_force)
- -- local exp, pos = self.model:GetGuildPartyExpData()
- local dance_status = self.main_vo.dance_status
- if dance_status ~= 0
- and (not self.is_moving_to_dance or skill_force)
- and not self.model._waiting_12025_respon then -- 热舞状态则发送协议中断,多变量限制防止频繁请求
- -- self.model:Fire(GuildModel.CHANGE_GUILDDANCE_ACTION, 0)
- DanceModel:getInstance():Fire(DanceModel.CHANGE_DANCE_STATUS, false)
- end
- end
- function GuildSceneView:BindPartyManulEvent( )
- if not self.party_move_event_id then -- 对移动的监听
- local function cancelDanceWhileMoving()
- self:CancelDanceWhileUserManul()
- end
- self.party_move_event_id = GlobalEventSystem:Bind(ObjectEventType.MAINROLE_MOVE_EVENT_IMME, cancelDanceWhileMoving)
- end
- if not self.party_skill_event_id then -- 对技能的监听
- local function cancelDanceWhileUseSkill()
- self.last_use_skill_time = Status.NowTime
- self:CancelDanceWhileUserManul(true)
- end
- self.party_skill_event_id = GlobalEventSystem:Bind(FightEvent.SKILL_SHORTCUT_CLICK, cancelDanceWhileUseSkill)
- end
- if not self.dance_status_change_id then -- 跳舞状态变化的监听
- local function updateGuildDanceStatus()
- self:GuildPartyGoDance()
- end
- self.dance_status_change_id = self.main_vo:BindOne("dance_status", updateGuildDanceStatus)
- end
- end
-
- function GuildSceneView:CancelBindPartyManulEvent( )
- if self.party_move_event_id then
- GlobalEventSystem:UnBind(self.party_move_event_id)
- self.party_move_event_id = nil
- end
-
- if self.party_skill_event_id then
- GlobalEventSystem:UnBind(self.party_skill_event_id)
- self.party_skill_event_id = nil
- end
-
- if self.dance_status_change_id then
- self.main_vo:UnBind(self.dance_status_change_id)
- self.dance_status_change_id = nil
- end
- end
- -- 更新社团派对经验值信息
- function GuildSceneView:UpdateGuildPartyExp( )
- local exp = self.model:GetGuildPartyExpData()
-
- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.PEACH_EXP--是否存在公会晚宴经验buff
- local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
- -- buff_info = {etime = TimeUtil:getServerTime( )+300}
- -- buff_cfg = {data = 100}
- if buff_cfg and buff_info then--存在
- local sec = buff_info.etime - TimeUtil:getServerTime( )
- if sec > 0 then
- lua_resM:setOutsideImageSprite(self, self.buffBtn_img, GameResPath.GetOperateActImage("ms_buff_btn_kind_1"), true)
- self.buffBtn_obj:SetActive(true)
- self.party_exp_tmp.text = string.format("<size=80%%>累计经验:<color=%s>%s</color>\n<color=%s>限时活动已加成+%s%%</color></size>", ColorUtil.GREEN_DARK, WordManager:ConvertNum(exp, true),ColorUtil.ORANGE_DARK,buff_cfg.data)
- self:ActBuffTimeLate(sec)
- else
- self.buffBtn_obj:SetActive(false)
- self.party_exp_tmp.text = string.format("累计经验:<color=%s>%s</color>", ColorUtil.GREEN_DARK, WordManager:ConvertNum(exp, true))
- end
- else
- self.buffBtn_obj:SetActive(false)
- self.party_exp_tmp.text = string.format("累计经验:<color=%s>%s</color>", ColorUtil.GREEN_DARK, WordManager:ConvertNum(exp, true))
- end
-
- -- 场景人数和效率万分比
- local num, eff = self.model:GetGuildSceneMemberNum()
- self.dance_mem_num_tmp.text = string.format("参与活动成员:<color=%s>%s人</color>", ColorUtil.YELLOW_DARK, num)
- self.dance_eff_lb_tmp.text = string.format("经验加成+%s%%", eff / 100)
- -- 获取挂机效率
- local eff_per_min = self.model:GetGuildPartyExpEffPerMin()
- local extra_str = eff > 0 and string.format("(+%s%%)", eff / 100) or ""
- self.dance_exp_eff_tmp.text = string.format("%s/分%s", eff_per_min, extra_str)
- --self.party_buff_txt.text = string.format("热舞经验加成:<color=#0ce148>%s</color>", pos == 0 and "0%" or "10%")--热舞经验收益获得功能取消20/05/26
- end
-
- --公会晚宴经验BUFF时间倒计时
- function GuildSceneView:ActBuffTimeLate( sec )
- if self.is_loaded then
- if self.act_buff_timer_id then
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- end
- if self.sec == sec then
- return
- else
- self.sec = sec
- end
- local sec = sec or 0
- if sec > 0 then
- local function onTimer()
- sec = sec - 1
- if sec > 0 then
-
- else
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- self:UpdateGuildPartyExp()
- end
- end
- if not self.act_buff_timer_id then
- self.act_buff_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
- end
- onTimer()
- else
- self:UpdateGuildPartyExp()
- end
- end
- end
-
- -- 社团场景内跳舞寻路逻辑(包括玩家静止15秒后进入热舞状态,进入热舞状态的寻路以及寻路状态中打断热舞相关的逻辑)
- function GuildSceneView:GuildPartyGoDance()
- -- 获取热舞状态 0:无 1:热舞中
- local dance_status = self.main_vo.dance_status
- -- 发送跳舞协议
- local function sendDanceReq()
- Message.show("开始热舞")
- -- self.model:Fire(GuildModel.CHANGE_GUILDDANCE_ACTION, 1)
- DanceModel:getInstance():Fire(DanceModel.CHANGE_DANCE_STATUS, true)
- self:ClearUserManulEvent()
- self.is_moving_to_dance = false
- end
- if self.dance_last_status ~= dance_status then -- 协议返回的位置不同再进行寻路逻辑
- if dance_status == 0 then -- 非热舞状态
- if self.is_moving_to_dance then
- OperateManager.Instance:StopMove()
- end
- if self.dance_last_status ~= -1 then
- Message.show("取消热舞")
- end
- self.is_moving_to_dance = false
- -- 玩家手动取消热舞的时间也用这个来保存
- self.last_use_skill_time = Status.NowTime
- local function userManulEvent()
- -- 距上次移动操作和技能操作都超过5秒才可自动进入热舞
- if Status.NowTime - Scene.Instance.user_manul_time >= 5
- and Status.NowTime - self.last_use_skill_time >= 5 then
- -- 计时器跑完时再获取一次跳舞状态
- dance_status = self.main_vo.dance_status
- if dance_status == 0 and not self.model._waiting_12025_respon then
- sendDanceReq()
- self.is_moving_to_dance = false
- self:ClearUserManulEvent()
- end
- end
- end
- self:ClearUserManulEvent()
- self.user_manul_event_id = GlobalTimerQuest:AddPeriodQuest(userManulEvent, 0.1, -1)
- else
- self.is_moving_to_dance = false
- end
- self.dance_last_status = dance_status
- end
- end
- -- 清除掉玩家操作事件的绑定
- function GuildSceneView:ClearUserManulEvent( )
- if self.user_manul_event_id then
- GlobalTimerQuest:CancelQuest(self.user_manul_event_id)
- self.user_manul_event_id = nil
- end
- end
-
- -- 热舞玩法中,玩家挂载特效,活动结束后消失
- function GuildSceneView:CreatePartyRoleEffect( )
- if not self.party_role_effect_id then
- -- 播放剧情气泡
- local dialogue_data = {
- head_type = 1004,
- desc = "尽情热舞享受晚宴吧,热舞可持续获得巨额经验哦!",
- head_name = "社团助手",
- hide_time = 3,
- dalay_time = 0,
- is_task_type = false,
- }
- GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW, dialogue_data)
- local main_role = Scene:getInstance():GetMainRole()
- if main_role then
- self.party_role_effect_id = ParticleManager.Instance:AddTargetEffect("buffparticle_400_1", main_role.compress_id, false, nil, nil, 7, nil)
- end
- end
- end
- -- 清除掉社团场景内跳舞的特效
- function GuildSceneView:RemovePartyRoleEffect( )
- if self.party_role_effect_id then
- ParticleManager:getInstance():DelEffect(self.party_role_effect_id)
- self.party_role_effect_id = nil
- end
- end
- -- 显示隐藏热舞效率节点
- function GuildSceneView:ShowDanceEffNode(show, force)
- local target_alpha = show and 1 or 0
- if force then
- self.dance_eff_con_cg.alpha = target_alpha
- else
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.dance_eff_con)
- local function action_alpha_callback(percent)
- self.dance_eff_con_cg.alpha = show and percent or (1 - percent)
- end
- local action_alpha = cc.CustomUpdate.New(0.3, action_alpha_callback)
- cc.ActionManager:getInstance():addAction(action_alpha, self.dance_eff_con)
- end
- end
- ----------- 社团派对相关逻辑 -----------end
-
- ----------- 赛马竞猜 -----------start
- function GuildSceneView:CheckGuildTVEvent( )
- local guildTV_base_info = GuildTVModel.Instance:GetGuildTVBaseInfo()
- if guildTV_base_info.state == 1 or guildTV_base_info.state == 2 then
- self:SetGuildSceneFuncBtn(true, {fun_id = 1420, name = "赛马", sort_id = 2})
- else
- self:SetGuildSceneFuncBtn(false, {fun_id = 1420, name = "赛马", sort_id = 2})
- end
- end
- ----------- 赛马竞猜 -----------end
-
- -- 动态创建界面中部预告或功能按钮 flag:添加or删除 data = {fun_id = xxx, name = xxx, sort_id = xxx}
- function GuildSceneView:SetGuildSceneFuncBtn(add, data)
- if not data then return end
- if add then
- if self.fun_icon_cache[data.fun_id] then return end -- 已存在该按钮不处理添加逻辑
- self.fun_icon_cache[data.fun_id] = data
- end
- if not add then
- if not self.fun_icon_cache[data.fun_id] then return end -- 不存在该按钮不处理删除逻辑
- self.fun_icon_cache[data.fun_id] = nil
- end
- -- 更新按钮和位置,故需要重新排序
- local list, item = {}, nil
- for k, v in pairs(self.fun_icon_cache) do
- list[#list+1] = v
- end
- local sort_func = function ( a, b )
- return a.sort_id < b.sort_id
- end
- table.sort(list, sort_func)
- for k, v in ipairs(list) do
- item = self.fun_icon_list[k]
- if not item then
- item = GuildSceneEventBtnItem.New(self.func_btn_con)
- self.fun_icon_list[k] = item
- end
- item:SetAnchoredPosition(self.func_btn_con.sizeDelta.x/2 + ((k-1) - #list/2) * 97 + 10, 0)
- item:SetData(v)
- item:SetVisible(true)
- end
- if #self.fun_icon_list > #list then
- for k = #list+1, #self.fun_icon_list do
- self.fun_icon_list[k]:SetVisible(false)
- end
- end
- end
-
- -- 2020年8月17日新增 增加社团场景内的按钮可根据自己构建的数据结构展示按钮闪烁tips
- -- tips_data = {
- -- time = 展示多少秒,-1代表一直展示
- -- str = 展示的文本内容
- -- pos = 需要一个坐标来定位节点位置,因为这个tips节点跟按钮同级
- -- blink = 是否需要闪烁
- --}
- function GuildSceneView:StartRightTopBtnTipsAction(tips_data)
- if not tips_data then return end
- self:StopRightTopBtnTipsAction()
- self.tip_timer_bg_obj:SetActive(true)
- self.tip_timer_bg.anchoredPosition = tips_data.pos
- self.tip_timer_bg_canvas.alpha = 0
- if tips_data.blink then
- -- 添加cc动画
- local function show_icon_func( percent )
- self.tip_timer_bg_canvas.alpha = percent
- end
- local show_update = cc.CustomUpdate.New(0.7,show_icon_func)
- local function hide_icon_func( percent )
- self.tip_timer_bg_canvas.alpha = 1 - percent
- end
- local hide_update = cc.CustomUpdate.New(0.7,hide_icon_func)
- local action = cc.Sequence.New(show_update,hide_update)
- cc.ActionManager:getInstance():addAction(cc.RepeatForever.New(action), self.tip_timer_bg)
- else
- self.tip_timer_bg_canvas.alpha = 1
- end
- -- 添加计时器
- if tips_data.time ~= -1 then
- local end_time = TimeUtil:getServerTime() + tips_data.time
- local need_append_time = string.find(tips_data.str, "%%s")
- local function rt_btn_tips_timer()
- local left_time = end_time - TimeUtil:getServerTime()
- left_time = left_time > 0 and left_time or 0
- self.tip_timer_tmp.text = need_append_time and string.format(tips_data.str, left_time) or tips_data.str
- SetSizeDelta(self.tip_timer_bg, self.tip_timer_tmp.preferredWidth + 12, self.tip_timer_tmp.preferredHeight + 27)
- if left_time <= 0 then
- self.tip_timer_bg_obj:SetActive(false)
- self.tip_show_type = nil
- self:StopRightTopBtnTipsAction()
- end
- end
- rt_btn_tips_timer()
- self.rt_btn_tips_timer_id = GlobalTimerQuest:AddPeriodQuest(rt_btn_tips_timer, 1, -1)
- else
- self.tip_timer_tmp.text = tips_data.str
- SetSizeDelta(self.tip_timer_bg, self.tip_timer_tmp.preferredWidth + 12, self.tip_timer_tmp.preferredHeight + 27)
- end
- end
-
- function GuildSceneView:StopRightTopBtnTipsAction( )
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.tip_timer_bg)
- if self.rt_btn_tips_timer_id then
- GlobalTimerQuest:CancelQuest(self.rt_btn_tips_timer_id)
- self.rt_btn_tips_timer_id = nil
- end
- end
-
- function GuildSceneView:DestroySuccess( )
- for k,v in pairs(self.rightIcon_tween) do
- TweenLite.Stop(v)
- end
-
- if self.guildboss_sub_rank_item then
- self.guildboss_sub_rank_item:DeleteMe()
- self.guildboss_sub_rank_item = nil
- end
-
- if self.update_guildboss_hp_id then
- self.model:UnBind(self.update_guildboss_hp_id)
- self.update_guildboss_hp_id = nil
- end
- self:ClearGuildBossHpTimer()
- self:ClearGuildPartyTimer()
- self:CancelBindPartyManulEvent()
- self:ClearUserManulEvent()
- self:RemovePartyRoleEffect()
- self.model:DeleteGuildPartyMonster()
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.dance_eff_con)
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.right_info_con)
- if self.update_encourage_handler_1 then
- self.model:UnBind(self.update_encourage_handler_1)
- self.update_encourage_handler_1 = nil
- end
-
- if self.update_encourage_handler_2 then
- self.model:UnBind(self.update_encourage_handler_2)
- self.update_encourage_handler_2 = nil
- end
-
- if self.update_encourage_handler_3 then
- self.model:UnBind(self.update_encourage_handler_3)
- self.update_encourage_handler_3 = nil
- end
-
- for k, v in pairs(self.fun_icon_list) do
- v:DeleteMe()
- v = nil
- end
- self.fun_icon_list = nil
-
- for k, v in pairs(self.guild_collect_support_tip_item_list) do
- v:DeleteMe()
- v = nil
- end
- self.guild_collect_support_tip_item_list = {}
-
- if self.collect_view then
- self.collect_view:DeleteMe()
- self.collect_view = nil
- end
- self:ClearEventTrailerTimer()
-
- self:StopRightTopBtnTipsAction()
-
- -- if self.refresh_guild_info_id then
- -- self.model:UnBind(self.refresh_guild_info_id)
- -- self.refresh_guild_info_id = nil
- -- end
- if self.guild_auction_item then
- self.guild_auction_item:DeleteMe()
- self.guild_auction_item = false
- end
-
- if self.act_buff_timer_id then
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- end
-
- self.model:ClearGuildIgnoreCollection()
- self:ClearUIEffect(self.inspireBtn_effect)
- GlobalEventSystem:Fire(EventName.HIDE_EXIT_BTN_STATE) -- 隐藏
- end
-
- -- function GuildSceneView:CheckGuildAuctionTipsShow( )
- -- if GuildModel:getInstance():IsGuildAuctionShow() then
- -- if not self.guild_auction_item then
- -- self.guild_auction_item = GuildBossSceneAuctionTips.New(self.guild_aucion_con)
- -- end
- -- self.guild_auction_item:SetData()
- -- else
- -- if self.guild_auction_item then
- -- self.guild_auction_item:DeleteMe()
- -- self.guild_auction_item = false
- -- end
- -- end
- -- end
-
- -- 点击切换BGM
- function GuildSceneView:OnClickChangeBGM( bgm_index )
- if bgm_index == 1 then
- self.party_btn1_chosen_obj:SetActive(true)
- self.party_btn2_chosen_obj:SetActive(false)
- LuaSoundManager.Instance:StopBacksound()
- LuaSoundManager.Instance:PlayBackgroundSound("dance", LuaSoundManager.SOUND_TYPE.SCENE, true)
- elseif bgm_index == 2 then
- self.party_btn1_chosen_obj:SetActive(false)
- self.party_btn2_chosen_obj:SetActive(true)
- LuaSoundManager.Instance:StopBacksound()
- LuaSoundManager.Instance:PlayBackgroundSound("field3", LuaSoundManager.SOUND_TYPE.SCENE, true)
- end
- self.need_reset_scene_bgm = true
- end
|