464 lines
16 KiB
Lua
464 lines
16 KiB
Lua
EquipManager = {}
|
||
local this = EquipManager
|
||
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
||
local equipConfig = ConfigManager.GetConfig(ConfigName.EquipConfig)
|
||
local propertyConfig=ConfigManager.GetConfig(ConfigName.PropertyConfig)
|
||
local equipStarsConfig=ConfigManager.GetConfig(ConfigName.EquipStarsConfig)
|
||
this.equipDatas = {}
|
||
this.NewEquipList = {}
|
||
function this.Initialize()
|
||
|
||
end
|
||
--初始化装备数据
|
||
function this.InitEquipData(_msgEquipList)
|
||
local dataStr = nil
|
||
for i = 1, #_msgEquipList do
|
||
this.InitUpdateEquipData(_msgEquipList[i],false)
|
||
end
|
||
--初始化红点
|
||
if PlayerManager.uid then
|
||
dataStr = PlayerPrefs.GetString("EquipNew"..PlayerManager.uid)
|
||
end
|
||
if dataStr == "" then
|
||
this.NewEquipList = {}
|
||
else
|
||
this.NewEquipList = string.split(dataStr, "|")
|
||
end
|
||
end
|
||
function this.InitUpdateEquipData(_equipData,isFindHandBook)
|
||
local equipdata={}
|
||
equipdata.equipConfig = equipConfig[_equipData.equipId]
|
||
if equipdata.equipConfig~=nil then
|
||
equipdata.backData=_equipData
|
||
equipdata.itemConfig=itemConfig[equipdata.equipConfig.Id]
|
||
equipdata.did=_equipData.id
|
||
equipdata.id = equipdata.equipConfig.Id
|
||
if itemConfig[equipdata.id] then
|
||
equipdata.icon = GetResourcePath(itemConfig[equipdata.id].ResourceID)
|
||
else
|
||
Log(Language[10483]..equipdata.id)
|
||
return
|
||
end
|
||
equipdata.frame = GetQuantityImageByquality(equipdata.equipConfig.Quality)--ItemQuality[equipdata.equipConfig.Quality].icon
|
||
equipdata.num=1
|
||
equipdata.position=equipdata.equipConfig.Position
|
||
equipdata.endingTime=_equipData.createTime
|
||
equipdata.resetLv=_equipData.rebuildLevel
|
||
equipdata.skillId = _equipData.skillId
|
||
if equipdata.skillId == nil then
|
||
equipdata.skillId = 0
|
||
end
|
||
equipdata.upHeroDid="0"
|
||
local propList = {}
|
||
for index, prop in ipairs(equipdata.equipConfig.Property) do
|
||
propList[index] = {}
|
||
propList[index].propertyId = prop[1]
|
||
propList[index].propertyValue = prop[2]
|
||
propList[index].PropertyConfig = propertyConfig[prop[1]]
|
||
end
|
||
equipdata.mainAttribute = propList
|
||
--equipdata.secondAttribute={}
|
||
equipdata.isLocked = _equipData.isLocked --1:被锁定 0:未锁定
|
||
--equipdata.warPower = this.CalculateWarForce(equipdata.did)
|
||
--for i = 1, #_equipData.secondAttribute do
|
||
-- local singleSecondAttribute={}
|
||
-- singleSecondAttribute.propertyId=_equipData.secondAttribute[i].propertyId
|
||
-- singleSecondAttribute.propertyValue=_equipData.secondAttribute[i].propertyValue
|
||
-- singleSecondAttribute.PropertyConfig=propertyConfig[_equipData.secondAttribute[i].propertyId]
|
||
-- --equipdata.secondAttribute[v.propertyId]=singleSecondAttribute
|
||
-- table.insert( equipdata.secondAttribute,singleSecondAttribute)
|
||
--end
|
||
this.equipDatas[_equipData.id]=equipdata
|
||
--table.insert(this.equipDatas,equipdata)
|
||
isFindHandBook = isFindHandBook or true
|
||
if isFindHandBook then
|
||
PlayerManager.SetEquipHandBookListData(equipdata.id)
|
||
end
|
||
end
|
||
end
|
||
--更新装备数据
|
||
function this.UpdateEquipData(_equipData,isFindHandBook)
|
||
this.InitUpdateEquipData(_equipData,isFindHandBook)
|
||
--新获得装备存红点
|
||
if equipConfig[_equipData.equipId] then
|
||
if equipConfig[_equipData.equipId].Quality >= 4 then
|
||
table.insert(this.NewEquipList, _equipData.id)
|
||
-- 本地保存数据
|
||
local str = table.concat(this.NewEquipList, "|")
|
||
PlayerPrefs.SetString("EquipNew"..PlayerManager.uid, str)
|
||
end
|
||
end
|
||
end
|
||
function this.GetAllEquipData()
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
--v.warPower = this.CalculateWarForce(v.did)
|
||
table.insert(equips,v)
|
||
end
|
||
table.sort(equips, function(a,b) return a.id < b.id end)
|
||
return equips
|
||
end
|
||
--背包专用 去除已穿装备
|
||
--做装备叠加特殊组拼数据
|
||
function this.GetAllEquipData2()
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.upHeroDid == "0" then
|
||
--table.insert(equips,v)
|
||
if equips[v.id] then
|
||
equips[v.id].num = equips[v.id].num + 1
|
||
else
|
||
equips[v.id] = v
|
||
equips[v.id].num = 1
|
||
end
|
||
end
|
||
end
|
||
--table.sort(equips, function(a,b) return a.id < b.id end)
|
||
return equips
|
||
end
|
||
|
||
--获取单个装备数据
|
||
function this.GetSingleEquipData(_equipDid)
|
||
if this.equipDatas[_equipDid] then
|
||
return this.equipDatas[_equipDid]
|
||
end
|
||
end
|
||
--通过装备品品质获得装备list
|
||
function this.GetEquipDataByEquipQuality(_equipQuality)
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.Quality == _equipQuality then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
table.sort(equips, function(a,b) return a.id < b.id end)
|
||
return equips
|
||
end
|
||
--通过装备品品质获得装备list (已穿装备去除)
|
||
function this.GetEquipDataByEquipQuality2(_equipQuality)
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.Quality == _equipQuality and v.upHeroDid =="0" then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
table.sort(equips, function(a,b) return a.id < b.id end)
|
||
return equips
|
||
end
|
||
|
||
--通过装备位置获得装备list
|
||
function this.GetEquipDataByEquipPosition(_position)
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.Position == _position then
|
||
--v.warPower = this.CalculateWarForce(v.did)
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
table.sort(equips, function(a,b) return a.id < b.id end)
|
||
return equips
|
||
end
|
||
--通过装备品职业和位置获得装备list 自己穿的装备也要显示
|
||
function this.GetEquipDataByEquipJobAndPos(_pos,_job,_heroDid)
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.ProfessionLimit == _job or v.equipConfig.ProfessionLimit==0 then
|
||
if v.equipConfig.Position== _pos then
|
||
if v.upHeroDid =="0" or v.upHeroDid == _heroDid then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--设置装备穿戴的英雄
|
||
function this.SetEquipUpHeroDid(_equipDid,_heroDid)
|
||
if this.equipDatas[_equipDid] then
|
||
this.equipDatas[_equipDid].upHeroDid=_heroDid
|
||
end
|
||
end
|
||
--设置装备穿戴的英雄
|
||
function this.SetEquipLockState(_equipDids,_lock)--1:被锁定 0:未锁定
|
||
if _equipDids and #_equipDids > 0 then
|
||
for i = 1, #_equipDids do
|
||
if this.equipDatas[_equipDids[i]] then
|
||
Log(" sss ".._equipDids[i].." ".._lock)
|
||
this.equipDatas[_equipDids[i]].isLocked=_lock
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--删除单个装备装备
|
||
function this.DeleteSingleEquip(_equipDid)
|
||
if this.equipDatas[_equipDid] then
|
||
Log(Language[10484].._equipDid)
|
||
this.equipDatas[_equipDid]=nil
|
||
RedPointManager.PlayerPrefsDeleteStrItemId(_equipDid)
|
||
else
|
||
Log(Language[10485].._equipDid)
|
||
end
|
||
end
|
||
--工坊 获得装备品品质获得装备list
|
||
function this.WorkShopGetEquipDataByEquipQuality(_equipQuality,_rebuildEquipDid)
|
||
local equips = {}
|
||
for i, v in pairs(EquipManager.equipDatas) do
|
||
if v.equipConfig.Quality == _equipQuality then
|
||
if v.did ~= _rebuildEquipDid then
|
||
if v.upHeroDid == "0" then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--工坊 获得可重铸所有装备
|
||
function this.GetAllEquipDataIfClear()
|
||
local equips = {}
|
||
for i, v in pairs(EquipManager.equipDatas) do
|
||
if v.equipConfig.IfClear ==1 then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--通过装备品品质获得装备list (已穿装备去除)
|
||
function this.GetAllEquipEquipDataMsinusUpHero(_sortTypeId)
|
||
local equips = {}
|
||
for _, v in pairs(this.equipDatas) do
|
||
if v.upHeroDid =="0" then --所有未穿装备
|
||
if _sortTypeId ==0 then --筛选
|
||
table.insert(equips,v)
|
||
elseif _sortTypeId>=5 then
|
||
if v.equipConfig.Quality==_sortTypeId-3 then
|
||
table.insert(equips,v)
|
||
end
|
||
else
|
||
if v.equipConfig.Position==_sortTypeId then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--地图临时背包数据
|
||
this.mapShotTimeItemData={}
|
||
--地图临时装备数据存储
|
||
function this.InitMapShotTimeEquipBagData(_mapEquip)
|
||
Log(Language[10486].._mapEquip.id )
|
||
this.mapShotTimeItemData[#this.mapShotTimeItemData+1]=_mapEquip
|
||
end
|
||
--计算战斗力
|
||
function this.CalculateWarForce(equipDid,data)
|
||
local curEquip = EquipManager.equipDatas[equipDid]
|
||
if curEquip then --正常背包
|
||
local num = this.CalculateEquipWarForce(curEquip)
|
||
return num
|
||
else
|
||
for i = 1, #this.mapShotTimeItemData do
|
||
if this.mapShotTimeItemData[i].id==equipDid then
|
||
curEquip=this.mapShotTimeItemData[i]
|
||
end
|
||
end
|
||
if curEquip then --临时背包数据
|
||
local num = this.CalculateEquipWarForce(curEquip)
|
||
return num
|
||
else --除此之外就是好友数据
|
||
curEquip = data
|
||
if curEquip then
|
||
local num = this.CalculateEquipWarForce2(curEquip)
|
||
return num
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--根据装备数据计算战斗力
|
||
function this.CalculateEquipWarForce(curEquip)
|
||
local addAllProVal={}
|
||
for i, v in ConfigPairs(propertyConfig) do
|
||
addAllProVal[i]=0
|
||
end
|
||
for index, prop in ipairs(curEquip.mainAttribute) do
|
||
local id = prop.propertyId
|
||
local value = prop.propertyValue
|
||
if addAllProVal[id] then
|
||
addAllProVal[id] = addAllProVal[id] + value
|
||
else
|
||
addAllProVal[id] = value
|
||
end
|
||
end
|
||
--for j = 1, #curEquip.secondAttribute do
|
||
-- if addAllProVal[curEquip.secondAttribute[j].propertyId] then
|
||
-- addAllProVal[curEquip.secondAttribute[j].propertyId]=addAllProVal[curEquip.secondAttribute[j].propertyId]+curEquip.secondAttribute[j].propertyValue
|
||
-- else
|
||
-- addAllProVal[curEquip.secondAttribute[j].propertyId]=curEquip.secondAttribute[j].propertyValue
|
||
-- end
|
||
--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*HeroManager.heroPropertyScore[i]
|
||
else
|
||
powerEndVal=powerEndVal+v/100*HeroManager.heroPropertyScore[i]
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
if curEquip.equipConfig and curEquip.equipConfig.Score > 0 then
|
||
powerEndVal = powerEndVal + curEquip.equipConfig.Score
|
||
end
|
||
return math.floor(powerEndVal)
|
||
end
|
||
--根据装备数据计算战斗力
|
||
function this.CalculateEquipWarForce2(curEquip)
|
||
local addAllProVal={}
|
||
for i, v in ConfigPairs(propertyConfig) do
|
||
addAllProVal[i]=0
|
||
end
|
||
LogGreen("curEquip "..curEquip.equipId)
|
||
for index, prop in ipairs(equipConfig[curEquip.equipId].Property) do
|
||
local id = prop[1]
|
||
local value = prop[2]
|
||
if addAllProVal[id] then
|
||
addAllProVal[id] = addAllProVal[id] + value
|
||
else
|
||
addAllProVal[id] = value
|
||
end
|
||
end
|
||
--for j = 1, #curEquip.secondAttribute do
|
||
-- if addAllProVal[curEquip.secondAttribute[j].propertyId] then
|
||
-- addAllProVal[curEquip.secondAttribute[j].propertyId]=addAllProVal[curEquip.secondAttribute[j].propertyId]+curEquip.secondAttribute[j].propertyValue
|
||
-- else
|
||
-- addAllProVal[curEquip.secondAttribute[j].propertyId]=curEquip.secondAttribute[j].propertyValue
|
||
-- end
|
||
--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*HeroManager.heroPropertyScore[i]
|
||
else
|
||
powerEndVal=powerEndVal+v/100*HeroManager.heroPropertyScore[i]
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
if curEquip.equipConfig and curEquip.equipConfig.Score > 0 then
|
||
powerEndVal = powerEndVal + curEquip.equipConfig.Score
|
||
end
|
||
return math.floor(powerEndVal)
|
||
end
|
||
--设置装备新红点
|
||
function this.SetEquipNewRewPooint()
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.isNewRewPoint then
|
||
v.isNewRewPoint=false
|
||
RedPointManager.PlayerPrefsSetStrItemId(v.did, 1)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 判断是否是新装备
|
||
function this.IsNewEquipFrame(equipDId)
|
||
if not this.NewEquipList then
|
||
return false
|
||
end
|
||
for _, newEquipId in ipairs(this.NewEquipList) do
|
||
if newEquipId == equipDId then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
-- 设置已经不是新装备了
|
||
function this.SetNotNewEquipAnyMore(equipDId)
|
||
if not this.NewEquipList then return end
|
||
local index = nil
|
||
for i, newEquipId in ipairs(this.NewEquipList) do
|
||
if newEquipId == equipDId then
|
||
index = i
|
||
break
|
||
end
|
||
end
|
||
if not index then return end
|
||
table.remove(this.NewEquipList, index)
|
||
-- 保存数据
|
||
local str = table.concat(this.NewEquipList, "|")
|
||
PlayerPrefs.SetString("EquipNew"..PlayerManager.uid, str)
|
||
end
|
||
--装备合成
|
||
--通过装备位置获得装备list {[绿1]= {},[绿2]= {},}
|
||
function this.GetEquipCompoundDataByEquipPosition1(_position)
|
||
local posCompoundEquipTypeNum = {}
|
||
for _, configInfo in ConfigPairs(ConfigManager.GetConfig(ConfigName.EquipConfig)) do
|
||
if configInfo.Position == _position then
|
||
if posCompoundEquipTypeNum[_position] then
|
||
if configInfo.Star > posCompoundEquipTypeNum[_position] then
|
||
posCompoundEquipTypeNum[_position] = configInfo.Star
|
||
end
|
||
else
|
||
posCompoundEquipTypeNum[_position] = configInfo.Star
|
||
end
|
||
end
|
||
end
|
||
local equips = {}
|
||
for i = 1, posCompoundEquipTypeNum[_position] do
|
||
equips[i] = 0
|
||
end
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.Position == _position and v.upHeroDid =="0" then
|
||
equips[v.equipConfig.Star] = equips[v.equipConfig.Star] + 1
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--
|
||
function this.GetBagCompoundEquipDatasByequipSData(equipSData)
|
||
local equips = {}
|
||
for i, v in pairs(this.equipDatas) do
|
||
if v.equipConfig.Position == equipSData.Position and v.upHeroDid =="0"
|
||
and v.equipConfig.Star == equipSData.Star - 1 then
|
||
table.insert(equips,v)
|
||
end
|
||
end
|
||
return equips
|
||
end
|
||
--获取静态表中可合成装备静态信息
|
||
function this.GetAllSEquipsByPosition(_position)
|
||
local starEquips = ConfigManager.GetAllConfigsDataByKey(ConfigName.EquipConfig, "Position", _position)
|
||
local equips = {}
|
||
for i = 1, #starEquips do
|
||
if starEquips[i].Star and starEquips[i].Star > 0 and starEquips[i].Star ~= 1 then--最低等级的装备 合成不了
|
||
table.insert(equips,starEquips[i])
|
||
end
|
||
end
|
||
table.sort(equips,function(a,b)
|
||
if a.Star == b.Star then
|
||
return a.Id < b.Id
|
||
else
|
||
return a.Star < b.Star
|
||
end
|
||
end)
|
||
return equips
|
||
end
|
||
|
||
function this.SetEquipStarShow(starGrid,equipId)
|
||
if equipConfig[equipId] then
|
||
local curequipStarsConfig = equipStarsConfig[equipConfig[equipId].Star]
|
||
if curequipStarsConfig then
|
||
starGrid:SetActive(true)
|
||
SetHeroStars(starGrid, curequipStarsConfig.Stars)
|
||
end
|
||
end
|
||
end
|
||
|
||
return this |