PetModel = PetModel or BaseClass(BaseVo, true) local PetModel = PetModel function PetModel:__init() PetModel.Instance = self self:Reset() end function PetModel:Reset() self.pet_cfg = {} --宠物基础配置信息 self.pet_upgrade_cfg = {} --宠物升级配置信息 self.pet_story_cfg = {} --宠物故事配置信息 self.pet_skill_cfg = {} --宠物技能配置信息 self.pet_life_skill_cfg = {} --宠物生活技能配置 self.pet_diamond_cfg = {} --宠物宝石配置信息 self.pet_support_slot_cfg = {} --宠物声援槽位配置信息 self.pet_support_rank_cfg = {} --宠物声援排名配置信息 self.pet_cfg_rare = {} --宠物基础配置信息(根据稀有度获取) self.pet_awake_cfg = {} --宠物觉醒配置 self.pet_diamond_compose_cfg = {} --宠物宝石合成配置 self.pet_upgrade_cfg_max_lv = {} --某稀有度下的宠物的最大等级配置 self.follow_pet = 0 --跟随宠物的id self.pet_list = {} --自己的宠物列表 self.pet_skill_list = {} --宠物技能列表 self.pet_diamond_list = {} --宠物宝石列表 self.pet_support_list = {} --宠物声援信息 self.pet_support_list.pet_list = {} self.pet_support_rank_list ={} --全服宠物声援信息(排行榜前十位) self.pet_vote_data = {} self.my_left_vote_times = 0--剩余的投票次数 self.max_vote_times = 3 --最大的投票次数 self.my_vote_data = {} --投票信息 self.select_collect_item_id = 0 --当前选中的图鉴itemid self.select_item_id = 0 --当前选中的itemid self.pet_rank_reward_data = {} --昨日榜领奖数据 self.upgrade_cost_cfg = {} --宠物升级消耗道具配置 self.share_cd = 0 self.share_cd2 = 0 self.pet_red_dot_info = {} --红点数据 self.single_pet_feed_red_info = {} --单个宠物的升级红点 self.single_pet_evolve_red_info = {} --单个宠物的进化红点 self.single_pet_active_red_info = {} --单个宠物的激活红点 self.single_pet_rare_active_red_info = {} --单个宠物类型的激活红点(稀有度) self.pet_awake_red = {}--觉醒红点 self.pet_vote_red = false--投票次数红点 self.pet_vote_reward_red = false--领奖红点 self.diamond_compose_red = {}--宝石合成红点列表 self.pet_rank_data_num = 0--当前宠物声援榜单的上榜数量 self.single_pet_diamond_red_info = {} --单个宠物的宝石红点 self.single_pet_slot_diamond_red_info = {} --单个宠物槽位上的红点 self.need_update_collect_item = nil self.pet_cfg_by_id = {} self:SetPetCfg() self:SetPetRaceMaterial() self:SetPetUpgradeCfg() self:SetPetStoryCfg() self:SetPetSkillCfg() self:SetPetDiamondCfg() self:SetPetSupportSlotCfg() self:SetPetSupportRankCfg() self:SetPetAwakeCfg() self:SetPetDiamondComposeCfg() end function PetModel.getInstance() if PetModel.Instance == nil then PetModel.Instance = PetModel.New() end return PetModel.Instance end ----------------------------------------------配置的获取------START --设置宠物基础配置信息 function PetModel:SetPetCfg() --先初始化一下稀有度配置table self.pet_cfg_rare[1] = {} self.pet_cfg_rare[2] = {} self.pet_cfg_rare[3] = {} --将某id的宠物存一下 self.pet_cfg_by_id = {} for k,v in pairs(Config.Pet) do --设置总配置pet_cfg local index = v.pet_id.."@"..v.pet_star if not self.pet_cfg[index] then self.pet_cfg[index] = {} end self.pet_cfg[index] = v self.pet_cfg_by_id[v.pet_id] = self.pet_cfg_by_id[v.pet_id] or {} self.pet_cfg_by_id[v.pet_id][#self.pet_cfg_by_id[v.pet_id]+1] = v --设置稀有度配置pet_cfg_rare if v.rare_degree == 1 then if v.pet_star == 1 then table.insert(self.pet_cfg_rare[1],v) end elseif v.rare_degree == 2 then if v.pet_star == 1 then table.insert(self.pet_cfg_rare[2],v) end elseif v.rare_degree == 3 then if v.pet_star == 1 then table.insert(self.pet_cfg_rare[3],v) end end end for k,v in pairs(self.pet_cfg_by_id) do local function onSortFunction(v1, v2) return v1.pet_star < v2.pet_star end table.sort(v, onSortFunction) end end --根据宠物id拿到配置列表 function PetModel:GetPetCfgById(pet_id) return self.pet_cfg_by_id[pet_id] and self.pet_cfg_by_id[pet_id] or {} end --宠物的最大星数 function PetModel:GetPetMaxStar(pet_id) if self.pet_cfg_by_id[pet_id] then return #self.pet_cfg_by_id[pet_id] else return 0 end end --判断宠物几星能解锁到这个阶段 1 2 3 function PetModel:GetStarCanUnlockFigure(pet_id,figure_stage) local pet_cfg = self.pet_cfg_by_id[pet_id] if pet_cfg then local change_times = 0 local original_figure_id = 0 for i,v in ipairs(pet_cfg) do if v.figure_id ~= original_figure_id then change_times = change_times + 1 if change_times == figure_stage then return v.pet_star end end original_figure_id = v.figure_id end else return 0 end end --用当前星数判断是否会进化到下一阶 function PetModel:CanPetGradeToNextStage(now_star) if now_star%5 == 0 then return true else return false end end --根据资源id判断是不是宠物资源 function PetModel:IsPetFigureId(figure_id) for k,v in pairs(self.pet_cfg) do if v.figure_id == figure_id then return true end end return false end function PetModel:GetNowPetFigure( ) local follow_pet_data = self:GetPetListById(self.follow_pet) if follow_pet_data then local pet_cfg = self:GetPetCfg(follow_pet_data.pet_id, follow_pet_data.pet_star) if pet_cfg then return pet_cfg.figure_id end end return nil end --根据宠物id pet_id、 宠物星级 pet_star查找相应宠物配置 function PetModel:GetPetCfg(pet_id, pet_star) for k,v in pairs(self.pet_cfg) do if v.pet_id == pet_id and v.pet_star == pet_star then return v end end return nil end --根据稀有度获取宠物配置信息 function PetModel:GetPetRareCfg(rare_type) local pet_all_cfg = {} for k,v in pairs(self.pet_cfg_rare[rare_type]) do local is_have = self:GetPetListById(v.pet_id) v.is_have = is_have and 1 or 2 if self:CanShowPet(v.pet_id) then table.insert(pet_all_cfg,v) end end local arg = {"is_have", "pet_id"} local condition = {Array.LOWER, Array.LOWER} SortTools.MoreKeysSorter(pet_all_cfg, arg, condition) return pet_all_cfg end --排序所有宠物(图鉴) function PetModel:GetPetBySort( ) local pet_all_cfg = {} for k,v in pairs(self.pet_cfg_rare) do for kk,vv in pairs(v) do local is_have = self:GetPetListById(vv.pet_id) vv.is_have = is_have and 1 or 2 if self:CanShowPet(vv.pet_id) then table.insert(pet_all_cfg,vv) end end end local arg = {"is_have", "rare_degree", "pet_id"} local condition = {Array.LOWER, Array.UPPER, Array.LOWER} SortTools.MoreKeysSorter(pet_all_cfg, arg, condition) return pet_all_cfg end --该宠物是否符合开放时间 function PetModel:CanShowPet(pet_id) local pet_cfg = self:GetPetCfg(pet_id,1) if not pet_cfg then return false end local is_pet_active = self:IsPetActived(pet_id) --如果都已经激活了那就无视开放时间 if is_pet_active then return true end --未达到开放天数 if pet_cfg.open_day > 0 and ServerTimeModel:getInstance():GetOpenServerDay() <= pet_cfg.open_day then return false end --未到开放时间 if pet_cfg.open_time > 0 and TimeUtil:getServerTime() <= pet_cfg.open_time then return false end return true end --根据宠物id获取该宠物的种族 function PetModel:GetPetRaceById(pet_id) for k,v in pairs(self.pet_cfg) do if v.pet_id == pet_id then return v.pet_race end end return 1 end --根据id获取宠物的品质 function PetModel:GetPetDegreeById(pet_id) for k,v in pairs(self.pet_cfg) do if v.pet_id == pet_id then return v.rare_degree end end return 1 end --判断宠物的某个故事是否解锁 function PetModel:IsStoryActived(pet_id,item_id) local data = self:GetPetListById(pet_id) local story_cfg = self:GetPetStoryCfg(pet_id,item_id) --判断是否已经解锁 local is_actived = false if data then if data.pet_star >= story_cfg.star then is_actived = true else is_actived = false end end return is_actived end --判断宠物已经解锁到哪个故事了 function PetModel:GetTheActiveStoryId(pet_id) local final_index = 0 for i=1,3 do if self:IsStoryActived(pet_id,i) then final_index = final_index + 1 else break end end return final_index end --设置不同种族的宠物升级消耗材料信息 function PetModel:SetPetRaceMaterial( ) self.upgrade_cost_cfg = {} for i,v in ipairs(Config.Petracematerial) do self.upgrade_cost_cfg[i] = {} self.upgrade_cost_cfg[i].race = v.race self.upgrade_cost_cfg[i].cost_material = stringtotable(v.cost_material) end end --设置宠物升级配置信息 function PetModel:SetPetUpgradeCfg() for k,v in pairs(Config.Petupgrade) do local index = v.pet_rare_degree.."@"..v.level if not self.pet_upgrade_cfg[index] then self.pet_upgrade_cfg[index] = {} end self.pet_upgrade_cfg[index] = v --记录稀有度下的宠物的最大等级 if not self.pet_upgrade_cfg_max_lv[v.pet_rare_degree] then self.pet_upgrade_cfg_max_lv[v.pet_rare_degree] = {} self.pet_upgrade_cfg_max_lv[v.pet_rare_degree].level = 0 end if v.level > self.pet_upgrade_cfg_max_lv[v.pet_rare_degree].level then self.pet_upgrade_cfg_max_lv[v.pet_rare_degree].level = v.level end end end --根据稀有度 pet_rare_degree、等级level查找 function PetModel:GetPetUpgradeCfg(pet_rare_degree,level) for k,v in pairs(self.pet_upgrade_cfg) do if v.pet_rare_degree == pet_rare_degree and v.level == level then return v end end return nil end --获取某稀有度宠物的最大等级 function PetModel:GetPetMaxLv(pet_rare_degree) return self.pet_upgrade_cfg_max_lv[pet_rare_degree].level end --设置宠物故事配置表 function PetModel:SetPetStoryCfg() for k,v in pairs(Config.Petstory) do local index = v.pet_id.."@"..v.para_id if not self.pet_story_cfg[index] then self.pet_story_cfg[index] = {} end self.pet_story_cfg[index] = v end end --根据宠物id和段落id查找 function PetModel:GetPetStoryCfg(pet_id,para_id) for k,v in pairs(self.pet_story_cfg) do if v.pet_id == pet_id and v.para_id == para_id then return v end end return nil end --设置宠物技能配置表 function PetModel:SetPetSkillCfg() for k,v in pairs(Config.Petskill) do local index = v.pet_id.."@"..v.skill_slot if not self.pet_skill_cfg[index] then self.pet_skill_cfg[index] = {} end self.pet_skill_cfg[index] = v --宠物生活技能 if v.skill_talent_type == 0 then self.pet_life_skill_cfg[v.skill_talent_id] = v end end end --获取宠物生活配置 function PetModel:GetPetLifeSkillCfgById(skill_id) return self.pet_life_skill_cfg[skill_id] and self.pet_life_skill_cfg[skill_id] or nil end --获取宠物生活配置系数 function PetModel:GetPetLifeSkillRatio(skill_id) return self.pet_life_skill_cfg[skill_id] and self.pet_life_skill_cfg[skill_id].skill_ratio or 0 end --根据宠物id和槽位查找 function PetModel:GetPetSkillCfg(pet_id,skill_slot,is_awaken) local skill_data = {} for k,v in pairs(self.pet_skill_cfg) do if v.pet_id == pet_id and v.skill_slot == skill_slot then skill_data = DeepCopy(v) if is_awaken then local awake_cfg = self:GetPetAwakeCfg(pet_id) local awake_skill_id = awake_cfg and stringtotable(awake_cfg.skill_list)[skill_slot-1] or nil if awake_skill_id then skill_data.skill_talent_id = awake_skill_id end end return skill_data end end return nil end --设置宠物宝石配置表 function PetModel:SetPetDiamondCfg() for k,v in pairs(Config.Petdiamondstorage) do local index = v.diamond_id if not self.pet_diamond_cfg[index] then self.pet_diamond_cfg[index] = {} end self.pet_diamond_cfg[index] = v end end --根据宝石id查找 function PetModel:GetPetDiamondCfg(diamond_id) for k,v in pairs(self.pet_diamond_cfg) do if v.diamond_id == diamond_id then return v end end return nil end --设置宠物声援槽位配置信息 function PetModel:SetPetSupportSlotCfg() for k,v in pairs(Config.Petsupportslot) do local index = v.slot_id if not self.pet_support_slot_cfg[index] then self.pet_support_slot_cfg[index] = {} end self.pet_support_slot_cfg[index] = v end end --根据槽位id查找 function PetModel:GetPetSupportSlotCfg(slot_id) for k,v in pairs(self.pet_support_slot_cfg) do if v.slot_id == slot_id then return v end end return nil end --设置宠物声援排名配置信息 function PetModel:SetPetSupportRankCfg() for k,v in pairs(Config.Petsupportrank) do local index = v.rank if not self.pet_support_rank_cfg[index] then self.pet_support_rank_cfg[index] = {} end self.pet_support_rank_cfg[index] = v end end --根据排名id查找 function PetModel:GetPetSupportRankCfg(rank) for k,v in pairs(self.pet_support_rank_cfg) do if v.rank == rank then return v end end return nil end --宠物觉醒配置 function PetModel:SetPetAwakeCfg( ) self.pet_awake_cfg = DeepCopy(Config.Petawaken) end --获取宠物觉醒配置 function PetModel:GetPetAwakeCfg(pet_id) return self.pet_awake_cfg[pet_id] end --宠物宝石合成配置 function PetModel:SetPetDiamondComposeCfg( ) for k,v in pairs(Config.Petstonecompound) do local diamond_cfg = self:GetPetDiamondCfg(v.stone_id) if diamond_cfg then v.need_race = diamond_cfg.need_race v.diamond_type = diamond_cfg.diamond_type local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.stone_id) v.color = goods_vo.color self.pet_diamond_compose_cfg[v.need_race] = self.pet_diamond_compose_cfg[v.need_race] or {} table.insert(self.pet_diamond_compose_cfg[v.need_race],v) end end for k,v in pairs(self.pet_diamond_compose_cfg) do local arg = {"diamond_type", "color", "stone_id"} local condition = {Array.UPPER, Array.LOWER, Array.LOWER} SortTools.MoreKeysSorter(v, arg, condition) end end function PetModel:GetPetDiamondComposeCfgByRace(race) return self.pet_diamond_compose_cfg[race] and self.pet_diamond_compose_cfg[race] or {} end ----------------------------------------------配置的获取------END --设置宠物列表,16301 function PetModel:SetPetList(vo) self.follow_pet = vo.follow_pet for k,v in pairs(vo.pet_list) do if not self.pet_list[v.pet_id] then self.pet_list[v.pet_id] = {} end self.pet_list[v.pet_id].pet_id = v.pet_id self.pet_list[v.pet_id].pet_star = v.pet_star ------原有的stage去除,改为5星一个stage self.pet_list[v.pet_id].pet_stage = math.ceil((v.pet_star-0.5)/5) ------------------------------------- self.pet_list[v.pet_id].pet_lv = v.pet_lv self.pet_list[v.pet_id].now_exp = v.now_exp self.pet_list[v.pet_id].power = v.power self.pet_list[v.pet_id].collect_time = v.collect_time self.pet_list[v.pet_id].attr_list = v.attr_list self.pet_list[v.pet_id].is_awaken = v.is_awaken end end --16303协议激活宠物后先创建该id的列表 function PetModel:ActivePet(vo) self.pet_list[vo.pet_id] = self.pet_list[vo.pet_id] or {} self.pet_list[vo.pet_id].pet_id = vo.pet_id self.pet_list[vo.pet_id].pet_star = vo.pet_star ------原有的stage去除,改为5星一个stage self.pet_list[vo.pet_id].pet_stage = math.ceil((vo.pet_star-0.5)/5) ------------------------------------- self.pet_list[vo.pet_id].power = vo.pet_power self.pet_list[vo.pet_id].pet_lv = 1 end --根据id获取宠物信息 function PetModel:GetPetListById(pet_id) if self.pet_list[pet_id] then return self.pet_list[pet_id] end return nil end --获取排好序的宠物列表 function PetModel:GetPetListAfterSort() local list = self.pet_list for k,v in pairs(list) do v.rare_degree = self:GetPetDegreeById(v.pet_id) end local final_list = {} for k,v in pairs(list) do table.insert(final_list,v) end local arg = {"rare_degree", "pet_star", "pet_lv"} local condition = {Array.UPPER, Array.UPPER, Array.LOWER,} SortTools.MoreKeysSorter(final_list, arg, condition) return final_list end --根据战力给宠物列表排序(宠物副本用) function PetModel:GetPetListAfterSortFight( ) local final_list = {} for k,v in pairs(self.pet_list) do v.client_power = self:GetPetFightById(v.pet_id) table.insert(final_list,v) end local arg = {"client_power"} local condition = {Array.UPPER} SortTools.MoreKeysSorter(final_list, arg, condition) return final_list end --根据品质等级给宠物列表排序 function PetModel:GetPetListAfterSortByDegreeAndLv( ) local list = self.pet_list for k,v in pairs(list) do v.rare_degree = self:GetPetDegreeById(v.pet_id) end local final_list = {} for k,v in pairs(list) do table.insert(final_list,v) end local arg = {"rare_degree", "pet_lv"} local condition = {Array.UPPER, Array.UPPER,} SortTools.MoreKeysSorter(final_list, arg, condition) return final_list end --喂养宠物后刷新其经验和等级,16302 function PetModel:SetPetLvAfterFeed(vo) if self.pet_list[vo.pet_id] then self.pet_list[vo.pet_id].pet_lv = vo.pet_lv self.pet_list[vo.pet_id].now_exp = vo.now_exp self.pet_list[vo.pet_id].power = vo.pet_power end end --宠物进阶后刷新其数据,16303 function PetModel:SetPetDataAfterUpStar(vo) if self.pet_list[vo.pet_id] then self.pet_list[vo.pet_id].pet_stage = vo.pet_stage self.pet_list[vo.pet_id].pet_star = vo.pet_star ------原有的stage去除,改为5星一个stage self.pet_list[vo.pet_id].pet_stage = math.ceil((vo.pet_star-0.5)/5) ------------------------------------- self.pet_list[vo.pet_id].power = vo.pet_power end end --设置宠物的技能栏数据,16304 function PetModel:SetPetSkillData(vo) if not self.pet_skill_list[vo.pet_id] then self.pet_skill_list[vo.pet_id] = {} end for k,v in pairs(vo.skill_list) do if not self.pet_skill_list[vo.pet_id][v.skill_slot_id] then self.pet_skill_list[vo.pet_id][v.skill_slot_id] = {} end self.pet_skill_list[vo.pet_id][v.skill_slot_id].skill_slot_id = v.skill_slot_id self.pet_skill_list[vo.pet_id][v.skill_slot_id].talent_type = v.talent_type self.pet_skill_list[vo.pet_id][v.skill_slot_id].talent_id = v.talent_id end end --根据宠物id获取技能数据 function PetModel:GetPetSkillDataById(pet_id) return self.pet_skill_list[pet_id] and self.pet_skill_list[pet_id] or nil end --判断宠物技能是否解锁 function PetModel:IsPetSkillActive(pet_star, active_star) local is_actived = false if pet_star >= active_star then is_actived = true else is_actived = false end return is_actived end --设置宠物的宝石栏数据,16304 function PetModel:SetPetDiamondData(vo) if not self.pet_diamond_list[vo.pet_id] then self.pet_diamond_list[vo.pet_id] = {} end for k,v in pairs(vo.diamond_list) do if not self.pet_diamond_list[vo.pet_id][v.diamond_slot] then self.pet_diamond_list[vo.pet_id][v.diamond_slot] = {} end self.pet_diamond_list[vo.pet_id][v.diamond_slot].diamond_slot = v.diamond_slot self.pet_diamond_list[vo.pet_id][v.diamond_slot].diamond_id = v.diamond_id end end --根据id和槽位获取宝石栏数据(如果位置上没有宝石,直接返回nil) function PetModel:GetPetDiamondDataByIdAndSlot(pet_id,slot_id) if self.pet_diamond_list[pet_id] and self.pet_diamond_list[pet_id][slot_id] then return self.pet_diamond_list[pet_id][slot_id] end return nil end --根据宠物id获取宝石栏数据 function PetModel:GetPetDiamondDataById(pet_id) return self.pet_diamond_list[pet_id] and self.pet_diamond_list[pet_id] or nil end --宝石上阵后刷新宝石栏数据,16305 function PetModel:SetPetDiamondDataAfterPut(vo) if not self.pet_diamond_list[vo.pet_id] then self.pet_diamond_list[vo.pet_id] = {} end self.pet_diamond_list[vo.pet_id][vo.diamond_slot] = self.pet_diamond_list[vo.pet_id][vo.diamond_slot] or {} self.pet_diamond_list[vo.pet_id][vo.diamond_slot].diamond_slot = vo.diamond_slot self.pet_diamond_list[vo.pet_id][vo.diamond_slot].diamond_id = vo.diamond_id self.pet_list[vo.pet_id].power = vo.pet_power end --宠物跟随,16306 function PetModel:SetPetFollow(vo) if vo.role_id ~= RoleManager.Instance:GetMainRoleId() then return end if vo.is_follow == 1 then self.follow_pet = vo.pet_id else self.follow_pet = 0 end end --获取跟随的宠物id function PetModel:GetFollowPetId() return self.follow_pet or 0 end function PetModel:GetFollowPetStar( ) return self:GetPetListById(self.follow_pet).pet_star end --宠物声援信息,16307 function PetModel:SetPetSupportData(vo) self.pet_support_list.pet_sum_star = vo.pet_sum_star self.pet_support_list.pet_list = self.pet_support_list.pet_list or {} for k,v in pairs(vo.pet_list) do self.pet_support_list.pet_list[v.support_slot] = self.pet_support_list.pet_list[v.support_slot] or {} self.pet_support_list.pet_list[v.support_slot].support_slot = v.support_slot self.pet_support_list.pet_list[v.support_slot].pet_id = v.pet_id end end --找到最前的空声援位 function PetModel:GetRecentSupportSlot() local sum_stars = self:CountPetStars() for i=1,10 do local support_slot_cfg = self:GetPetSupportSlotCfg(i) if sum_stars >= support_slot_cfg.open_sum_star then--已经解锁了 if self.pet_support_list and self.pet_support_list.pet_list and not self.pet_support_list.pet_list[i] then return i end else return 0 end end return 0 end --根据声援位获取声援信息 function PetModel:GetPetSupportDataBySlot(slot_id) return self.pet_support_list.pet_list and self.pet_support_list.pet_list[slot_id] and self.pet_support_list.pet_list[slot_id] or nil end --根据宠物id找到其声援信息 function PetModel:GetPetSupportDataByPetId(pet_id) for k,v in pairs(self.pet_support_list.pet_list) do if v.pet_id == pet_id then return v end end return nil end --获取总星数 function PetModel:GetPetStars() return self.pet_support_list.pet_sum_star end --客户端自己计算总星数 function PetModel:CountPetStars() local num = 0 for k,v in pairs(self.pet_list) do num = num + v.pet_star end return num end --宠物上阵之后,16308 function PetModel:PresentPet(vo) self.pet_support_list.pet_list = self.pet_support_list.pet_list or {} self.pet_support_list.pet_list[vo.support_slot] = self.pet_support_list.pet_list[vo.support_slot] or {} self.pet_support_list.pet_list[vo.support_slot].support_slot = vo.support_slot self.pet_support_list.pet_list[vo.support_slot].pet_id = vo.pet_id --接下来处理槽位调换的情况 if vo.old_pet_id ~= 0 and vo.old_support_slot == 0 then--未上阵宠物顶替上阵的 --啥都不用做,因为阵位数据已经替换了 return elseif vo.old_pet_id == 0 and vo.old_support_slot == 0 then--未上阵宠物上阵空位 --啥都不用做,因为阵位数据已经替换了 return elseif vo.old_pet_id == 0 and vo.old_support_slot ~= 0 then--上阵宠物换到空位 --把原来的位置数据置空 self.pet_support_list.pet_list[vo.old_support_slot] = nil -- TableRemove(self.pet_support_list.pet_list,self.pet_support_list.pet_list[vo.old_support_slot]) elseif vo.old_pet_id ~= 0 and vo.old_support_slot ~= 0 then--两个阵位宠物互换 --把主动替换方的位置数据换成被动替换方 self.pet_support_list.pet_list[vo.old_support_slot].pet_id = vo.old_pet_id self.pet_support_list.pet_list[vo.old_support_slot].support_slot = vo.old_support_slot end end --全服宠物声援信息,16309 -- rank :int8 //全服排名 -- pet_id :int32 //宠物Id -- player_id :int64 //玩家Id -- player_name :string //玩家名称 -- player_power :int64 //玩家战力 -- support_ratio :int16 //声援率 function PetModel:SetPetSupportRankData(vo) for k,v in pairs(vo.rank_list) do self.pet_support_rank_list[v.rank] = v--以排名为键 end self.pet_rank_data_num = #vo.rank_list end function PetModel:GetRankData() return self.pet_support_rank_list or nil end --根据排名rank获取排行榜信息 function PetModel:GetRankDataByRank(rank) return self.pet_support_rank_list[rank] or nil end --宠物投票信息 16312 function PetModel:SetPetVoteData(vo) for k,v in pairs(vo.rank_list) do self.pet_vote_data[v.rare] = v local arg = {"ticket_num", "pet_id"} local condition = {Array.UPPER, Array.LOWER} SortTools.MoreKeysSorter(self.pet_vote_data[v.rare].rare_list, arg, condition) end for k,v in pairs(self.pet_vote_data) do local first_ticikes = 0 for i,v in ipairs(v.rare_list) do if i == 1 then first_ticikes = v.ticket_num end if first_ticikes == 0 then v.rank = 1 else v.rank = i end end end end --我的投票信息 16313 16314 function PetModel:SetPetMyVoteData(vo) self.my_left_vote_times = self.max_vote_times - vo.support_times self.my_vote_data = vo.my_ticket if vo.pet_num then self.pet_rank_data_num = vo.pet_num --剩余投票次数置为0,不给投票 if not self:CanVotePetRank() then self.my_left_vote_times = 0 end end end --宠物声援榜单数量低于8个时候显示空界面并且不能投票 function PetModel:CanVotePetRank( ) return self.pet_rank_data_num >= 8 end --获取我的投票信息 function PetModel:GetPetMyVoteData( ) return self.my_vote_data end --获取剩余投票次数 function PetModel:GetMyLeftVoteTimes( ) return self.my_left_vote_times end --昨日人气榜奖励领取信息 16310 function PetModel:SetPetRankRewardData(vo) self.pet_rank_data_num = vo.pet_num if self:CanVotePetRank() then for i=1,3 do if vo.receive_list and vo.receive_list[i] then self.pet_rank_reward_data[i] = vo.receive_list[i] else self.pet_rank_reward_data[i] = {pet_id = 0,is_received = 0} end end else self.pet_rank_reward_data = {} end --剩余投票次数置为0,不给投票 if not self:CanVotePetRank() then self.my_left_vote_times = 0 end end --获取昨日榜的领奖数据 function PetModel:GetPetRankRewardData() return self.pet_rank_reward_data end --更新领取奖励状态 16315 function PetModel:UpdatePetRankRewardData(vo) local is_find = false for k,v in pairs(self.pet_rank_reward_data) do if v.pet_id == vo.pet_id then v.is_received = 1 is_find = true end end if not is_find then for k,v in pairs(self.pet_rank_reward_data) do if v.pet_id == 0 then v.pet_id =vo.pet_id v.is_received = 1 break end end end end --根据稀有度获取投票排行列表 function PetModel:GetPetVoteDataByRare(rare) if self.pet_vote_data[rare] then return self.pet_vote_data[rare].rare_list end return {} end --更新宠物觉醒状态 16316 function PetModel:UpdatePetAwakeState(vo) if self.pet_list[vo.pet_id] then self.pet_list[vo.pet_id].is_awaken = 1 end end --计算属性值 宠物当前各基础属性=宠物基础属性+(宠物当前等级-1)*属性对应成长值 function PetModel:GetPetAttrList(pet_lv,attr_list,diamond_data,awake_cfg,pet_star,pet_id) --计算基础属性 local final_attr_list = attr_list for k,v in pairs(final_attr_list) do v[2] = v[2]+(pet_lv-1)*v[3] end local diamond_attr_data = {}--宝石总加成属性列表 if diamond_data then for k,v in pairs(diamond_data) do if v then --单个槽位宝石加成属性列表 local diamond_attr_data_slot = stringtotable(self:GetPetDiamondCfg(v.diamond_id).add_attr_list) for k,v in pairs(diamond_attr_data_slot) do if not diamond_attr_data[v[1]] then diamond_attr_data[v[1]] = {} diamond_attr_data[v[1]][1] = v[1] diamond_attr_data[v[1]][2] = 0 end diamond_attr_data[v[1]][2] = diamond_attr_data[v[1]][2] + v[2] end end end end for k,v in pairs(final_attr_list) do if diamond_attr_data[v[1]] then v[2] = v[2] + diamond_attr_data[v[1]][2] diamond_attr_data[v[1]].isGet = true end end for k,v in pairs(diamond_attr_data) do if not v.isGet then table.insert(final_attr_list,v) end end local awaken_attr_data = {}--觉醒加成属性 if awake_cfg then local awake_attr_cfg = stringtotable(awake_cfg.add_attr) for k,v in pairs(awake_attr_cfg) do awaken_attr_data[v[1]] = v end end for k,v in pairs(final_attr_list) do if awaken_attr_data[v[1]] then v[2] = v[2] + awaken_attr_data[v[1]][2] awaken_attr_data[v[1]].isGet = true end end for k,v in pairs(awaken_attr_data) do if not v.isGet then table.insert(final_attr_list,v) end end local skill_attr_data = {}--技能属性加成 local sttr_list = {} local data = self:GetPetSkillCfg(pet_id,3,awake_cfg) if data and data.active_star <= pet_star then local skill_id = data.skill_talent_id sttr_list = GetSkillAttrBySkill( skill_id, 1 ) end for k,v in pairs(sttr_list) do skill_attr_data[v[1]] = v end for k,v in pairs(final_attr_list) do if skill_attr_data[v[1]] then v[2] = v[2] + skill_attr_data[v[1]][2] skill_attr_data[v[1]].isGet = true end end for k,v in pairs(skill_attr_data) do if not v.isGet then table.insert(final_attr_list,v) end end local skill_attr_data_2 = {}--技能属性加成 local sttr_list_2 = {} local data_2 = self:GetPetSkillCfg(pet_id,4,awake_cfg) if data_2 and data_2.active_star <= pet_star then local skill_id = data_2.skill_talent_id sttr_list_2 = GetSkillAttrBySkill( skill_id, 1 ) end for k,v in pairs(sttr_list_2) do skill_attr_data_2[v[1]] = v end for k,v in pairs(final_attr_list) do if skill_attr_data_2[v[1]] then v[2] = v[2] + skill_attr_data_2[v[1]][2] skill_attr_data_2[v[1]].isGet = true end end for k,v in pairs(skill_attr_data_2) do if not v.isGet then table.insert(final_attr_list,v) end end return final_attr_list end --合并属性table得出一个格式为{{属性id,当前属性值,下一级增长值},{}}的新table function PetModel:MergeAttrList(tb_now,tb_next) for i,v in ipairs(tb_now) do v[3] = tb_next[i][2]-v[2] end return tb_now end --第二种合并法(当前属性和上一阶段的比较) function PetModel:MergeAttrList2(tb_now,tb_last) for i,v in ipairs(tb_now) do local last_num = tb_last[i] and tb_last[i][2] or 0 v[3] = v[2] - last_num end return tb_now end --判断该宠物是否已经激活 function PetModel:IsPetActived(pet_id) return self.pet_list[pet_id] and true or false end --------物品数量检测---START ----- function PetModel:UpPetChipGoodsChange( )--刷新宠物碎片道具 self:Fire(PetConst.UPDATE_PET_GOODS_NUM,1) end function PetModel:UpPetFeedGoodsChange( )--刷新宠物升级道具 self:Fire(PetConst.UPDATE_PET_GOODS_NUM,2) end function PetModel:UpPetDiamondGoodsChange( )--刷新宠物技能宝石 self:Fire(PetConst.UPDATE_PET_GOODS_NUM,3) end function PetModel:UpPetAwakeMaterial( )--刷新宠物觉醒碎片 self:Fire(PetConst.UPDATE_PET_GOODS_NUM,4) end ----- --------物品数量检测---END --宠物进化前保存一下当前的数据,用于进化成功界面的属性对比 function PetModel:RecordDataBeforeEvolve(data) self.pet_old_data = self.pet_old_data or {} self.pet_old_data[data.pet_id] = self.pet_old_data[data.pet_id] or {} self.pet_old_data[data.pet_id] = data end --获取宠物进化前的数据 function PetModel:GetPetOldDataById(pet_id) return self.pet_old_data and self.pet_old_data[pet_id] and self.pet_old_data[pet_id] or nil end --获取宠物id某阶段时的最大星数 function PetModel:GetMaxStarInStage(pet_id,star) local final_max_star = self:GetPetMaxStar(pet_id) local final_stage_max_star = math.ceil((final_max_star-0.5)/5)*5--最后阶段的理论最高星数 if final_stage_max_star-star < 5 then--判断是否在最后的阶段 return 5 - (final_stage_max_star - final_max_star) else return 5 end return 5 end --获取宠物进化后的下一星级 function PetModel:GetNextStageAndStar(pet_id,now_star) local max_star = self:GetPetMaxStar(pet_id) local next_star -- if now_star == max_star then--已经满星了 -- next_star = max_star -- else next_star = now_star + 1 -- end return next_star end --转换宠物当前显示的星数 function PetModel:GetNowShowPetStar(star) return (star-1)%5+1 end ------------红点------START function PetModel:IsNeedRedAll( ) for k,v in pairs(PetConst.RED_DOT_TYPE) do self:IsNeedRed(v) end end function PetModel:IsNeedRed( tab_id ) local bool = false if GetModuleIsOpen(163) then if tab_id == PetConst.RED_DOT_TYPE.Feed then--升级 bool = self:CheckPetFeedRed() elseif tab_id == PetConst.RED_DOT_TYPE.Evolve then--进化 bool = self:CheckPetEvolveRed() elseif tab_id == PetConst.RED_DOT_TYPE.Diamond then--宝石 bool = self:CheckPetDiamondRed() elseif tab_id == PetConst.RED_DOT_TYPE.Active then--激活 bool = self:CheckPetActiveRed() elseif tab_id == PetConst.RED_DOT_TYPE.Vote then--投票 bool = self:CheckPetVoteRed() elseif tab_id == PetConst.RED_DOT_TYPE.Reward then--领奖 bool = self:CheckPetRewardRed() elseif tab_id == PetConst.RED_DOT_TYPE.Awake then--觉醒 bool = self:CheckPetAwakeRed() elseif tab_id == PetConst.RED_DOT_TYPE.DiamondCompose then--宝石合成 bool = self:CheckDiamondComposeRed() end end self.pet_red_dot_info[tab_id] = bool self:Fire(PetConst.ANS_UPDATE_RED_DOT,tab_id,bool) end function PetModel:GetAllRedDot( ) return self.pet_red_dot_info end --获取宠物红点 function PetModel:GetPetRedDotByType(tab_type) if not tab_type then return false end return self.pet_red_dot_info[tab_type] end --获取单个宠物的升级红点 function PetModel:GetSingleFeedRedDot(pet_id) return self.single_pet_feed_red_info[pet_id] end --获取单个宠物的进化红点 function PetModel:GetSingleEvolveRedDot(pet_id) return self.single_pet_evolve_red_info[pet_id] end --获取单个宠物的激活红点 function PetModel:GetSingleActiveRedDot(pet_id) return self.single_pet_active_red_info[pet_id] end --获取单个宠物稀有度类型的激活红点 function PetModel:GetSingleRareActiveRedDot(rare_type) return self.single_pet_rare_active_red_info[rare_type] end --获得单个宠物的宝石红点 function PetModel:GetSingleDiamondRedDot(pet_id) return self.single_pet_diamond_red_info[pet_id] end --获得单个宠物槽位的宝石红点 function PetModel:GetSingleSlotDiamondRedDot(pet_id,slot_id) return self.single_pet_slot_diamond_red_info[pet_id][slot_id] end --获取单个宠物觉醒的红点 function PetModel:GetPetAwakeRedDot(pet_id) return self.pet_awake_red[pet_id] end --获取宠物投票次数红点 function PetModel:GetPetVoteTimesRed( ) return self.pet_vote_red end --获取领奖红点 function PetModel:GetPetRewardRed( ) return self.pet_vote_reward_red end -------升级红点相关 function PetModel:IsFeedCostEnough(pet_race) for k,v in pairs(self.upgrade_cost_cfg[pet_race].cost_material) do local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(v[1]) if goods_num >= 1 then return true end end return false end function PetModel:CheckPetFeedRed() local bool = false for k,v in pairs(self.pet_list) do if self:CheckPetFeedRedById(v.pet_id) then bool = true self.single_pet_feed_red_info[v.pet_id] = true else self.single_pet_feed_red_info[v.pet_id] = false end end return bool end function PetModel:CheckPetFeedRedById(pet_id) local data = self:GetPetListById(pet_id) if not data then return false end local cfg = self:GetPetCfg(data.pet_id,data.pet_star) local max_lv = self:GetPetMaxLv(cfg.rare_degree) if data.pet_lv < max_lv and self:IsFeedCostEnough(cfg.pet_race) then return true end return false end ------------------------ -------进化红点相关 function PetModel:CheckPetEvolveRed() local bool = false for k,v in pairs(self.pet_list) do if self:CheckPetEvolveRedById(v.pet_id) then bool = true self.single_pet_evolve_red_info[v.pet_id] = true else self.single_pet_evolve_red_info[v.pet_id] = false end end return bool end function PetModel:CheckPetEvolveRedById(pet_id) local data = self:GetPetListById(pet_id) if not data then return false end local next_star = self:GetNextStageAndStar(data.pet_id, data.pet_star) local cfg_data = self:GetPetCfg(data.pet_id, next_star) if not cfg_data then return false end local cost_data = stringtotable(cfg_data.cost) local goods_type_id = cost_data[1][2] local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods_type_id) local can_evolve = goods_num >= cost_data[1][3] return can_evolve end ------------------------ -------激活红点相关 function PetModel:CheckPetActiveRed() for i=1,3 do if self:CheckPetActiveRedByRareType(i) then return true end end return false end function PetModel:CheckPetActiveRedByRareType(rare_type) local data = self:GetPetRareCfg(rare_type) self.single_pet_rare_active_red_info[rare_type] = false local bool = false for k,v in pairs(data) do if self:CheckPetActiveRedById(v.pet_id) then bool = true self.single_pet_active_red_info[v.pet_id] = true self.single_pet_rare_active_red_info[rare_type] = true else self.single_pet_active_red_info[v.pet_id] = false end end return bool end function PetModel:CheckPetActiveRedById(pet_id) local is_actived = self:IsPetActived(pet_id) if is_actived then return false end if not self:CanShowPet(pet_id) then return false end local cfg = self:GetPetCfg(pet_id, 1) local cost_table = stringtotable(cfg.cost)[1]--需要的消耗材料 local have_num = GoodsModel:getInstance():GetGoodsNumFromType(0,cost_table[2])--拥有的碎片数量 local need_num = cost_table[3]--需要的碎片数量 local enough = have_num >= need_num--是否达到解锁条件 return enough end ------------------------ -------宝石红点相关 function PetModel:CheckPetDiamondRed() local bool = false for k,v in pairs(self.pet_list) do if self:CheckPetDiamondRedById(v.pet_id) then bool = true self.single_pet_diamond_red_info[v.pet_id] = true else self.single_pet_diamond_red_info[v.pet_id] = false end end return bool end function PetModel:CheckPetDiamondRedById(pet_id) self.single_pet_slot_diamond_red_info[pet_id] = self.single_pet_slot_diamond_red_info[pet_id] or {} local pet_race = self:GetPetRaceById(pet_id) local list = DeepCopy(GoodsModel:getInstance():GetPetDiamondDicByType()) local diamond_type_data={}--保存该槽位的宝石类型 for i=1,4 do local data = self:GetPetDiamondDataByIdAndSlot(pet_id,i) if data then if list[data.diamond_id] then list[data.diamond_id] = nil end local diamond_type = self:GetPetDiamondCfg(data.diamond_id).diamond_type table.insert(diamond_type_data,diamond_type) end end local bool = false for i=1,4 do self.single_pet_slot_diamond_red_info[pet_id][i] = false if not self:GetPetDiamondDataByIdAndSlot(pet_id,i) then for k,v in pairs(list) do local diamond_race = self:GetPetDiamondCfg(k).need_race local diamond_type_2 = self:GetPetDiamondCfg(k).diamond_type if v and diamond_race == pet_race then local is_different_type = true for kk,vv in pairs(diamond_type_data) do if vv == diamond_type_2 then is_different_type = false end end self.single_pet_slot_diamond_red_info[pet_id][i] = is_different_type bool = is_different_type end end end end return bool end ------------------------ --投票红点 function PetModel:CheckPetVoteRed( ) local bool = self.my_left_vote_times > 0 and self:CanVotePetRank() self.pet_vote_red = bool return bool end --领奖红点 function PetModel:CheckPetRewardRed( ) local bool = false for k,v in pairs(self.pet_rank_reward_data) do if v.is_received == 0 then bool = true break end end self.pet_vote_reward_red = bool return bool end --觉醒红点 function PetModel:CheckPetAwakeRed( ) if not GetModuleIsOpen(163,4) then return false end local bool = false for k,v in pairs(self.pet_list) do if v.is_awaken == 0 then --未觉醒 local awake_cfg = self:GetPetAwakeCfg(v.pet_id) local cost_data = stringtotable(awake_cfg.cost_material) local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_data[1][2]) if goods_num >= cost_data[1][3] and v.pet_star >= awake_cfg.need_star then bool = true self.pet_awake_red[v.pet_id] = true else self.pet_awake_red[v.pet_id] = false end else self.pet_awake_red[v.pet_id] = false end end return bool end --宝石合成红点 function PetModel:CheckDiamondComposeRed( ) if not GetModuleIsOpen(163,1) then return false end local bool = false local material_data = nil local diamond_num = 0 for k,v in pairs(self.pet_diamond_compose_cfg) do for m,n in pairs(v) do material_data = stringtotable(n.compound_list) diamond_num = GoodsModel:getInstance():GetPetDiamondNumByTypeID(material_data[1][1]) if diamond_num >= 3 then bool = true self.diamond_compose_red[n.stone_id] = true else self.diamond_compose_red[n.stone_id] = false end end end return bool end function PetModel:GetPetDiamnondComposeRedById(diamond_id) return self.diamond_compose_red[diamond_id] and self.diamond_compose_red[diamond_id] or false end function PetModel:GetPetDiamnondComposeRedList( ) return self.diamond_compose_red end ------------红点------END --计算宠物战力 function PetModel:GetPetFightById(pet_id) local diamond_data = self:GetPetDiamondDataById(pet_id)--取出宝石所加的属性一并计算 local pet_data = self:GetPetListById(pet_id) local pet_cfg = self:GetPetCfg(pet_id, pet_data.pet_star) local awake_cfg = nil if pet_data.is_awaken == 1 then awake_cfg = self:GetPetAwakeCfg(pet_id) end local attr_list = self:GetPetAttrList(pet_data.pet_lv,stringtotable(pet_cfg.attr_list),diamond_data,awake_cfg,pet_data.pet_star,pet_data.pet_id) --上面拿到的属性列表list不是Getfighting用到的参数格式,先转一下格式 local need_attr_list = {} for k,v in pairs(attr_list) do local data = {v[1],v[2]} table.insert(need_attr_list,data) end local fight_value = GetFighting(need_attr_list,true) --技能基础战力添加 for i=1,4 do local skill_data = self:GetPetSkillCfg(pet_id,i,awake_cfg) if skill_data and pet_data.pet_star >= skill_data.active_star then local skill_id = skill_data.skill_talent_id local conf_power = GetSkillConfPowerBySkill(skill_id, 1) fight_value = fight_value + conf_power end end return fight_value end --传入petdata的计算战力方式 function PetModel:GetPetFightByData(data) local pet_data = data local diamond_data = self:GetPetDiamondDataById(pet_data.pet_id)--取出宝石所加的属性一并计算 local pet_cfg = self:GetPetCfg(pet_data.pet_id, pet_data.pet_star) local awake_cfg = nil if pet_data.is_awaken == 1 then awake_cfg = self:GetPetAwakeCfg(pet_data.pet_id) end local attr_list = self:GetPetAttrList(pet_data.pet_lv,stringtotable(pet_cfg.attr_list),diamond_data,awake_cfg,pet_data.pet_star,pet_data.pet_id) --上面拿到的属性列表list不是Getfighting用到的参数格式,先转一下格式 local need_attr_list = {} for k,v in pairs(attr_list) do local data = {v[1],v[2]} table.insert(need_attr_list,data) end local fight_value = GetFighting(need_attr_list,true) --技能基础战力添加 for i=1,4 do local skill_data = self:GetPetSkillCfg(pet_data.pet_id,i,awake_cfg) if skill_data and pet_data.pet_star >= skill_data.active_star then local skill_id = skill_data.skill_talent_id local conf_power = GetSkillConfPowerBySkill(skill_id, 1) fight_value = fight_value + conf_power end end return fight_value end --计算声援加成系数之后的战力 function PetModel:GetPetAditionFightById(pet_id,adition) local diamond_data = self:GetPetDiamondDataById(pet_id)--取出宝石所加的属性一并计算 local pet_data = self:GetPetListById(pet_id) local pet_cfg = self:GetPetCfg(pet_id, pet_data.pet_star) local awake_cfg = nil if pet_data.is_awaken == 1 then awake_cfg = self:GetPetAwakeCfg(pet_id) end local attr_list = self:GetPetAttrList(pet_data.pet_lv,stringtotable(pet_cfg.attr_list),diamond_data,awake_cfg,pet_data.pet_star,pet_data.pet_id) --上面拿到的属性列表list不是Getfighting用到的参数格式,先转一下格式,并把加成系数算进去 local need_attr_list = {} for k,v in pairs(attr_list) do local adition_attr = v[2]*(1+adition) local data = {v[1],adition_attr} table.insert(need_attr_list,data) end local fight_value = GetFighting(need_attr_list,true) --技能基础战力添加 for i=1,4 do local skill_data = self:GetPetSkillCfg(pet_data.pet_id,i,awake_cfg) if skill_data and pet_data.pet_star >= skill_data.active_star then local skill_id = skill_data.skill_talent_id local conf_power = GetSkillConfPowerBySkill(skill_id, 1) fight_value = fight_value + conf_power end end return fight_value end --获取当前出战的宠物战斗技能id列表 function PetModel:GetFollowPetFightSkillIdList() local fight_skill_data = {} if not self.follow_pet or self.follow_pet == 0 then return fight_skill_data end local follow_pet_data = self:GetPetListById(self.follow_pet) for i=1,4 do--遍历4个技能槽位,找到战斗技能 local fight_skill_cfg = self:GetPetSkillCfg(self.follow_pet,i,follow_pet_data.is_awaken==1) if fight_skill_cfg.skill_talent_type == 2 then --类型2为战斗技能 if self:IsPetSkillActive(follow_pet_data.pet_star, fight_skill_cfg.active_star) then table.insert(fight_skill_data,fight_skill_cfg.skill_talent_id) end end end return fight_skill_data end --获取当前助战的宠物战斗大招技能id function PetModel:GetHelpPetFightSkillIdList( ) local skill_id_list = {} local pet_1 = self:GetPetSupportDataBySlot(2) local pet_2 = self:GetPetSupportDataBySlot(3) if pet_1 then local pet_1_data = self:GetPetListById(pet_1.pet_id) local pet_1_skill_cfg = self:GetPetSkillCfg(pet_1_data.pet_id, 4, pet_1_data.is_awaken==1) if self:IsPetSkillActive(pet_1_data.pet_star, pet_1_skill_cfg.active_star) then local temp = { pet_id = pet_1_data.pet_id, pet_star = pet_1_data.pet_star, pet_skill = pet_1_skill_cfg.skill_talent_id, } table.insert(skill_id_list,temp) end end if pet_2 then local pet_2_data = self:GetPetListById(pet_2.pet_id) local pet_2_skill_cfg = self:GetPetSkillCfg(pet_2_data.pet_id, 4, pet_2_data.is_awaken==1) if self:IsPetSkillActive(pet_2_data.pet_star, pet_2_skill_cfg.active_star) then local temp = { pet_id = pet_2_data.pet_id, pet_star = pet_2_data.pet_star, pet_skill = pet_2_skill_cfg.skill_talent_id, } table.insert(skill_id_list,temp) end end return skill_id_list end --根据宠物id pet_id、宠物星级 pet_star查找相应宠物配置 function PetModel:GetPetBaseFightCfg(pet_id,pet_star) print("huangcong:PetModel [start:1035] :", pet_id,pet_star) for k,v in pairs(self.pet_cfg) do if v.pet_id == pet_id and v.pet_star == pet_star then local base_attr = stringtotable(DeepCopy(v.attr_list)) base_attr = SortAttrList( base_attr ) print("huangcong:PetModel [start:1039] :", base_attr) PrintTable(base_attr) print("huangcong:PetModel [end]") local new_base_attr = {} for i,v in ipairs(base_attr) do local attr = {} attr[1] = v[1] attr[2] = v[2] new_base_attr[#new_base_attr + 1] = attr end print("huangcong:PetModel [start:1051] :", GetFighting(new_base_attr)) PrintTable(new_base_attr) print("huangcong:PetModel [end]") return GetFighting(new_base_attr) end end return 0 end function PetModel:ChangeFightPetScene(vo,do_skill_call_back) data = { role_id = RoleManager.Instance.mainRoleInfo.role_id, pet_id = vo.pet_id, is_follow = 1, pet_star = vo.pet_star, } self:Fire(PetConst.UPDATE_SCENE_PET_MODEL,data,do_skill_call_back) end --提供一个通过碎片goods_id获取宠物基础属性列表的接口给皮皮聪 function PetModel:GetConfAttrListByGoodsId(goods_id) local attr_list = {} for k,v in pairs(self.pet_cfg) do local cost = stringtotable(v.cost) if v.pet_star == 1 and cost[1] and cost[1][2] == goods_id then attr_list = stringtotable(v.attr_list) break end end return attr_list end --根据碎片goodsid获取宠物形象(最小的形象) function PetModel:GetPetFigureByGoodsId(goods_id) for k,v in pairs(self.pet_cfg) do local cost = stringtotable(v.cost) if v.pet_star == 1 and cost[1] and cost[1][2] == goods_id then return v.figure_id, Trim(v.pet_name) end end return 1121,"" end --根据碎片goodsid获取宠物id function PetModel:GetPetIdByGoodsId(goods_id) for k,v in pairs(self.pet_cfg) do local cost = stringtotable(v.cost) if v.pet_star == 1 and cost[1] and cost[1][2] == goods_id then return v.pet_id end end return nil end --根据宠物的宝石列表得出宝石光环特效资源名 规则:4个宝石全穿戴,以其中最低品质为资源 function PetModel:GetPokemonDiamondEffectRes(pokemon_id) local diamond_data = self:GetPetDiamondDataById(pokemon_id) if not diamond_data then return nil end --找到身上品质最高的宝石颜色 local low_color = 6 local diamond_num = 0 for k,v in pairs(diamond_data) do diamond_num = diamond_num + 1 local color = GoodsModel:getInstance():GetGoodsColorNum(v.diamond_id) if color < low_color then low_color = color end end --颜色3(紫色)以上才开始有资格创建光环特效 local diamond_effect_res = nil if low_color >= 3 and diamond_num == 4 then diamond_effect_res = "effect_pet_guanghuan_00"..(low_color-2) end return diamond_effect_res end --根据宠物id获取宠物的原生id(即宠物最初形态的形象id) function PetModel:GetPetOriginalFigureId(pet_id) local pet_cfg = self:GetPetCfg(pet_id,1) return pet_cfg and pet_cfg.figure_id or nil end ---------宠物生活技能--------->>>>>>> function PetModel:IsLifeSkillActived(skill_id) --后端提交前先屏蔽 -- do return false end --判断技能是否存在或是否被屏蔽 local is_skill_have = false for k,v in pairs(PetConst.LifeSkill) do if v == skill_id then is_skill_have = true break end end if not is_skill_have then return false end local is_in_shiled_list = false for k,v in pairs(PetConst.LifeSkillShieldList) do if v == skill_id then is_in_shiled_list = true break end end if is_in_shiled_list then return false end --判断是否有生活技能配置 local life_skill_cfg = self:GetPetLifeSkillCfgById(skill_id) if not life_skill_cfg then return false end --判断是否激活宠物 local pet_data = self:GetPetListById(life_skill_cfg.pet_id) if not pet_data then return false end --判断宠物星数是否达成激活技能 return pet_data.pet_star >= life_skill_cfg.active_star end function PetModel:AdvicePetLifeSkillActived(pet_id) --获取宠物的技能id local life_skill_id = 0 local skill_cfg = self:GetPetSkillCfg(pet_id,1) if skill_cfg then life_skill_id = skill_cfg.skill_talent_id end if self:IsLifeSkillActived(life_skill_id) then self:Fire(PetConst.PET_LIFE_SKILL_ACTIVED,life_skill_id) end end ---------宠物生活技能---------<<<<<<<