源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

470 行
19 KiB

  1. require("game.proto.139.Require139")
  2. require("game.psionic.PsionicModel")
  3. require("game.psionic.PsionicConst")
  4. require("game.psionic.PsionicMainView") -- 圣物模块主界面
  5. -- require("game.psionic.PsionicStageView") -- 圣物等级界面
  6. -- require("game.psionic.PsionicStageItem") -- 圣物等级界面等级节点
  7. require("game.psionic.PsionicArmorView") -- 圣物装备背包界面
  8. require("game.psionic.PsionicArmorEquipItem") -- 圣物装备界面左侧装备栏节点
  9. require("game.psionic.PsionicArmorItem") -- 圣物装备背包节点
  10. require("game.psionic.PsionicArmorResolveView") -- 圣物装备分解界面
  11. require("game.psionic.PsionicArmorResolveTipItem") -- 圣物装备分解界面分解建议tip节点
  12. require("game.psionic.PsionicAdvanceView") -- 圣物装备进阶界面
  13. require("game.psionic.PsionicAdvanceBreakView") -- 圣物装备突破界面
  14. require("game.psionic.PsionicAdvanceBreakTabItem") -- 圣物装备突破界面左侧页签节点
  15. require("game.psionic.PsionicWashView") -- 圣物洗练界面
  16. require("game.psionic.PsionicWashAttrItem") -- 圣物洗练界面属性节点
  17. require("game.psionic.PsionicDrawView") -- 圣物数据挖掘界面
  18. require("game.psionic.PsionicSkillView") -- 圣物技能界面
  19. require("game.psionic.PsionicSkillAttrItem") -- 圣物技能界面属性节点item
  20. require("game.psionic.PsionicSkillEquipItem") -- 圣物技能装备item
  21. require("game.psionic.PsionicSkillTipView") -- 圣物技能tips界面
  22. require("game.psionic.PsionicSkillTipItem") -- 圣物技能tips界面节点
  23. require("game.psionic.PsionicExchangeView") -- 圣物兑换商城
  24. require("game.psionic.PsionicExchangeItem") -- 圣物兑换商城商品节点
  25. require("game.psionic.PsionicDrawResultView") -- 圣物系统抽奖结算界面
  26. require("game.psionic.PsionicDrawPreviewView") -- 圣物系统奖励预览界面
  27. require("game.psionic.PsionicDrawPreviewItem") -- 圣物系统奖励预览界面子节点
  28. -- require("game.psionic.PsionicTitleTipView") -- 圣物系统头衔激活tips弹窗
  29. require("game.psionic.PsionicEffectEquipView") -- 圣物圣环装备界面
  30. require("game.psionic.PsionicSkillUpgradeSuccessView") -- 圣物觉醒成功结算界面
  31. require("game.psionic.PsionicBreakSuccessView") -- 圣物装备升星成功结算界面
  32. require("game.psionic.PsionicBreakSuccessItem") -- 圣物装备升星成功结算界面子节点
  33. PsionicController = PsionicController or BaseClass(BaseController, true)
  34. local PsionicController = PsionicController
  35. local PsionicConst = PsionicConst
  36. local GoodsModel = GoodsModel
  37. function PsionicController:__init()
  38. PsionicController.Instance = self
  39. self.model = PsionicModel:getInstance()
  40. self:AddEvents()
  41. self:RegisterAllProtocal()
  42. -- 屏蔽圣物
  43. self._BLOCK_PSIONIC = false
  44. end
  45. function PsionicController:__delete()
  46. end
  47. function PsionicController:RegisterAllProtocal( )
  48. self:RegisterProtocal(13900, "handle13900") -- 圣物数据
  49. -- self:RegisterProtocal(13901, "handle13901") -- 穿装甲
  50. -- self:RegisterProtocal(13902, "handle13902") -- 卸装甲
  51. self:RegisterProtocal(13903, "handle13903") -- 装甲分解
  52. self:RegisterProtocal(13904, "handle13904") -- 圣物技能激活推送
  53. self:RegisterProtocal(13905, "handle13905") -- 装甲升级
  54. self:RegisterProtocal(13906, "handle13906") -- 装甲突破
  55. self:RegisterProtocal(13907, "handle13907") -- 觉醒
  56. self:RegisterProtocal(13908, "handle13908") -- 洗练
  57. self:RegisterProtocal(13909, "handle13909") -- 抽奖面板
  58. self:RegisterProtocal(13910, "handle13910") -- 抽奖结算
  59. self:RegisterProtocal(13911, "handle13911") -- 圣物等级提升通知
  60. self:RegisterProtocal(13912, "handle13912") -- 圣物商店兑换
  61. self:RegisterProtocal(13913, "handle13913") -- 圣物技能激活
  62. self:RegisterProtocal(13914, "handle13914") -- 剩余免费洗脸次数
  63. end
  64. function PsionicController:AddEvents()
  65. local function onGameStart()
  66. self.model:Reset()
  67. if not self._BLOCK_PSIONIC then
  68. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13900)
  69. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13910)
  70. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13914)
  71. end
  72. end
  73. GlobalEventSystem:Bind(EventName.GAME_START, onGameStart)
  74. local function onRequestHandler(...)
  75. if self._BLOCK_PSIONIC then return end
  76. local args_list = {...}
  77. if args_list[1] == 13903 then
  78. self:SendFmtToGame(args_list[1], "l", args_list[2])
  79. elseif args_list[1] == 13906
  80. or args_list[1] == 13908
  81. or args_list[1] == 13909 then
  82. self:SendFmtToGame(args_list[1], "c", args_list[2])
  83. elseif args_list[1] == 13905 then
  84. self:SendFmtToGame(args_list[1], "ccc", args_list[2], args_list[3], args_list[4])
  85. elseif args_list[1] == 13904 then
  86. self.clear_red_cache_list = self.clear_red_cache_list or {}
  87. local str = "h"
  88. local tb = {}
  89. for k, v in pairs(args_list[2]) do
  90. self.clear_red_cache_list[#self.clear_red_cache_list+1] = k
  91. tb[#tb + 1] = k
  92. str = str .. "l"
  93. end
  94. self:SendFmtToGame(args_list[1], str, #tb, unpack(tb))
  95. elseif args_list[1] == 13907 then
  96. self:SendFmtToGame(args_list[1], "lc", args_list[2], args_list[3])
  97. elseif args_list[1] == 13911 then
  98. self:SendFmtToGame(args_list[1], "cc", args_list[2], args_list[3])
  99. elseif args_list[1] == 13912 then
  100. self:SendFmtToGame(args_list[1], "hh", args_list[2], args_list[3])
  101. elseif args_list[1] == 13914 then
  102. self:SendFmtToGame(args_list[1])
  103. else
  104. self:SendFmtToGame(args_list[1])
  105. end
  106. end
  107. self.model:Bind(PsionicConst.REQUEST_CCMD_EVENT, onRequestHandler)
  108. local function openPsionicMainView(show, index, other_args)
  109. if self._BLOCK_PSIONIC then return end
  110. if show then
  111. if not self.psionic_main_view then
  112. self.psionic_main_view = PsionicMainView.New()
  113. end
  114. if not self.psionic_main_view:HasOpen() then
  115. self.psionic_main_view:Open(index, other_args)
  116. else
  117. self.psionic_main_view:SwitchTab(index, other_args)
  118. end
  119. else
  120. if self.psionic_main_view then
  121. self.psionic_main_view:Close()
  122. end
  123. end
  124. end
  125. self.model:Bind(PsionicConst.OPEN_MAIN_VIEW, openPsionicMainView)
  126. local function openPsionicResolveView(show, goods_id)
  127. if self._BLOCK_PSIONIC then return end
  128. if show then
  129. if not self.psionic_resolve_view then
  130. self.psionic_resolve_view = PsionicArmorResolveView.New()
  131. end
  132. if not self.psionic_resolve_view:HasOpen() then
  133. self.psionic_resolve_view:Open(goods_id)
  134. end
  135. else
  136. if self.psionic_resolve_view then
  137. self.psionic_resolve_view:Close()
  138. end
  139. end
  140. end
  141. self.model:Bind(PsionicConst.OPEN_RESOLVE_VIEW, openPsionicResolveView)
  142. -- 2020年7月9日重构新增
  143. -- 打开圣物技能tips界面
  144. local function openSKillTipsView(show, skill_data, x, y)
  145. if self._BLOCK_PSIONIC then return end
  146. if show then
  147. if not skill_data then return end
  148. if not self.psionic_skill_tips_view then
  149. self.psionic_skill_tips_view = PsionicSkillTipView.New()
  150. end
  151. if not self.psionic_skill_tips_view:HasOpen() then
  152. self.psionic_skill_tips_view:Open(skill_data, x, y)
  153. end
  154. else
  155. if self.psionic_skill_tips_view then
  156. self.psionic_skill_tips_view:Close()
  157. end
  158. end
  159. end
  160. self.model:Bind(PsionicConst.OPEN_SKILL_TIPS_VIEW, openSKillTipsView)
  161. local function openDrawPerviewView(show, pool_type)
  162. if (show and pool_type) or not show then
  163. self:OpenView("PsionicDrawPreviewView", show, pool_type)
  164. end
  165. end
  166. self.model:Bind(PsionicConst.OPEN_DRAW_PREVIEW_VIEW, openDrawPerviewView)
  167. -- local function openTitleTipsView(show, show_lv)
  168. -- if (show and show_lv) or not show then
  169. -- self:OpenView("PsionicTitleTipView", show, show_lv)
  170. -- end
  171. -- end
  172. -- self.model:Bind(PsionicConst.OPEN_TITLE_TIP_VIEW, openTitleTipsView)
  173. local function openPsionicDrawResultView(show, data)
  174. if show and data then
  175. if not self.PsionicDrawResultView then
  176. self.PsionicDrawResultView = PsionicDrawResultView.New()
  177. end
  178. if not self.PsionicDrawResultView:HasOpen() then
  179. self.PsionicDrawResultView:Open(data)
  180. else
  181. self.PsionicDrawResultView:ReOpenView(data)
  182. end
  183. else
  184. if self.PsionicDrawResultView then
  185. self.PsionicDrawResultView:Close()
  186. end
  187. end
  188. end
  189. self.model:Bind(PsionicConst.OPEN_PSIONIC_DRAW_RESULT_VIEW, openPsionicDrawResultView)
  190. -- 如果激活了圣物每日免费洗练相关的宠物生活技能,则需要主动请求13914
  191. local function on_pet_life_skill_actived(skill_id)
  192. if skill_id == PetConst.LifeSkill.PsionicWashFreeTimes then
  193. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13914)
  194. end
  195. end
  196. PetModel:getInstance():Bind(PetConst.PET_LIFE_SKILL_ACTIVED, on_pet_life_skill_actived)
  197. local function chnage_day_func(type)
  198. if type == SettingModel.CHANGE_DAY.HOUR_0 then -- 跨0点
  199. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13914)
  200. end
  201. end
  202. GlobalEventSystem:Bind(EventName.CHANE_DAY, chnage_day_func)
  203. local function open_ps_effect_equip_view(show)
  204. self:OpenView("PsionicEffectEquipView", show)
  205. end
  206. self.model:Bind(PsionicConst.OPEN_PSIONIC_EFFECT_EQUIP_VIEW, open_ps_effect_equip_view)
  207. local function open_ps_skill_upgrade_success_view(show, slot_data)
  208. if (show and slot_data) or not show then
  209. self:OpenView("PsionicSkillUpgradeSuccessView", show, slot_data)
  210. end
  211. end
  212. self.model:Bind(PsionicConst.OPEN_SKILL_UPGRADE_SUCCESS_VIEW, open_ps_skill_upgrade_success_view)
  213. local function open_ps_break_success_view(show, pre_goods_vo, goods_vo)
  214. if (show and pre_goods_vo and goods_vo) or not show then
  215. self:OpenView("PsionicBreakSuccessView", show, pre_goods_vo, goods_vo)
  216. end
  217. end
  218. self.model:Bind(PsionicConst.OPEN_BREAK_SUCCESS_VIEW, open_ps_break_success_view)
  219. end
  220. function PsionicController:handle13900( )
  221. local vo = SCMD13900.New(true)
  222. self.model:SetPsionicMainData(vo)
  223. -- self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PLevel, true)
  224. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PArmor, true)
  225. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PAdvance, true)
  226. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PSkill, true)
  227. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PWash, true)
  228. -- self.model:Fire(PsionicConst.UPDATE_PSIONIC_LV)
  229. self.model:Fire(PsionicConst.UPDATE_PSIONIC_AWAKE_DATA)
  230. self.model:Fire(PsionicConst.UPDATE_SLOT_SKILL)
  231. end
  232. -- function PsionicController:handle13901( )
  233. -- local vo = SCMD13901.New(true)
  234. -- if vo.result == 1 then
  235. -- Message.show("充能成功", "success")
  236. -- self.model:UpdatePsionicMainLv(vo)
  237. -- self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PLevel, true)
  238. -- self.model:Fire(PsionicConst.UPDATE_PSIONIC_LV)
  239. -- else
  240. -- ErrorCodeShow(vo.result)
  241. -- end
  242. -- end
  243. -- function PsionicController:handle13902( )
  244. -- local vo = SCMD13902.New(true)
  245. -- if vo.result == 1 then
  246. -- Message.show("激活成功", "success")
  247. -- vo.exp = 0 -- 升级后,经验清空
  248. -- self.model:UpdatePsionicMainLv(vo)
  249. -- self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PLevel, true)
  250. -- self.model:Fire(PsionicConst.UPDATE_PSIONIC_LV)
  251. -- -- 弹出tips界面
  252. -- self.model:Fire(PsionicConst.OPEN_TITLE_TIP_VIEW, true, vo.lv)
  253. -- self.model:Fire(PsionicConst.UPGRADE_PSIONIC_LV, vo.lv)
  254. -- else
  255. -- ErrorCodeShow(vo.result)
  256. -- end
  257. -- end
  258. function PsionicController:handle13903( )
  259. local vo = SCMD13903.New(true)
  260. if vo.result == 1 then
  261. Message.show("穿戴成功")
  262. -- 清除被穿戴装备的红点缓存
  263. self.model:ClearTargetEquipRedCache(vo.uid)
  264. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PArmor, true, nil, vo.uid)
  265. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PAdvance, true, nil, vo.uid)
  266. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PWash, true, nil, vo.uid)
  267. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PSkill, true, nil, vo.uid)
  268. self.model:Fire(PsionicConst.WEAR_ARMOR_SUCCEED, vo.uid)
  269. else
  270. ErrorCodeShow(vo.result)
  271. end
  272. end
  273. function PsionicController:handle13904( )
  274. local vo = SCMD13904.New(true)
  275. if vo.result == 1 then
  276. Message.show("分解成功")
  277. -- 清除掉被分解的装备的红点缓存
  278. for k, v in pairs(self.clear_red_cache_list) do
  279. self.model:ClearTargetEquipRedCache(v)
  280. end
  281. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PArmor, true)
  282. else
  283. ErrorCodeShow(vo.result)
  284. -- 分解失败,红点不处理
  285. self.clear_red_cache_list = {}
  286. end
  287. -- self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PSkill, true, vo.pos)
  288. end
  289. function PsionicController:handle13905( )
  290. local vo = SCMD13905.New(true)
  291. if vo.result == 1 then
  292. Message.show("升级成功")
  293. local old_slot_data = self.model:GetPsionicSlotData(vo.pos)
  294. local old_lv = old_slot_data and old_slot_data.lv or nil
  295. self.model:UpdatePsionicSlotLv(vo)
  296. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PAdvance, true, vo.pos)
  297. self.model:Fire(PsionicConst.UPDATE_SLOT_DATA, vo.pos)
  298. if old_lv and old_lv < vo.lv then
  299. -- 等级变动,播放特效
  300. self.model:Fire(PsionicConst.PLAY_EFFECT, PsionicConst.EffectType.BreakLevel)
  301. end
  302. else
  303. ErrorCodeShow(vo.result)
  304. end
  305. end
  306. function PsionicController:handle13906( )
  307. local vo = SCMD13906.New(true)
  308. if vo.result == 1 then
  309. Message.show("突破成功")
  310. local old_slot_data = self.model:GetPsionicSlotData(vo.pos)
  311. local old_lv = old_slot_data and old_slot_data.lv or nil
  312. self.model:UpdatePsionicSlotGrade(vo)
  313. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PAdvance, true, vo.pos)
  314. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PWash, true, vo.pos)
  315. self.model:Fire(PsionicConst.UPDATE_SLOT_DATA, vo.pos)
  316. self.model:Fire(PsionicConst.UPDATE_SLOT_WASH_DATA, vo.pos)
  317. if old_lv and old_lv < vo.lv then
  318. -- 等级变动,播放特效
  319. self.model:Fire(PsionicConst.PLAY_EFFECT, PsionicConst.EffectType.BreakLevel)
  320. end
  321. else
  322. ErrorCodeShow(vo.result)
  323. end
  324. end
  325. function PsionicController:handle13907( )
  326. local vo = SCMD13907.New(true)
  327. if vo.result == 1 then
  328. local goods_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(vo.gtype)
  329. local slot = goods_basic and goods_basic.subtype or 4
  330. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PArmor, true, nil, vo.uid)
  331. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PBreak, true, nil, vo.uid)
  332. self.model:Fire(PsionicConst.UPDATE_EQUIP_BREAK_SUCCEED, vo.uid, slot)
  333. local pre_goods_vo = self.model._break_type_id_cache[vo.uid]
  334. local goods_vo = GoodsModel:getInstance():GetPsionicBagGoodsByID(vo.uid) -- 查看背包
  335. or GoodsModel:getInstance():GetPsionicEquipGoodsByID(vo.uid) -- 查看穿戴
  336. self.model:Fire(PsionicConst.OPEN_BREAK_SUCCESS_VIEW, true, pre_goods_vo, goods_vo)
  337. self.model:Fire(PsionicConst.PLAY_EFFECT, PsionicConst.EffectType.BreakEquip)
  338. else
  339. ErrorCodeShow(vo.result)
  340. end
  341. end
  342. function PsionicController:handle13908( )
  343. local vo = SCMD13908.New(true)
  344. if vo.result == 1 then
  345. Message.show("觉醒成功", "success")
  346. self.model:UpdatePsionicSectionLv(vo)
  347. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PSkill, true, vo.pos)
  348. self.model:Fire(PsionicConst.UPDATE_SLOT_SKILL, vo.pos)
  349. self.model:Fire(PsionicConst.PLAY_EFFECT, PsionicConst.EffectType.Skill)
  350. local function delay_method( )
  351. local slot_data = self.model:GetPsionicSlotData(vo.pos)
  352. self.model:Fire(PsionicConst.OPEN_SKILL_UPGRADE_SUCCESS_VIEW, true, slot_data)
  353. self.model._block_skill_upgrade_click = false -- 取消点击屏蔽
  354. end
  355. setTimeout(delay_method, 1.5)
  356. else
  357. ErrorCodeShow(vo.result)
  358. self.model._block_skill_upgrade_click = false -- 取消点击屏蔽
  359. end
  360. end
  361. function PsionicController:handle13909( )
  362. local vo = SCMD13909.New(true)
  363. if vo.result == 1 then
  364. self.model:UpdatePsionicSlotWashData(vo)
  365. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PWash, true, vo.pos)
  366. -- reports数据用来做界面表现
  367. self.model:Fire(PsionicConst.UPDATE_SLOT_WASH_DATA, vo.pos, vo.reports)
  368. else
  369. ErrorCodeShow(vo.result)
  370. end
  371. end
  372. function PsionicController:handle13910( )
  373. local vo = SCMD13910.New(true)
  374. self.model:SetPsionicDigData(vo)
  375. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PDataDig, true)
  376. self.model:Fire(PsionicConst.UPDATE_DIG_DATA)
  377. end
  378. function PsionicController:handle13911( )
  379. local vo = SCMD13911.New(true)
  380. if vo.result == 1 then
  381. local data = {
  382. award = {},
  383. col_num = 5,
  384. pool = vo.pool,
  385. opty = vo.opty,
  386. show_awards = vo.show_awards,
  387. }
  388. local goods_vo
  389. for k, v in pairs(vo.awards) do
  390. goods_vo = v.uid ~= 0 and GoodsModel:getInstance():GetPsionicBagGoodsByID(v.uid) or nil
  391. data.award[#data.award+1] = {0, v.goods_id, v.num, goods_vo}
  392. end
  393. self.model:Fire(PsionicConst.OPEN_PSIONIC_DRAW_RESULT_VIEW, true, data)
  394. -- GlobalEventSystem:Fire(EventName.OPEN_COM_AWARD_RESULT_VIEW, data)
  395. self.model:UpdatePsionicDigData(vo)
  396. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PDataDig, true, vo.pool)
  397. self.model:Fire(PsionicConst.UPDATE_DIG_DATA, vo.pool, vo.opty)
  398. else
  399. ErrorCodeShow(vo.result)
  400. end
  401. -- self.model:UpdatePsionicLv(vo.lv)
  402. -- self.model:Fire(PsionicConst.UPDATE_PSIONIC_LV)
  403. end
  404. function PsionicController:handle13912( )
  405. local vo = SCMD13912.New(true)
  406. if vo.result == 1 then
  407. Message.show("兑换成功", "success")
  408. -- self.model:Fire(PsionicConst.EXCHANGE_SUCCEED, vo.sort)
  409. else
  410. ErrorCodeShow(vo.result)
  411. end
  412. end
  413. function PsionicController:handle13913( )
  414. local vo = SCMD13913.New(true)
  415. self.model:UpdatePsionicSkillData(vo)
  416. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PSkill, true, vo.pos)
  417. self.model:Fire(PsionicConst.UPDATE_SLOT_SKILL, vo.pos)
  418. self.model:Fire(PsionicConst.ACTIVATE_SLOT_SKILL, vo.pos)
  419. end
  420. --剩余免费洗练次数
  421. function PsionicController:handle13914( )
  422. local vo = SCMD13914.New(true)
  423. self.model:UpdatePsionicFreeWashTimes(vo)
  424. self.model:CheckPsionicRedByTabID(PsionicConst.TabId.PWash, true)
  425. end