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

426 rivejä
15 KiB

1 kuukausi sitten
  1. require("game.achievement.AchieveModel")
  2. require("game.achievement.AchieveView")
  3. require("game.achievement.AchieveTotalView")
  4. require("game.achievement.AchieveTotalAttrItem")
  5. require("game.achievement.AchieveTabBtnItem")
  6. require("game.achievement.AchieveVarietyView")
  7. require("game.achievement.AchieveItem")
  8. require("game.achievement.AchieveTipsView")
  9. require("game.achievement.AchievePrivilegeItem")
  10. require("game.achievement.AchievePrivilegeView")
  11. require("game.achievement.AchieveGuildSpeedTipsView")--公会竞速称号变化的弹出提示界面
  12. require("game.achievement.AchieveMainTypeItem") -- 大类成就
  13. require("game.proto.409.Require409")
  14. AchieveController = AchieveController or BaseClass(BaseController)
  15. function AchieveController:__init()
  16. AchieveController.Instance = self
  17. self.model = AchieveModel:getInstance()
  18. self.tips_view_list = {}
  19. self.scmd_errorcode_count = 0 -- 连续收到40903错误码的次数
  20. self:registerAllProtocals()
  21. self:addEvents()
  22. end
  23. function AchieveController:registerAllProtocals()
  24. -- self:RegisterProtocal(40900, "handler40900") -- 成就章节信息
  25. self:RegisterProtocal(40901, "handler40901") -- 成就大类总进度
  26. self:RegisterProtocal(40902, "handler40902") -- 获取成就列表
  27. self:RegisterProtocal(40903, "handler40903") -- 领取成就奖励
  28. self:RegisterProtocal(40904, "handler40904") -- 更新成就(推送协议)
  29. self:RegisterProtocal(40905, "handler40905") -- 更新大类总进度(推送协议)
  30. self:RegisterProtocal(40906, "handler40906") -- 成就等级经验
  31. self:RegisterProtocal(40907, "handler40907") -- 成就等级特权信息
  32. self:RegisterProtocal(40908, "handler40908") -- 领取成就特权奖励
  33. self:RegisterProtocal(40909, "handler40909") -- 成就系统错误码
  34. self:RegisterProtocal(40910, "handler40910") -- 获取交易券兑换情况
  35. self:RegisterProtocal(40911, "handler40911") -- 交易券兑换
  36. self:RegisterProtocal(40912, "handler40912") -- 获取/领取周固定奖励
  37. end
  38. function AchieveController:addEvents()
  39. local function onGameStart()
  40. if RoleManager.Instance.mainRoleInfo and RoleManager.Instance.mainRoleInfo.level >= Config.Moduleid[409].open_lv then
  41. -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40900)
  42. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901)
  43. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40906)
  44. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40907)
  45. -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40910)
  46. -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40912, 1)
  47. end
  48. end
  49. GlobalEventSystem:Bind(EventName.GAME_START, onGameStart)
  50. -- 满足等级后请求一次成就信息
  51. local function onLevelUp(lv)
  52. if lv == Config.Moduleid[409].open_lv then
  53. onGameStart()
  54. end
  55. end
  56. RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp)
  57. --[[ local function open_achieve_main_view(show, index)
  58. if show then
  59. if not GetModuleIsOpen(409) then return end
  60. if not self.achieve_main_view then
  61. self.achieve_main_view = AchieveView.New()
  62. end
  63. if not self.achieve_main_view:HasOpen() then
  64. self.achieve_main_view:Open(index)
  65. else
  66. self.achieve_main_view:ChangeTab(index)
  67. end
  68. else
  69. if self.achieve_main_view then
  70. self.achieve_main_view:Close()
  71. end
  72. end
  73. end
  74. self.model:Bind(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW, open_achieve_main_view)--]]
  75. local function open_privilege_view( show )
  76. if show then
  77. if not GetModuleIsOpen(409) then return end
  78. if not self.achieve_privilege_view then
  79. self.achieve_privilege_view = AchievePrivilegeView.New()
  80. end
  81. if not self.achieve_privilege_view:HasOpen() then
  82. self.achieve_privilege_view:Open()
  83. else
  84. self.achieve_privilege_view:UpdateView()
  85. end
  86. else
  87. if self.achieve_privilege_view then
  88. self.achieve_privilege_view:Close()
  89. end
  90. end
  91. end
  92. self.model:Bind(AchieveModel.OPEN_ACHIEVE_PRIVILEGE_VIEW, open_privilege_view) -- 特权预览界面
  93. local function open_achieve_tips_view(show)
  94. if RoleManager.Instance.mainRoleInfo.level < Config.Moduleid[409].open_lv then return end
  95. -- 如果界面还没加载完或者已经存在且在动画中则跳出
  96. if self.tips_view and (not self.tips_view:HasOpen() or self.tips_view.is_animating) then return end
  97. local function close_tips_view()
  98. if self.tips_view:HasOpen() then
  99. self.tips_view:Close()
  100. end
  101. end
  102. if show then
  103. local tip_data = self.model:GetAchieveTipData()
  104. if tip_data then
  105. if self.tips_view == nil then
  106. self.tips_view = AchieveTipsView.New()
  107. end
  108. if not self.tips_view:HasOpen() then
  109. self.tips_view:Open(tip_data)
  110. else
  111. self.tips_view:ResetViewInfo(tip_data)
  112. end
  113. else
  114. close_tips_view()
  115. end
  116. else
  117. close_tips_view()
  118. end
  119. end
  120. -- 2021/3/15 策划说不要弹成就弹窗
  121. -- self.model:Bind(AchieveModel.OPEN_ACHIEVE_TIPS_VIEW, open_achieve_tips_view)
  122. local function openAchieveGuildSpeedTipsView(data,is_close)--公会竞速称号变化的弹出提示界面
  123. if not GetModuleIsOpen(331,66) then return end
  124. if self.AchieveGuildSpeedTipsView == nil then
  125. self.AchieveGuildSpeedTipsView = AchieveGuildSpeedTipsView.New()
  126. end
  127. if self.AchieveGuildSpeedTipsView:HasOpen() and not is_close then
  128. elseif not is_close then
  129. self.AchieveGuildSpeedTipsView:Open(data)
  130. else
  131. self.AchieveGuildSpeedTipsView:Close()
  132. end
  133. end
  134. GlobalEventSystem:Bind(AchieveModel.OPEN_GUILD_SPEED_TIP_VIEW, openAchieveGuildSpeedTipsView)
  135. local function onRequestHandler(...)
  136. local args_list = {...}
  137. if args_list[1] == 40903 then
  138. self:SendFmtToGame(args_list[1], "hhh", args_list[2], args_list[3], args_list[4])
  139. self:AddSetWaitSCMDTimer()
  140. elseif args_list[1] == 40902 or args_list[1] == 40908 then
  141. self:SendFmtToGame(args_list[1], "h", args_list[2])
  142. elseif args_list[1] == 40911 then -- 兑换协议,一次请求默认兑换一次
  143. self:SendFmtToGame(args_list[1], "c", 1)
  144. elseif args_list[1] == 40912 then
  145. self:SendFmtToGame(args_list[1], "c", args_list[2])
  146. else
  147. self:SendFmtToGame(args_list[1])
  148. end
  149. end
  150. self.model:Bind(AchieveModel.REQUEST_CCMD_EVENT, onRequestHandler)
  151. local function updata_rewardAndGiftInfo_on_changeDay()
  152. local function delay_method()
  153. --今天是星期几,周一刷新周礼包信息
  154. local cur_weekday = tonumber(os.date("%w", TimeUtil:getServerTime()))
  155. cur_weekday = cur_weekday ~= 0 and cur_weekday or 7
  156. if cur_weekday == 1 then
  157. -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40912, 1) -- 周领取
  158. self.model.exchange_login_red = true -- 首次登陆交易卷红点重置 不加这个会不刷新按钮
  159. -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40910)
  160. end
  161. end
  162. setTimeout(delay_method, 3)
  163. end
  164. self.change_day_id = GlobalEventSystem:Bind(EventName.CHANE_DAY, updata_rewardAndGiftInfo_on_changeDay)
  165. local function update_achieve_red()
  166. self.model:CheckMainRoleInfoViewAchieveRed()
  167. end
  168. -- 红点检查
  169. self.model:Bind(AchieveModel.UPDATE_ACHIEVE_RED, update_achieve_red)
  170. end
  171. -- 2021年3月1日新增 领取奖励成功之后自动跳转到下一个有奖励的章节
  172. function AchieveController:AutoSwitchCategoryAfterClaimReward( )
  173. self.model:Fire(AchieveModel.UPDATE_BASE_VIEW)
  174. -- if self.achieve_main_view and self.achieve_main_view:HasOpen() then
  175. -- local tab_index = self.achieve_main_view.cur_tab_index
  176. -- local cur_category = tab_index - 1
  177. -- local category_red = self.model:GetAchieveCacheRed(AchieveModelRedType.Achieve)
  178. -- if category_red then
  179. -- if not category_red[cur_category] then -- 当前查看的章节已经没有红点了,则自动切换章节页签
  180. -- local target_index
  181. -- for k, v in pairs(category_red) do
  182. -- if v and (not target_index or target_index > k) then -- 存在红点
  183. -- target_index = k
  184. -- end
  185. -- end
  186. -- if target_index then
  187. -- self.model:Fire(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW, true, target_index + 1)
  188. -- end
  189. -- end
  190. -- end
  191. -- end
  192. end
  193. function AchieveController:AddSetWaitSCMDTimer( )
  194. self:ClearWaitSCMDTimer()
  195. local function wait_scmd()
  196. self.model:SetSCMDWaitFlag(false)
  197. self:ClearWaitSCMDTimer()
  198. end
  199. self.wait_scmd_timer_id = GlobalTimerQuest:AddPeriodQuest(wait_scmd, 3, 1)
  200. end
  201. function AchieveController:ClearWaitSCMDTimer()
  202. if self.wait_scmd_timer_id then
  203. TimerQuest.CancelQuest(GlobalTimerQuest, self.wait_scmd_timer_id)
  204. self.wait_scmd_timer_id = nil
  205. end
  206. end
  207. --[[-- 成就章节进度信息
  208. function AchieveController:handler40900()
  209. local vo = SCMD40900.New(true)
  210. self.model:SetChapterProgress(vo)
  211. self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true)
  212. self.model:Fire(AchieveModel.UPDATE_CHAPTER_PROGRESS)
  213. end--]]
  214. -- ############## 成就大类总进度 ##############
  215. -- protocol=40901
  216. -- {
  217. -- c2s{
  218. -- }
  219. -- s2c{
  220. -- type_list:array{
  221. -- type :int16 // 成就大类
  222. -- count :int8 // 当前完成数量
  223. -- }
  224. -- }
  225. -- }
  226. -- 成就大类总进度
  227. function AchieveController:handler40901()
  228. local vo = SCMD40901.New(true)
  229. -- if vo.errcode == 1 then -- 章节奖励领取成功
  230. -- self.model:UpdateChapterRewardStatus(vo.category)
  231. -- self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true, vo.category)
  232. -- self.model:Fire(AchieveModel.RECEIVE_CHAPTER_REWARD_SUCCEED, vo.category)
  233. -- else
  234. -- ErrorCodeShow(vo.errcode)
  235. -- end
  236. -- logWarn('=======Msh:AchieveController.lua[213]=======')
  237. -- PrintTable(vo)
  238. self.model:SetMainTypeProgress(vo.type_list)
  239. self.model:CheckAchieveRed(nil, true)
  240. end
  241. -- ############## 获取成就列表 ##############
  242. -- protocol=40902
  243. -- {
  244. -- c2s{
  245. -- type :int16 // 成就大类
  246. -- }
  247. -- s2c{
  248. -- type :int16 // 成就大类
  249. -- list:array{ // p.s. 每个小类只发送当前最接近完成/完成未领奖的成就
  250. -- sub_type :int16 // 成就小类
  251. -- id :int16 // 成就id
  252. -- progress :int32 // 进度
  253. -- status :int8 // 成就状态 0:未完成 1:已完成未领取 2:已领取
  254. -- }
  255. -- }
  256. -- }
  257. -- 获取成就列表
  258. function AchieveController:handler40902()
  259. local vo = SCMD40902.New(true)
  260. self.model:SetAchieveData(vo)
  261. -- logWarn('=======Msh:AchieveController.lua[246]=======')
  262. -- PrintTable(vo)
  263. self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true)
  264. self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.type)
  265. end
  266. --[[############## 领取成就奖励 ##############
  267. protocol=40903
  268. {
  269. c2s{
  270. type :int16 //
  271. sub_type :int16 //
  272. id :int16 // id
  273. }
  274. s2c{
  275. errcode :int32 // 0- 1-
  276. type :int16 //
  277. sub_type :int16 //
  278. id :int16 // id
  279. }
  280. }--]]
  281. -- 领取成就小类奖励后,前端更新缓存
  282. function AchieveController:handler40903()
  283. local vo = SCMD40903.New(true)
  284. -- logWarn('=======Msh:AchieveController.lua[293]=======')
  285. -- PrintTable(vo)
  286. if vo.errcode == 1 then
  287. self.scmd_errorcode_count = 0
  288. lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.SUCCESS)
  289. self.model:UpdateAchieveStatus(vo)
  290. self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true, vo.type)
  291. -- self:AutoSwitchCategoryAfterClaimReward()
  292. else
  293. ErrorCodeShow(vo.errcode)
  294. self.scmd_errorcode_count = self.scmd_errorcode_count + 1
  295. if self.scmd_errorcode_count > 1 then -- 连续收到2次或以上 错误码就强刷一遍界面
  296. self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.type, false)
  297. end
  298. end
  299. self:ClearWaitSCMDTimer()
  300. self.model:SetSCMDWaitFlag(false)
  301. end
  302. --[[############## 更新成就(推送协议) ##############
  303. protocol=40904
  304. {
  305. s2c{
  306. list:array{ // p.s.
  307. type :int16 //
  308. sub_type :int16 //
  309. id :int16 // id
  310. progress :int32 //
  311. status :int8 // 0: 1: 2:
  312. }
  313. }
  314. }--]]
  315. -- 更新成就进度
  316. function AchieveController:handler40904()
  317. local vo = SCMD40904.New(true)
  318. -- logWarn('=======Msh:AchieveController.lua[320]=======')
  319. -- PrintTable(vo)
  320. self.model:UpdateAchieveData(vo.list)
  321. -- self.model:SetAchieveTipData(vo.list, false)
  322. self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true)
  323. self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.list[1] and vo.list[1].type or nil, true)
  324. end
  325. -- 更新大类总进度(推送协议)
  326. function AchieveController:handler40905()
  327. local vo = SCMD40905.New(true)
  328. self.model:SetMainTypeProgress(vo.list)
  329. -- self.model:SetAchieveTipData(vo.list, true)
  330. -- self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true)
  331. self.model:Fire(AchieveModel.UPDATE_MAIN_TYPE_PROGRESS)
  332. end
  333. -- 成就等级经验
  334. function AchieveController:handler40906()
  335. local vo = SCMD40906.New(true)
  336. -- 等级是否发生变动
  337. -- local per_lv_data = self.model:GetAchieveLvData()
  338. -- local changed_lv = per_lv_data and per_lv_data.lv ~= vo.lv or false
  339. self.model:SetAchieveLvData(vo)
  340. -- self.model:CheckAchieveRed(AchieveModelRedType.Weekly, true)
  341. self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
  342. self.model:Fire(AchieveModel.UPDATE_ACHIEVE_LV_DATA)
  343. end
  344. -- 成就等级特权信息
  345. function AchieveController:handler40907()
  346. local vo = SCMD40907.New(true)
  347. self.model:SetAchievePrivilegeStatus(vo)
  348. self.model:CheckAchieveRed(AchieveModelRedType.Privilege, true)
  349. self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
  350. end
  351. -- 领取成就特权奖励
  352. function AchieveController:handler40908()
  353. local vo = SCMD40908.New(true)
  354. self.model:UpdateAchievePrivilegeStatus(vo)
  355. self.model:CheckAchieveRed(AchieveModelRedType.Privilege, true, vo.lv)
  356. self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
  357. end
  358. -- 成就系统错误码
  359. function AchieveController:handler40909( )
  360. local vo = SCMD40909.New(true)
  361. if vo.errcode ~= 1 then
  362. ErrorCodeShow(vo.errcode)
  363. end
  364. end
  365. -- 获取交易券兑换情况
  366. function AchieveController:handler40910( )
  367. local vo = SCMD40910.New(true)
  368. -- print("Saber:AchieveController [start:217] vo ------------------------------------------")
  369. -- PrintTable(vo)
  370. self.model:SetAchieveExchangeData(vo)
  371. self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
  372. self.model:Fire(AchieveModel.UPDATE_EXCHANGE_DATA)
  373. end
  374. -- 交易券兑换协议
  375. function AchieveController:handler40911( )
  376. local vo = SCMD40911.New(true)
  377. self.model:SetAchieveExchangeData(vo)
  378. -- 如果已经点过了登录红点,这边要手动处理一次,然后再下面的总入口那边刷新
  379. if not self.model.exchange_login_red then
  380. self.model:CheckAchieveExchangeBtnRed()
  381. end
  382. self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
  383. self.model:Fire(AchieveModel.UPDATE_EXCHANGE_DATA)
  384. end
  385. -- 获取/领取周固定奖励
  386. function AchieveController:handler40912( )
  387. local vo = SCMD40912.New(true)
  388. -- print("Saber:AchieveController [start:231] vo ------------------------------------------")
  389. -- PrintTable(vo)
  390. self.model:SetWeeklyPrivilegeRewardStatus(vo)
  391. self.model:CheckAchieveRed(AchieveModelRedType.Weekly, true)
  392. self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
  393. end