local HeroAwakenInfo = class("HeroAwakenInfo") local function SortPlan(a, b) return a.planId < b.planId end function HeroAwakenInfo:initialize() self.serverInfo_AwakenInfoDict = {} --武将觉醒信息 self.serverInfo_AwakenTaskStateDict = {} --觉醒任务 self.serverInfo_AwakenTriggerParamDict = {} --觉醒任务进度 self.heroSkillLevelDict = {} --武将觉醒技能 self.weaponSkillLevelDict = {} --神兵觉醒技能 end function HeroAwakenInfo:SetAwakenInfos(heroAwakenInfos) for _, v in ipairs(heroAwakenInfos) do self.serverInfo_AwakenInfoDict[v.heroId] = v self.heroSkillLevelDict[v.heroId] = {} for i, skillInfo in ipairs(v.heroSkillInfo) do self.heroSkillLevelDict[v.heroId][skillInfo.pointId] = skillInfo.level end self.weaponSkillLevelDict[v.heroId] = {} for i, skillInfo in ipairs(v.weaponSkillInfo) do self.weaponSkillLevelDict[v.heroId][skillInfo.pointId] = skillInfo.level end table.sort(v.fairRankPlan, SortPlan) end end function HeroAwakenInfo:UpdateAwakenInfoParam(heroId, paramName, paramValue) if self.serverInfo_AwakenInfoDict[heroId] then self.serverInfo_AwakenInfoDict[heroId][paramName] = paramValue end end function HeroAwakenInfo:GetAwakenInfoParam(heroId, paramName) return self.serverInfo_AwakenInfoDict[heroId] and self.serverInfo_AwakenInfoDict[heroId][paramName] end function HeroAwakenInfo:GetAwakenInfo(heroId) return self.serverInfo_AwakenInfoDict[heroId] end function HeroAwakenInfo:GetAwakenHeroInfoList() local list = {} for _, v in pairs(self.serverInfo_AwakenInfoDict) do if v.isHeroAwaken then table.insert(list, v) end end return list end function HeroAwakenInfo:GetIsAnyHeroAwaken() for _, v in pairs(self.serverInfo_AwakenInfoDict) do if v.isHeroAwaken then return true end end return false end function HeroAwakenInfo:RemoveSkillLevel(heroId, type) if type == 0 then if self.heroSkillLevelDict[heroId] then self.heroSkillLevelDict[heroId] = {} end else if self.weaponSkillLevelDict[heroId] then self.weaponSkillLevelDict[heroId] = {} end end end --type:0是武将 1是神兵 function HeroAwakenInfo:UpdateSkillLevel(heroId, type, pointId, pointLevel) if type == 0 then if self.heroSkillLevelDict[heroId] then self.heroSkillLevelDict[heroId][pointId] = pointLevel end else if self.weaponSkillLevelDict[heroId] then self.weaponSkillLevelDict[heroId][pointId] = pointLevel end end end function HeroAwakenInfo:GetSkillLevel(heroId, type, pointId) if type == 0 then if self.heroSkillLevelDict[heroId] then return self.heroSkillLevelDict[heroId][pointId] or 0 end else if self.heroSkillLevelDict[heroId] then return self.weaponSkillLevelDict[heroId][pointId] or 0 end end return 0 end --服务器是全量推送,因此直接全部覆盖即可 function HeroAwakenInfo:SetHeroTaskInfo(heroId, taskInfo) self.serverInfo_AwakenTaskStateDict[heroId] = {} for _, taskState in ipairs(taskInfo.taskStates) do self.serverInfo_AwakenTaskStateDict[heroId][taskState.taskId] = taskState.state end self.serverInfo_AwakenTriggerParamDict[heroId] = {} for _, triggerParam in ipairs(taskInfo.triggerParams) do self.serverInfo_AwakenTriggerParamDict[heroId][triggerParam.triggerId] = triggerParam.params end end function HeroAwakenInfo:GetTaskState(heroId, taskId) local taskState = self.serverInfo_AwakenTaskStateDict[heroId] if taskState then return taskState[taskId] end return 0 end function HeroAwakenInfo:GetTriggerParam(heroId, triggerId) local triggerParam = self.serverInfo_AwakenTriggerParamDict[heroId] if triggerParam then return triggerParam[triggerId] end return 0 end function HeroAwakenInfo:GetFairAwakenSkillPlan(heroId, planId) local planList = self.serverInfo_AwakenInfoDict[heroId].fairRankPlan for k, v in ipairs(planList) do if v.planId == planId then return v end end end function HeroAwakenInfo:GetFairAwakenSkillPlanByIndex(heroId, index) return self.serverInfo_AwakenInfoDict[heroId].fairRankPlan[index] end function HeroAwakenInfo:GetFairAwakenSkillPlanList(heroId) return self.serverInfo_AwakenInfoDict[heroId].fairRankPlan end function HeroAwakenInfo:ChangeFairAwakenSkillPlanName(heroId, planId, name) local plan = self:GetFairAwakenSkillPlan(heroId, planId) plan.name = name end function HeroAwakenInfo:ResetWeaponAwakenSkillLevel(heroId) if not self.weaponSkillLevelDict[heroId] then return end for pointId, _ in pairs(self.weaponSkillLevelDict[heroId]) do self.weaponSkillLevelDict[heroId][pointId] = 0 end end function HeroAwakenInfo:UpdateFairAwakenSkillPlan(heroId, planId, curWeaponSkillPointNums, pointId, level) local plan = self:GetFairAwakenSkillPlan(heroId, planId) plan.curSkillPointNums = curWeaponSkillPointNums local pointData for _, v in ipairs(plan.weaponSkillInfo) do if v.pointId == pointId then pointData = v break end end if not pointData then pointData = {pointId = pointId, level = level} table.insert(plan.weaponSkillInfo, pointData) else pointData.level = level end end function HeroAwakenInfo:ResetFairAwakenSkillPlan(heroId, planId, curWeaponSkillPointNums) local plan = self:GetFairAwakenSkillPlan(heroId, planId) plan.curSkillPointNums = curWeaponSkillPointNums for _, v in ipairs(plan.weaponSkillInfo) do v.level = 0 end end return HeroAwakenInfo