源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

434 lines
19 KiB

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