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

475 lines
16 KiB
Lua
Raw Normal View History

2020-05-09 13:31:21 +08:00
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
2020-06-23 18:36:24 +08:00
Log(Language[10483]..equipdata.id)
2020-05-09 13:31:21 +08:00
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"
2020-06-13 11:47:13 +08:00
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
2020-05-09 13:31:21 +08:00
--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
2020-07-02 17:01:40 +08:00
-- table.sort(equips, function(a,b) return a.id < b.id end)
2020-05-09 13:31:21 +08:00
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
2020-06-30 18:59:44 +08:00
2020-05-09 13:31:21 +08:00
--获取单个装备数据
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
2020-07-02 17:01:40 +08:00
-- table.sort(equips, function(a,b) return a.id < b.id end)
2020-05-09 13:31:21 +08:00
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
2020-07-02 17:01:40 +08:00
-- table.sort(equips, function(a,b) return a.id < b.id end)
2020-05-09 13:31:21 +08:00
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
2020-07-02 17:01:40 +08:00
-- table.sort(equips, function(a,b) return a.id < b.id end)
2020-05-09 13:31:21 +08:00
return equips
end
--通过装备品职业和位置获得装备list 自己穿的装备也要显示
function this.GetEquipDataByEquipJobAndPos(_pos,_job,_heroDid)
local equips = {}
2020-07-02 17:01:40 +08:00
local repeatEquips = {}
2020-05-09 13:31:21 +08:00
for i, v in pairs(this.equipDatas) do
2020-07-02 17:01:40 +08:00
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
2020-05-09 13:31:21 +08:00
end
end
end
end
2020-07-02 17:01:40 +08:00
--
for _, v in pairs(repeatEquips) do
table.insert(equips,v)
end
2020-05-09 13:31:21 +08:00
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
2020-06-23 18:36:24 +08:00
Log(Language[10484].._equipDid)
2020-05-09 13:31:21 +08:00
this.equipDatas[_equipDid]=nil
RedPointManager.PlayerPrefsDeleteStrItemId(_equipDid)
else
2020-06-23 18:36:24 +08:00
Log(Language[10485].._equipDid)
2020-05-09 13:31:21 +08:00
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)
2020-06-28 17:52:29 +08:00
elseif _sortTypeId>=5 then
if v.equipConfig.Quality==_sortTypeId-3 then
2020-05-09 13:31:21 +08:00
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)
2020-06-23 18:36:24 +08:00
Log(Language[10486].._mapEquip.id )
2020-05-09 13:31:21 +08:00
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
2020-06-28 17:48:49 +08:00
local num = this.CalculateEquipWarForce2(curEquip)
2020-05-09 13:31:21 +08:00
return num
end
end
end
end
--根据装备数据计算战斗力
function this.CalculateEquipWarForce(curEquip)
2020-07-02 17:01:40 +08:00
if curEquip.warForce then
return curEquip.warForce
end
2020-05-09 13:31:21 +08:00
local addAllProVal={}
for i, v in ConfigPairs(propertyConfig) do
addAllProVal[i]=0
end
2020-06-13 11:47:13 +08:00
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
2020-05-09 13:31:21 +08:00
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
2020-06-28 17:48:49 +08:00
--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
2020-07-02 17:01:40 +08:00
curEquip.warForce = math.floor(powerEndVal)
return curEquip.warForce--math.floor(powerEndVal)
2020-06-28 17:48:49 +08:00
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
2020-05-09 13:31:21 +08:00
--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
2020-06-23 18:36:24 +08:00
return this