841 lines
28 KiB
Lua
841 lines
28 KiB
Lua
FaXiangManager = {}
|
|
local this = FaXiangManager
|
|
local allTreasures = {}
|
|
local otherTreaures = {}
|
|
local faXiangConfig = ConfigManager.GetConfig(ConfigName.FaxiangConfig)
|
|
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
|
local faxiangLevelConfig = ConfigManager.GetConfig(ConfigName.FaxiangLevelConfig)
|
|
local faxiangStarConfig = ConfigManager.GetConfig(ConfigName.FaxiangStarConfig)
|
|
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
|
|
function this.Initialize()
|
|
this.TreasurePowerData = {}
|
|
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,notAdd)
|
|
if _singleData == nil then
|
|
return
|
|
end
|
|
local single = {}
|
|
local staticId = _singleData.equipId
|
|
--LogError("starticid=="..staticId)
|
|
local currJewel = faXiangConfig[staticId]
|
|
single.faXiangConfig=currJewel
|
|
single.id = staticId
|
|
single.idDyn = _singleData.id
|
|
single.lv = _singleData.exp
|
|
--LogError("single.lv=="..single.lv)
|
|
single.refineLv = _singleData.rebuildLevel --星级
|
|
single.fourSpirit=_singleData.fourSpirit
|
|
single.maxLv = currJewel.LevelMax
|
|
single.maxRefineLv = currJewel.StarMax
|
|
single.upHeroDid = ""
|
|
-- single.race = currJewel.Race
|
|
single.itemConfig = itemConfig[staticId]
|
|
single.quantity = single.itemConfig.Quantity
|
|
single.name = GetLanguageStrById(itemConfig[staticId].Name)
|
|
single.frame = GetQuantityImageByquality(itemConfig[staticId].Quantity)
|
|
single.levelPool = currJewel.LevelUpPool
|
|
single.refinePool = currJewel.Star
|
|
single.equipType = currJewel.Type
|
|
local quantity = currJewel.Level
|
|
single.icon = GetResourcePath(itemConfig[staticId].ResourceID)
|
|
single.strongConfig = this.GetCurrTreasureLvConfig(currJewel.LevelUpPool, _singleData.exp)
|
|
single.refineConfig = this.GetCurrTreasureLvConfig(2, currJewel.Star, _singleData.rebuildLevel)
|
|
allTreasures[_singleData.id] = single
|
|
-- end
|
|
|
|
end
|
|
|
|
--获取玩家穿戴的宝物
|
|
function this.GetAllHeroEquipedTreasureData()
|
|
local equips = {}
|
|
for i, v in pairs(allTreasures) do
|
|
if (not v.upHeroDid or v.upHeroDid == "" or v.upHeroDid == 0 or v.upHeroDid == "0") then
|
|
else
|
|
table.insert(equips, v)
|
|
end
|
|
end
|
|
return equips
|
|
end
|
|
|
|
function this.GetEnoughFaXiangItemById(_id)
|
|
local equips={}
|
|
for i, v in pairs(allTreasures) do
|
|
if (v.upHeroDid == nil or v.upHeroDid =="" or v.upHeroDid == 0 or v.upHeroDid == "0") and v.id==_id and v.lv==0 and v.refineLv==0 then
|
|
table.insert(equips, v)
|
|
end
|
|
end
|
|
return equips,#equips
|
|
end
|
|
|
|
|
|
function this.RemoveTreasureByIdDyn(_idDyn)
|
|
if allTreasures == nil then
|
|
return
|
|
end
|
|
if allTreasures[_idDyn] 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
|
|
|
|
--改变宝物的等级或精炼等级或神应等级
|
|
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)
|
|
elseif _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
|
|
|
|
--获取当前等级的基础属性/精炼属性
|
|
function this.GetCurrLvAndNextLvPropertyValue(_id, _lv,_data)
|
|
local lvConfig = nil
|
|
local nexLvConfig = nil
|
|
local Para=0
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",_data.refinePool,"Level",_data.refineLv)
|
|
if starConfig then
|
|
--LogError("starConfig.id=="..starConfig.Id)
|
|
Para=starConfig.StarPara/10000
|
|
end
|
|
|
|
--获取当前等级属性加成
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
if configInfo.PoolId == _id and configInfo.Level == _lv then
|
|
lvConfig = configInfo
|
|
break
|
|
end
|
|
end
|
|
--获取下一等级属性加成
|
|
local nextLv = _lv + 1
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
if configInfo.PoolId == _id and configInfo.Level == nextLv then
|
|
nexLvConfig = configInfo
|
|
break
|
|
end
|
|
end
|
|
local proList = {}
|
|
-- for key, value in pairs(addAllProVal) do
|
|
-- addEndAllProVal[key] = math.floor(value * (1 + Para))
|
|
-- end
|
|
if lvConfig then
|
|
for i = 1, table.getn(lvConfig.LevelPara) do
|
|
local info = lvConfig.LevelPara[i]
|
|
if info then
|
|
local index = info[1]
|
|
local skillValue = {}
|
|
skillValue.currValue = math.floor(info[2] * (1 + Para))
|
|
proList[index] = skillValue
|
|
end
|
|
end
|
|
|
|
end
|
|
--没有下一等级数据为已升到最高级
|
|
if nexLvConfig then
|
|
--最高级显示
|
|
for i = 1, table.getn(nexLvConfig.LevelPara) do
|
|
local info = nexLvConfig.LevelPara[i]
|
|
if info then
|
|
if proList[info[1]] then
|
|
proList[info[1]].nextValue = math.floor(info[2] * (1 + Para))
|
|
else
|
|
local skillValue = {}
|
|
skillValue.currValue = math.floor(info[2] * (1 + Para))
|
|
proList[info[1]] = skillValue
|
|
end
|
|
end
|
|
end
|
|
else
|
|
for i, v in pairs(proList) do
|
|
proList[i].nextValue = proList[i].currValue
|
|
end
|
|
end
|
|
local lvList={}
|
|
for key, value in pairs(proList) do
|
|
value.proId=key
|
|
table.insert(lvList,value)
|
|
end
|
|
return lvList
|
|
end
|
|
|
|
--获取当前星级的基础属性/精炼属性
|
|
function this.GetCurrStarAndNextStarPropertyValue(_id, _lv,_data)
|
|
local lvConfig = nil
|
|
local nexLvConfig = nil
|
|
local Para=0
|
|
local nextPara=0
|
|
--LogError("lv======================".._lv)
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",_data.refinePool,"Level",_data.refineLv)
|
|
if starConfig then
|
|
--LogError("starConfig.id=="..starConfig.Id)
|
|
Para=starConfig.StarPara/10000
|
|
end
|
|
|
|
if _data.refineLv==_data.maxRefineLv then
|
|
nextPara=Para
|
|
else
|
|
local nextStarConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",_data.refinePool,"Level",_data.refineLv+1)
|
|
nextPara=nextStarConfig.StarPara/10000
|
|
end
|
|
--获取当前等级属性加成
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
if configInfo.PoolId == _data.levelPool and configInfo.Level == _lv then
|
|
lvConfig = configInfo
|
|
break
|
|
end
|
|
end
|
|
--LogError("lvConfig.id========="..lvConfig.Id)
|
|
local proList = {}
|
|
if lvConfig then
|
|
for i = 1, table.getn(lvConfig.LevelPara) do
|
|
local info = lvConfig.LevelPara[i]
|
|
if info then
|
|
local index = info[1]
|
|
local skillValue = {}
|
|
skillValue.currValue = info[2]
|
|
proList[index] = skillValue
|
|
end
|
|
end
|
|
end
|
|
local starList={}
|
|
table.insert(starList,{proId=100,currValue=Para,nextValue=nextPara })
|
|
for key, value in pairs(proList) do
|
|
local firstValue=value.currValue
|
|
value.currValue=math.floor(firstValue * (1 + Para))
|
|
value.nextValue=math.floor(firstValue * (1+nextPara))
|
|
value.proId=key
|
|
table.insert(starList,value)
|
|
end
|
|
|
|
return starList
|
|
end
|
|
|
|
--获取法相升级消耗
|
|
function this.GetFaXiangLevelCost(_pool,_lv)
|
|
local levelConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangLevelConfig,"PoolId",_pool,"Level",_lv)
|
|
if levelConfig then
|
|
local items={}
|
|
if levelConfig.PropList==nil or #levelConfig.PropList==0 then
|
|
return items
|
|
end
|
|
for i = 1,#levelConfig.PropList do
|
|
local id=levelConfig.PropList[i][1]
|
|
if itemConfig[id] then
|
|
local item={}
|
|
item.id=id
|
|
item.icon=GetResourcePath(itemConfig[id].ResourceID)
|
|
item.frame=GetQuantityImageByquality(itemConfig[id].Quantity)
|
|
item.haveNum=BagManager.GetItemCountById(id)
|
|
item.needNum=levelConfig.PropList[i][2]
|
|
item.isEnough=item.haveNum>=item.needNum
|
|
items[i]=item
|
|
end
|
|
end
|
|
|
|
local isEnough = true
|
|
for k,v in pairs(items) do
|
|
if not v.isEnough then
|
|
isEnough = false
|
|
break
|
|
end
|
|
end
|
|
return items,isEnough
|
|
end
|
|
end
|
|
|
|
--获取法相升级消耗
|
|
function this.GetFaXiangStarCost(_poolId,_star,_data)
|
|
local config=ConfigManager.GetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",_poolId,"Level",_star)
|
|
local items={}
|
|
if config and config.PropList then
|
|
for i = 1, #config.PropList do
|
|
local id=config.PropList[i]
|
|
local item={}
|
|
--同类型宝物
|
|
local type=id[1]
|
|
if type==0 then
|
|
item.id=_data.id
|
|
item.icon=_data.icon
|
|
item.frame=_data.frame
|
|
local equips,num=FaXiangManager.GetEnoughFaXiangItemById(_data.id)
|
|
if equips then
|
|
item.haveNum= num
|
|
else
|
|
item.haveNum=0
|
|
end
|
|
item.needNum=id[2]
|
|
if item.haveNum>=item.needNum then
|
|
item.isEnough=true
|
|
else
|
|
item.isEnough=false
|
|
end
|
|
items[#items+1]=item
|
|
else
|
|
item.id=type
|
|
local config=itemConfig[type]
|
|
if config then
|
|
item.icon=GetResourcePath(config.ResourceID)
|
|
item.frame=GetQuantityImageByquality(config.Quantity)
|
|
item.haveNum=BagManager.GetItemCountById(type)
|
|
item.needNum=id[2]
|
|
if item.haveNum>=item.needNum then
|
|
item.isEnough=true
|
|
else
|
|
item.isEnough=false
|
|
end
|
|
items[#items+1]=item
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local isEnough = true
|
|
for k,v in pairs(items) do
|
|
if not v.isEnough then
|
|
isEnough = false
|
|
break
|
|
end
|
|
end
|
|
return items,isEnough
|
|
end
|
|
|
|
function this.CalculateWarForceBase(sId, lv, rlv, curTreasure)
|
|
-- LogGreen("sId:"..sId.." lv:"..lv.." rlv:"..rlv.." tlv:"..tlv)
|
|
local curEuipTreaSureConfig = ConfigManager.GetConfigData(ConfigName.FaxiangConfig, sId)
|
|
if curEuipTreaSureConfig then
|
|
local addAllProVal = {}
|
|
--主属性
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
--强化的属性
|
|
if
|
|
configInfo.PoolId == curEuipTreaSureConfig.LevelUpPool and
|
|
configInfo.Level == lv
|
|
then
|
|
for j = 1, #configInfo.LevelPara do
|
|
if addAllProVal[configInfo.LevelPara[j][1]] then
|
|
addAllProVal[configInfo.LevelPara[j][1]] =
|
|
addAllProVal[configInfo.LevelPara[j][1]] + configInfo.LevelPara[j][2]
|
|
else
|
|
addAllProVal[configInfo.LevelPara[j][1]] = configInfo.LevelPara[j][2]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local starConfig=ConfigManager.TryGetAllConfigsDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",curEuipTreaSureConfig.Star,"Level",rlv)
|
|
local addEndAllProVal={}
|
|
if starConfig then
|
|
local StarPara=starConfig.StarPara/10000
|
|
for key, value in pairs(addAllProVal) do
|
|
addEndAllProVal[key] = math.floor(value * (1 + StarPara))
|
|
end
|
|
end
|
|
|
|
local powerEndVal = HeroPowerManager.CalPower(addEndAllProVal)
|
|
return powerEndVal
|
|
end
|
|
end
|
|
|
|
|
|
function this.CalculateAllFaXiangAddPro(_heroData)
|
|
-- LogGreen("sId:"..sId.." lv:"..lv.." rlv:"..rlv.." tlv:"..tlv)
|
|
--LogError("===============================获取英雄法相添加的属性")
|
|
local allProVal = {}
|
|
|
|
if _heroData==nil then
|
|
LogError("没有英雄数据======")
|
|
return allProVal
|
|
end
|
|
for i, v in ConfigPairs(propertyConfig) do
|
|
allProVal[i] = 0
|
|
end
|
|
local list=_heroData.faxiang
|
|
if list and #list>0 then
|
|
--LogError("==========================================================")
|
|
for i = 1, #list do
|
|
local addProList={}
|
|
local idDyn=list[i]
|
|
local potencyAdd=0
|
|
local faxiang=allTreasures[idDyn]
|
|
if faxiang then
|
|
--获取潜力加成
|
|
if faxiang.equipType==0 then
|
|
potencyAdd= HeroManager.GetHeroPotencyAddByType(_heroData.dId,7)
|
|
--LogError("阴法----------------------------"..potencyAdd)
|
|
elseif faxiang.equipType==1 then
|
|
potencyAdd=HeroManager.GetHeroPotencyAddByType(_heroData.dId,8)
|
|
--LogError("阳法----------------------------"..potencyAdd)
|
|
end
|
|
local levelConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangLevelConfig,"PoolId",faxiang.levelPool,"Level",faxiang.lv)
|
|
if levelConfig then
|
|
for j = 1, #levelConfig.LevelPara do
|
|
local pro=levelConfig.LevelPara[j][1]
|
|
addProList[pro]=levelConfig.LevelPara[j][2]
|
|
end
|
|
end
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",faxiang.refinePool,"Level",faxiang.refineLv)
|
|
if starConfig then
|
|
for j = 1, #addProList do
|
|
local Para=starConfig.StarPara/10000
|
|
addProList[j]=math.floor(addProList[j] * (1 + Para)+0.5)
|
|
end
|
|
end
|
|
for k, v in pairs(addProList) do
|
|
if potencyAdd>0 and propertyConfig[k].Style == 1 then
|
|
--LogError("阴法阳法属性强化加成 前==========================="..v.." pro==="..k)
|
|
addProList[k] = math.floor(v*(1+potencyAdd)+0.5)
|
|
--LogError("阴法阳法属性强化加成 后==========================="..addProList[k].." pro==="..k)
|
|
end
|
|
end
|
|
end
|
|
for key, value in pairs(addProList) do
|
|
--LogError("key========="..key.." value=="..value)
|
|
allProVal[key]=allProVal[key]+value
|
|
end
|
|
end
|
|
end
|
|
|
|
return allProVal
|
|
end
|
|
|
|
--获取英雄所有法相技能
|
|
function this.GetHeroAllFaXiangSkill(_heroData)
|
|
local skillList={}
|
|
if _heroData==nil then
|
|
return skillList
|
|
end
|
|
local faxiang=_heroData.faxiang
|
|
if faxiang then
|
|
for i = 1, #faxiang do
|
|
local data=allTreasures[faxiang[i]]
|
|
--LogError(" data.id=="..data.faXiangConfig.Id)
|
|
if data and data.faXiangConfig and #data.faXiangConfig.PassiveSkill>0 then
|
|
local ids=data.faXiangConfig.PassiveSkill[data.refineLv+1]
|
|
if ids then
|
|
for key, value in pairs(ids) do
|
|
--LogError("skill value===="..value)
|
|
table.insert(skillList,value)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return skillList
|
|
end
|
|
|
|
|
|
|
|
function this.CalculateFaXiangAddPro(faxiang)
|
|
-- LogGreen("sId:"..sId.." lv:"..lv.." rlv:"..rlv.." tlv:"..tlv)
|
|
--LogError("===============================获取英雄法相添加的属性")
|
|
local allProVal = {}
|
|
if faxiang==nil then
|
|
return allProVal
|
|
end
|
|
for i, v in ConfigPairs(propertyConfig) do
|
|
allProVal[i] = 0
|
|
end
|
|
local addProList={}
|
|
if faxiang then
|
|
local levelConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangLevelConfig,"PoolId",faxiang.levelPool,"Level",faxiang.lv)
|
|
if levelConfig then
|
|
for j = 1, #levelConfig.LevelPara do
|
|
local pro=levelConfig.LevelPara[j][1]
|
|
addProList[pro]=levelConfig.LevelPara[j][2]
|
|
end
|
|
end
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",faxiang.refinePool,"Level",faxiang.refineLv)
|
|
if starConfig then
|
|
for j = 1, #addProList do
|
|
local Para=starConfig.StarPara/10000
|
|
addProList[j]=math.floor(addProList[j] * (1 + Para))
|
|
end
|
|
end
|
|
end
|
|
|
|
return addProList
|
|
end
|
|
|
|
--获取消耗物品数据
|
|
function this.GetCostItems(_config)
|
|
if _config==nil then
|
|
return
|
|
end
|
|
local items={}
|
|
for i = 1,#_config.PropList do
|
|
local id=_config.PropList[i][1]
|
|
if itemConfig[id] then
|
|
local item={}
|
|
item.id=id
|
|
item.icon=GetResourcePath(itemConfig[id].ResourceID)
|
|
item.frame=GetQuantityImageByquality(itemConfig[id].Quantity)
|
|
item.haveNum=BagManager.GetItemCountById(id)
|
|
item.needNum=_config.PropList[i][2]
|
|
item.isEnough=item.haveNum>=item.needNum
|
|
items[i]=item
|
|
end
|
|
end
|
|
|
|
local isEnough = true
|
|
for k,v in pairs(items) do
|
|
if not v.isEnough then
|
|
isEnough = false
|
|
break
|
|
end
|
|
end
|
|
return items,isEnough
|
|
end
|
|
|
|
function this.CheckIsCanUpFaXiang(_heroData)
|
|
if not _heroData then
|
|
return false
|
|
end
|
|
local isOpen=CheckFunctionOpen(FUNCTION_OPEN_TYPE.FaXiang)
|
|
if isOpen==false then
|
|
return false
|
|
end
|
|
local faxiang=_heroData.faxiang
|
|
local list=this.GetAllTreasuresCanUp(_heroData)
|
|
if faxiang==nil or #faxiang==0 then
|
|
|
|
if list and #list>0 then
|
|
return true
|
|
end
|
|
else
|
|
if #faxiang==1 then
|
|
local aaa=allTreasures[faxiang[1]]
|
|
if aaa then
|
|
for i = 1, #list do
|
|
if list[i].equipType~=aaa.equipType then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
--检测是否显示红点
|
|
function this.CheckIsShowRed(_id,_type)
|
|
if _id==nil then
|
|
return false
|
|
end
|
|
local faxiang=allTreasures[_id]
|
|
if not faxiang then
|
|
return false
|
|
end
|
|
local cost1
|
|
local cost2
|
|
local isLv=false
|
|
local isStar=false
|
|
if _type==1 then
|
|
if faxiang.lv~=faxiang.maxLv then
|
|
cost1,isLv=this.GetFaXiangLevelCost(faxiang.levelPool,faxiang.lv)
|
|
return isLv
|
|
end
|
|
|
|
elseif _type==2 then
|
|
if faxiang.refineLv~=faxiang.maxRefineLv then
|
|
cost2,isStar=this.GetFaXiangStarCost(faxiang.refinePool,faxiang.refineLv,faxiang)
|
|
return isStar
|
|
end
|
|
else
|
|
|
|
if faxiang.lv~=faxiang.maxLv then
|
|
cost1,isLv=this.GetFaXiangLevelCost(faxiang.levelPool,faxiang.lv)
|
|
if isLv then
|
|
return isLv
|
|
end
|
|
|
|
end
|
|
if faxiang.refineLv~=faxiang.maxRefineLv then
|
|
cost2,isStar=this.GetFaXiangStarCost(faxiang.refinePool,faxiang.refineLv,faxiang)
|
|
if isStar then
|
|
return isStar
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
|
|
--根据动态id获取法相
|
|
function this.GetSingleTreasureByIdDyn(_idDyn)
|
|
if allTreasures == nil then
|
|
return
|
|
end
|
|
return allTreasures[_idDyn]
|
|
end
|
|
|
|
|
|
function this.GetOneKeyUpFaXiangByType(_hero)
|
|
local list={}
|
|
local yinList={}
|
|
local YangList={}
|
|
local curyin
|
|
local yinPower=0
|
|
local curyang
|
|
local yangPower=0
|
|
for i = 1, #_hero.faxiang do
|
|
local heroFaxiang=allTreasures[_hero.faxiang[i]]
|
|
if heroFaxiang.equipType==0 then
|
|
yinPower=this.CalculateEquipWarForce(heroFaxiang)
|
|
else
|
|
yangPower=this.CalculateEquipWarForce(heroFaxiang)
|
|
end
|
|
end
|
|
for i, v in pairs(allTreasures) do
|
|
if v.faXiangConfig.Type==0
|
|
and (v.faXiangConfig.Profession==0 or v.faXiangConfig.Profession==_hero.heroConfig.Profession)
|
|
and CheckListIsContainValue1(v.faXiangConfig.Job,_hero.heroConfig.Job) and v.upHeroDid=="" then
|
|
local power=this.CalculateEquipWarForce(v)
|
|
--LogError("power=========="..power)
|
|
--table.insert(yinList,v)
|
|
if power>yinPower then
|
|
yinPower=power
|
|
curyin=v.idDyn
|
|
end
|
|
end
|
|
end
|
|
for i, v in pairs(allTreasures) do
|
|
if v.faXiangConfig.Type==1
|
|
and (v.faXiangConfig.Profession==0 or v.faXiangConfig.Profession==_hero.heroConfig.Profession)
|
|
and CheckListIsContainValue1(v.faXiangConfig.Job,_hero.heroConfig.Job) and v.upHeroDid=="" then
|
|
local power=this.CalculateEquipWarForce(v)
|
|
-- LogError("power=========="..power)
|
|
--table.insert(yinList,v)
|
|
if power>yangPower then
|
|
yangPower=power
|
|
curyang=v.idDyn
|
|
end
|
|
end
|
|
end
|
|
if curyin then
|
|
table.insert(list,curyin)
|
|
end
|
|
if curyang then
|
|
table.insert(list,curyang)
|
|
end
|
|
return list
|
|
end
|
|
|
|
--根据装备数据计算战斗力
|
|
function this.CalculateEquipWarForce(curEquip)
|
|
local addAllProVal = {}
|
|
addAllProVal= this.CalculateFaXiangAddPro(curEquip)
|
|
local powerEndVal = HeroPowerManager.CalPower(addAllProVal)
|
|
return powerEndVal
|
|
end
|
|
|
|
|
|
--获取当前等级加成的属性
|
|
function this.GetCurLvPropertyValue(_id, _lv, _starPool,_star,_isShow)
|
|
local lvConfig = nil
|
|
local isShow = _isShow == true
|
|
--获取当前等级属性加成
|
|
-- LogError("_id==".._id.." level==".._lv)
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
if configInfo.PoolId == _id and configInfo.Level == _lv then
|
|
|
|
lvConfig = configInfo
|
|
break
|
|
end
|
|
end
|
|
local proList = {}
|
|
if lvConfig then
|
|
for i = 1, table.getn(lvConfig.LevelPara) do
|
|
local info = lvConfig.LevelPara[i]
|
|
if info then
|
|
local index = info[1]
|
|
local skillValue = {}
|
|
skillValue.currValue = info[2]
|
|
if isShow then
|
|
proList[index] = skillValue
|
|
else
|
|
if info[2] ~= 0 then
|
|
proList[index] = skillValue
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",_starPool,"Level",_star)
|
|
if starConfig then
|
|
for j = 1, #proList do
|
|
local Para=starConfig.StarPara/10000
|
|
proList[j].currValue=math.floor(proList[j].currValue * (1 + Para))
|
|
end
|
|
end
|
|
return proList
|
|
end
|
|
|
|
|
|
--获取所有宝物 不算英雄身上穿的
|
|
function this.GetAllTreasures()
|
|
|
|
local curAllEquipTreasure = {}
|
|
for key, value in pairs(allTreasures) do
|
|
if value.upHeroDid == "" or value.upHeroDid == "0" then
|
|
table.insert(curAllEquipTreasure, value)
|
|
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.GetAllTreasuresCanUp(_heroData)
|
|
local curAllEquipTreasure = {}
|
|
for key, value in pairs(allTreasures) do
|
|
if (value.upHeroDid == "" or value.upHeroDid == "0")
|
|
and (value.faXiangConfig.Profession==0 or value.faXiangConfig.Profession==_heroData.heroConfig.Profession)
|
|
and (value.faXiangConfig.Job[1]==0 or CheckListIsContainValue1(value.faXiangConfig.Job,_heroData.heroConfig.Job)) then
|
|
table.insert(curAllEquipTreasure, value)
|
|
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.SetEquipTreasureUpHeroDid(_equipTreasureDid, _heroDid)
|
|
if allTreasures[_equipTreasureDid] then
|
|
allTreasures[_equipTreasureDid].upHeroDid = _heroDid
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--获取当前宝物升级数据
|
|
function this.GetCurrTreasureLvConfig( _id, _lv)
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
if configInfo.PoolId == _id and configInfo.Level == _lv then
|
|
--LogError("poolid==".._id .."_lv==================".._lv)
|
|
return configInfo
|
|
end
|
|
end
|
|
end
|
|
|
|
--计算战斗力
|
|
function this.CalculateWarForceBySid(sId, lv, rlv, tlv)
|
|
return this.CalculateWarForceBase(sId, lv, rlv, tlv)
|
|
end
|
|
|
|
function this.CalculateWarForceBase(sId, lv, rlv, tlv,curTreasure)
|
|
-- LogGreen("sId:"..sId.." lv:"..lv.." rlv:"..rlv.." tlv:"..tlv)
|
|
local curEuipTreaSureConfig = ConfigManager.GetConfigData(ConfigName.FaxiangConfig, sId)
|
|
local addEndAllProVal={}
|
|
if curEuipTreaSureConfig then
|
|
local addAllProVal = {}
|
|
--主属性
|
|
for _, configInfo in ConfigPairs(faxiangLevelConfig) do
|
|
--强化的属性
|
|
if configInfo.PoolID == curEuipTreaSureConfig.LevelUpPool and configInfo.Level == lv then
|
|
for j = 1, #configInfo.LevelPara do
|
|
if addAllProVal[configInfo.LevelPara[j][1]] then
|
|
addAllProVal[configInfo.LevelPara[j][1]] =
|
|
addAllProVal[configInfo.LevelPara[j][1]] + configInfo.LevelPara[j][2]
|
|
else
|
|
addAllProVal[configInfo.LevelPara[j][1]] = configInfo.LevelPara[j][2]
|
|
end
|
|
end
|
|
end
|
|
|
|
local starConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.FaxiangStarConfig,"PoolId",curEuipTreaSureConfig.Star,"Level",rlv)
|
|
|
|
if starConfig then
|
|
--LogError("starConfig.id=="..starConfig.Id)
|
|
local Para=starConfig.StarPara/10000
|
|
for key, value in pairs(addAllProVal) do
|
|
addEndAllProVal[key] = math.floor(value * (1 + Para))
|
|
end
|
|
end
|
|
|
|
end
|
|
local powerEndVal = HeroPowerManager.CalPower(addEndAllProVal)
|
|
return powerEndVal
|
|
end
|
|
end
|
|
|
|
function this.SetTreasureUpOrDown(_idDyn, _hero)
|
|
if allTreasures[_idDyn] then
|
|
allTreasures[_idDyn].upHeroDid = _hero
|
|
|
|
end
|
|
end
|
|
|
|
return FaXiangManager |