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

412 lines
14 KiB

SevenDayTargetModel = SevenDayTargetModel or BaseClass(BaseModel)
local SevenDayTargetModel = SevenDayTargetModel
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO"
SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD = "SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD"
SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW"
SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW"
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO"
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN"
local table_insert = table.insert
function SevenDayTargetModel:__init()
SevenDayTargetModel.Instance = self
self.seven_day_target_task_cfg = {}
self:Reset( )
end
function SevenDayTargetModel:getInstance()
if SevenDayTargetModel.Instance==nil then
SevenDayTargetModel.New()
end
return SevenDayTargetModel.Instance
end
function SevenDayTargetModel:GetInstance()
if SevenDayTargetModel.Instance==nil then
SevenDayTargetModel.New()
end
return SevenDayTargetModel.Instance
end
function SevenDayTargetModel:Reset( )
self.seven_day_target_info = {}
self.seven_day_target_red_data = {}
end
function SevenDayTargetModel:SetSevenDayTargetInfo( vo )
local data = {}
-- for i,v in ipairs(vo.task_state) do
-- if not data[v.days] then
-- data[v.days] = {}
-- end
-- if not data[v.days][v.mod_id] then
-- data[v.days][v.mod_id] = {}
-- end
-- if not data[v.days][v.mod_id][v.sub_id] then
-- data[v.days][v.mod_id][v.sub_id] = {}
-- end
-- data[v.days][v.mod_id][v.sub_id][v.diff] = v
-- end
for i,v in ipairs(vo.task_state) do
if not data[v.days] then
data[v.days] = {}
end
data[v.days][self:GetKeyValve(v.days, v.mod_id, v.sub_id)] = v
end
vo.task_state = data
local score_state = {}
for i,v in ipairs(vo.score_state) do
score_state[v.score_id] = true
end
vo.score_state = score_state
local skill_state = {}
for i,v in ipairs(vo.skill_state) do
skill_state[v.days] = true
end
vo.skill_state = skill_state
self.seven_day_target_info = vo
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
self:CheckSevenDayTargetRed()
end
function SevenDayTargetModel:GetKeyValve( days, mod_id, sub_id )
return days * 100000 + mod_id * 100 + sub_id
end
function SevenDayTargetModel:GetSevenDayTargetInfo( day )
if day and TableSize(self.seven_day_target_info) > 0 then
return self.seven_day_target_info.task_state[day]
end
return self.seven_day_target_info
end
function SevenDayTargetModel:SetSevenDayTargetOneInfo( vo,is_get_award )
local data = self:GetSevenDayTargetInfo()
if data and TableSize(data) > 0 then
if not is_get_award then
data.score = vo.score
end
if data.task_state[vo.days] and data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] then
local temp_data = data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)]
if temp_data then -- 有数据
if is_get_award then
temp_data.is_receive = 1
else
temp_data.progress = vo.progress
end
self.seven_day_target_info = data
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
self:CheckSevenDayTargetRed(vo.days)
return
end
-- for i,v in pairs(data.task_state[vo.days]) do
-- if i == vo.mod_id then
-- for ii,vv in pairs(v) do
-- if ii == vo.sub_id then
-- for iii,vvv in pairs(vv) do
-- if vvv.diff == vo.diff then
-- if is_get_award then
-- vvv.is_receive = 1
-- else
-- vvv.progress = vo.progress
-- end
-- self.seven_day_target_info = data
-- self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
-- self:CheckSevenDayTargetRed(vo.days)
-- return
-- end
-- end
-- end
-- end
-- end
-- end
end
--跑完上面的 没找到 只能给他加进去了
-- if not data.task_state[vo.days][vo.mod_id] then
-- data.task_state[vo.days][vo.mod_id] = {}
-- end
if not data.task_state[vo.days] then
data.task_state[vo.days] = {}
end
data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] = {
days = vo.days,
mod_id = vo.mod_id,
sub_id = vo.sub_id,
-- diff = vo.diff,
progress = vo.progress or 0, --这个只是为了容错的 一般不会有没数据却能领取奖励的情况
is_receive = 0,
}
self.seven_day_target_info = data
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
self:CheckSevenDayTargetRed(vo.days)
end
end
function SevenDayTargetModel:SetSevenDayTargetRewardInfo( vo )
local data = self:GetSevenDayTargetInfo()
if TableSize(data) > 0 then
if vo.type == 1 then--积分奖励
data.score_state[vo.reward_id] = true
else
data.skill_state[vo.reward_id] = true
end
self.seven_day_target_info = data
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
if vo.type == 1 then--积分奖励
self:CheckSevenDayTargetRed(nil,true)
else
self:CheckSevenDayTargetRed(vo.reward_id)
end
end
end
function SevenDayTargetModel:InitSevenDayTargetTaskCFG( )
self.seven_day_target_task_cfg = {}
local cfg = Config.Sevengoaltask
for k,v in pairs(cfg) do
if not self.seven_day_target_task_cfg[v.days] then
self.seven_day_target_task_cfg[v.days] = {}
end
v.limit_condition = stringtotable(v.condition)
for ii,vv in ipairs(v.limit_condition) do
if vv[1] == "limit_times" then
v.limit_times = vv[2]
break
end
end
v.reward_info = stringtotable(v.reward)
table_insert(self.seven_day_target_task_cfg[v.days], v)
end
end
function SevenDayTargetModel:GetSevenDayTargetTaskCFGByDay( day )
if TableSize(self.seven_day_target_task_cfg) == 0 then
self:InitSevenDayTargetTaskCFG()
end
return self.seven_day_target_task_cfg[day]
end
function SevenDayTargetModel:GetSevenDayTargetTaskOneCFG( day,mod_id,sub_id )
local cfg = self:GetSevenDayTargetTaskCFGByDay(day)
if cfg then
for i,v in pairs(cfg) do
if v.mod_id == mod_id and v.sub_id == sub_id then
return v
end
end
end
end
function SevenDayTargetModel:GetSevenDayTargetLoginDay( )
if TableSize(self.seven_day_target_info) > 0 then
if self.seven_day_target_info.login_days > 7 then -- 第八天以后 默认是7
return 7
end
return self.seven_day_target_info.login_days
end
end
function SevenDayTargetModel:GetSevenDayTargetScoreInfo( )
local data = self:GetSevenDayTargetInfo()
return data.score or 0, data.score_state or {}
end
function SevenDayTargetModel:GetSevenDayTargetSkillInfo( )
local data = self:GetSevenDayTargetInfo()
return data.skill_state or {}
end
--check_reward是否要检查积分奖励是否可领取
function SevenDayTargetModel:CheckSevenDayTargetRed( day,check_reward)
if not self:IsSevenDayTargetOpen() then--如果已经不开放了就没必要算红点了 直接把图标杀了吧
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN)
-- GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
return
end
if day then--如果有这东西 就意味着能不用跑完下面的了
local server_data = self:GetSevenDayTargetInfo(day) or {}
self.seven_day_target_red_data[day] = nil
local cur_num = 0
for i,v in pairs(server_data) do
-- for ii,vv in pairs(v) do
-- for iii,vvv in pairs(vv) do
local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
if cfg then
if v.progress >= cfg.limit_times then--已完成的任务
cur_num = cur_num + 1
if v.is_receive == 0 then--如果还没领取就有红点
self.seven_day_target_red_data[day] = true
break
end
end
end
-- end
-- if self.seven_day_target_red_data[day] then--有红点了就跳出吧
-- break
-- end
-- end
if self.seven_day_target_red_data[day] then--有红点了就跳出吧
break
end
end
--如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
local server_data = self:GetSevenDayTargetInfo()
if not server_data.skill_state[day] and not self.seven_day_target_red_data[day] then
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(day)
self.seven_day_target_red_data[day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
end
--积分奖励能否领取
self.seven_day_target_red_data.score_red = nil
local score_cfg = Config.Sevengoalscore
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
for k,v in pairs(score_cfg) do
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
self.seven_day_target_red_data.score_red = true
break
end
end
elseif check_reward then--意味着是领取积分奖励进来的也就是17602
--积分奖励能否领取
self.seven_day_target_red_data.score_red = nil
local score_cfg = Config.Sevengoalscore
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
for k,v in pairs(score_cfg) do
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
self.seven_day_target_red_data.score_red = true
break
end
end
else--以下是全检查
self.seven_day_target_red_data = {}
local server_data = self:GetSevenDayTargetInfo()
if server_data.task_state then
for login_day=1,server_data.login_days do
if server_data.task_state[login_day] then
local cur_num = 0
for i,v in pairs(server_data.task_state[login_day]) do
-- for ii,vv in pairs(v) do
-- for iii,vvv in pairs(vv) do
local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
if cfg then
if v.progress >= cfg.limit_times then--已完成的任务
cur_num = cur_num + 1
if v.is_receive == 0 then--如果还没领取就有红点
self.seven_day_target_red_data[login_day] = true
break
end
end
end
-- end
-- if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
-- break
-- end
-- end
if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
break
end
end
--如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
if not server_data.skill_state[login_day] and not self.seven_day_target_red_data[login_day] then
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
self.seven_day_target_red_data[login_day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
end
end
end
end
--积分奖励能否领取
if server_data.score_state then
self.seven_day_target_red_data.score_red = false
local score_cfg = Config.Sevengoalscore
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
for k,v in pairs(score_cfg) do
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
self.seven_day_target_red_data.score_red = true
break
end
end
end
end
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO)
for k,v in pairs(self.seven_day_target_red_data) do
if v then
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,true)
return true
end
end
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
return false
end
function SevenDayTargetModel:GetSevenDayTargetRedData( )
return self.seven_day_target_red_data
end
--判断七日目标是否还在开放
function SevenDayTargetModel:IsSevenDayTargetOpen( )
local server_data = self:GetSevenDayTargetInfo()
if TableSize(server_data) > 0 then
if server_data.real_time - TimeUtil:getServerTime() <= 0 then
return true
end
if TableSize(server_data.score_state) < 5 then--小于5个积分奖励都不用判断了 肯定还没领完的
return true
end
--走到这里就要查一下是否领完了奖励了
if server_data.task_state then
if server_data.login_days < 7 then--小于7天都不用判断了 肯定还没领完的
return true
end
if TableSize(server_data.skill_state) < 7 then--只有技能激活数少于7才需要判断下面的任务奖励是否领取
for login_day=1,server_data.login_days do
if server_data.task_state[login_day] then
local len = TableSize(server_data.task_state[login_day])
--如果服务端任务数据比配置少 那肯定也还没领完
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
if len < TableSize(skill_cfg) then
return true
else--走到这里说明数据有了 先看看技能奖励领取了没 没领就活动还没完成
if not server_data.skill_state[login_day] then
return true
else--技能奖励已经领取了 也要看看是不是每一个任务都是领取了奖励的了 但凡有一个任务没领 活动就没完成
for i,v in pairs(server_data.task_state[login_day]) do
for ii,vv in pairs(v) do
for iii,vvv in pairs(vv) do
if vvv.is_receive == 0 then
return true
end
end
end
end
end
end
end
end
end
end
end
return false
end
function SevenDayTargetModel:IsSevenDayTargetSkill( skill_id )
for i,v in ipairs(Config.Sevenskillreward) do
if v.skill_reward == skill_id then
return true
end
end
return false
end
----------领取动画状态-start---------
function SevenDayTargetModel:SetTaskItemAnimState( is_anim )
self.task_item_is_animing = is_anim
end
function SevenDayTargetModel:TaskItemIsAniming( )
return self.task_item_is_animing
end
----------领取动画状态-end-----------