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