源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

226 行
7.9 KiB

  1. require("game.proto.462.Require462")
  2. require("game.bossHome.BossHomeConst")
  3. require("game.bossHome.BossHomeModel")
  4. require("game.bossHome.BossHomeSceneBossItem")
  5. require("game.bossHome.BossHomeSceneRankItem")
  6. require("game.bossHome.BossHomeSceneView")
  7. require("game.bossHome.BossHomeSubView")
  8. require("game.bossHome.BossHomeMainTabItem")
  9. require("game.bossHome.BossHomeTabItem")
  10. BossHomeController = BossHomeController or BaseClass(BaseController, true)
  11. local BossHomeController = BossHomeController
  12. function BossHomeController:__init()
  13. BossHomeController.Instance = self
  14. self.model = BossHomeModel:getInstance()
  15. self:AddEvents()
  16. self:RegisterAllProtocal()
  17. end
  18. function BossHomeController:AddEvents()
  19. --请求信息 i|32 h|16 c|8 l|64 s|字符串
  20. local function onRequestHandler(...)
  21. local args_list = {...}
  22. if args_list[1] == 46201 then
  23. self:SendFmtToGame(args_list[1], "ccl", args_list[2], args_list[3], args_list[4])
  24. elseif args_list[1] == 46202 then
  25. self:SendFmtToGame(args_list[1], "ci", args_list[2], args_list[3])
  26. elseif args_list[1] == 46203 then
  27. self:SendFmtToGame(args_list[1])
  28. elseif args_list[1] == 46204 then
  29. self:SendFmtToGame(args_list[1], "ci", args_list[2], args_list[3])
  30. else
  31. self:SendFmtToGame(args_list[1])
  32. end
  33. end
  34. self.model:Bind(BossHomeConst.REQUEST_CCMD_EVENT, onRequestHandler)
  35. local function req_basic_data(level)
  36. if GetModuleIsOpen(462) and (level == nil or GetModuleOpenLevel(462) == level ) then
  37. self.model:Fire(BossHomeConst.REQUEST_CCMD_EVENT, 46205)
  38. self.model:CheckBossHomeRedByType(BossConst.RedType.Login)
  39. end
  40. end
  41. GlobalEventSystem:Bind(EventName.GAME_START, req_basic_data)
  42. -- 跨天红点请求, 4点
  43. local function chnage_day_func(type)
  44. if SettingModel.CHANGE_DAY.HOUR_4 == type then
  45. req_basic_data()
  46. end
  47. end
  48. GlobalEventSystem:Bind(EventName.CHANE_DAY, chnage_day_func)
  49. --升级
  50. local function onLevelUp(level)
  51. req_basic_data(level)
  52. if GetModuleOpenLevel(462) == level then
  53. --首次开启幻魔之家时,给一个红点,点击界面后消失
  54. self.model:CheckBossHomeRedByType(BossConst.RedType.ModuleOpen, true)
  55. -- self.model:SetBossHomeFirstRed(true)
  56. -- BossModel.Instance:Fire(BossModel.EVENT_UPDATE_RED_DOT)
  57. end
  58. end
  59. RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp)
  60. local function loadComplete()
  61. self:ChangeScene()
  62. --刷新所有墓碑
  63. if SceneManager:getInstance():IsShowGraveScene() and self.scmd_boss_info then
  64. self.model:UpdateSceneGrave(self.scmd_boss_info)
  65. end
  66. self.scmd_boss_info = false
  67. local function delay_method( )
  68. local need_find_boss_id = self.model:GetNeedFindBoss()
  69. if need_find_boss_id then
  70. local cfg = Config.Homeboss["1@"..need_find_boss_id]
  71. cfg = cfg or Config.Homeboss["2@"..need_find_boss_id]
  72. local pos = stringtotable(cfg.born_pos)
  73. local function call_back( ... )
  74. GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
  75. end
  76. local findVo = FindVo.New()
  77. findVo.sceneId = SceneManager.Instance:GetSceneId()
  78. findVo.type = FindVo.POINT
  79. findVo.x = pos[1]/ SceneObj.LogicRealRatio.x
  80. findVo.y = pos[2]/ SceneObj.LogicRealRatio.y
  81. findVo.call_back = call_back
  82. findVo.range = 3
  83. GlobalEventSystem:Fire(EventName.FIND,findVo)
  84. self.model:SetNeedFindBoss(false)
  85. end
  86. end
  87. setTimeout(delay_method, 1.5)
  88. end
  89. GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, loadComplete)
  90. end
  91. --切换场景
  92. function BossHomeController:ChangeScene()
  93. local scene_mgr = SceneManager.Instance
  94. local last = scene_mgr.last_scene_id
  95. -------------------------
  96. if scene_mgr:IsBossHomeScene(last) then
  97. -- 需要确确实实是从星域幻魔返回到大世界场景,才需要撤销相关信息栏的隐藏
  98. if scene_mgr:IsMainCityAndFieldScene() then
  99. self:SetMainUIVisible(true)
  100. end
  101. self.model:SetCurFightBossId(nil)--重置boss_id
  102. end
  103. if self.bossHomesceneview and self.bossHomesceneview:HasOpen() then
  104. self.bossHomesceneview:Close()
  105. end
  106. -------------------------
  107. if scene_mgr:IsBossHomeScene() then
  108. self:SetMainUIVisible(false)
  109. if not self.bossHomesceneview then
  110. self.bossHomesceneview = BossHomeSceneView.New()
  111. end
  112. if not self.bossHomesceneview:HasOpen() then
  113. self.bossHomesceneview:Open()
  114. end
  115. end
  116. end
  117. function BossHomeController:SetMainUIVisible( value )
  118. self:Fire(EventName.HIDE_NEW_OPEN_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE)
  119. self:Fire(EventName.CHANGE_PK_MODE, not value, MainUIModel.DESERTED_BOSS_MODE)
  120. self:Fire(EventName.HIDE_LEFT_MIDDLE_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE)
  121. self:Fire(EventName.HIDE_TASK_TEAM_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE)
  122. GlobalEventSystem:Fire(EventName.LEFT_VIPICON_VISIBLE, not value)
  123. GlobalEventSystem:Fire(EventName.CHANGE_RIGHT_TIP_ICON, not value,MainUIModel.DESERTED_BOSS_MODE)
  124. GlobalEventSystem:Fire(EventName.HIDE_LEFT_TOP_ACT_VIEW,not value,MainUIModel.DESERTED_BOSS_MODE)
  125. GlobalEventSystem:Fire(EventName.SHOW_MAIN_TASK_ANNOUNCE_ROOT, not value, MainUIModel.DESERTED_BOSS_MODE)
  126. end
  127. function BossHomeController:RegisterAllProtocal( )
  128. local register_cfg = {
  129. [46201] = { -- 列表信息
  130. handler = function(self, vo)
  131. self.scmd_boss_info = vo
  132. for k,v in pairs(vo.boss_info) do
  133. self.model:SetBossHomeInfo(v.boss_id,v.reborn_time,v.killer)
  134. end
  135. self.model:Fire(BossHomeConst.ANS_BOSS_HOME_INFO, vo.boss_type, vo.level, vo.guild)
  136. if SceneManager.Instance:IsShowGraveScene() then
  137. self.model:UpdateSceneGrave(vo)
  138. end
  139. end,
  140. },
  141. [46202] = { -- 伤害排名信息
  142. handler = function(self, vo)
  143. if self.delay_clear_desert_call then
  144. self.delay_clear_desert_call()
  145. end
  146. self.model:SetBossHomeRankInfo(vo)
  147. self.model:Fire(BossHomeConst.ANS_BOSS_HOME_RANK_INFO)
  148. end,
  149. },
  150. [46203] = { -- 脱战通知
  151. handler = function(self, vo)
  152. if self.delay_clear_desert then
  153. GlobalTimerQuest:CancelQuest(self.delay_clear_desert)
  154. self.delay_clear_desert = nil
  155. end
  156. self.delay_clear_desert_call = false
  157. -------------------------
  158. local function clear_call( )
  159. self.model:CleanBossHomeRankInfoById(vo.boss_id)
  160. self.model:SetCurFightBossId(nil)--重置boss_id
  161. self.model:Fire(BossHomeConst.OUT_OF_BOSS_HOME_LIST, vo.boss_id, true)
  162. end
  163. local cur_data = self.model:GetBossHomeRankInfo(vo.boss_id)
  164. if cur_data and cur_data.boss_hp == 0 then
  165. --击杀boss后数据保留5s
  166. self.delay_clear_desert_call = function( )
  167. clear_call()
  168. -------------------------
  169. if self.delay_clear_desert then
  170. GlobalTimerQuest:CancelQuest(self.delay_clear_desert)
  171. self.delay_clear_desert = nil
  172. end
  173. self.delay_clear_desert_call = false
  174. -------------------------
  175. end
  176. self.delay_clear_desert = setTimeout(self.delay_clear_desert_call,5)
  177. else
  178. clear_call()
  179. end
  180. end,
  181. },
  182. [46204] = { -- boss进场
  183. handler = function(self, vo)
  184. if vo.res == 1 then
  185. GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
  186. Message.show("进入场景中")
  187. if vo.boss_type == 1 then
  188. elseif vo.boss_type == 2 then
  189. end
  190. else
  191. ErrorCodeShow(vo.res)
  192. end
  193. end,
  194. },
  195. [46205] = { -- 社团之家信息
  196. handler = function(self, vo)
  197. self.model:SetBossHomeGuildExclusiveData(vo)
  198. self.model:Fire(BossHomeConst.UPDATE_GUILD_EXCLUSIVE_DATA)
  199. end,
  200. },
  201. [46206] = { -- 社团之家后端通知10s后踢人
  202. handler = function(self, vo)
  203. if SceneManager:getInstance():IsBossHomeScene() then
  204. local special_tip_data = {
  205. type = SpecialTipType.Timer1,
  206. sepeical_str = "您所在社团已丧失领地归属,%s秒后您将离开领地",
  207. show_time = 10,
  208. }
  209. CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW, special_tip_data)
  210. end
  211. end,
  212. },
  213. }
  214. self:RegisterProtocalByCFG(register_cfg)
  215. end