miduo_client/Assets/ManagedResources/~Lua/Modules/Equip/EquipManager.lua

582 lines
19 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)
local rewardGroupConfig=ConfigManager.GetConfig(ConfigName.RewardGroup)
function this.Initialize()
this.equipDatas = {}
this.HaveEquipDatas = {}
end
function this.InitHaveEquipDatas(equipList)
for k,v in ipairs(equipList) do
this.HaveEquipDatas[v.equipId] = v.num
end
TianShuMiJuanManger.CheckFetterStatus(4)
end
function this.GetHaveEquipDatas()
return this.HaveEquipDatas
end
--upHeroDid
function this.InitUpdateEquipData(id, upHeroDid, isFindHandBook)
if not this.equipDatas then
this.equipDatas = {}
end
id = tonumber(id)
if this.equipDatas[id] then
if not this.equipDatas[id].upHeroDidList then
this.equipDatas[id].upHeroDidList = {}
end
if upHeroDid and upHeroDid ~= "0" then
this.equipDatas[id].upHeroDidList[upHeroDid] = upHeroDid
end
else
local equipdata = {}
equipdata.equipConfig = equipConfig[id]
equipdata.itemConfig = itemConfig[id]
equipdata.id = id
if itemConfig[equipdata.id] then
equipdata.icon = GetResourcePath(itemConfig[equipdata.id].ResourceID)
else
Log("装备表找不到此id " .. equipdata.id)
return
end
equipdata.frame = GetQuantityImageByquality(equipdata.equipConfig.Quality)
equipdata.quality = equipdata.equipConfig.Quality
equipdata.position = equipdata.equipConfig.Position
equipdata.mainAttribute = this.GetMainProList(equipdata.equipConfig)
equipdata.backData = equipdata
equipdata.star = equipStarsConfig[equipdata.equipConfig.Star].Stars
-- --摘星阁加持
equipdata.HomeEquipLv = function()
local data = HomeLandManager.EquipData[equipdata.position]
if data and data.configData and data.configPro then
return {data.configData.Level,data.configPro.Level}
end
return {0,0}
end
equipdata.homeEquipLv = equipdata.HomeEquipLv()
this.equipDatas[id] = equipdata
if not this.equipDatas[id].upHeroDidList then
this.equipDatas[id].upHeroDidList = {}
end
if upHeroDid and upHeroDid ~= "0" and not this.equipDatas[id].upHeroDidList[upHeroDid] then
this.equipDatas[id].upHeroDidList[upHeroDid] = upHeroDid
end
isFindHandBook = isFindHandBook or true
if isFindHandBook then
PlayerManager.SetEquipHandBookListData(equipdata.id)
end
end
end
-- 获取拥有某星级以上的装备数量
function this.GetLimitStarEquipNum(star)
local allNum = 0
-- 背包里面的
local equips = BagManager.GetBagItemDataByItemType(ItemBaseType.Equip)
for _, e in ipairs(equips) do
if e.id and e.num > 0 then
if equipConfig[e.id].Star >= star then
allNum = allNum + e.num
end
end
end
-- 身上穿的
local allHeroDatas = HeroManager.GetAllHeroList()
for _, hero in pairs(allHeroDatas) do
if hero.equipIdList and #hero.equipIdList > 0 then
for i = 1, #hero.equipIdList do
local id = tonumber(hero.equipIdList[i])
if equipConfig[id].Star >= star then
allNum = allNum + 1
end
end
end
end
return allNum
end
function this.UpdateEquipData(idlist, heroDid)
for i = 1, #idlist do
this.InitUpdateEquipData(idlist[i], heroDid, false)
end
end
-- --更新装备数据 新加
-- function this.UpdateEquipData(_equipData, isFindHandBook)
-- -- --新获得装备存红点
-- -- if equipConfig[_equipData.id] then
-- -- this.InitUpdateEquipData(_equipData.id,isFindHandBook)
-- -- if equipConfig[_equipData.id].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.GetSingleEquipData(_equipid)
_equipid = tonumber(_equipid)
if not this.equipDatas[_equipid] then
this.InitUpdateEquipData(_equipid, nil, false)
end
return this.equipDatas[_equipid]
end
--通过装备职业和位置获得装备list.包括英雄自己身上装备的
function this.GetEquipDataByEquipJobAndPos(_pos, _job, _heroDid)
--没装备的
local equips = BagManager.GetEquipDataByEquipPosition(_job, _pos)
local equipDatas = {}
local index = 1
-- --自己装备
-- local idlist= HeroManager.GetHeroEquipIdList(_heroDid)
-- if not idlist then
-- return equips
-- end
-- for __,equip in ipairs(equips) do
-- local add = true
-- --如果没装备的包含自己装备的
-- for i, v in ipairs(idlist) do
-- if tonumber(equip.id) == tonumber(v) then
-- add = false
-- break
-- end
-- end
-- --如果没装备的不包含自己装备的
-- if add then
-- for i, v in ipairs(idlist) do
-- local equip = this.GetSingleHeroSingleEquipData(tonumber(v),_heroDid)
-- if equip and (equip.equipConfig.Position == _pos or not _pos or _pos == 0) and (equip.equipConfig.ProfessionLimit == _job or not _job) then
-- equips[#equips+1] = equip
-- end
-- end
-- end
-- end
return equips
end
--设置装备穿戴的英雄
function this.SetEquipUpHeroDid(_equipid, _heroDid)
_equipid = tonumber(_equipid)
if not this.equipDatas[_equipid] then
this.InitUpdateEquipData(_equipid, _heroDid, false)
else
if not this.equipDatas[_equipid].upHeroDidList then
this.equipDatas[_equipid].upHeroDidList = {}
end
this.equipDatas[_equipid].upHeroDidList[_heroDid] = _heroDid
end
end
--删除装备穿戴的英雄
function this.DeleteSingleEquip(_equipid, _heroDid)
_equipid = tonumber(_equipid)
if
this.equipDatas[_equipid] and this.equipDatas[_equipid].upHeroDidList and
this.equipDatas[_equipid].upHeroDidList[_heroDid]
then
this.equipDatas[_equipid].upHeroDidList[_heroDid] = nil
end
end
--获取单个英雄装备数据
function this.GetSingleHeroSingleEquipData(_equipid, _heroDid)
_equipid = tonumber(_equipid)
if this.equipDatas[_equipid] and this.equipDatas[_equipid].upHeroDidList and this.equipDatas[_equipid].upHeroDidList[_heroDid] then
local heroData= HeroManager.GetSingleHeroData(_heroDid)
local equipData=this.equipDatas[_equipid]
if heroData.equipStrong then
for i = 1, #heroData.equipStrong do
if equipData.position==i then
equipData.homeEquipLv[1]=heroData.equipStrong[i]
end
end
equipData.homeEquipLv[2]=heroData.equipAdvanceLv
end
return equipData
elseif HarmonyManager.GetSingleAdditions(HarmonyAddType.AddEquip) > 0 and HarmonyManager.IsInfo(_heroDid) then
return HarmonyManager.equipDatas[_equipid]--.upHeroDidList[_heroDid]
else
return nil
end
end
function this.GetHeroEquipsBydIds(_heroDid, _equipIds)
local list = {}
for _, equipId in ipairs(_equipIds) do
local equip = this.GetSingleHeroSingleEquipData(equipId, _heroDid)
if equip then
table.insert(list, equip)
end
end
return list
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
--地图临时背包数据
this.mapShotTimeItemData = {}
--地图临时装备数据存储
function this.InitMapShotTimeEquipBagData(_mapEquip)
Log("存储地图临时装备信息 " .. _mapEquip.id)
this.mapShotTimeItemData[#this.mapShotTimeItemData + 1] = _mapEquip
end
--计算战斗力
function this.CalculateWarForce(equipid, data)
equipid = tonumber(equipid)
local curEquip = equipConfig[equipid]
if curEquip then --正常背包
local num = this.CalculateEquipWarForce(curEquip)
return num
else
curEquip = data
if curEquip then
local num = this.CalculateEquipWarForce(curEquip)
return num
end
end
end
--根据装备数据计算战斗力
function this.CalculateEquipWarForce(curEquip)
local addAllProVal = {}
for i, v in ConfigPairs(propertyConfig) do
addAllProVal[i] = 0
end
local mainAttribute = this.GetMainProList(curEquip)
for index, prop in pairs(mainAttribute) do
local id = prop.propertyId
local value = prop.propertyValue
--
if id~=0 and id~=nil then
LogError("id==========="..id)
if propertyConfig[id].Style == 2 then
value = value / 100
end
if addAllProVal[id] then
addAllProVal[id] = addAllProVal[id] + value
else
addAllProVal[id] = value
end
end
end
if curEquip and curEquip.Score > 0 then
addAllProVal[HeroProType.WarPower] = curEquip.Score
end
local powerEndVal = HeroPowerManager.CalPower(addAllProVal)
return powerEndVal
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 starEquips = ConfigManager.GetAllConfigsDataByKey(ConfigName.EquipConfig, "Position", _position)
--LogBlue(#starEquips)
table.sort(
starEquips,
function(a, b)
return a.Star > b.Star
end
)
local num = starEquips[1].Star
--LogBlue(num)
local equips = {}
for i = 1, num do
equips[i] = 0
end
local equipDatas = BagManager.GetEquipDataByEquipPosition(nil, _position)
--LogBlue(#equipDatas)
for i, v in ipairs(equipDatas) do
local equip = this.GetSingleEquipData(v.id)
--LogBlue(equip.id.." "..equip.equipConfig.Star.." "..v.num)
if equips[equip.equipConfig.Star] then
equips[equip.equipConfig.Star] = equips[equip.equipConfig.Star] + v.num
else
equips[equip.equipConfig.Star] = v.num
end
end
return equips
end
--得到背包里能合成equipSData的装备
function this.GetBagCompoundEquipDatasByequipSData(equipSData)
--LogBlue(equipSData.Id.." "..equipSData.Position.." "..equipSData.Star)
local equips = {}
local equipDatas = BagManager.GetBagItemDataByItemType(ItemBaseType.Equip)
--LogBlue(#equipDatas)
for i, v in ipairs(equipDatas) do
local equipdata = this.GetSingleEquipData(v.id)
if equipdata.equipConfig.Position == equipSData.Position and equipdata.equipConfig.Star == equipSData.Star - 1 then
table.insert(equips, v)
end
end
-- for i, v in ipairs(equips) do
-- LogBlue(v.id)
-- 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 < 18 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
)
-- LogBlue(#equips)
-- for i = 1, #equips do
-- LogBlue(equips[i].Id.." "..equips[i].Star)
-- end
return equips
end
function this.GetAllGodEquips()
local starEquips={}
local list = ConfigManager.GetAllConfigsDataByKey(ConfigName.EquipConfig, "Quality", 7)
for i=1,#list do
if list[i].Position<5 then
table.insert(starEquips,list[i])
end
end
local starEquips2 ={}
local list2=ConfigManager.GetAllConfigsDataByKey(ConfigName.EquipConfig, "Quality", 8)
for i=1,#list2 do
if list2[i].Position<5 then
table.insert(starEquips,list2[i])
end
end
local equips = {}
for i = 1, #starEquips do
if starEquips[i].Star and starEquips[i].Star > 0 and starEquips[i].Star ~= 18 then --最低等级的装备 合成不了
table.insert(equips, starEquips[i])
end
end
for i = 1, #starEquips2 do
if starEquips2[i].Star and starEquips2[i].Star > 0 and starEquips2[i].Star ~= 18 then --最低等级的装备 合成不了
table.insert(equips, starEquips2[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
)
-- LogBlue(#equips)
-- for i = 1, #equips do
-- LogBlue(equips[i].Id.." "..equips[i].Star)
-- end
return equips
end
function this.SetEquipStarShow(spLoader, starGrid, equipId)
if equipConfig[equipId] then
local curequipStarsConfig = equipStarsConfig[equipConfig[equipId].Star]
if curequipStarsConfig then
starGrid:SetActive(true)
SetHeroStars(spLoader, starGrid, curequipStarsConfig.Stars,1,Vector2.New(32.5,32.5),-15)
end
end
end
function this.GetMainProList(equipConfig)
local propList = {}
if equipConfig.Property and #equipConfig.Property>0 then
for index, prop in ipairs(equipConfig.Property) do
-- propList[index] = {}
-- propList[index].propertyId = prop[1]
-- propList[index].propertyValue = prop[2]
-- propList[index].PropertyConfig = propertyConfig[prop[1]]
if tonumber(prop[1])~=0 and tonumber(prop[1])~=nil then
local data={}
data.propertyId=prop[1]
data.propertyValue = prop[2]
data.PropertyConfig = propertyConfig[prop[1]]
table.insert(propList,data)
end
end
end
local len=#equipConfig.Property
if equipConfig.PlayerProperty then
for index, prop in ipairs(equipConfig.PlayerProperty) do
if tonumber(prop[1])~=0 and tonumber(prop[1])~=nil then
local data={}
data.propertyId=prop[1]
data.propertyValue = prop[2]
data.PropertyConfig = propertyConfig[prop[1]]
table.insert(propList,data)
end
end
end
return propList
end
function this.GetEquipRewardList(equiplist)
local rewardlist = {}
for k,v in ipairs(equiplist) do
if v.itemConfig.ResolveReward and v.itemConfig.ResolveReward ~="" then
local rewardGroup =rewardGroupConfig[tonumber(v.itemConfig.ResolveReward)]
if rewardGroup and rewardGroup.ShowItem and #rewardGroup.ShowItem > 0 then
for i = 1,#rewardGroup.ShowItem do
local rewardId = rewardGroup.ShowItem[i][1]
local rewardNum = rewardGroup.ShowItem[i][2]
if rewardlist[rewardId] then
rewardlist[rewardId] = rewardlist[rewardId] + v.num * rewardNum
else
rewardlist[rewardId] = v.num * rewardNum
end
end
end
end
end
return rewardlist
end
function this.GetMinEquipStar(equiplist)
-- body ,equipConfig[equiplist[i]],equipConfig[equiplist[i]].Star
if #equiplist == 0 then
-- body
return 0
end
local _list = {}
--print(#equiplist," 1111 @@@@@@@@@")
for i = 1, #equiplist do
-- body
table.insert(_list,equipConfig[tonumber(equiplist[i])])
--print("执行程序s",equiplist[i],equipConfig[ tonumber(equiplist[i])].Name,equipConfig)
end
-- print(#_list," 1.5 @@@@@@@@@")
-- print(LengthOfTable(_list)," 2222 @@@@@@@@@")
local _minStar = 999
for i = 1, #_list do
-- body
if _minStar > _list[i].Star then
-- body
_minStar = _list[i].Star
end
--print(_list[i].Star," !!!!!!!!!!")
end
return _minStar
end
function this.updateHomeLandEquipLv()
for key, value in pairs(this.equipDatas) do
value.HomeEquipLv = function()
local data = HomeLandManager.EquipData[value.position]
if data and data.configData and data.configPro then
return {data.configData.Level,data.configPro.Level}
end
return {0,0}
end
value.homeEquipLv = value.HomeEquipLv()
end
end
return this