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