源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
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