LikabilityManager = {} local this = LikabilityManager local PropertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig) local PrivilegeTypeConfig = ConfigManager.GetConfig(ConfigName.PrivilegeTypeConfig) local heroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) local ItemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig) this.heroDatas = {} function this.Initialize() this.AllHeroDataLikAbility = {} this.HeroLvList = {} this.TotalLvList = {} this.ItemList = {} this.InitializeTableData() end function this.InitializeTableData() for k,v in ConfigPairs(ConfigManager.GetConfig(ConfigName.LikeAbility)) do local data = {} data.Id = v.Id data.Type = v.Type data.lv = v.Level data.value = this.GetTotalValue(data.lv,v.Type) data.Property = v.Property data.priPro = v.PrivilegeProperty if v.Type == 1 then table.insert(this.TotalLvList,data) else table.insert(this.HeroLvList,data) end end table.sort(this.TotalLvList,function(a,b) return a.lv < b.lv end) table.sort(this.HeroLvList,function(a,b) return a.lv < b.lv end) local configs = ConfigManager.GetAllConfigsDataByKey(ConfigName.ItemConfig,"ItemType",ItemType.likeabilityItem) for i = 1,#configs do if not this.ItemList[configs[i].Id] then this.ItemList[configs[i].Id] = {} end local str = string.split(configs[i].ResolveReward,"|") for j = 1,#str do local str1 = string.split(str[j],"#") if not this.ItemList[configs[i].Id][tonumber(str1[1])] then this.ItemList[configs[i].Id][tonumber(str1[1])] = tonumber(str1[2]) end end end end function this.GetTotalValue(lv,indexType) local configs = ConfigManager.GetAllConfigsDataByKey(ConfigName.LikeAbility,"Type",indexType) local num = 0 if lv == 0 then return num end for i = 1,lv do if configs[i].FavorDegree and configs[i].FavorDegree > 0 then num = num + configs[i].FavorDegree end end return num end -- -1 判断总好感度等级是否最大 其他 神将 function this.CheckIsMaxLv(heroId) local totalCurNum,totalLv,totalNum = this.GetTotalHeroLikeLv(heroId) if heroId < 0 then if totalLv >= this.TotalLvList[#this.TotalLvList].lv then return true end else if totalLv >= this.HeroLvList[#this.HeroLvList].lv then return true end end return false end function this.GetAllItemsData(pro) local list = {} for k,v in pairs(this.ItemList) do local data = {} data.num = BagManager.GetItemCountById(k) data.id = k data.property = ItemConfig[k].PropertyName data.Quantity = ItemConfig[k].Quantity if data.property == 0 then data.sortId = -1 elseif data.property == pro then data.sortId = 0 else data.sortId = data.property end table.insert(list,data) end table.sort(list,function(a,b) if a.sortId == b.sortId then if a.Quantity == b.Quantity then return a.id < b.id end return a.Quantity > b.Quantity else return a.sortId < b.sortId end end) return list end function this.UpdateAllBackData(msg) for i = 1,#msg.infoList do this.UpdatelBackData(msg.infoList[i].heroStaticid,msg.infoList[i].likableNum) end end function this.UpdatelBackData(heroId,value,isAdd) if not this.AllHeroDataLikAbility[heroId] then this.AllHeroDataLikAbility[heroId] = {} this.AllHeroDataLikAbility[heroId].value = 0 this.AllHeroDataLikAbility[heroId].likeLv = 0 end if not isAdd or isAdd == 0 then this.AllHeroDataLikAbility[heroId].value = value else this.AllHeroDataLikAbility[heroId].value = this.AllHeroDataLikAbility[heroId].value + value end this.AllHeroDataLikAbility[heroId].likeLv = this.GetTotalHeroLikeLv(value) local herodata = HeroManager.GetAllHeroList() for k,v in pairs(herodata) do HeroPropManager.SetFuncPropDirty(Func_Prop_Type.LikeAbility) if v.id == heroId then HeroPropManager.SetDirtyByType(v.dynamicId, Hero_Prop_Type.LikeAbility) end end end function this.UpdatelSingleHeroData(heroId,itemId,itemNum) local value = 0 local tempheroConfig = heroConfig[heroId] value = this.ItemList[itemId][tempheroConfig.PropertyName]*itemNum this.UpdatelBackData(heroId,value,1) BagManager.HeroLvUpUpdateItemsNum(itemId,itemNum) PopupTipPanel.ShowTip("好感度+"..value) end --过去 function this.GetCurItemValue(heroId,itemId,itemNum) local value = 0 local tempheroConfig = heroConfig[heroId] LogError("heroid=="..heroId) LogError("itemid=="..itemId) value = this.ItemList[itemId][tempheroConfig.PropertyName]*itemNum return value end -- -1 总好感度 其他是神将id function this.GetTotalHeroLikeLv(index) local totalCurNum,totalLv,totalNum = 0,0,0 if index < 0 then for k,v in pairs(this.AllHeroDataLikAbility) do totalCurNum = totalCurNum + v.value end totalLv,totalNum = this.GetLv(1,totalCurNum) else totalCurNum = this.AllHeroDataLikAbility[index] and this.AllHeroDataLikAbility[index].value or 0 totalLv,totalNum = this.GetLv(2,totalCurNum) end return totalCurNum,totalLv,totalNum end --indexType 1: 获取总好感度等级 2:获取单个神将好感度等级 function this.GetLv(indexType,value) local list = {} if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end for i = 1,#list do if value < list[i].value then return list[i].lv - 1,list[i].value end end return list[#list].lv,list[#list].value end --indexType 1: 获取总好感度属性 2:获取单个神将好感度属性 --index -1 获取累加的好感度属性 其他 获取某级的好感度属性 --lv 累加到某级 function this.GetProData(indexType,index,lv) local list = {} if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end local allPro = {} if index >= 0 then for _,n in ipairs(list) do if indexType == n.Type and lv == n.lv then if n.Property and #n.Property > 0 then for i = 1,#n.Property do if not allPro[n.Property[i][1]] then allPro[n.Property[i][1]] = 0 end allPro[n.Property[i][1]] = allPro[n.Property[i][1]] + n.Property[i][2] end end break end end else for _,n in ipairs(list) do if n.Property and #n.Property > 0 and lv >= n.lv then if n.Property and #n.Property > 0 then for i = 1,#n.Property do if not allPro[n.Property[i][1]] then allPro[n.Property[i][1]] = 0 end allPro[n.Property[i][1]] = allPro[n.Property[i][1]] + n.Property[i][2] end end end end end return allPro end --获取权益属性加成 function this.GetPrivilageProData(indexType,index,lv) local list = {} if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end local allPro = {} if index >= 0 then for _,n in ipairs(list) do if indexType == n.Type and lv == n.lv then if n.priPro and #n.priPro > 0 then for i = 1,#n.priPro do if not allPro[n.priPro[i][1]] then allPro[n.priPro[i][1]] = 0 end allPro[n.priPro[i][1]] = allPro[n.priPro[i][1]] + n.priPro[i][2] end end break end end else for _,n in ipairs(list) do if n.priPro and #n.priPro > 0 and lv >= n.lv then if n.priPro and #n.priPro > 0 then for i = 1,#n.priPro do if not allPro[n.priPro[i][1]] then allPro[n.priPro[i][1]] = 0 end allPro[n.priPro[i][1]] = allPro[n.priPro[i][1]] + n.priPro[i][2] end end end end end return allPro end function this.GetTotalForce(heroData) local SingleProVal = {} local AllHeroProVal = {} local lv,totalNum = 0,0 if heroData then if this.AllHeroDataLikAbility[heroData.tId] then lv,totalNum = this.GetLv(2,this.AllHeroDataLikAbility[heroData.tId].value) SingleProVal = this.GetProData(2,-1,lv) end end local totalCurNum,totalLv,totalNum = this.GetTotalHeroLikeLv(-1) AllHeroProVal = this.GetProData(1,-1,totalLv) -- for k,v in pairs(SingleProVal) do -- LogGreen("SingleProVal k:"..k.." v:"..v) -- end -- for k,v in pairs(AllHeroProVal) do -- LogGreen("AllHeroProVal k:"..k.." v:"..v) -- end return SingleProVal, AllHeroProVal end function this.CheckRedPot() if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.LikeAbility) then for k,v in pairs(this.ItemList) do local num = BagManager.GetItemCountById(k) if num > 0 then --计算玩家拥有的英雄中对应星级的英雄的数量 for i, v in pairs(PlayerManager.heroHandBook) do local conFig = ConfigManager.GetConfigData(ConfigName.HeroConfig,i) if conFig and conFig.Star == 5 then if not this.CheckIsMaxLv(i) then return true end end end end end end return false end function this.GetCurSortHeroListData(proId) local list = {} --计算玩家拥有的英雄中对应星级的英雄的数量 for i, v in pairs(PlayerManager.heroHandBook) do local conFig = ConfigManager.GetConfigData(ConfigName.HeroConfig,i) if conFig then if conFig.Star == 5 and (proId == 0 or conFig.PropertyName == proId) then table.insert(list,conFig) end end end this.SortHerosData(list) this.heroDatas = list return list end function this.SortHerosData(heroData) table.sort(heroData,function(a,b) return a.Sort < b.Sort end) return heroData end --type 1是标题 界面显示用 2是内容 --content 内容 function this.CreatSingleProData(type,content) local data = {} data.type = type data.content = content data.prolist = {} return data end --indexType 1总好感度 2:神将 --add -1 是累加 其他是不累加 --等级 --title1标题 --title2子标题 --subtitle1普通属性内容 --subtitle2特权属性内容 --nextLv: 下一等级 --all 所有的 local isall function this.GetViewProData(indexType,add,lv,title1,title2,subtitle1,subtitle2,nextLv,all) isall = all local data = this.CreatSingleProData(1,title1) local list = {} if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end local num,lv2,totalNum = LikabilityManager.GetTotalHeroLikeLv(indexType) if all then for i = 1,#list do if list[i].lv ~= 0 then local color = "" local tempNum = 0 if lv >= list[i].lv then color = "00FF00" tempNum = list[i].value else color = "fdf5e5" tempNum = num end if title2 and title2 ~= "" then table.insert(data.prolist,string.format(title2,color,list[i].lv,tempNum,list[i].value)) end local str1,str2 = this.GetViewProDatas(indexType,add,list[i].lv,subtitle1,subtitle2,nextLv,color) table.insert(data.prolist,str1) table.insert(data.prolist,str2) end end else local color = "00FF00" if title2 and title2 ~= "" then table.insert(data.prolist,string.format(title2,color,lv,num,totalNum)) end local str1,str2 = this.GetViewProDatas(indexType,add,lv,subtitle1,subtitle2,nextLv,color) table.insert(data.prolist,str1) table.insert(data.prolist,str2) end return data end --indexType 1总好感度 2:神将 --add -1 是累加 其他是不累加 --等级 --title1标题 --title2子标题 --subtitle1普通属性内容 --subtitle2特权属性内容 --nextLv: 下一等级 function this.GetViewProDatas(indexType,add,lv,subtitle1,subtitle2,nextLv,color) local num = 0 if indexType > 1 then indexType = 2 end local str1,str2 = "","" local pro1 = LikabilityManager.GetProData(indexType,add,lv) if LengthOfTable(pro1) > 0 then str1 = this.SetProvalue(pro1,1,subtitle1,nextLv,indexType,color) end local pro2 = LikabilityManager.GetPrivilageProData(indexType,add,lv) if LengthOfTable(pro2) > 0 then str2 = this.SetProvalue(pro2,2,subtitle2,nextLv,indexType,color) end return str1,str2 end --属性列表 ,1属性 2特权, 标签, function this.SetProvalue(prolist,proType,tag,nextLv,indexType,_color) local list = {} local color1 = _color if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end if indexType == 1 and not isall then color1 = "fdf5e5" end local newProList = {} local str = "" LogError("#prolist=="..#prolist) for k,v in pairs(prolist) do local str1 = "" if proType == 1 then str1 = PropertyConfig[k].Info..string.format(" +%s",_color,GetPropertyFormatStrOne(PropertyConfig[k].Style, v) ) if nextLv and not this.CheckIsMaxLv2(indexType,nextLv) then local pro1 = LikabilityManager.GetProData(indexType,nextLv,nextLv) if pro1[k] and pro1[k] > 0 then str1 = str1.." "..string.format("(下级额外 +%s)",color1,pro1[k]) end end else local config = ConfigManager.TryGetConfigDataByKey(ConfigName.PrivilegeTypeConfig,"PrivilegeType",k) if config then local tempStr = "" if v > 0 then tempStr = GetEquipPropertyFormatStr(config.IfFloat, v) else tempStr = string.format("%d%%", 0) end str1 = string.format(config.Name,string.format("%s",_color,tempStr)) end end table.insert(newProList,str1) end str = string.format(tag,color1,(newProList[1] or ""),(newProList[2] or ""),(newProList[3] or ""),(newProList[4] or "")) LogError("str==="..str) return str end function this.CheckIsMaxLv2(indexType,nextLv) local list = {} if indexType == 1 then list = this.TotalLvList else list = this.HeroLvList end for i = 1,#list do if list[i].lv == nextLv then return false end end return true end return this