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