源战役客户端
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.

433 line
19 KiB

  1. require("game.proto.418.Require418")
  2. require("game.beach.BeachModel")
  3. require("game.beach.BeachConst")
  4. require("game.beach.view.BeachResultView")--活动结算界面
  5. require("game.beach.view.BeachVoteTimeShowTip")--投票剩余次数组件
  6. require("game.beach.view.BeachVoteView")
  7. require("game.beach.view.BeachBuyTip")--投票购买界面
  8. require("game.beach.view.BeachRankBaseView")--榜单界面
  9. require("game.beach.view.BeachRankItem")--排行榜
  10. require("game.beach.view.BeachRankView")--排行榜
  11. require("game.beach.view.BeachRoleItem")--排行榜
  12. require("game.beach.view.BeachRoleView")--排行榜
  13. require("game.beach.view.BeachSceneView")--海滩场景
  14. require("game.beach.view.BeachChatView")--聊天界面
  15. require("game.beach.view.BeachMainView")--聊天界面
  16. require("game.beach.view.BeachMainRankItem")--聊天界面
  17. require("game.beach.view.BeachQuickChatItem")--聊天界面
  18. BeachController = BeachController or BaseClass(BaseController)
  19. function BeachController:__init()
  20. BeachController.Instance = self
  21. self.model = BeachModel:GetInstance()
  22. self:RegisterProtocals()
  23. self:InitEvent()
  24. end
  25. function BeachController:ShowErrow( res )
  26. if 4180009 == res then
  27. else
  28. ErrorCodeShow(res)
  29. end
  30. end
  31. function BeachController:RegisterProtocals()
  32. local register_cfg = {
  33. [41800] = {--错误码展示
  34. handler = function(self,scmd)
  35. print('----LZR BeachController.lua 舞池派对返回码-- scmd.res=',scmd.res)
  36. if scmd.res == 1006 then
  37. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.FAULT)
  38. local function recharge_call( )
  39. if self.beachbuytip then
  40. self.beachbuytip:Close()
  41. end
  42. end
  43. local qc_data = {
  44. close_callback = recharge_call,
  45. }
  46. GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true, qc_data)
  47. else
  48. self:ShowErrow(scmd.res)
  49. end
  50. end,
  51. },
  52. [41801] = {
  53. req_event_data = {BeachConst.REQ_ACTIVITY_STATUS},req_func = false,
  54. handler = function(self,scmd)
  55. --活动状态
  56. --status 0-关闭 1-准备 2-进行中 3-发奖励(初定)
  57. scmd.end_time = scmd.start_time + scmd.duration + 5
  58. self.model:SetActivityInfo(scmd)
  59. -------------------------
  60. local curTime = TimeUtil:getServerTime()
  61. local status_time = scmd.end_time - curTime
  62. if scmd.status ~= 0 and status_time > 0 then
  63. ActivityIconManager:getInstance():addIcon(418, status_time)
  64. if self.model.need_show_activity_tip then
  65. if not SceneManager.Instance:IsBeachScene() then
  66. -- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 418,nil,true)
  67. end
  68. self.model.need_show_activity_tip = false
  69. end
  70. ChatModel:getInstance():ClearAllMsgDataByChannel(ChatModel.CHANNEL_BEACH)
  71. else
  72. ActivityIconManager:getInstance():deleteIcon(418)
  73. self.model.need_show_activity_tip = true
  74. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 418,nil)
  75. end
  76. -------------------------
  77. self.model:Fire(BeachConst.ANS_ACTIVITY_STATUS)
  78. end,
  79. },
  80. [41802] = {--进入场景
  81. req_event_data = {BeachConst.REQ_ENTER_SCENE},req_func = false,
  82. handler = function(self,scmd)
  83. if scmd.rcode == 1 then
  84. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
  85. Message.show("进入成功!")
  86. else
  87. self:ShowErrow(scmd.rcode)
  88. end
  89. end,
  90. },
  91. [41803] = {--退出场景
  92. req_event_data = {BeachConst.REQ_QUIT_SCENE},req_func = false,
  93. handler = function(self,scmd)
  94. if scmd.rcode == 1 then
  95. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
  96. Message.show("退出成功!")
  97. else
  98. self:ShowErrow(scmd.rcode)
  99. end
  100. end,
  101. },
  102. [41804] = {--个人信息
  103. req_event_data = {BeachConst.REQ_MY_ACTIVITY_INFO},req_func = false,
  104. handler = function(self,scmd)
  105. self.model:SetMyInfo( scmd )
  106. self.model:Fire(BeachConst.ANS_MY_ACTIVITY_INFO)
  107. end,
  108. },
  109. [41805] = {--投票排行榜
  110. req_event_data = {BeachConst.REQ_RANK_INFO,"c"},req_func = false,
  111. handler_manual = function(self)
  112. --情况特殊需要手写协议
  113. local function get41805( )
  114. local data = {}
  115. data.self_rank = UserMsgAdapter.ReadFmt("i") or 0
  116. data.self_be_voted = UserMsgAdapter.ReadFmt("i") or 0
  117. local len0 = UserMsgAdapter.ReadFmt("h") or 0
  118. data.rank_list = data.rank_list or {}
  119. local vo0 = nil
  120. for i = 1,len0 do
  121. local role_vo = RoleVo.New()
  122. role_vo.rank=UserMsgAdapter.ReadFmt("i") or 0
  123. role_vo.be_voted=UserMsgAdapter.ReadFmt("i") or 0
  124. role_vo.figure=FigureProtoVo.ReadFmt(role_vo)
  125. role_vo.server_id=UserMsgAdapter.ReadFmt("h") or 0
  126. role_vo.have_vote=UserMsgAdapter.ReadFmt("c") or 0
  127. table.insert(data.rank_list,role_vo)
  128. end
  129. local len1 = UserMsgAdapter.ReadFmt("h") or 0
  130. data.left_rank = data.left_rank or {}
  131. local vo1 = nil
  132. for i = 1,len1 do
  133. vo1 = {}
  134. vo1.rank=UserMsgAdapter.ReadFmt("i") or 0
  135. vo1.be_voted=UserMsgAdapter.ReadFmt("i") or 0
  136. vo1.picture=PictureProtoVo.ReadFmt(vo1)
  137. vo1.server_id=UserMsgAdapter.ReadFmt("h") or 0
  138. vo1.have_vote=UserMsgAdapter.ReadFmt("c") or 0
  139. table.insert(data.left_rank,vo1)
  140. end
  141. return data
  142. end
  143. -------------------------
  144. -------------------------
  145. local scmd = get41805()
  146. self.model:SetVoteRankInfo( scmd )
  147. self.model:Fire(BeachConst.ANS_RANK_INFO)
  148. -----------------------
  149. --提取第一名的信息创造更新场景假人
  150. for k,v in pairs(scmd.rank_list) do
  151. if v.rank == 1 then
  152. local fake_data = DeepCopy(v)
  153. fake_data.role_id = BeachConst.FakeRoleId
  154. fake_data.is_fake_role = true
  155. fake_data.server_num = fake_data.server_num or fake_data.server_id
  156. local pos_data = self.model:GetKeyValue( "solo_dance_point" )
  157. pos_data = stringtotable(pos_data)
  158. fake_data.pos_x = tonumber(pos_data[1])
  159. fake_data.pos_y = tonumber(pos_data[2])
  160. -------------------------
  161. fake_data.hatred = 0
  162. fake_data.dance_status = 1
  163. -------------------------
  164. local role = Scene.Instance:GetRole(BeachConst.FakeRoleId)
  165. local role_vo = SceneManager.Instance:GetRoleVo(BeachConst.FakeRoleId)
  166. if not role and not role_vo then
  167. -------------------------
  168. --为了避免可能的重复加载,就不做延迟了吧
  169. SceneManager.Instance:AddRoleVo(fake_data)
  170. else
  171. for a,b in pairs(fake_data) do
  172. role_vo[a] = b
  173. end
  174. role:InitRoleVo(role_vo)
  175. role:LoadInfoFromVo()
  176. role_vo:RefreshFosterData()
  177. end
  178. break
  179. end
  180. end
  181. -------------------------
  182. end,
  183. },
  184. [41806] = {--增加经验
  185. req_event_data = {BeachConst.REQ_EXP_CHANGE},req_func = false,
  186. handler = function(self,scmd)
  187. if scmd.rcode == 1 then
  188. self.model:RefreshMyExp( scmd.add_exp )
  189. self.model:Fire(BeachConst.ANS_EXP_CHANGE)
  190. else
  191. self:ShowErrow(scmd.rcode)
  192. end
  193. end,
  194. },
  195. [41807] = {--魅力第一(舞台solo者)
  196. handler = function(self,scmd)
  197. self.model:SetTopInfo(scmd)
  198. self.model:Fire(BeachConst.ANS_TOP_INFO)
  199. end,
  200. },
  201. [41808] = {--投票
  202. -- 不能给自己投票哦
  203. req_event_data = {BeachConst.REQ_TRY_VOTE,"l"},req_func = function(self,role_id)
  204. if role_id == RoleManager.Instance.mainRoleInfo.role_id then
  205. Message.show("不能给自己投票哦")
  206. else
  207. self:SendFmtToGame(41808,"l",role_id)
  208. end
  209. end,
  210. handler = function(self,scmd)
  211. if scmd.rcode == 1 then
  212. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
  213. Message.show("投票成功!")
  214. self.model:SetVoteClock()
  215. self.model:RefreshMyVoteNum( scmd.vote_times,nil,scmd.vote_other_time )
  216. self.model:Fire(BeachConst.ANS_TRY_VOTE)
  217. self.model:Fire(BeachConst.REQ_MY_ACTIVITY_INFO)--投票后刷一下界面
  218. local len = self.model:GetCurRankSetSCMDLength( )
  219. self.model:Fire(BeachConst.REQ_RANK_INFO,len)
  220. else
  221. ErrorCodeShow(scmd.rcode)
  222. end
  223. end,
  224. },
  225. [41809] = {--我的投票列表(谁投了我)
  226. req_event_data = {BeachConst.REQ_MY_VOTE_INFO},req_func = false,
  227. handler = function(self,scmd)
  228. self.model:SetMyVoteList(scmd.role_list)
  229. self.model:Fire(BeachConst.ANS_MY_VOTE_INFO)
  230. end,
  231. },
  232. [41811] = {--购买投票次数
  233. req_event_data = {BeachConst.REQ_BUY_VOTE_TIME,"c"},req_func = false,
  234. handler = function(self,scmd)
  235. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
  236. Message.show("购买成功!")
  237. self.model:RefreshMyVoteNum( scmd.vote_times,scmd.has_buy_times,nil )
  238. self.model:Fire(BeachConst.ANS_BUY_VOTE_TIME)
  239. end,
  240. },
  241. [41812] = {--推送协议(投票红点)
  242. handler = function(self,scmd)
  243. self.model.vote_red_dot = true
  244. self.model:Fire(BeachConst.RED_DOT)
  245. end,
  246. },
  247. [41813] = {--广播投票弹窗
  248. handler = function(self,scmd)
  249. local data = {
  250. role_vo_1 = scmd, --我方
  251. role_vo_2 = nil, --敌方
  252. type = 1, --UI类型
  253. desc = string.format("投票给了 %s", scmd.be_voted_name), --描述
  254. max_num = 3, --同时显示最大数量
  255. need_cut_str = true,
  256. }
  257. if SceneManager:getInstance():IsShowDynamicInfoScene() then
  258. GlobalEventSystem:Fire(EventName.SHOW_DYNAMIC_INFO_TIP, data)
  259. end
  260. -------------------------
  261. end,
  262. },
  263. }
  264. self:RegisterProtocalByCFG(register_cfg)
  265. end
  266. function BeachController:InitEvent()
  267. local function change_account()
  268. if self.beachsceneview then
  269. self.beachsceneview:Close()
  270. end
  271. end
  272. GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,change_account)
  273. GlobalEventSystem:Bind(EventName.CHANGE_ROLE,change_account)
  274. local function onGameStartHandler(level)
  275. if GetModuleIsOpen(418) then
  276. self.model:Fire(BeachConst.REQ_ACTIVITY_STATUS)
  277. end
  278. end
  279. self:Bind(EventName.GAME_START, onGameStartHandler)
  280. RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, function (level)
  281. if GetModuleOpenLevel( 418,0) == level and GetModuleIsOpen(418) then
  282. self.model:Fire(BeachConst.REQ_ACTIVITY_STATUS)
  283. end
  284. end)
  285. local function onSceneStartHandler( )
  286. self:ChangeScene()
  287. end
  288. self:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, onSceneStartHandler)
  289. local function OPEN_ACITVITY_RESULT( data )
  290. self.beachresultview = self.beachresultview or BeachResultView.New()
  291. self.beachresultview:Open(data)
  292. end
  293. self.model:Bind(BeachConst.OPEN_ACITVITY_RESULT,OPEN_ACITVITY_RESULT)
  294. local function OPEN_BUY_VOTE( )
  295. self.beachbuytip = self.beachbuytip or BeachBuyTip.New()
  296. self.beachbuytip:Open()
  297. end
  298. self.model:Bind(BeachConst.OPEN_BUY_VOTE,OPEN_BUY_VOTE)
  299. local function OPEN_RANK_BASE_VIEW( )
  300. self.beachrankbaseview = self.beachrankbaseview or BeachRankBaseView.New()
  301. self.beachrankbaseview:Open()
  302. end
  303. self.model:Bind(BeachConst.OPEN_RANK_BASE_VIEW,OPEN_RANK_BASE_VIEW)
  304. local function OPEN_MAIN_CHAT_VIEW( extra_params )
  305. self.beachmainview = self.beachmainview or BeachMainView.New()
  306. self.beachmainview:Open(extra_params)
  307. end
  308. self.model:Bind(BeachConst.OPEN_MAIN_CHAT_VIEW,OPEN_MAIN_CHAT_VIEW)
  309. local function OPEN_VOTE_VIEW( data )
  310. self.beachvoteview = self.beachvoteview or BeachVoteView.New()
  311. self.beachvoteview:Open( data )
  312. end
  313. self.model:Bind(BeachConst.OPEN_VOTE_VIEW,OPEN_VOTE_VIEW)
  314. -- local function CHANGE_DANCE_STATUS( flag,force )
  315. -- local main_role = Scene.Instance:GetMainRole()
  316. -- if (flag and flag > 0) and main_role and main_role:IsInState(PoseState.ATTACK) then
  317. -- Message.show("正在战斗中,请停下战后再跳舞!")
  318. -- return
  319. -- end
  320. -- local is_ride = RoleManager:getInstance():GetMainRoleVo() and (RoleManager:getInstance():GetMainRoleVo().is_ride ~= 0)
  321. -- if is_ride and (flag ~= 0) then
  322. -- GlobalEventSystem:Fire(EventName.HIDE_HORSE)
  323. -- end
  324. -- --int:8 动作0取消 后续数字为指定动作 1祝火2温泉跳舞
  325. -- if not force then--以前是只有一个跳舞动作,现在要随机多种,那么不发force的话我就在这里帮你随机了啊
  326. -- if flag and flag > 0 then
  327. -- flag = math.random(1,3)
  328. -- end
  329. -- end
  330. -- self:SendFmtToGame(12025, "c", flag or 0)
  331. -- end
  332. -- self.model:Bind(BeachConst.CHANGE_DANCE_STATUS,CHANGE_DANCE_STATUS)
  333. -------------------------
  334. local function onAddMsgHandler(info)
  335. --聊天红点监听
  336. if self.beachmainview then
  337. --开着界面就不用管了,让聊天界面控制
  338. else
  339. if info.channel == ChatModel.CHANNEL_BEACH then
  340. self.model.talk_red_dot = true
  341. self.model:Fire(BeachConst.RED_DOT)
  342. end
  343. end
  344. end
  345. ChatModel:getInstance():Bind(ChatModel.ADD_NEW_MSG, onAddMsgHandler)
  346. -------------------------
  347. local function TRY_TO_VOTE( role_id, role_name )
  348. if not (role_id == RoleManager.Instance.mainRoleInfo.role_id) then
  349. self.model:BeachSendMsg(BeachModel.VoiceType.Vote, role_name)
  350. end
  351. self.model:Fire(BeachConst.REQ_TRY_VOTE, role_id)
  352. end
  353. self.model:Bind(BeachConst.TRY_TO_VOTE, TRY_TO_VOTE)
  354. end
  355. function BeachController:ChangeScene()
  356. local scene_mgr = SceneManager.Instance
  357. self.model.show_scene_left_tip = nil
  358. if scene_mgr:IsBeachScene() then
  359. self.model:SetTopInfo( nil )--重置第一名信息
  360. self.beachsceneview = self.beachsceneview or BeachSceneView.New()
  361. self.beachsceneview:Open()
  362. self:SetMainUIVisible(false)
  363. -------------------------
  364. local main_vo = RoleManager.Instance.mainRoleInfo
  365. local temp_head_name = "舞池DJ"
  366. local str = "欢迎来到 魅力舞池!\n尽情舞动享受派对吧!"
  367. local data = {
  368. head_type = 1004,
  369. desc = str,
  370. head_name = temp_head_name or "",
  371. hide_time = 8,
  372. dalay_time = 1,
  373. is_task_type = true,
  374. }
  375. GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
  376. else
  377. SceneManager.Instance:DeleteRoleVo( BeachConst.FakeRoleId )
  378. self.model.talk_red_dot = false
  379. self.model.vote_red_dot = false
  380. if self.beachsceneview then
  381. self.beachsceneview:Close()
  382. end
  383. if scene_mgr:IsBeachScene(scene_mgr:GetLastSceneId()) then
  384. self:SetMainUIVisible(true)
  385. -------------------------
  386. local result_data = self.model:GetTopInfo()
  387. if result_data then
  388. local list = self.model:GetRewardConfByRank( result_data.rank )
  389. table.insert(list, {100, 100007, result_data.acc_exp}) -- 默认多显示一个经验奖励图标
  390. local data = {
  391. time = 20,
  392. exp_num = result_data.acc_exp,
  393. first_name = GetCSLongName( (result_data.first_name or ""), result_data.first_server_id , nil, ColorUtil.YELLOW_DARK),
  394. award_list = list,
  395. close_call = function ( )
  396. end
  397. }
  398. self.model:Fire(BeachConst.OPEN_ACITVITY_RESULT, data)
  399. end
  400. -------------------------
  401. end
  402. end
  403. end
  404. --设置主界面的显示情况
  405. function BeachController:SetMainUIVisible(value)
  406. GlobalEventSystem:Fire(EventName.CHANGE_RIGHT_TIP_ICON, not value, MainUIModel.ACTIVITY_MODE)
  407. GlobalEventSystem:Fire(EventName.HIDE_LEFT_MIDDLE_VIEW, not value, MainUIModel.ACTIVITY_MODE)
  408. GlobalEventSystem:Fire(EventName.HIDE_RIGHT_BOTTOM_VIEW, not value, MainUIModel.ACTIVITY_MODE)
  409. GlobalEventSystem:Fire(EventName.HIDE_TASK_TEAM_VIEW, not value, MainUIModel.ACTIVITY_MODE)
  410. GlobalEventSystem:Fire(EventName.OPEN_LEFT_MIDDLE_MENU, value, MainUIModel.ACTIVITY_MODE)
  411. end