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

475 lines
16 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = {}
local repeatEquips = {}
for i, v in pairs(this.equipDatas) do
if not repeatEquips[v.id] then
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
repeatEquips[v.id] = v
end
end
end
end
end
--
for _, v in pairs(repeatEquips) do
table.insert(equips,v)
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)
if curEquip.warForce then
return curEquip.warForce
end
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
curEquip.warForce = math.floor(powerEndVal)
return curEquip.warForce--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