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
|