源战役客户端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 

427 řádky
15 KiB

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