源战役客户端
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 

254 Zeilen
7.6 KiB

KfBossTreasureModel = KfBossTreasureModel or BaseClass(BaseVo, true)
local KfBossTreasureModel = KfBossTreasureModel
function KfBossTreasureModel:__init()
KfBossTreasureModel.Instance = self
self:Reset()
end
function KfBossTreasureModel:Reset()
self.basic_data = {}
self.task_process_info = {}
self.reward_info = {}--后端发来的奖励配置
-------------------------
self.red_act = {}
self.red_lv_reward = {}
end
function KfBossTreasureModel:getInstance()
if KfBossTreasureModel.Instance == nil then
KfBossTreasureModel.Instance = KfBossTreasureModel.New()
end
return KfBossTreasureModel.Instance
end
--活动信息
function KfBossTreasureModel:GetBasicData( sub_type )
return self.basic_data[sub_type]
end
function KfBossTreasureModel:SetBasicData( value )
self.basic_data[value.sub_type] = value
end
function KfBossTreasureModel:RefreshBasicPayStatus( sub_type,state )
local basic_data = self:GetBasicData( sub_type )
if state and basic_data then
basic_data.is_pay = state
end
end
--任务完成进度信息
function KfBossTreasureModel:GetTaskProcessInfo( sub_type )
return self.task_process_info[sub_type]
end
function KfBossTreasureModel:SetTaskProcessInfo( value )
self.task_process_info[value.sub_type] = {}
for k,v in pairs(value.task_list) do
self.task_process_info[value.sub_type][v.task_id] = v
-------------------------
local temp_conf = self:GetTaskConfByType( v.task_id )
if temp_conf and temp_conf.limit_times > v.times then
v.status = KfBossTreasureConst.RewardState.Cannot
else
v.status = KfBossTreasureConst.RewardState.Have
end
-------------------------
end
end
--获取活动结束时间
function KfBossTreasureModel:GetActivityEndTime( sub_type )
local base_type = CustomActivityModel.CustomActBaseType.BOSS_TREASURE
local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
-------------------------
if act_list and act_list.etime then
return act_list.etime
end
return 0
end
--等级配置
function KfBossTreasureModel:GetLvConf( sub_type,lv )
local server_data = self:GetRewardInfo( sub_type )
local server_max_lv = server_data and TableSize(server_data) or 0
-------------------------
sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.BOSS_TREASURE)
if lv then
for k,v in pairs(Config.Passrewards) do
return Config.Passrewards["104@" .. sub_type .. "@" .. lv]
end
else
local data = {}
for k,v in pairs(Config.Passrewards) do
if server_max_lv >= v.pass_lv then
--有数据的才放进去
data[k] = v
end
end
return data
end
end
function KfBossTreasureModel:GetRewardByLvAndOpTy( sub_type,lv,opty )
local conf = self:GetLvConf( sub_type,lv )
if not conf then return {} end
local server_reward = self:GetRewardInfo( sub_type ) and self:GetRewardInfo( sub_type )[lv]
if opty == 1 then--普通
return stringtotable(server_reward and server_reward.normal_reward or conf.normal_rewards)
elseif opty == 2 then--王牌
return stringtotable(server_reward and server_reward.trump_reward or conf.trump_rewards)
elseif opty == 3 then--都有
local tab_1 = stringtotable(server_reward and server_reward.normal_reward or conf.normal_rewards)
local tab_2 = stringtotable(server_reward and server_reward.trump_reward or conf.trump_rewards)
for k,v in pairs(tab_2) do
table.insert( tab_1, v )
end
return tab_1
end
end
function KfBossTreasureModel:GetMaxRewardLv( sub_type )
--取服务端和本地配置最低的等级
local server_data = self:GetRewardInfo( sub_type )
local server_max_lv = server_data and TableSize(server_data) or 0
-------------------------
local max_lv = 1
for k,v in pairs(Config.Passrewards) do
if v.sub_type == sub_type then
max_lv = max_lv > v.pass_lv and max_lv or v.pass_lv
end
end
return server_max_lv > max_lv and max_lv or server_max_lv
end
--获得当前选中的等级
function KfBossTreasureModel:GetCurLvSelect( sub_type )
local min_can_data = false--可领取的最低等级
local max_have_data = false--已领取的最大等级
local basic_data = self:GetBasicData( sub_type )
local server_data = self:GetRewardInfo( sub_type )
local server_max_lv = server_data and TableSize(server_data) or 0
if basic_data then
for k,v in pairs(basic_data.reward_list) do
if v.lv <= server_max_lv then--要在服务端数据等级之内才有效
if v.normal_status == KfBossTreasureConst.RewardState.Can or v.extra_status == KfBossTreasureConst.RewardState.Can then
if min_can_data then
min_can_data = v.lv > min_can_data.lv and min_can_data or v
else
min_can_data = v
end
end
if v.normal_status == KfBossTreasureConst.RewardState.Have then
if max_have_data then
max_have_data = v.lv > max_have_data.lv and v or max_have_data
else
max_have_data = v
end
end
end
end
end
if min_can_data then
return min_can_data.lv
elseif max_have_data then
local max_lv = self:GetMaxRewardLv( sub_type )
return max_have_data.lv < max_lv and max_have_data.lv+1 or max_lv
end
return 1
end
--等级奖励红点
function KfBossTreasureModel:GetLvRewardRed( need_new,sub_type )
if not need_new then
return self.red_lv_reward[sub_type]
end
self.red_lv_reward[sub_type] = false
local basic_data = self:GetBasicData( sub_type )
local server_data = self:GetRewardInfo( sub_type )
local server_max_lv = server_data and TableSize(server_data) or 0
if basic_data then
for k,v in pairs(basic_data.reward_list) do
if v.lv <= server_max_lv then--要在服务端数据等级之内才有效
if v.normal_status == KfBossTreasureConst.RewardState.Can or v.extra_status == KfBossTreasureConst.RewardState.Can then
self.red_lv_reward[sub_type] = true
return true
end
end
end
end
return false
end
--获取王牌宝典状态
function KfBossTreasureModel:GetPayState( sub_type )
local basic_data = self:GetBasicData( sub_type )
if basic_data then
return basic_data.is_pay
end
return KfBossTreasureConst.PayState.Lock
end
function KfBossTreasureModel:GetLvRewardStatus( sub_type,lv )
local basic_data = self:GetBasicData( sub_type )
if basic_data then
for k,v in pairs(basic_data.reward_list) do
if v.lv == lv then
return v.normal_status,v.extra_status
end
end
end
return KfBossTreasureConst.RewardState.Cannot,KfBossTreasureConst.RewardState.Cannot
end
function KfBossTreasureModel:GetTaskConfByType( type_id )
for k,v in pairs(Config.Phantomtasktype) do
if v.task_type_id == type_id then
return v
end
end
end
function KfBossTreasureModel:GetAllRed( need_new )
if need_new then
self.red_act = {}
local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.BOSS_TREASURE)
for i,v in pairs(temp_list or {}) do
self.red_act[v.sub_type] = self:GetAllRedBySubType(true,v.sub_type)
end
end
for k,v in pairs(self.red_act) do
if v then
return true
end
end
return false
end
function KfBossTreasureModel:GetAllRedBySubType( need_new,sub_type )
if need_new then
self:GetLvRewardRed(true,sub_type)
KfActivityModel:getInstance():IsNeedRed(KfActivityModel.TabID.BossTreasure,nil,sub_type)
end
return self:GetLvRewardRed(false,sub_type)
end
function KfBossTreasureModel:GetIsMaxLv( sub_type )
local base_data = self:GetBasicData(sub_type)
if base_data then
return base_data.con_lv == self:GetMaxRewardLv(sub_type)
end
end
--后端发来的奖励配置
function KfBossTreasureModel:GetRewardInfo( sub_type )
return self.reward_info[sub_type]
end
--后端发来的奖励配置
function KfBossTreasureModel:SetRewardInfo( sub_type,reward_list )
local temp = {}
for k,v in pairs(reward_list) do
temp[v.lv] = v
end
self.reward_info[sub_type] = temp
end