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