528 lines
17 KiB
Lua
528 lines
17 KiB
Lua
EquipTreasureManager= {}
|
||
local this=EquipTreasureManager
|
||
local allTreasures={}
|
||
local jewelConfig=ConfigManager.GetConfig(ConfigName.JewelConfig)
|
||
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
||
local jewerLevelUpConfig=ConfigManager.GetConfig(ConfigName.JewelRankupConfig)
|
||
function this.Initialize()
|
||
end
|
||
--初始化所有宝器数据
|
||
function this.InitAllEquipTreasure(_equipData)
|
||
if _equipData==nil then
|
||
return
|
||
end
|
||
for i=1,#_equipData do
|
||
this.InitSingleTreasureData(_equipData[i])
|
||
end
|
||
end
|
||
--初始化单个宝物的数据
|
||
function this.InitSingleTreasureData(_singleData)
|
||
if _singleData==nil then
|
||
return
|
||
end
|
||
local single={}
|
||
local staticId=_singleData.equipId
|
||
local currJewel=jewelConfig[staticId]
|
||
single.id=staticId
|
||
single.idDyn=_singleData.id
|
||
single.lv=_singleData.exp
|
||
single.refineLv=_singleData.rebuildLevel
|
||
single.maxLv=currJewel.Max[1]
|
||
single.maxRefineLv=currJewel.Max[2]
|
||
single.upHeroDid=""
|
||
local quantity=currJewel.Level
|
||
single.quantity=quantity
|
||
single.race=currJewel.Race
|
||
single.frame=GetQuantityImageByquality(quantity)
|
||
single.name=itemConfig[staticId].Name
|
||
single.itemConfig=itemConfig[staticId]
|
||
single.levelPool=currJewel.LevelupPool
|
||
single.proIcon=GetProStrImageByProNum(currJewel.Race)
|
||
single.refinePool=currJewel.RankupPool
|
||
single.equipType=currJewel.Location
|
||
if currJewel.Location==1 then
|
||
single.type=Language[10505]
|
||
else
|
||
single.type=Language[10506]
|
||
end
|
||
single.icon=GetResourcePath(itemConfig[staticId].ResourceID)
|
||
single.strongConfig=this.GetCurrTreasureLvConfig(1,currJewel.LevelupPool,_singleData.exp)
|
||
single.refineConfig=this.GetCurrTreasureLvConfig(2,currJewel.RankupPool,_singleData.rebuildLevel)
|
||
allTreasures[_singleData.id]=single
|
||
end
|
||
--获取玩家可以穿戴的宝物
|
||
function this.GetTreasureDataByPos(_pos,_idDyn,PropertyName)
|
||
local equips = {}
|
||
for i, v in pairs(allTreasures) do
|
||
if v.equipType==_pos-4 then
|
||
if (v.upHeroDid=="" or v.upHeroDid==_idDyn) and v.race == PropertyName then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
|
||
function this.OpenTreasure(star)
|
||
local config= ConfigManager.GetConfigData(40)
|
||
local configs= string.split(config.Value,'|')
|
||
for i=1,#configs do
|
||
if string.split(configs[i],'#')[1]==1 then --玩家等级
|
||
return PlayerManager.level >= string.split(configs[i],'#')[2]
|
||
end
|
||
if string.split(configs[i],'#')[2] and string.split(configs[i],'#')[2] ==2 then --英雄星级
|
||
return star >= string.split(configs[i],'#')[2]
|
||
end
|
||
end
|
||
end
|
||
|
||
--获取当前宝物升级数据
|
||
function this.GetCurrTreasureLvConfig(_type,_id,_lv)
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
if configInfo.Type==_type and configInfo.PoolID==_id and configInfo.Level==_lv then
|
||
return configInfo
|
||
end
|
||
end
|
||
end
|
||
|
||
--获取当前等级的基础属性/精炼属性
|
||
function this.GetCurrLvAndNextLvPropertyValue(_type,_id,_lv)
|
||
local lvConfig=nil
|
||
local nexLvConfig=nil
|
||
--获取当前等级属性加成
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
if configInfo.Type==_type and configInfo.PoolID==_id and configInfo.Level==_lv then
|
||
lvConfig=configInfo
|
||
break
|
||
end
|
||
end
|
||
--获取下一等级属性加成
|
||
local nextLv=_lv+1
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
if configInfo.Type==_type and configInfo.PoolID==_id and configInfo.Level==nextLv then
|
||
nexLvConfig=configInfo
|
||
break
|
||
end
|
||
end
|
||
local proList={}
|
||
if lvConfig then
|
||
for i = 1, table.getn(lvConfig.Property) do
|
||
local info=lvConfig.Property[i]
|
||
if info then
|
||
local index=info[1]
|
||
local skillValue={}
|
||
skillValue.currValue=info[2]
|
||
proList[index]=skillValue
|
||
end
|
||
end
|
||
end
|
||
--没有下一等级数据为已升到最高级
|
||
if nexLvConfig then
|
||
for i = 1, table.getn(nexLvConfig.Property) do
|
||
local info=nexLvConfig.Property[i]
|
||
if info then
|
||
if proList[info[1]] then
|
||
proList[info[1]].nextValue=info[2]
|
||
else
|
||
local skillValue={}
|
||
skillValue.currValue=info[2]
|
||
proList[info[1]]=skillValue
|
||
end
|
||
end
|
||
end
|
||
--最高级显示
|
||
else
|
||
for i, v in pairs(proList) do
|
||
proList[i].nextValue=proList[i].currValue
|
||
end
|
||
|
||
end
|
||
return proList
|
||
end
|
||
|
||
--根据属性类型获取所有类型的表数据
|
||
function this.GetAllTabletTreasuresByRace(_index)
|
||
if jewelConfig== nil then
|
||
return
|
||
end
|
||
local list={}
|
||
local index=0
|
||
for _, configInfo in ConfigPairs(jewelConfig) do
|
||
local jewel=configInfo
|
||
if jewel then
|
||
-- 获取同类型的所有表中的数据 (最低品质为2 不显示最低品质)
|
||
if jewel.Race == _index and jewel.Level>2 then
|
||
index=index+1
|
||
local treasure={}
|
||
local Id=jewel.Id
|
||
treasure.Id=Id
|
||
local lv=jewel.Level
|
||
treasure.frame=GetQuantityImageByquality(lv)
|
||
--合成当前宝物需要的宝物id
|
||
treasure.lowId=Id-1
|
||
treasure.lowFrame=GetQuantityImageByquality(lv-1)
|
||
treasure.icon=GetResourcePath(itemConfig[Id].ResourceID)
|
||
treasure.quantity=lv
|
||
treasure.name=itemConfig[Id].Name
|
||
treasure.race=lv
|
||
treasure.equipType=jewel.Location
|
||
treasure.quaUpCount=jewel.RankupCount
|
||
treasure.proIcon=GetProStrImageByProNum(jewel.Race)
|
||
treasure.costCoin=jewel.RankupResources
|
||
list[index]=treasure
|
||
end
|
||
end
|
||
end
|
||
if LengthOfTable(list)>0 then
|
||
table.sort(list,function(a,b)
|
||
return a.race < b.race
|
||
end)
|
||
return list
|
||
end
|
||
end
|
||
|
||
--获取一键合成便利的所有宝物
|
||
function this.GetAllTabletTreasuresByRaceAndType(_index, _Location)
|
||
if jewelConfig== nil then
|
||
return
|
||
end
|
||
local list={}
|
||
local index=0
|
||
for _, configInfo in ConfigPairs(jewelConfig) do
|
||
local jewel=configInfo
|
||
if jewel then
|
||
-- 获取同类型的所有表中的数据 (最低品质为2 不显示最低品质)
|
||
if jewel.Race == _index and jewel.Level>2 and ((_Location and jewel.Location== _Location) or not _Location) then
|
||
index=index+1
|
||
local treasure={}
|
||
local Id=jewel.Id
|
||
treasure.Id=Id
|
||
local lv=jewel.Level
|
||
treasure.frame=GetQuantityImageByquality(lv)
|
||
treasure.lowFrame=GetQuantityImageByquality(lv-1)
|
||
treasure.icon=GetResourcePath(itemConfig[Id].ResourceID)
|
||
treasure.quantity=lv
|
||
treasure.name=itemConfig[Id].Name
|
||
treasure.race=lv
|
||
treasure.equipType=jewel.Location
|
||
treasure.quaUpCount=jewel.RankupCount
|
||
treasure.proIcon=GetProStrImageByProNum(jewel.Race)
|
||
treasure.costCoin=jewel.RankupResources
|
||
list[index]=treasure
|
||
end
|
||
end
|
||
end
|
||
if LengthOfTable(list)>0 then
|
||
table.sort(list,function(a,b)
|
||
return a.race < b.race
|
||
end)
|
||
return list
|
||
end
|
||
end
|
||
|
||
|
||
|
||
--获取所有可以合成宝物的数据
|
||
function this.GetBagCompoundEquipDatasByequipSData(equipSData)
|
||
local equips = {}
|
||
for i, v in pairs(allTreasures) do
|
||
--获取没有穿戴,没有精炼/强化,低一个品质(表里低一个品质的id-1)
|
||
if v.equipType == equipSData.equipType and v.upHeroDid ==""
|
||
and v.quantity == equipSData.quantity - 1 and v.lv ==0 and v.refineLv ==0 and v.id==equipSData.Id-1 then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--获取可以合成宝物的数量根据宝物id
|
||
function this.GetCanCompoundTreasureNumByTreasureId(_id,_type)
|
||
local equips = {}
|
||
for i, v in pairs(allTreasures) do
|
||
--获取没有穿戴,没有精炼/强化,低一个品质(表里低一个品质的id-1)
|
||
if v.equipType == _type and v.upHeroDid ==""
|
||
and v.lv ==0 and v.refineLv ==0 and v.id==_id then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
return LengthOfTable(equips)
|
||
end
|
||
|
||
--获取当前等级加成的属性
|
||
function this.GetCurLvPropertyValue(_type,_id,_lv)
|
||
local lvConfig=nil
|
||
--获取当前等级属性加成
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
if configInfo.Type==_type and configInfo.PoolID==_id and configInfo.Level==_lv then
|
||
lvConfig=configInfo
|
||
break
|
||
end
|
||
end
|
||
local proList={}
|
||
if lvConfig then
|
||
for i = 1, table.getn(lvConfig.Property) do
|
||
local info=lvConfig.Property[i]
|
||
if info then
|
||
local index=info[1]
|
||
local skillValue={}
|
||
skillValue.currValue=info[2]
|
||
if info[2]~=0 then
|
||
proList[index]=skillValue
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return proList
|
||
|
||
end
|
||
|
||
|
||
--获取满足升级条件的宝物
|
||
function this.GetEnoughRefineTreasure(_id,_idDyn)
|
||
if allTreasures==nil then
|
||
return
|
||
end
|
||
local num=0
|
||
local list={}
|
||
for i, v in pairs(allTreasures) do
|
||
local isUpHero=false
|
||
if v.upHeroDid=="" or v.upHeroDid==nil then
|
||
isUpHero=false
|
||
else
|
||
isUpHero=true
|
||
end
|
||
|
||
if v.id==_id and v.idDyn~=_idDyn and v.lv==0 and v.refineLv==0 and isUpHero==false then
|
||
list[i]=v
|
||
num=num+1
|
||
end
|
||
end
|
||
return list,num
|
||
end
|
||
|
||
|
||
function this.RemoveTreasureByIdDyn(_idDyn)
|
||
if allTreasures==nil then
|
||
return
|
||
end
|
||
if allTreasures[_idDyn] then
|
||
allTreasures[_idDyn]=nil
|
||
end
|
||
end
|
||
|
||
--获取所有宝物 不算英雄身上穿的 通过稀有度
|
||
function this.GetAllTreasuresByQuantity(Quantity)
|
||
local curAllEquipTreasure = {}
|
||
for key, value in pairs(allTreasures) do
|
||
if value.upHeroDid == "" and value.itemConfig.Quantity == Quantity then
|
||
table.insert( curAllEquipTreasure, value )
|
||
elseif value.upHeroDid == "" and Quantity == 1 then--1 全部
|
||
table.insert( curAllEquipTreasure, value )
|
||
end
|
||
end
|
||
return curAllEquipTreasure
|
||
end
|
||
--获取所有宝物 不算英雄身上穿的 通过稀有度
|
||
function this.GetAllTreasuresByLocation(Location,PropertyName)
|
||
local curAllEquipTreasure = {}
|
||
for key, value in pairs(allTreasures) do
|
||
if value.upHeroDid == "" and jewelConfig[value.id].Location == Location and jewelConfig[value.id].Race == PropertyName then
|
||
table.insert( curAllEquipTreasure, value )
|
||
end
|
||
end
|
||
return curAllEquipTreasure
|
||
end
|
||
--获取所有宝物 不算英雄身上穿的
|
||
function this.GetAllTreasures(PropertyName)
|
||
if PropertyName then
|
||
end
|
||
local curAllEquipTreasure = {}
|
||
for key, value in pairs(allTreasures) do
|
||
if value.upHeroDid == "" then
|
||
if PropertyName then
|
||
if jewelConfig[value.id].Race == PropertyName then
|
||
table.insert( curAllEquipTreasure, value )
|
||
end
|
||
else
|
||
table.insert( curAllEquipTreasure, value )
|
||
end
|
||
end
|
||
end
|
||
if LengthOfTable(curAllEquipTreasure)>0 then
|
||
table.sort(curAllEquipTreasure,function(a,b)
|
||
if a.quantity==b.quantity then
|
||
if a.lv==b.lv then
|
||
return a.refineLv>b.refineLv
|
||
else
|
||
return a.lv>b.lv
|
||
end
|
||
else
|
||
return a.quantity > b.quantity
|
||
end
|
||
|
||
end)
|
||
return curAllEquipTreasure
|
||
end
|
||
|
||
return curAllEquipTreasure
|
||
end
|
||
--改变宝物的等级或精炼等级
|
||
function this.ChangeTreasureLv(_idDyn,_type)
|
||
if allTreasures==nil then
|
||
return
|
||
end
|
||
if allTreasures[_idDyn]==nil then
|
||
return
|
||
end
|
||
if allTreasures[_idDyn] then
|
||
if _type==1 then
|
||
if allTreasures[_idDyn].lv==allTreasures[_idDyn].maxLv then
|
||
return
|
||
end
|
||
local lv=allTreasures[_idDyn].lv+1
|
||
allTreasures[_idDyn].lv=lv
|
||
allTreasures[_idDyn].strongConfig=this.GetCurrTreasureLvConfig(1,allTreasures[_idDyn].levelPool,lv)
|
||
else if _type==2 then
|
||
if allTreasures[_idDyn].refineLv == allTreasures[_idDyn].maxRefineLv then
|
||
return
|
||
end
|
||
local refine=allTreasures[_idDyn].refineLv+1
|
||
allTreasures[_idDyn].refineLv=refine
|
||
allTreasures[_idDyn].refineConfig=this.GetCurrTreasureLvConfig(2,allTreasures[_idDyn].refinePool,refine)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--设置宝物的穿戴卸下 (第二个参数传nil为卸下)
|
||
function this.SetTreasureUpOrDown(_idDyn,_hero)
|
||
if allTreasures[_idDyn] then
|
||
allTreasures[_idDyn].upHeroDid=_hero
|
||
end
|
||
end
|
||
|
||
--根据id删除宝物
|
||
function this.DeleteTreasureByIdDyn(_idDyn)
|
||
if allTreasures then
|
||
allTreasures[_idDyn]=nil
|
||
end
|
||
end
|
||
--设置装备穿戴的英雄
|
||
function this.SetEquipTreasureUpHeroDid(_equipTreasureDid,_heroDid)
|
||
if allTreasures[_equipTreasureDid] then
|
||
allTreasures[_equipTreasureDid].upHeroDid=_heroDid
|
||
end
|
||
end
|
||
--设置装备穿戴的英雄
|
||
function this.GetSingleEquipTreasreData(_equipTreasureDid)
|
||
if allTreasures[_equipTreasureDid] then
|
||
return allTreasures[_equipTreasureDid]
|
||
else
|
||
return nil
|
||
end
|
||
end
|
||
|
||
--根据动态id获取宝物
|
||
function this.GetSingleTreasureByIdDyn(_idDyn)
|
||
if allTreasures==nil then
|
||
return
|
||
end
|
||
return allTreasures[_idDyn]
|
||
|
||
end
|
||
|
||
--计算战斗力
|
||
function this.CalculateWarForceBySid(sId,lv,rlv)
|
||
return this.CalculateWarForceBase(sId,lv,rlv)
|
||
end
|
||
|
||
--计算战斗力
|
||
function this.CalculateWarForce(Did)
|
||
local curTreasure = allTreasures[Did]
|
||
if curTreasure then
|
||
return this.CalculateWarForceBase(curTreasure.id,curTreasure.lv,curTreasure.refineLv)
|
||
end
|
||
end
|
||
function this.CalculateWarForceBase(sId,lv,rlv)
|
||
local curEuipTreaSureConfig = ConfigManager.GetConfigData(ConfigName.JewelConfig,sId)
|
||
if curEuipTreaSureConfig then
|
||
local addAllProVal = {}
|
||
--主属性
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
--强化的属性
|
||
if configInfo.PoolID == curEuipTreaSureConfig.LevelupPool and configInfo.Type == 1 and configInfo.Level == lv then
|
||
for j = 1, #configInfo.Property do
|
||
if addAllProVal[configInfo.Property[j][1]] then
|
||
addAllProVal[configInfo.Property[j][1]] = addAllProVal[configInfo.Property[j][1]] + configInfo.Property[j][2]
|
||
else
|
||
addAllProVal[configInfo.Property[j][1]] = configInfo.Property[j][2]
|
||
end
|
||
end
|
||
end
|
||
--精炼的属性
|
||
if configInfo.PoolID == curEuipTreaSureConfig.RankupPool and configInfo.Type == 2 and configInfo.Level == rlv then
|
||
for j = 1, #configInfo.Property do
|
||
if addAllProVal[configInfo.Property[j][1]] then
|
||
addAllProVal[configInfo.Property[j][1]] = addAllProVal[configInfo.Property[j][1]] + configInfo.Property[j][2]
|
||
else
|
||
addAllProVal[configInfo.Property[j][1]] = configInfo.Property[j][2]
|
||
end
|
||
end
|
||
end
|
||
end
|
||
local heroPropertyScore={}
|
||
for i, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.PropertyConfig)) do
|
||
heroPropertyScore[i]=v.Score
|
||
end
|
||
local powerEndVal=0
|
||
for i, v in pairs(addAllProVal) do
|
||
if v > 0 then
|
||
local curProConfigData = ConfigManager.GetConfigData(ConfigName.PropertyConfig,i)
|
||
if curProConfigData then
|
||
if curProConfigData.Style == 1 then
|
||
powerEndVal=powerEndVal+v*heroPropertyScore[i]
|
||
else
|
||
powerEndVal=powerEndVal+v/100*heroPropertyScore[i]
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return math.floor(powerEndVal)
|
||
end
|
||
end
|
||
--获取宝物升级消耗
|
||
function this.GetTreasureUpLvCostMatrial(_id,_lv)
|
||
local currJewel=jewelConfig[_id]
|
||
if currJewel==nil then
|
||
return
|
||
end
|
||
|
||
local lvConfig=nil
|
||
--获取当前等级属性加成
|
||
local lvList
|
||
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
|
||
if configInfo.Type==2 and configInfo.PoolID==currJewel.RankupPool and configInfo.Level<_lv then
|
||
lvList[configInfo.Level]=configInfo
|
||
break
|
||
end
|
||
end
|
||
if lvList ==nil then
|
||
return
|
||
end
|
||
local idList={}
|
||
for i, v in pairs(lvList) do
|
||
local cost =v.JewelExpend
|
||
if cost then
|
||
for i = 1, cost do
|
||
for i = 1, cost[i][2] do
|
||
if cost[i][1]==1 then
|
||
table.insert(idList,currJewel.Id)
|
||
else
|
||
table.insert(idList,cost[i][1])
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return idList
|
||
end
|
||
return EquipTreasureManager |