miduo_client/Assets/ManagedResources/~Lua/Modules/Harmony/Manager/HarmonyManager.lua

638 lines
21 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.

HarmonyManager = {}
local this = HarmonyManager
local HongmengUp = ConfigManager.GetConfig(ConfigName.HongmengUp)-- 鸿蒙塔升级数据表
-- 第一阶段 鸿蒙阵数据
this.hongmengGuards = {}
this.hongmengHeroInfos = {}
this.hongmengTablet = 0
this.hongmengAdditions = {}
this.GuardList = {}
local SelectId = nil
HarmonyManager.GongMingBox = 0;
HarmonyManager.UnLoadGongMing = 0
--判断是否鸿蒙共享数据
local equipConfig = ConfigManager.GetConfig(ConfigName.EquipConfig)
local heroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
this.tab=ConfigManager.GetConfig(ConfigName.Hongmeng)
HarmonyManager.TowerStartLimit = 0
HarmonyManager.equipCount = 0
this.hongmengGongMingList = {}
this.ChooseDataList = {}
-- 第二阶段 鸿蒙塔 数据
--330 鸿蒙使者 数据
local keys = nil
function this.GetHongMengServerData(msg)
local data2 = ConfigManager.GetConfigData(ConfigName.SpecialConfig,101).Value
local d = string.split(data2,"#")
if msg.hongmengTabletMax >= tonumber(d[2]) then
HarmonyManager:SetHongMengTowerUpLimit(msg.hongmengTabletMax)
end
-- LogError("服务器发来的hongmengGuards长度"..tostring(#msg.hongmengGuards))
if msg.hongmengGuards then
-- for i = 1, #msg.hongmengGuards do
-- if msg.hongmengGuards[i].heroId == "" then
-- Log("鸿蒙守卫:"..i.."为nil")
-- else
-- Log("鸿蒙守卫:"..i..HeroManager.GetSingleHeroData(msg.hongmengGuards[i].heroId).name)
-- end
-- end
HarmonyManager.UpdateHongMengDataGuards(msg.hongmengGuards)
end
-- LogError("服务器发来的hongmengAdditions长度"..tostring(#msg.hongmengAdditions))
if msg.hongmengAdditions then
for i = 1, #msg.hongmengAdditions do
-- body
end
HarmonyManager.UpdateHongMengDataAdditions(msg.hongmengAdditions)
end
if msg.hongmengResonacnes then
HarmonyManager.UpdateHongMengDataHeroInfos(msg.hongmengResonacnes)
end
if GuideManager.IsFirstOpenHarmonyBei then
GuideManager.IsFirstOpenHarmonyBei = false
for i = 1, #HarmonyManager.hongmengGuards do
if HarmonyManager.hongmengGuards[i].heroId ~= "" then
local _heroData = HeroManager.GetSingleHeroData(HarmonyManager.hongmengGuards[i].heroId)
HeroManager.UpdateSingleHeroDatas(_heroData.dynamicId, 1, _heroData.star, 0, _heroData.upStarId)
end
end
end
--鸿蒙数据有变化时更新英雄战力数据
for i = 1, #msg.hongmengGuards do
if msg.hongmengGuards[i].heroId~="" then
HeroManager.UpdateSingleHeroWarPower(msg.hongmengGuards[i].heroId)
end
end
for i = 1, #msg.hongmengResonacnes do
if msg.hongmengResonacnes[i].heroId~="" then
HeroManager.UpdateSingleHeroWarPower(msg.hongmengResonacnes[i].heroId)
end
end
end
function this.UpdateHongMengDataGuards(hongmengGuards)
this.TowerStartLimit = tonumber(string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig,101).Value,"#")[2])
this.hongmengGuards = hongmengGuards
--LogGreen("hongmengGuards "..#this.hongmengGuards)
for i = 1, #this.hongmengGuards do
if this.hongmengGuards[i].time ~= 0 then
this.hongmengGuards[i].time = this.hongmengGuards[i].time + GetTimeStamp()
end
end
if this.hongmengAdditions[1] then
if this.hongmengAdditions[1].heroTid == 0 then
this:SetTowerInit()
elseif this.hongmengAdditions[1].heroTid == -1 then
else
this:SetInitList()
end
end
end
function this.UpdateHongMengDataHeroInfos(hongmengHeroInfos)
this.hongmengHeroInfos = hongmengHeroInfos
-- LogGreen("hongmengHeroInfos "..#this.hongmengHeroInfos)
for i = 1, #this.hongmengHeroInfos do
if this.hongmengHeroInfos[i].time ~= 0 then
this.hongmengHeroInfos[i].time = this.hongmengHeroInfos[i].time + GetTimeStamp()
end
--鸿蒙阵共鸣后直接大于20级 后没有赋值大闹天宫英雄血量 大闹天宫一键上阵报错
-- LogYellow("this.hongmengHeroInfos[i].heroId "..this.hongmengHeroInfos[i].heroId)
if not ExpeditionManager.heroInfo[this.hongmengHeroInfos[i].heroId] then
-- LogRed("this.hongmengHeroInfos[i].heroId "..this.hongmengHeroInfos[i].heroId)
ExpeditionManager.InitHeroHpValue(this.hongmengHeroInfos[i].heroId)
end
end
if this.hongmengAdditions[1] then
if this.hongmengAdditions[1].heroTid == 0 then
this:SetTowerInit()
elseif this.hongmengAdditions[1].heroTid == -1 then
else
this:SetInitList()
end
end
end
function this.UpdateHongMengDataAdditions(hongmengAdditions)
this.hongmengAdditions = hongmengAdditions
-- for i = 1, #this.hongmengAdditions do
-- LogGreen("this.hongmengAdditions[i].heroTid:"..this.hongmengAdditions[i].heroTid)
-- LogGreen("this.hongmengAdditions[i].value:"..this.hongmengAdditions[i].value)
-- LogGreen("this.hongmengAdditions[i].additionType:"..this.hongmengAdditions[i].additionType)
-- end
--LogGreen("hongmengAdditions "..#this.hongmengAdditions)
for i = 1, #this.hongmengAdditions do
if this.hongmengAdditions[i].additionType == HarmonyAddType.AddEquip then
if this.hongmengAdditions[i].value > 0 then
local curEquipIdList = {}
local curEquipConfigs = ConfigManager.GetAllConfigsDataByKey(ConfigName.EquipConfig,"Star",this.hongmengAdditions[i].value)
for i = 1, #curEquipConfigs do
table.insert(curEquipIdList,curEquipConfigs[i].Id)
end
this.HarmonyUpdateEquipData(curEquipIdList, "")
end
end
end
if this.hongmengAdditions[1] then
if this.hongmengAdditions[1].heroTid == 0 then
this:SetTowerInit()
elseif this.hongmengAdditions[1].heroTid == -1 then
else
this:SetInitList()
end
end
end
--初始化共鸣列表数据
function this:InitGongMingDataList()
for i = 1, #this.hongmengHeroInfos do
local data = HeroManager.GetSingleHeroData(this.hongmengHeroInfos[i].heroId)
if data then
this.hongmengGongMingList[i] = data
else
this.hongmengGongMingList[i] = nil
end
end
end
--鸿蒙塔上限
local len = 0
function this:SetHongMengTowerUpLimit(limit)
len = limit
end
function this:HongMengTowerUpLimit()
return len
end
function this.IsInfo(did)
if did ~= "" then
for i = 1, #this.hongmengHeroInfos do
if did == this.hongmengHeroInfos[i].heroId and this.hongmengHeroInfos[i].heroId ~= "" then
return true
end
end
end
return false
end
--共鸣神将
function this.IsChangeColor(did)
for i = 1, #this.hongmengHeroInfos do
if did == this.hongmengHeroInfos[i].heroId then
return true
end
end
return false
end
function this.IsGongMing(did)
for i = 1, #this.hongmengHeroInfos do
if did == this.hongmengHeroInfos[i].heroId then
PopupTipPanel.ShowTip(Language[12192])
return
end
end
end
--初始化选人列表的长度
function this:SetInitList()
local heroDataList = HeroManager.GetAllHeroDatas(1)
local list = {}
local count = 0;
--LogBlue("this.GuardList长度"..LengthOfTable(this.GuardList))
for key, value in pairs(this.hongmengGuards) do
if value.heroId ~= "" then
local singleHero = HeroManager.GetSingleHeroData(value.heroId)
table.insert(list,singleHero)
end
end
for i = 1, #this.hongmengHeroInfos do
if this.hongmengHeroInfos[i].heroId ~= "" then
-- LogYellow("是否有数据:"..i)
local data = HeroManager.GetSingleHeroData(this.hongmengHeroInfos[i].heroId)
table.insert(list,data)
end
end
table.sort(list,function(a,b)
return a.dynamicId < b.dynamicId
end)
--LogBlue("#list长度:"..#list)
local newList = {}
local index = 0
local flag = true
local tempTable = {}
for i = 1, #heroDataList do
table.insert(tempTable,heroDataList[i])
end
for i = #heroDataList, 1,-1 do
for k2, v2 in pairs(list) do
if v2.dynamicId == heroDataList[i].dynamicId then
--LogPink("第几个:"..i.." k2"..k2)
table.remove(tempTable,i)
end
end
end
this.ChooseDataList = tempTable
-- LogBlue("#this.ChooseDataList长度:"..#this.ChooseDataList)
end
--初始化 鸿蒙塔的数据
function this:SetTowerInit()
local heroDataList = HeroManager.GetAllHeroDatas(1)
local list = {}
local count = 0;
for key, value in pairs(this.hongmengGuards) do
if value.heroId ~= "" then
local singleHero = HeroManager.GetSingleHeroData(value.heroId)
table.insert(list,singleHero)
end
end
--LogBlue("#this.hongmengHeroInfos"..#this.hongmengHeroInfos)
for i = 1, #this.hongmengHeroInfos do
if this.hongmengHeroInfos[i].heroId ~= "" then
--LogYellow("是否有数据:"..i)
local data = HeroManager.GetSingleHeroData(this.hongmengHeroInfos[i].heroId)
table.insert(list,data)
end
end
table.sort(list,function(a,b)
return a.dynamicId < b.dynamicId
end)
--LogBlue("#list长度:"..#list)
local newList = {}
local index = 0
local flag = true
local tempTable = {}
for i = 1, #heroDataList do
table.insert(tempTable,heroDataList[i])
end
for i = #heroDataList, 1,-1 do
for k2, v2 in pairs(list) do
if v2.dynamicId == heroDataList[i].dynamicId then
-- LogPink("第几个:"..i.." k2"..k2)
table.remove(tempTable,i)
end
end
end
this.ChooseDataList = tempTable
--LogBlue("#this.ChooseDataList长度:"..#this.ChooseDataList)
end
--判断鸿蒙 使者/守卫 是否够6位
function this:IsEnvoyCount()
-- body
local count = 1
for i = 1, #this.hongmengGuards do
if this.hongmengGuards[i].heroId ~= "" then
count =count + 1
end
end
return count
end
--初始化鸿蒙使者的数据
--是否是鸿蒙使者
function this:IsEnvoy(did)
if this:HongMengTowerUpLimit() == 0 then
return false
end
-- LogError("hongmengGuards长度"..tostring(#this.hongmengGuards))
for i = 1, #this.hongmengGuards do
if this.hongmengGuards[i].heroId == did then
return true
end
end
return false
end
-- 设置、获取鸿蒙守卫的列表
function this:SetGuardList(list,count)
for key, value in pairs(list) do
if key<=count then
this.GuardList[value.dynamicId] = value
end
end
end
function this:GetGuardList()
return this.GuardList
end
function this:SetGongMingList(Id)
local data = HeroManager.GetSingleHeroData(Id)
table.insert(this.hongmengGongMingList,data)
-- LogYellow("Id "..Id)
if not ExpeditionManager.heroInfo[Id] then
-- LogRed("Id "..Id)
ExpeditionManager.InitHeroHpValue(Id)
end
end
function this:RemoveGongMingList(Id)
local data = HeroManager.GetSingleHeroData(Id)
for key, value in pairs(this.hongmengGongMingList) do
if value then
if value==data then
value = nil
break
end
end
end
end
function this:GetGongMingListSingle(Id)
local data = HeroManager.GetSingleHeroData(Id)
for key, value in pairs(this.hongmengGongMingList) do
if value.dynamicId==data.dynamicId then
return value
end
end
end
function this:SetChooseId(id)
SelectId = id
end
-- 设置、获取卸载的数据
function this:SetMingListIndexData(index)
SelectId = this.hongmengHeroInfos[index].heroId
end
function this:GetUnLoadData()
return SelectId
end
--获取加成
function this:GetAdditions()
return this.hongmengAdditions
end
function this.GetSingleAdditions(type)
if this.hongmengAdditions then
for i = 1, #this.hongmengAdditions do
if this.hongmengAdditions[i].additionType == type then
--LogGreen("this.hongmengAdditions[i].additionType:"..this.hongmengAdditions[i].additionType.." this.hongmengAdditions[i].value :"..this.hongmengAdditions[i].value )
return this.hongmengAdditions[i].value or 0
end
end
end
return 0
end
function this.GetSingleAdditionsData(type)
if this.hongmengAdditions then
-- LogError("Additions长度"..tostring(#this.hongmengAdditions))
for i = 1, #this.hongmengAdditions do
if this.hongmengAdditions[i].additionType == type then
return this.hongmengAdditions[i]
end
end
end
return nil
end
function this.GetHongMengUpData()
for i = 1, #this.hongmengAdditions do
if this.hongmengAdditions[i].additionType == 1 then
if this.hongmengAdditions[i].value < 330 then
LogBlue("服务器数据为"..this.hongmengAdditions[i].value)
return nil
end
--LogGreen("服务器数据为"..this.hongmengAdditions[i].value)
for key, value in ConfigPairs(HongmengUp) do
if value.HongmengLevel == this.hongmengAdditions[i].value + 1 then
return ConfigManager.TryGetConfigData(ConfigName.HongmengUp,key)
end
end
end
end
return nil
end
--鸿蒙共享装备临时数据
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local equipStarsConfig = ConfigManager.GetConfig(ConfigName.EquipStarsConfig)
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
function this.InitUpdateEquipData(id, upHeroDid)
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
end
end
function this.HarmonyUpdateEquipData(idlist, heroDid)
for i = 1, #idlist do
this.InitUpdateEquipData(idlist[i], heroDid, false)
end
end
--判断神将的装备是否共鸣
function this:IsShowGongMingEqiup(id)
for i = 1, #this.hongmengHeroInfos do
if id == this.hongmengHeroInfos[i].heroId then
return true
end
end
return false
end
function this.GetMainProList(equipConfig)
local propList = {}
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]]
end
return propList
end
function this.RefreshOpenBoxPoint()
local tab = ConfigManager.GetConfig(ConfigName.Hongmeng)
local keys = GameDataBase.SheetBase.GetKeys(this.tab)
local Gold = BagManager.GetTotalItemNum(UpViewRechargeType.XuanHuangZhiQi)
-- local DemonCrystal = BagManager.GetTotalItemNum(UpViewRechargeType.DemonCrystal) or DemonCrystal > tab[#this.hongmengHeroInfos].MoneyPrice[2]
if #this.hongmengHeroInfos<=0 then
return false
end
if tab[#this.hongmengHeroInfos + 1] and Gold > tab[#this.hongmengHeroInfos + 1].PropPrice[2] and #this.hongmengHeroInfos < #keys then
return true
else
return false
end
end
function this.RefreshEnvoyPoint()
-- body
local data = this.GetSingleAdditionsData(HarmonyAddType.AddLv)
if data then
if data.heroTid == 0 then
local sum = this:HongMengTowerUpLimit()
if data.value <= sum then
for i = 1, #this.hongmengGuards do
if data.heroId == "" and data.time == 0 then
return true
end
end
end
end
end
return false
end
function this.RefreshUpTowerPoint()
if len == 0 then
return false
end
local data = this.GetSingleAdditionsData(HarmonyAddType.AddLv)
if data then
if data.heroTid == 0 then
local sum = this:HongMengTowerUpLimit()
if data.value >= sum then
return false
else
local prop = this.GetHongMengUpData()
-- --LogGreen(data.LevelUp[1][2].." "..data.LevelUp[2][2])
-- LogYellow(BagManager.GetTotalItemNum(UpViewRechargeType.Gold))
if prop and BagManager.GetTotalItemNum(UpViewRechargeType.Gold) >= prop.LevelUp[1][2] then
if BagManager.GetTotalItemNum(UpViewRechargeType.GrowthAmulet) >= prop.LevelUp[2][2] then
return true
end
end
return false
end
else
return false
end
end
return false
end
--检测主城红点
function this.CheckRedPoinStatusUpTowerMainCityRed()
CheckRedPointStatus(RedPointType.HongMeng_UpTower)
CheckRedPointStatus(RedPointType.HongMeng_Evory)
CheckRedPointStatus(RedPointType.HongMeng_OpenBox)
end
--票战力
local oldPowerNum = 0
function this.SetOldPowerNum(did)
local isCalculate = true
if did then
local heros = FormationManager.GetAllMainFormationHeroId()
if not heros[did] then
isCalculate = false
end
end
if isCalculate then
oldPowerNum = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
end
end
function this.WarPowerChangeNotify(did)
local isCalculate = true
if did then
local heros = FormationManager.GetAllMainFormationHeroId()
if not heros[did] then
isCalculate = false
end
end
if oldPowerNum ~= 0 and isCalculate then
local newPowerNum = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
if oldPowerNum ~= newPowerNum then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldPowerNum,newValue = newPowerNum})
if did then
FormationManager.CheckHeroIdExist(did)--如果是主线阵容发生变化 会通知后端 更新任务刷新
end
end
end
end
function this.IsGongMing(_curHeroData)
return this.IsChangeColor(_curHeroData.dynamicId) or (this:IsEnvoy(_curHeroData.dynamicId) and this:HongMengTowerUpLimit() ~= 0)
end
function this.updateHomeLandEquipLv()
if this.equipDatas then
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
end
return HarmonyManager