require("game.proto.418.Require418") require("game.beach.BeachModel") require("game.beach.BeachConst") require("game.beach.view.BeachResultView")--活动结算界面 require("game.beach.view.BeachVoteTimeShowTip")--投票剩余次数组件 require("game.beach.view.BeachVoteView") require("game.beach.view.BeachBuyTip")--投票购买界面 require("game.beach.view.BeachRankBaseView")--榜单界面 require("game.beach.view.BeachRankItem")--排行榜 require("game.beach.view.BeachRankView")--排行榜 require("game.beach.view.BeachRoleItem")--排行榜 require("game.beach.view.BeachRoleView")--排行榜 require("game.beach.view.BeachSceneView")--海滩场景 require("game.beach.view.BeachChatView")--聊天界面 require("game.beach.view.BeachMainView")--聊天界面 require("game.beach.view.BeachMainRankItem")--聊天界面 require("game.beach.view.BeachQuickChatItem")--聊天界面 BeachController = BeachController or BaseClass(BaseController) function BeachController:__init() BeachController.Instance = self self.model = BeachModel:GetInstance() self:RegisterProtocals() self:InitEvent() end function BeachController:ShowErrow( res ) if 4180009 == res then else ErrorCodeShow(res) end end function BeachController:RegisterProtocals() local register_cfg = { [41800] = {--错误码展示 handler = function(self,scmd) print('----LZR BeachController.lua 舞池派对返回码-- scmd.res=',scmd.res) if scmd.res == 1006 then GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.FAULT) local function recharge_call( ) if self.beachbuytip then self.beachbuytip:Close() end end local qc_data = { close_callback = recharge_call, } GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true, qc_data) else self:ShowErrow(scmd.res) end end, }, [41801] = { req_event_data = {BeachConst.REQ_ACTIVITY_STATUS},req_func = false, handler = function(self,scmd) --活动状态 --status 0-关闭 1-准备 2-进行中 3-发奖励(初定) scmd.end_time = scmd.start_time + scmd.duration + 5 self.model:SetActivityInfo(scmd) ------------------------- local curTime = TimeUtil:getServerTime() local status_time = scmd.end_time - curTime if scmd.status ~= 0 and status_time > 0 then ActivityIconManager:getInstance():addIcon(418, status_time) if self.model.need_show_activity_tip then if not SceneManager.Instance:IsBeachScene() then -- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 418,nil,true) end self.model.need_show_activity_tip = false end ChatModel:getInstance():ClearAllMsgDataByChannel(ChatModel.CHANNEL_BEACH) else ActivityIconManager:getInstance():deleteIcon(418) self.model.need_show_activity_tip = true GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 418,nil) end ------------------------- self.model:Fire(BeachConst.ANS_ACTIVITY_STATUS) end, }, [41802] = {--进入场景 req_event_data = {BeachConst.REQ_ENTER_SCENE},req_func = false, handler = function(self,scmd) if scmd.rcode == 1 then GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS) Message.show("进入成功!") else self:ShowErrow(scmd.rcode) end end, }, [41803] = {--退出场景 req_event_data = {BeachConst.REQ_QUIT_SCENE},req_func = false, handler = function(self,scmd) if scmd.rcode == 1 then GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS) Message.show("退出成功!") else self:ShowErrow(scmd.rcode) end end, }, [41804] = {--个人信息 req_event_data = {BeachConst.REQ_MY_ACTIVITY_INFO},req_func = false, handler = function(self,scmd) self.model:SetMyInfo( scmd ) self.model:Fire(BeachConst.ANS_MY_ACTIVITY_INFO) end, }, [41805] = {--投票排行榜 req_event_data = {BeachConst.REQ_RANK_INFO,"c"},req_func = false, handler_manual = function(self) --情况特殊需要手写协议 local function get41805( ) local data = {} data.self_rank = UserMsgAdapter.ReadFmt("i") or 0 data.self_be_voted = UserMsgAdapter.ReadFmt("i") or 0 local len0 = UserMsgAdapter.ReadFmt("h") or 0 data.rank_list = data.rank_list or {} local vo0 = nil for i = 1,len0 do local role_vo = RoleVo.New() role_vo.rank=UserMsgAdapter.ReadFmt("i") or 0 role_vo.be_voted=UserMsgAdapter.ReadFmt("i") or 0 role_vo.figure=FigureProtoVo.ReadFmt(role_vo) role_vo.server_id=UserMsgAdapter.ReadFmt("h") or 0 role_vo.have_vote=UserMsgAdapter.ReadFmt("c") or 0 table.insert(data.rank_list,role_vo) end local len1 = UserMsgAdapter.ReadFmt("h") or 0 data.left_rank = data.left_rank or {} local vo1 = nil for i = 1,len1 do vo1 = {} vo1.rank=UserMsgAdapter.ReadFmt("i") or 0 vo1.be_voted=UserMsgAdapter.ReadFmt("i") or 0 vo1.picture=PictureProtoVo.ReadFmt(vo1) vo1.server_id=UserMsgAdapter.ReadFmt("h") or 0 vo1.have_vote=UserMsgAdapter.ReadFmt("c") or 0 table.insert(data.left_rank,vo1) end return data end ------------------------- ------------------------- local scmd = get41805() self.model:SetVoteRankInfo( scmd ) self.model:Fire(BeachConst.ANS_RANK_INFO) ----------------------- --提取第一名的信息创造更新场景假人 for k,v in pairs(scmd.rank_list) do if v.rank == 1 then local fake_data = DeepCopy(v) fake_data.role_id = BeachConst.FakeRoleId fake_data.is_fake_role = true fake_data.server_num = fake_data.server_num or fake_data.server_id local pos_data = self.model:GetKeyValue( "solo_dance_point" ) pos_data = stringtotable(pos_data) fake_data.pos_x = tonumber(pos_data[1]) fake_data.pos_y = tonumber(pos_data[2]) ------------------------- fake_data.hatred = 0 fake_data.dance_status = 1 ------------------------- local role = Scene.Instance:GetRole(BeachConst.FakeRoleId) local role_vo = SceneManager.Instance:GetRoleVo(BeachConst.FakeRoleId) if not role and not role_vo then ------------------------- --为了避免可能的重复加载,就不做延迟了吧 SceneManager.Instance:AddRoleVo(fake_data) else for a,b in pairs(fake_data) do role_vo[a] = b end role:InitRoleVo(role_vo) role:LoadInfoFromVo() role_vo:RefreshFosterData() end break end end ------------------------- end, }, [41806] = {--增加经验 req_event_data = {BeachConst.REQ_EXP_CHANGE},req_func = false, handler = function(self,scmd) if scmd.rcode == 1 then self.model:RefreshMyExp( scmd.add_exp ) self.model:Fire(BeachConst.ANS_EXP_CHANGE) else self:ShowErrow(scmd.rcode) end end, }, [41807] = {--魅力第一(舞台solo者) handler = function(self,scmd) self.model:SetTopInfo(scmd) self.model:Fire(BeachConst.ANS_TOP_INFO) end, }, [41808] = {--投票 -- 不能给自己投票哦 req_event_data = {BeachConst.REQ_TRY_VOTE,"l"},req_func = function(self,role_id) if role_id == RoleManager.Instance.mainRoleInfo.role_id then Message.show("不能给自己投票哦") else self:SendFmtToGame(41808,"l",role_id) end end, handler = function(self,scmd) if scmd.rcode == 1 then GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS) Message.show("投票成功!") self.model:SetVoteClock() self.model:RefreshMyVoteNum( scmd.vote_times,nil,scmd.vote_other_time ) self.model:Fire(BeachConst.ANS_TRY_VOTE) self.model:Fire(BeachConst.REQ_MY_ACTIVITY_INFO)--投票后刷一下界面 local len = self.model:GetCurRankSetSCMDLength( ) self.model:Fire(BeachConst.REQ_RANK_INFO,len) else ErrorCodeShow(scmd.rcode) end end, }, [41809] = {--我的投票列表(谁投了我) req_event_data = {BeachConst.REQ_MY_VOTE_INFO},req_func = false, handler = function(self,scmd) self.model:SetMyVoteList(scmd.role_list) self.model:Fire(BeachConst.ANS_MY_VOTE_INFO) end, }, [41811] = {--购买投票次数 req_event_data = {BeachConst.REQ_BUY_VOTE_TIME,"c"},req_func = false, handler = function(self,scmd) GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS) Message.show("购买成功!") self.model:RefreshMyVoteNum( scmd.vote_times,scmd.has_buy_times,nil ) self.model:Fire(BeachConst.ANS_BUY_VOTE_TIME) end, }, [41812] = {--推送协议(投票红点) handler = function(self,scmd) self.model.vote_red_dot = true self.model:Fire(BeachConst.RED_DOT) end, }, [41813] = {--广播投票弹窗 handler = function(self,scmd) local data = { role_vo_1 = scmd, --我方 role_vo_2 = nil, --敌方 type = 1, --UI类型 desc = string.format("投票给了 %s", scmd.be_voted_name), --描述 max_num = 3, --同时显示最大数量 need_cut_str = true, } if SceneManager:getInstance():IsShowDynamicInfoScene() then GlobalEventSystem:Fire(EventName.SHOW_DYNAMIC_INFO_TIP, data) end ------------------------- end, }, } self:RegisterProtocalByCFG(register_cfg) end function BeachController:InitEvent() local function change_account() if self.beachsceneview then self.beachsceneview:Close() end end GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,change_account) GlobalEventSystem:Bind(EventName.CHANGE_ROLE,change_account) local function onGameStartHandler(level) if GetModuleIsOpen(418) then self.model:Fire(BeachConst.REQ_ACTIVITY_STATUS) end end self:Bind(EventName.GAME_START, onGameStartHandler) RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, function (level) if GetModuleOpenLevel( 418,0) == level and GetModuleIsOpen(418) then self.model:Fire(BeachConst.REQ_ACTIVITY_STATUS) end end) local function onSceneStartHandler( ) self:ChangeScene() end self:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, onSceneStartHandler) local function OPEN_ACITVITY_RESULT( data ) self.beachresultview = self.beachresultview or BeachResultView.New() self.beachresultview:Open(data) end self.model:Bind(BeachConst.OPEN_ACITVITY_RESULT,OPEN_ACITVITY_RESULT) local function OPEN_BUY_VOTE( ) self.beachbuytip = self.beachbuytip or BeachBuyTip.New() self.beachbuytip:Open() end self.model:Bind(BeachConst.OPEN_BUY_VOTE,OPEN_BUY_VOTE) local function OPEN_RANK_BASE_VIEW( ) self.beachrankbaseview = self.beachrankbaseview or BeachRankBaseView.New() self.beachrankbaseview:Open() end self.model:Bind(BeachConst.OPEN_RANK_BASE_VIEW,OPEN_RANK_BASE_VIEW) local function OPEN_MAIN_CHAT_VIEW( extra_params ) self.beachmainview = self.beachmainview or BeachMainView.New() self.beachmainview:Open(extra_params) end self.model:Bind(BeachConst.OPEN_MAIN_CHAT_VIEW,OPEN_MAIN_CHAT_VIEW) local function OPEN_VOTE_VIEW( data ) self.beachvoteview = self.beachvoteview or BeachVoteView.New() self.beachvoteview:Open( data ) end self.model:Bind(BeachConst.OPEN_VOTE_VIEW,OPEN_VOTE_VIEW) -- local function CHANGE_DANCE_STATUS( flag,force ) -- local main_role = Scene.Instance:GetMainRole() -- if (flag and flag > 0) and main_role and main_role:IsInState(PoseState.ATTACK) then -- Message.show("正在战斗中,请停下战后再跳舞!") -- return -- end -- local is_ride = RoleManager:getInstance():GetMainRoleVo() and (RoleManager:getInstance():GetMainRoleVo().is_ride ~= 0) -- if is_ride and (flag ~= 0) then -- GlobalEventSystem:Fire(EventName.HIDE_HORSE) -- end -- --int:8 动作0取消 后续数字为指定动作 1祝火2温泉跳舞 -- if not force then--以前是只有一个跳舞动作,现在要随机多种,那么不发force的话我就在这里帮你随机了啊 -- if flag and flag > 0 then -- flag = math.random(1,3) -- end -- end -- self:SendFmtToGame(12025, "c", flag or 0) -- end -- self.model:Bind(BeachConst.CHANGE_DANCE_STATUS,CHANGE_DANCE_STATUS) ------------------------- local function onAddMsgHandler(info) --聊天红点监听 if self.beachmainview then --开着界面就不用管了,让聊天界面控制 else if info.channel == ChatModel.CHANNEL_BEACH then self.model.talk_red_dot = true self.model:Fire(BeachConst.RED_DOT) end end end ChatModel:getInstance():Bind(ChatModel.ADD_NEW_MSG, onAddMsgHandler) ------------------------- local function TRY_TO_VOTE( role_id, role_name ) if not (role_id == RoleManager.Instance.mainRoleInfo.role_id) then self.model:BeachSendMsg(BeachModel.VoiceType.Vote, role_name) end self.model:Fire(BeachConst.REQ_TRY_VOTE, role_id) end self.model:Bind(BeachConst.TRY_TO_VOTE, TRY_TO_VOTE) end function BeachController:ChangeScene() local scene_mgr = SceneManager.Instance self.model.show_scene_left_tip = nil if scene_mgr:IsBeachScene() then self.model:SetTopInfo( nil )--重置第一名信息 self.beachsceneview = self.beachsceneview or BeachSceneView.New() self.beachsceneview:Open() self:SetMainUIVisible(false) ------------------------- local main_vo = RoleManager.Instance.mainRoleInfo local temp_head_name = "舞池DJ" local str = "欢迎来到 魅力舞池!\n尽情舞动享受派对吧!" local data = { head_type = 1004, desc = str, head_name = temp_head_name or "", hide_time = 8, dalay_time = 1, is_task_type = true, } GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data) else SceneManager.Instance:DeleteRoleVo( BeachConst.FakeRoleId ) self.model.talk_red_dot = false self.model.vote_red_dot = false if self.beachsceneview then self.beachsceneview:Close() end if scene_mgr:IsBeachScene(scene_mgr:GetLastSceneId()) then self:SetMainUIVisible(true) ------------------------- local result_data = self.model:GetTopInfo() if result_data then local list = self.model:GetRewardConfByRank( result_data.rank ) table.insert(list, {100, 100007, result_data.acc_exp}) -- 默认多显示一个经验奖励图标 local data = { time = 20, exp_num = result_data.acc_exp, first_name = GetCSLongName( (result_data.first_name or ""), result_data.first_server_id , nil, ColorUtil.YELLOW_DARK), award_list = list, close_call = function ( ) end } self.model:Fire(BeachConst.OPEN_ACITVITY_RESULT, data) end ------------------------- end end end --设置主界面的显示情况 function BeachController:SetMainUIVisible(value) GlobalEventSystem:Fire(EventName.CHANGE_RIGHT_TIP_ICON, not value, MainUIModel.ACTIVITY_MODE) GlobalEventSystem:Fire(EventName.HIDE_LEFT_MIDDLE_VIEW, not value, MainUIModel.ACTIVITY_MODE) GlobalEventSystem:Fire(EventName.HIDE_RIGHT_BOTTOM_VIEW, not value, MainUIModel.ACTIVITY_MODE) GlobalEventSystem:Fire(EventName.HIDE_TASK_TEAM_VIEW, not value, MainUIModel.ACTIVITY_MODE) GlobalEventSystem:Fire(EventName.OPEN_LEFT_MIDDLE_MENU, value, MainUIModel.ACTIVITY_MODE) end