|
|
- require("game.achievement.AchieveModel")
- require("game.achievement.AchieveView")
- require("game.achievement.AchieveTotalView")
- require("game.achievement.AchieveTotalAttrItem")
- require("game.achievement.AchieveTabBtnItem")
- require("game.achievement.AchieveVarietyView")
- require("game.achievement.AchieveItem")
- require("game.achievement.AchieveTipsView")
- require("game.achievement.AchievePrivilegeItem")
- require("game.achievement.AchievePrivilegeView")
- require("game.achievement.AchieveGuildSpeedTipsView")--公会竞速称号变化的弹出提示界面
- require("game.achievement.AchieveMainTypeItem") -- 大类成就
- require("game.proto.409.Require409")
-
- AchieveController = AchieveController or BaseClass(BaseController)
-
- function AchieveController:__init()
- AchieveController.Instance = self
-
- self.model = AchieveModel:getInstance()
- self.tips_view_list = {}
- self.scmd_errorcode_count = 0 -- 连续收到40903错误码的次数
-
- self:registerAllProtocals()
- self:addEvents()
- end
-
- function AchieveController:registerAllProtocals()
- -- self:RegisterProtocal(40900, "handler40900") -- 成就章节信息
- self:RegisterProtocal(40901, "handler40901") -- 成就大类总进度
- self:RegisterProtocal(40902, "handler40902") -- 获取成就列表
- self:RegisterProtocal(40903, "handler40903") -- 领取成就奖励
- self:RegisterProtocal(40904, "handler40904") -- 更新成就(推送协议)
- self:RegisterProtocal(40905, "handler40905") -- 更新大类总进度(推送协议)
- self:RegisterProtocal(40906, "handler40906") -- 成就等级经验
- self:RegisterProtocal(40907, "handler40907") -- 成就等级特权信息
- self:RegisterProtocal(40908, "handler40908") -- 领取成就特权奖励
- self:RegisterProtocal(40909, "handler40909") -- 成就系统错误码
- self:RegisterProtocal(40910, "handler40910") -- 获取交易券兑换情况
- self:RegisterProtocal(40911, "handler40911") -- 交易券兑换
- self:RegisterProtocal(40912, "handler40912") -- 获取/领取周固定奖励
- end
-
- function AchieveController:addEvents()
- local function onGameStart()
- if RoleManager.Instance.mainRoleInfo and RoleManager.Instance.mainRoleInfo.level >= Config.Moduleid[409].open_lv then
- -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40900)
- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901)
- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40906)
- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40907)
- -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40910)
- -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40912, 1)
- end
- end
- GlobalEventSystem:Bind(EventName.GAME_START, onGameStart)
-
- -- 满足等级后请求一次成就信息
- local function onLevelUp(lv)
- if lv == Config.Moduleid[409].open_lv then
- onGameStart()
- end
- end
- RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp)
-
- --[[ local function open_achieve_main_view(show, index)
- if show then
- if not GetModuleIsOpen(409) then return end
- if not self.achieve_main_view then
- self.achieve_main_view = AchieveView.New()
- end
- if not self.achieve_main_view:HasOpen() then
- self.achieve_main_view:Open(index)
- else
- self.achieve_main_view:ChangeTab(index)
- end
- else
- if self.achieve_main_view then
- self.achieve_main_view:Close()
- end
- end
- end
- self.model:Bind(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW, open_achieve_main_view)--]]
-
- local function open_privilege_view( show )
- if show then
- if not GetModuleIsOpen(409) then return end
- if not self.achieve_privilege_view then
- self.achieve_privilege_view = AchievePrivilegeView.New()
- end
- if not self.achieve_privilege_view:HasOpen() then
- self.achieve_privilege_view:Open()
- else
- self.achieve_privilege_view:UpdateView()
- end
- else
- if self.achieve_privilege_view then
- self.achieve_privilege_view:Close()
- end
- end
- end
- self.model:Bind(AchieveModel.OPEN_ACHIEVE_PRIVILEGE_VIEW, open_privilege_view) -- 特权预览界面
-
- local function open_achieve_tips_view(show)
- if RoleManager.Instance.mainRoleInfo.level < Config.Moduleid[409].open_lv then return end
- -- 如果界面还没加载完或者已经存在且在动画中则跳出
- if self.tips_view and (not self.tips_view:HasOpen() or self.tips_view.is_animating) then return end
-
- local function close_tips_view()
- if self.tips_view:HasOpen() then
- self.tips_view:Close()
- end
- end
- if show then
- local tip_data = self.model:GetAchieveTipData()
- if tip_data then
- if self.tips_view == nil then
- self.tips_view = AchieveTipsView.New()
- end
- if not self.tips_view:HasOpen() then
- self.tips_view:Open(tip_data)
- else
- self.tips_view:ResetViewInfo(tip_data)
- end
- else
- close_tips_view()
- end
- else
- close_tips_view()
- end
- end
- -- 2021/3/15 策划说不要弹成就弹窗
- -- self.model:Bind(AchieveModel.OPEN_ACHIEVE_TIPS_VIEW, open_achieve_tips_view)
-
- local function openAchieveGuildSpeedTipsView(data,is_close)--公会竞速称号变化的弹出提示界面
- if not GetModuleIsOpen(331,66) then return end
- if self.AchieveGuildSpeedTipsView == nil then
- self.AchieveGuildSpeedTipsView = AchieveGuildSpeedTipsView.New()
- end
- if self.AchieveGuildSpeedTipsView:HasOpen() and not is_close then
-
- elseif not is_close then
- self.AchieveGuildSpeedTipsView:Open(data)
- else
- self.AchieveGuildSpeedTipsView:Close()
- end
- end
- GlobalEventSystem:Bind(AchieveModel.OPEN_GUILD_SPEED_TIP_VIEW, openAchieveGuildSpeedTipsView)
-
- local function onRequestHandler(...)
- local args_list = {...}
- if args_list[1] == 40903 then
- self:SendFmtToGame(args_list[1], "hhh", args_list[2], args_list[3], args_list[4])
- self:AddSetWaitSCMDTimer()
- elseif args_list[1] == 40902 or args_list[1] == 40908 then
- self:SendFmtToGame(args_list[1], "h", args_list[2])
- elseif args_list[1] == 40911 then -- 兑换协议,一次请求默认兑换一次
- self:SendFmtToGame(args_list[1], "c", 1)
- elseif args_list[1] == 40912 then
- self:SendFmtToGame(args_list[1], "c", args_list[2])
- else
- self:SendFmtToGame(args_list[1])
- end
- end
- self.model:Bind(AchieveModel.REQUEST_CCMD_EVENT, onRequestHandler)
-
-
- local function updata_rewardAndGiftInfo_on_changeDay()
- local function delay_method()
- --今天是星期几,周一刷新周礼包信息
- local cur_weekday = tonumber(os.date("%w", TimeUtil:getServerTime()))
- cur_weekday = cur_weekday ~= 0 and cur_weekday or 7
- if cur_weekday == 1 then
- -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40912, 1) -- 周领取
- self.model.exchange_login_red = true -- 首次登陆交易卷红点重置 不加这个会不刷新按钮
- -- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40910)
- end
- end
- setTimeout(delay_method, 3)
- end
- self.change_day_id = GlobalEventSystem:Bind(EventName.CHANE_DAY, updata_rewardAndGiftInfo_on_changeDay)
-
-
- local function update_achieve_red()
- self.model:CheckMainRoleInfoViewAchieveRed()
- end
- -- 红点检查
- self.model:Bind(AchieveModel.UPDATE_ACHIEVE_RED, update_achieve_red)
- end
-
- -- 2021年3月1日新增 领取奖励成功之后自动跳转到下一个有奖励的章节
- function AchieveController:AutoSwitchCategoryAfterClaimReward( )
- self.model:Fire(AchieveModel.UPDATE_BASE_VIEW)
- -- if self.achieve_main_view and self.achieve_main_view:HasOpen() then
- -- local tab_index = self.achieve_main_view.cur_tab_index
- -- local cur_category = tab_index - 1
- -- local category_red = self.model:GetAchieveCacheRed(AchieveModelRedType.Achieve)
- -- if category_red then
- -- if not category_red[cur_category] then -- 当前查看的章节已经没有红点了,则自动切换章节页签
- -- local target_index
- -- for k, v in pairs(category_red) do
- -- if v and (not target_index or target_index > k) then -- 存在红点
- -- target_index = k
- -- end
- -- end
- -- if target_index then
- -- self.model:Fire(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW, true, target_index + 1)
- -- end
- -- end
- -- end
- -- end
- end
-
- function AchieveController:AddSetWaitSCMDTimer( )
- self:ClearWaitSCMDTimer()
- local function wait_scmd()
- self.model:SetSCMDWaitFlag(false)
- self:ClearWaitSCMDTimer()
- end
- self.wait_scmd_timer_id = GlobalTimerQuest:AddPeriodQuest(wait_scmd, 3, 1)
- end
-
- function AchieveController:ClearWaitSCMDTimer()
- if self.wait_scmd_timer_id then
- TimerQuest.CancelQuest(GlobalTimerQuest, self.wait_scmd_timer_id)
- self.wait_scmd_timer_id = nil
- end
- end
-
- --[[-- 成就章节进度信息
- function AchieveController:handler40900()
- local vo = SCMD40900.New(true)
- self.model:SetChapterProgress(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true)
- self.model:Fire(AchieveModel.UPDATE_CHAPTER_PROGRESS)
- end--]]
-
- -- ############## 成就大类总进度 ##############
- -- protocol=40901
- -- {
- -- c2s{
- -- }
- -- s2c{
- -- type_list:array{
- -- type :int16 // 成就大类
- -- count :int8 // 当前完成数量
- -- }
- -- }
- -- }
- -- 成就大类总进度
- function AchieveController:handler40901()
- local vo = SCMD40901.New(true)
- -- if vo.errcode == 1 then -- 章节奖励领取成功
- -- self.model:UpdateChapterRewardStatus(vo.category)
- -- self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true, vo.category)
- -- self.model:Fire(AchieveModel.RECEIVE_CHAPTER_REWARD_SUCCEED, vo.category)
- -- else
- -- ErrorCodeShow(vo.errcode)
- -- end
- -- logWarn('=======Msh:AchieveController.lua[213]=======')
- -- PrintTable(vo)
- self.model:SetMainTypeProgress(vo.type_list)
- self.model:CheckAchieveRed(nil, true)
- end
-
- -- ############## 获取成就列表 ##############
- -- protocol=40902
- -- {
- -- c2s{
- -- type :int16 // 成就大类
- -- }
- -- s2c{
- -- type :int16 // 成就大类
- -- list:array{ // p.s. 每个小类只发送当前最接近完成/完成未领奖的成就
- -- sub_type :int16 // 成就小类
- -- id :int16 // 成就id
- -- progress :int32 // 进度
- -- status :int8 // 成就状态 0:未完成 1:已完成未领取 2:已领取
- -- }
- -- }
- -- }
- -- 获取成就列表
- function AchieveController:handler40902()
- local vo = SCMD40902.New(true)
- self.model:SetAchieveData(vo)
- -- logWarn('=======Msh:AchieveController.lua[246]=======')
- -- PrintTable(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true)
- self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.type)
- end
-
- --[[############## 领取成就奖励 ##############
- protocol=40903
- {
- c2s{
- type :int16 // 成就大类
- sub_type :int16 // 成就小类
- id :int16 // 成就id
- }
- s2c{
- errcode :int32 // 0-失败 1-成功
- type :int16 // 成就大类
- sub_type :int16 // 成就小类
- id :int16 // 成就id
- }
- }--]]
- -- 领取成就小类奖励后,前端更新缓存
- function AchieveController:handler40903()
- local vo = SCMD40903.New(true)
- -- logWarn('=======Msh:AchieveController.lua[293]=======')
- -- PrintTable(vo)
- if vo.errcode == 1 then
- self.scmd_errorcode_count = 0
- lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.SUCCESS)
- self.model:UpdateAchieveStatus(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true, vo.type)
- -- self:AutoSwitchCategoryAfterClaimReward()
- else
- ErrorCodeShow(vo.errcode)
- self.scmd_errorcode_count = self.scmd_errorcode_count + 1
- if self.scmd_errorcode_count > 1 then -- 连续收到2次或以上 错误码就强刷一遍界面
- self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.type, false)
- end
- end
- self:ClearWaitSCMDTimer()
- self.model:SetSCMDWaitFlag(false)
- end
-
- --[[############## 更新成就(推送协议) ##############
- protocol=40904
- {
- s2c{
- list:array{ // p.s.只推送更新了状态的成就
- type :int16 // 成就大类
- sub_type :int16 // 成就小类
- id :int16 // 成就id
- progress :int32 // 进度
- status :int8 // 成就状态 0:未完成 1:已完成未领取 2:已领取
- }
- }
- }--]]
- -- 更新成就进度
- function AchieveController:handler40904()
- local vo = SCMD40904.New(true)
- -- logWarn('=======Msh:AchieveController.lua[320]=======')
- -- PrintTable(vo)
- self.model:UpdateAchieveData(vo.list)
- -- self.model:SetAchieveTipData(vo.list, false)
- self.model:CheckAchieveRed(AchieveModelRedType.Achieve, true)
- self.model:Fire(AchieveModel.UPDATE_ACHIEVE_DATA, vo.list[1] and vo.list[1].type or nil, true)
- end
-
- -- 更新大类总进度(推送协议)
- function AchieveController:handler40905()
- local vo = SCMD40905.New(true)
- self.model:SetMainTypeProgress(vo.list)
- -- self.model:SetAchieveTipData(vo.list, true)
- -- self.model:CheckAchieveRed(AchieveModelRedType.Chapter, true)
- self.model:Fire(AchieveModel.UPDATE_MAIN_TYPE_PROGRESS)
- end
-
- -- 成就等级经验
- function AchieveController:handler40906()
- local vo = SCMD40906.New(true)
- -- 等级是否发生变动
- -- local per_lv_data = self.model:GetAchieveLvData()
- -- local changed_lv = per_lv_data and per_lv_data.lv ~= vo.lv or false
- self.model:SetAchieveLvData(vo)
- -- self.model:CheckAchieveRed(AchieveModelRedType.Weekly, true)
- self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
- self.model:Fire(AchieveModel.UPDATE_ACHIEVE_LV_DATA)
- end
-
- -- 成就等级特权信息
- function AchieveController:handler40907()
- local vo = SCMD40907.New(true)
- self.model:SetAchievePrivilegeStatus(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Privilege, true)
- self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
- end
-
- -- 领取成就特权奖励
- function AchieveController:handler40908()
- local vo = SCMD40908.New(true)
- self.model:UpdateAchievePrivilegeStatus(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Privilege, true, vo.lv)
- self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
- end
-
- -- 成就系统错误码
- function AchieveController:handler40909( )
- local vo = SCMD40909.New(true)
- if vo.errcode ~= 1 then
- ErrorCodeShow(vo.errcode)
- end
- end
-
- -- 获取交易券兑换情况
- function AchieveController:handler40910( )
- local vo = SCMD40910.New(true)
- -- print("Saber:AchieveController [start:217] vo ------------------------------------------")
- -- PrintTable(vo)
- self.model:SetAchieveExchangeData(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
- self.model:Fire(AchieveModel.UPDATE_EXCHANGE_DATA)
- end
-
- -- 交易券兑换协议
- function AchieveController:handler40911( )
- local vo = SCMD40911.New(true)
- self.model:SetAchieveExchangeData(vo)
- -- 如果已经点过了登录红点,这边要手动处理一次,然后再下面的总入口那边刷新
- if not self.model.exchange_login_red then
- self.model:CheckAchieveExchangeBtnRed()
- end
- self.model:CheckAchieveRed(AchieveModelRedType.Exchange, true)
- self.model:Fire(AchieveModel.UPDATE_EXCHANGE_DATA)
- end
-
- -- 获取/领取周固定奖励
- function AchieveController:handler40912( )
- local vo = SCMD40912.New(true)
- -- print("Saber:AchieveController [start:231] vo ------------------------------------------")
- -- PrintTable(vo)
- self.model:SetWeeklyPrivilegeRewardStatus(vo)
- self.model:CheckAchieveRed(AchieveModelRedType.Weekly, true)
- self.model:Fire(AchieveModel.UPDATE_PRIVILEGE_REWARD_STATUS)
- end
|