源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

632 rader
18 KiB

EquipCollectModel = EquipCollectModel or BaseClass(BaseModel)
local table_insert = table.insert
function EquipCollectModel:__init()
EquipCollectModel.Instance = self
self.equip_collect_cfg = {}--装备收集表
self.equip_exam_task_cfg = {}--装备考核任务表
self:Reset()
end
function EquipCollectModel:Reset()
self.equip_collect_info = {}--装备大全基础信息
self.equip_collect_progress = {}--装备大全收集进度
self.equip_collect_red_data = {}--装备收集红点缓存信息
self.equip_collect_tip_data = {}--弹出tips的缓存列表,等15218返回的时候会清零
self.equip_exam_task_info = {}--装备考核任务信息
self.equip_exam_task_red = {}--装备考核任务红点
self.equip_exam_skill_info = {}--装备考核选择技能信息
self.equip_exam_red_data = {}--装备考核整个的大红点
self.mask_lead_effect = {}--重置引导特效标记
self.equip_exam_boss_data = {} -- 幻魔首杀后端数据
self.boss_left_btn_red_cache = {} -- 幻魔页签红点缓存
end
function EquipCollectModel:getInstance()
if EquipCollectModel.Instance == nil then
EquipCollectModel.New()
end
return EquipCollectModel.Instance
end
function EquipCollectModel:GetInstance()
if EquipCollectModel.Instance == nil then
EquipCollectModel.Instance = EquipCollectModel.New()
end
return EquipCollectModel.Instance
end
function EquipCollectModel:IsEquipExamNeedRed( tab_id )
local bool = false
if tab_id == EquipCollectConst.TAB_ID.COLLECT then
bool = self:IsEquipCollectNeedRed()
-- elseif tab_id == EquipCollectConst.TAB_ID.BOSS then
-- bool = self:HasBossRewardCanGet()
elseif tab_id == EquipCollectConst.TAB_ID.UPGRADE then
bool = EquipModel:getInstance():GetCurHaveStarRedDot()
-- elseif tab_id == EquipCollectConst.TAB_ID.TASK then
-- bool = self:IsEquipCollectTaskNeedRed()
end
local is_module_open = GetModuleIsOpen(145, tab_id)
self.equip_exam_red_data[tab_id] = bool and is_module_open
self:Fire(EquipCollectConst.ANS_UPDATE_EQUIP_COLLECT_RED_DOT,tab_id,bool)
end
function EquipCollectModel:IsEquipExamNeedRedAll( )
for k,v in pairs(EquipCollectConst.TAB_ID) do
self:IsEquipExamNeedRed(v)
end
end
function EquipCollectModel:GetAllEquipExamRedDot( )
return self.equip_exam_red_data
end
function EquipCollectModel:GetTotalRed( )
local red_dot = self:GetAllEquipExamRedDot()
local bool = false
for i,v in pairs(red_dot) do
if v then
bool = true
break
end
end
return bool
end
function EquipCollectModel:InitEquipCollectCFG( )
local cfg = Config.Equipmentcollectgoods
for k,v in pairsByKeys(cfg) do
if not self.equip_collect_cfg[v.id] then
self.equip_collect_cfg[v.id] = {}
end
if not self.equip_collect_cfg[v.id][v.sub_id] then
self.equip_collect_cfg[v.id][v.sub_id] = {}
end
self.equip_collect_cfg[v.id][v.sub_id][v.pos] = v
self.equip_collect_cfg[v.id][v.sub_id][v.pos].attr_list = stringtotable(v.attr_node)
end
end
function EquipCollectModel:InitEquipExamTaskCFG( )
local cfg = Config.Equipmenttask
local content_data = {}
for k,v in pairsByKeys(cfg) do
if not self.equip_exam_task_cfg[v.mod] then
self.equip_exam_task_cfg[v.mod] = {}
end
content_data = stringtotable(v.content)
if TableSize(content_data) > 0 then
v.limit_num = content_data[2] or content_data[1]
else
v.limit_num = 0
end
table_insert(self.equip_exam_task_cfg[v.mod], v)
end
end
function EquipCollectModel:GetEquipCollectCFG(type,sub_type )
if TableSize(self.equip_collect_cfg) == 0 then
self:InitEquipCollectCFG()
end
if type and self.equip_collect_cfg[type] and sub_type then
return self.equip_collect_cfg[type][sub_type]
end
if type then
return self.equip_collect_cfg[type]
end
return self.equip_collect_cfg
end
function EquipCollectModel:GetEquipExmTaskCFG( type )
if TableSize(self.equip_exam_task_cfg) == 0 then
self:InitEquipExamTaskCFG()
end
if type then
return self.equip_exam_task_cfg[type]
end
return self.equip_exam_task_cfg
end
function EquipCollectModel:SetEquipCollectInfo( vo )
local cfg = Config.Equipment
for i,v in ipairs(vo.list) do
if not self.equip_collect_info[v.type] then
self.equip_collect_info[v.type] = {}
end
if not self.equip_collect_progress[v.type] then
self.equip_collect_progress[v.type] = {}
end
if not self.equip_collect_info[v.type][v.sub_type] then
self.equip_collect_info[v.type][v.sub_type] = {}
end
if not self.equip_collect_progress[v.type][v.sub_type] then
self.equip_collect_progress[v.type][v.sub_type] = {}
end
self.equip_collect_progress[v.type][v.sub_type].cur_active = v.active_progress
self.equip_collect_progress[v.type][v.sub_type].can_active = TableSize(v.equipment_list)
for ii,vv in ipairs(v.equipment_list) do
--这个id其实是部位id 某天因为张龙的骚操作 吃书了修改 20200729HWR
self.equip_collect_info[v.type][v.sub_type][vv.goods_id] = self:GetEquipCollectEquipId(v.type, v.sub_type, vv.goods_id)
-- if cfg[vv.goods_id] then
-- -- self.equip_collect_info[v.type][v.sub_type][cfg[vv.goods_id].equip_type] = vv.goods_id
-- end
end
end
local bool = self:IsEquipCollectNeedRed()
GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
self:Fire(EquipCollectConst.ANS_EQUIP_COLLECT_INFO, self.equip_collect_info)
end
--获取装备收集信息
function EquipCollectModel:GetEquipCollectInfo( id, sub_id )
if id and sub_id then
if self.equip_collect_info[id] then
return self.equip_collect_info[id][sub_id] or {}
else
return {}
end
elseif id and not sub_id then
return self.equip_collect_info[id] or {}
else
return self.equip_collect_info
end
end
function EquipCollectModel:GetEquipCollectProgress( id, sub_id )
if id and sub_id then
if self.equip_collect_progress[id] then
return self.equip_collect_progress[id][sub_id] or {}
else
return {}
end
elseif id and not sub_id then
return self.equip_collect_progress[id] or {}
else
return self.equip_collect_progress
end
end
function EquipCollectModel:AddOneEquipCollectInfo( )
end
function EquipCollectModel:GetEquipCollectSubTypeName(type,sub_type)
local cfg = Config.Equipmentcollectsubtype
local name = ""
if type and sub_type then
if cfg[type.."@"..sub_type] then
name = cfg[type.."@"..sub_type].name
end
elseif type then
cfg = Config.Equipmentcollecttype
if cfg[type] then
name = cfg[type].name
end
end
return Trim(name)
end
function EquipCollectModel:GetEqipCollectAward( type,sub_type )
local cfg = Config.Equipmentcollectsubtype
local str = ""
if type and sub_type then
if cfg[type.."@"..sub_type] then
str = cfg[type.."@"..sub_type].reward
end
end
return str
end
function EquipCollectModel:IsEquipCollectNeedRed( )
local bool = false
local progress = self:GetEquipCollectProgress()
self.equip_collect_red_data = {}
local cfg = {}
for i,v in pairs(progress) do
for ii,vv in pairs(v) do
if vv.cur_active and vv.can_active then
if vv.can_active == 7 and vv.cur_active < 7 then
bool = true
if not self.equip_collect_red_data[i] then
self.equip_collect_red_data[i] = {}
end
self.equip_collect_red_data[i][ii] = true
end
end
end
end
return bool
end
--获取第一个子id
function EquipCollectModel:GetFirstSubId( id )
local cfg = self:GetEquipCollectCFG(id) or {}
for k,v in pairsByKeys(cfg) do
return k
end
end
--获取当前激活的进度
function EquipCollectModel:GetCurEquipCollectNum( )
end
--根据id来拿红点数据
function EquipCollectModel:IsEquipCollectNeedRedById(id, sub_id)
if id and sub_id then
if self.equip_collect_red_data[id] then
return self.equip_collect_red_data[id][sub_id] or false
else
return false
end
elseif id and not sub_id then
return TableSize(self.equip_collect_red_data[id]) > 0
else
return TableSize(self.equip_collect_red_data) > 0
end
end
--通过id来判断是否已经全收集激活了
function EquipCollectModel:CheckIsAllEquipCollected( id, sub_id )
local bool = false
if id and sub_id then--判断小类是否全收集
local progress_data = self:GetEquipCollectProgress(id,sub_id)
--只有有数据 且当前激活数等于7的才判断为小类全收集
if TableSize(progress_data) > 0 and progress_data.cur_active == 7 then
bool = true
end
elseif id and not sub_id then--判断大类是否全收集
local cfg = self:GetEquipCollectCFG(id, sub_id)
local count = 0
for k,v in pairs(cfg) do
--遍历配置表的小类 看看是否全收集了
local progress_data = self:GetEquipCollectProgress(id,k)
--只有有数据 且当前激活数等于7的才判断为小类全收集
if TableSize(progress_data) > 0 and progress_data.cur_active == 7 then
count = count + 1
end
end
if count == TableSize(cfg) then
bool = true
end
else--其他情况不存在 没有判断全装备收集的需求
end
return bool
end
--需要弹tips的时候先保存列表
function EquipCollectModel:SetEquipCollectNeedShowTipData( data )
self.equip_collect_tip_data = data
end
function EquipCollectModel:CleanEquipCollectNeedShowTipData( )
self.equip_collect_tip_data = {}
end
--判断是否是收集了一整套
function EquipCollectModel:IsCollectSuit( )
local data = self:GetEquipCollectNeedShowTipData()
local server_data = self:GetEquipCollectInfo(data.id)
local bool = false
for i,v in pairsByKeys(server_data) do
if TableSize(v) == 7 then--满足7件
if not bool then--没找到的时候才要进来
bool = not self:CheckIsAllEquipCollected(data.id, i)--并且没领奖励
end
end
end
return bool
end
function EquipCollectModel:IsNeedShowTip( )
local is_in_level = (RoleManager.Instance.mainRoleInfo.level < EquipCollectConst.LIMIT_LEVEL and RoleManager.Instance.mainRoleInfo.level > EquipCollectConst.LIMIT_LEVEL_DOWN)
return GetModuleIsOpen(145) and TableSize(self.equip_collect_tip_data) > 0 and (self:IsCollectSuit() or is_in_level)
end
function EquipCollectModel:GetEquipCollectNeedShowTipData( )
return self.equip_collect_tip_data
end
function EquipCollectModel:GetEquipCollectTipData( id )
local server_data = self:GetEquipCollectInfo(id)
local tip_data = self:GetEquipCollectNeedShowTipData()--获取是哪个新增了
self:CleanEquipCollectNeedShowTipData()
local cur_num = 0
local cur_data = {}
--构造一个7个装备的数据
local data = {}
for i=1,7 do
data[i] = {
type_id = 0,
pos_id = i,
}
for k,v in pairsByKeys(server_data) do
if v[i] then
data[i].type_id = v[i]
if v[i] == tip_data.goods_id then
data[i].need_action = true
end
end
end
end
local function sortfunction( a,b )
if a.type_id > 0 and b.type_id > 0 then
return a.pos_id < b.pos_id
elseif a.type_id == 0 and b.type_id == 0 then
return a.pos_id < b.pos_id
elseif b.type_id == 0 then
return true
else
return false
end
end
table.sort( data, sortfunction )
return data
end
--获取刚进界面的跳转id
--有红点跳红点位置
function EquipCollectModel:GetEquipCollectJumpId( )
local red_data = self.equip_collect_red_data
local id = 1
local sub_id = self:GetFirstSubId( id )
if TableSize(red_data) > 0 then
for k,v in pairsByKeys(red_data) do
if TableSize(v) > 0 then
id = k
for kk,vv in pairsByKeys(v) do
sub_id = kk
return id, sub_id
end
end
end
else
local cfg = Config.Equipmentcollecttype
local turn = RoleManager.Instance.mainRoleInfo.turn
for i,v in ipairs(cfg) do
if turn >= v.open_lv then
id = v.id
end
end
sub_id = self:GetFirstSubId( id )
end
return id, sub_id
end
--根据传进来的代数品质部位获取配置的id
function EquipCollectModel:GetEquipCollectEquipId(id,sub_id,pos_id )
local cfg = Config.Equipmentcollectgoods
local goods_id = 0
if id and sub_id and pos_id then
if cfg[id.."@"..sub_id.."@"..pos_id] then
local data = stringtotable(cfg[id.."@"..sub_id.."@"..pos_id].goods_id)
if data then
local career = RoleManager.Instance.mainRoleInfo.career
for k,v in pairs(data) do
if v[1] == career then
goods_id = v[2]
end
end
end
end
end
return goods_id
end
--检查主界面图标是否开启
function EquipCollectModel:CheckMainIconOpen( )
do return end --弃用
if GetModuleIsOpen(145) and RoleManager.Instance.mainRoleInfo.level < EquipCollectConst.LIMIT_LEVEL then
ActivityIconManager:getInstance():addIcon(15208, -1)
else
ActivityIconManager:getInstance():deleteIcon(15208)
end
end
--检查装备套装代数是否开启
function EquipCollectModel:CheckEquipCollectSuitIsOpen( id )
local cfg = Config.Equipmentcollecttype
local level = RoleManager.Instance.mainRoleInfo.level
if cfg[id] and cfg[id].open_lv <= level then
return true
end
return false
end
function EquipCollectModel:SetEquipCollectTaskInfo( vo )
local data = {}
for i,v in ipairs(vo.list) do
data[v.task_id] = v
end
self.equip_exam_task_info = data
self:ChangeVar("equip_exam_task_info", self.equip_exam_task_info, false, true)
end
function EquipCollectModel:GetEquipCollectTaskInfo( )
return self.equip_exam_task_info
end
function EquipCollectModel:SetEquipCollectTaskOneInfo( vo )
if not self.equip_exam_task_info[vo.task_id] then
self.equip_exam_task_info[vo.task_id] = {}
end
self.equip_exam_task_info[vo.task_id].task_id = vo.task_id
self.equip_exam_task_info[vo.task_id].process = vo.process
self.equip_exam_task_info[vo.task_id].status = vo.status
self:ChangeVar("equip_exam_task_info", self.equip_exam_task_info, false, true)
end
function EquipCollectModel:IsEquipCollectTaskNeedRed( )
self.equip_exam_task_red = {}
local server_data = self:GetEquipCollectTaskInfo()
local cfg = Config.Equipmenttask
local bool = false
for k,v in pairs(server_data) do
if v.status == 1 then
if cfg[v.task_id] then
if not self.equip_exam_task_red[cfg[v.task_id].mod] then
self.equip_exam_task_red[cfg[v.task_id].mod] = {}
end
self.equip_exam_task_red[cfg[v.task_id].mod][v.task_id] = true
bool = true
end
end
end
return bool
end
function EquipCollectModel:IsEquipCollectTaskNeedRedById( mod, task_id )
if mod and task_id then
if self.equip_exam_task_red[mod] then
return self.equip_exam_task_red[mod][task_id] or false
else
return false
end
elseif mod and not task_id then
return TableSize(self.equip_exam_task_red[mod]) > 0
else
return TableSize(self.equip_exam_task_red) > 0
end
end
function EquipCollectModel:SetEquipExamSkillInfo( vo )
for i,v in ipairs(vo) do
self.equip_exam_skill_info[v.id] = v
end
end
function EquipCollectModel:GetEquipExamSkillInfo( )
return self.equip_exam_skill_info
end
----------幻魔boss首杀-start---------
-- 更新boss信息列表 14501
function EquipCollectModel:SetBossData( vo )
for k,v in pairs(vo.list) do
self.equip_exam_boss_data[v.boss_id] = v
end
end
-- 更新boss信息列表 14502
function EquipCollectModel:UpdateBossData( vo )
if self.equip_exam_boss_data[vo.boss_id] then
if vo.type == 1 then -- 全服
self.equip_exam_boss_data[vo.boss_id].server_award_status = 1
elseif vo.type == 2 then
self.equip_exam_boss_data[vo.boss_id].self_kill_status = 2
end
self:Fire(EquipCollectConst.UPDATE_BOSS_VIEW, vo.boss_id)
self:Fire(EquipCollectConst.UPDATE_EQUIP_COLLECT_RED, EquipCollectConst.TAB_ID.BOSS)
else -- 据然没数据 那就请求一遍
self:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14501)
end
end
function EquipCollectModel:GetBossData( boss_id )
if boss_id then
return self.equip_exam_boss_data[boss_id] or {}
else
return self.equip_exam_boss_data
end
end
-- boss首杀配置
function EquipCollectModel:GetBossFirstBloodCfg( boss_id )
if boss_id then
return Config.Bossfirstblood[boss_id]
else
return Config.Bossfirstblood
end
end
function EquipCollectModel:GetBossLeftTabData( )
if not self.boss_left_data then
self.boss_left_data = {} -- 存了左侧boss图标的顺序
for k,v in pairs(Config.Rewardbossinfo) do
local temp = {
enter_lv = v.enter_lv,
boss_id = v.boss_id
}
table.insert(self.boss_left_data, temp)
end
local sort_func = function ( a, b )
return a.enter_lv < b.enter_lv
end
table.sort(self.boss_left_data, sort_func)
end
return self.boss_left_data
end
function EquipCollectModel:HasBossRewardCanGet()
local bool = false
self.can_get_reward_boss_id = nil
for k,v in pairsByKeys(self.equip_exam_boss_data) do
local selfkill_can_get = v.self_kill_status and v.self_kill_status == 1
local firstblood_can_get = v.time and v.time > 0 and v.server_award_status == 0
if selfkill_can_get or firstblood_can_get then
self.can_get_reward_boss_id = v.boss_id
bool = true
break
end
end
return bool
end
-- 打开界面默认选中的boss
function EquipCollectModel:GetFirstCanKillBossIdAndIndex( )
local boss_model = BossModel:GetInstance()
local left_data = self:GetBossLeftTabData( )
local not_kill_boss_id = left_data[1].boss_id
for k,v in pairsByKeys(left_data) do
local boss_data = self:GetBossData( v.boss_id )
local kill_status = boss_data.self_kill_status and boss_data.self_kill_status or 0
if v.enter_lv < RoleManager.Instance.mainRoleInfo.level and kill_status == 0 then
not_kill_boss_id = v.boss_id
break
end
end
if self.can_get_reward_boss_id then -- 有可领的奖励哦 找可领奖励的
for i,v in ipairs(left_data) do
if self.can_get_reward_boss_id == v.boss_id then
return v.boss_id, i
end
end
else -- 没有可领奖励 找可击杀最低等级的
for i,v in ipairs(left_data) do
if not_kill_boss_id == v.boss_id then
return v.boss_id, i
end
end
end
end
-- 缓存一遍页签红点
function EquipCollectModel:UpdateBossLeftBtnRed( )
self.boss_left_btn_red_cache = {}
for i,v in ipairs(self:GetBossLeftTabData()) do
local boss_first_blood_data = self:GetBossData( v.boss_id ) -- 首杀后端数据
-- 红点
local selfkill_can_get = boss_first_blood_data.self_kill_status and boss_first_blood_data.self_kill_status == 1
local firstblood_can_get = boss_first_blood_data.time and boss_first_blood_data.time > 0 and boss_first_blood_data.server_award_status == 0
self.boss_left_btn_red_cache[i] = selfkill_can_get or firstblood_can_get
end
end
function EquipCollectModel:GetBossLeftBtnRed( index )
if self.boss_left_btn_red_cache[index] ~= nil then
return self.boss_left_btn_red_cache[index]
end
return false
end
----------幻魔boss首杀-end-----------
-- 获取目标代数 收集好的套装数 和 总套装数
function EquipCollectModel:GetCollectCountByID( id )
if not id then return end
local total_count = 0
local has_get_count = 0
for k,v in pairs(self:GetEquipCollectCFG(id)) do
total_count = total_count + 1
if self:CheckIsAllEquipCollected(v[1].id, v[1].sub_id) then
has_get_count = has_get_count + 1
end
end
return has_get_count, total_count
end