sk-client/Assets/ManagedResources/~Lua/Modules/Formation/FormationManager.lua

860 lines
30 KiB
Lua

FormationManager = {}
local this = FormationManager
local ChallengeData = ConfigManager.GetConfig(ConfigName.ChallengeConfig)
local specialConfig = ConfigManager.GetConfig(ConfigName.SpecialConfig)
local formationConfig = ConfigManager.GetConfig(ConfigName.FormationConfig)
local FormationBuffConfig = ConfigManager.GetConfig(ConfigName.FormationBuffConfig)
this.AllFormationFunIds = {
[1] = JumpType.Level,
[601] = JumpType.BeastIncomingTide,
[101] = JumpType.Arena,
[201] = JumpType.Arena,
[401] = JumpType.EndlessFight,
[501] = JumpType.Guild,
[502] = JumpType.Guild
}
function this.Initialize()
this.currentFormationIndex = 0
end
this.MirrorFormationList = {}
function this.MakeAEmptyTeam(teamId)
local oTeam = {}
oTeam.teamId = teamId
if teamId < FormationTypeDef.FORMATION_ARENA_DEFEND then
oTeam.teamName = GetLanguageStrById(10674)
elseif teamId == FormationTypeDef.FORMATION_ARENA_DEFEND then
oTeam.teamName = GetLanguageStrById(10676)
elseif teamId == FormationTypeDef.FORMATION_ARENA_ATTACK then
oTeam.teamName = GetLanguageStrById(10677)
elseif teamId == FormationTypeDef.FORMATION_DREAMLAND then
oTeam.teamName = GetLanguageStrById(10678)
elseif teamId == FormationTypeDef.FORMATION_ENDLESS_MAP then
oTeam.teamName = GetLanguageStrById(10679)
elseif teamId == FormationTypeDef.FORMATION_GUILD_FIGHT_DEFEND then
oTeam.teamName = GetLanguageStrById(10680)
elseif teamId == FormationTypeDef.FORMATION_GUILD_FIGHT_ATTACK then
oTeam.teamName = GetLanguageStrById(10681)
elseif teamId == FormationTypeDef.MONSTER_CAMP_ATTACK then
oTeam.teamName = GetLanguageStrById(10675)
elseif teamId == FormationTypeDef.BLOODY_BATTLE_ATTACK then
oTeam.teamName = GetLanguageStrById(10682)
-- elseif teamId == FormationTypeDef.GUILD_BOSS then
-- oTeam.teamName = " 公会Boss"-- 901
elseif teamId == FormationTypeDef.EXPEDITION then
oTeam.teamName = GetLanguageStrById(10683)
elseif teamId == FormationTypeDef.GUILD_CAR_DELEAY then
oTeam.teamName = GetLanguageStrById(50283)
elseif teamId == FormationTypeDef.GUILD_CAR_DELEAY then
oTeam.teamName = GetLanguageStrById(50283)
elseif teamId == FormationTypeDef.ARENA_TOM_MATCH then
oTeam.teamName = GetLanguageStrById(12280)
elseif teamId == FormationTypeDef.CLIMB_TOWER then
oTeam.teamName = GetLanguageStrById(12535)
elseif teamId == FormationTypeDef.Arden_MIRROR then
oTeam.teamName = GetLanguageStrById(22412)
elseif teamId == FormationTypeDef.GUILD_TRANSCRIPT then
oTeam.teamName = GetLanguageStrById(12387)
elseif teamId == FormationTypeDef.DEFENSE_TRAINING then
oTeam.teamName = GetLanguageStrById(22413)
elseif teamId == FormationTypeDef.BLITZ_STRIKE then
oTeam.teamName = GetLanguageStrById(22414)
elseif teamId == FormationTypeDef.CONTEND_HEGEMONY then
oTeam.teamName = GetLanguageStrById(22415)
elseif teamId == FormationTypeDef.FORMATION_AoLiaoer then
oTeam.teamName = GetLanguageStrById(50284)
elseif teamId == FormationTypeDef.FORMATION_AoLiaoer then
oTeam.teamName = GetLanguageStrById(50284)
elseif teamId == FormationTypeDef.FORMATION_AoLiaoer then
oTeam.teamName = GetLanguageStrById(50284)
elseif teamId == FormationTypeDef.ALAMEIN_WAR then
oTeam.teamName = GetLanguageStrById(50285)
elseif teamId == FormationTypeDef.LADDERS_DEFEND then
oTeam.teamName = GetLanguageStrById(50228)
elseif teamId == FormationTypeDef.CHAOS_BATTLE then
oTeam.teamName = GetLanguageStrById(50367)
else
LogRed(string.format("打印:没有%s对应的teamId", teamId))
oTeam.teamName = ""
end
oTeam.teamHeroInfos = {}
oTeam.teamPokemonInfos = {}
oTeam.formationId = 1
oTeam.supportId = 0
oTeam.adjutantId = 0
oTeam.substitute = ""
return oTeam
end
-- 刷新编队信息
function this.RefreshFormationData(func)
NetManager.TeamInfoRequest(func)
end
this.backpackLimit = 0
--刷新编队数据
function this.UpdateFormation(msg)
this.formationList = {}
--新加背包上限
--this.backpackLimit = msg.backpackLimit
this.curFormationIndex = this.SetCurFormationIndex()
for i, team in ipairs(msg.TeamPosInfo) do
local oTeam = this.MakeAEmptyTeam(team.teamId)
for j = 1, #team.teamHeroInfos do
local teamHeroInfo = team.teamHeroInfos[j]
table.insert(oTeam.teamHeroInfos, teamHeroInfo)
end
-- for j = 1, #team.teamPokemonInfos do
-- local teamPokemonInfo = team.teamPokemonInfos[j]
-- table.insert(oTeam.teamPokemonInfos, teamPokemonInfo)
-- end
oTeam.formationId = team.formationId
oTeam.supportId = team.supportId
oTeam.adjutantId = team.adjutantId
oTeam.substitute = team.substitute
SupportManager.SetFormationSupportId(team.teamId, oTeam.supportId)
AdjutantManager.SetFormationAdjutantId(team.teamId, oTeam.adjutantId)
this.formationList[team.teamId] = oTeam
end
-- if #msg.TeamPosInfo == 0 then
-- for i = 1, 3 do
-- local curFormation = {}
-- curFormation.teamId = i
-- curFormation.teamName = GetLanguageStrById(10674)--GetLanguageStrById(10675) .. i
-- curFormation.teamHeroInfos = {}
-- -- curFormation.teamPokemonInfos = {}
-- this.formationList[i] = curFormation
-- end
-- end
-- 获取数据时检测一下公会战防守数据
this.CheckGuildFightDefendFormation()
end
function this.SetCurFormationIndex()
local curIndex = 1
local curMapId = PlayerManager.curMapId
local carbonType = 1
if curMapId and curMapId > 0 then
carbonType = ChallengeData[curMapId].Type
end
curIndex = carbonType == 4 and 401 or 1
return curIndex
end
--> formationId 阵型
function FormationManager.RefreshFormation(index, roleList, tibuRole, dataTrans, isDiffmonster, formationId,fun)--index编队 roleList编队数据 formationId阵型
local curFormation = this.formationList[index]
if not curFormation or #this.formationList == 0 then
return
end
curFormation.teamHeroInfos = {}
local isHaveHero = true
for i = 1, #roleList do
local teamInfo = {}
teamInfo.heroId = roleList[i].heroId--roleList[i]
teamInfo.position = roleList[i].position--i
table.insert(curFormation.teamHeroInfos, teamInfo)
--只针对于奥廖尔阵营 阵营坦克大于一辆则重新考虑
local hero = HeroManager.GetSingleHeroData(roleList[i].heroId)
if hero == nil then
isHaveHero = false
else
isHaveHero = true
end
end
-- curFormation.teamPokemonInfos = {}
-- for j = 1, #pokemonList do
-- --#curFormation.teamPokemonInfos
-- local teamPokemonInfo = {}
-- teamPokemonInfo.pokemonId = pokemonList[j].pokemonId
-- teamPokemonInfo.position = pokemonList[j].position
-- table.insert(curFormation.teamPokemonInfos, teamPokemonInfo)
-- end
if tibuRole == nil then tibuRole = "" end
curFormation.substitute = tibuRole
curFormation.formationId = formationId
curFormation.supportId = dataTrans.supportId
curFormation.adjutantId = dataTrans.adjutantId
NetManager.TeamInfoSaveRequest(curFormation, function()
Game.GlobalEvent:DispatchEvent(GameEvent.Formation.OnFormationChange,isDiffmonster)
if fun then
fun()
end
end)
if isHaveHero then
this.UserPowerChanged(index)
end
end
-- 获取所有正在编队的英雄id
function this.GetAllFormationHeroId()
local list = {}
local index = 1
for i, team in pairs(this.formationList) do
for j = 1, #team.teamHeroInfos do
list[team.teamHeroInfos[j].heroId] = index
index = index + 1
end
end
return list
end
--获取单个编队所有上阵英雄
function this.GetWuJinFormationHeroIds(index)
local forMationData = this.GetFormationByID(index).teamHeroInfos
local index = 1
local list = {}
for j = 1, #forMationData do
list[forMationData[j].heroId] = index
index = index + 1
end
return list
end
-- 获取编队信息
function FormationManager.GetFormationByID(teamId)
if not teamId then
return
end
if not this.formationList then return nil end
if not this.formationList[teamId] then
this.formationList[teamId] = this.MakeAEmptyTeam(teamId)
end
--根据配置表 解锁功能时复制主线阵容 的配置
for i, v in ipairs(string.split(specialConfig[47].Value, "#")) do
local _v = tonumber(v)
if teamId == _v and #this.formationList[teamId].teamHeroInfos <= 0 then
for n = 1, #this.formationList[1].teamHeroInfos do
table.insert(this.formationList[teamId].teamHeroInfos, this.formationList[1].teamHeroInfos[n])
end
--
FormationManager.RefreshFormation(teamId, this.formationList[teamId].teamHeroInfos, this.formationList[teamId].substitute,
{supportId = SupportManager.GetFormationSupportId(teamId),
adjutantId = AdjutantManager.GetFormationAdjutantId(teamId)}, nil, this.formationList[teamId].formationId)
return this.formationList[teamId]
end
end
return this.formationList[teamId]
end
-- 获取编队镜像信息
function FormationManager.GetTeamPosMirrorInfo(teamId,func)
if not teamId then
return
end
NetManager.GetTeamPosMirrorInfoRequest(teamId,function(msg)
this.curFormationIndex = teamId
for i, team in ipairs(msg.TeamPosInfo) do
local oTeam = this.MakeAEmptyTeam(team.teamId)
for j = 1, #team.teamHeroInfos do
local teamHeroInfo = team.teamHeroInfos[j]
table.insert(oTeam.teamHeroInfos, teamHeroInfo)
end
oTeam.formationId = team.formationId
oTeam.supportId = team.supportId
oTeam.adjutantId = team.adjutantId
SupportManager.SetFormationSupportId(team.teamId, oTeam.supportId)
AdjutantManager.SetFormationAdjutantId(team.teamId, oTeam.adjutantId)
this.MirrorFormationList[team.teamId] = oTeam
end
if func then
func(this.MirrorFormationList[teamId])
end
end)
end
-- 获取编队总战斗力
function this.GetFormationPower(formationId)
if not formationId then
return
end
--获取当前编队数据
if formationId == FormationTypeDef.EXPEDITION then
ExpeditionManager.ExpeditionRrefreshFormation()--刷新编队
end
local formationList = this.GetFormationByID(formationId)
local power = 0
-- LogError("-------------------")
for i = 1, 6 do
if formationList.teamHeroInfos[i] then
local heroData = HeroManager.GetSingleHeroData(formationList.teamHeroInfos[i].heroId)
--1, curHeroData.dynamicId, false,nil,nil,true,allHeroTeamAddProVal)
if #formationList.teamHeroInfos <= 0 then return 0 end
local allHeroTeamAddProVal = HeroManager.GetAllHeroTeamAddProVal(formationList.teamHeroInfos,formationList.teamHeroInfos[i].heroId)
local allEquipAddProVal = HeroManager.CalculateHeroAllProValList(1, heroData.dynamicId,false,nil,nil,true,allHeroTeamAddProVal)
-- HeroManager.isLog = false
-- if formationId == 1 and heroData.id == 10007 then
-- HeroManager.isLog = true
-- LogError(formationList.teamHeroInfos[i].heroId..":"..allEquipAddProVal[HeroProType.WarPower])
-- end
power = power + allEquipAddProVal[HeroProType.WarPower]
end
end
-- substitute 为 dynamicId 需要转化
if formationList.substitute ~= "" and formationList.substitute ~= nil then
-- local heroDid = HeroManager.GetSingleHeroData(formationList.substitute).id
-- local allHeroTeamAddProVal = HeroManager.GetAllHeroTeamAddProVal(formationList.teamHeroInfos,heroDid)
local allEquipAddProVal = HeroManager.CalculateHeroAllProValList(1, formationList.substitute,false,nil,nil,true,allHeroTeamAddProVal)
power = power + allEquipAddProVal[HeroProType.WarPower]
end
-- 主线编队战斗力
-- ThinkingAnalyticsManager.SetSuperProperties({
-- fighting_capacity = power,
-- })
return power
end
--某个妖灵师战力发生变化检查是否在任何一个编队
function this.CheckHeroIdExist(heroId)
for _, formationData in pairs(this.formationList) do
table.walk(formationData.teamHeroInfos, function(teamInfo)
if heroId == teamInfo.heroId then
this.UserPowerChanged()
end
end)
end
end
function this.UserPowerChanged(teamId)
local teamId = teamId or FormationTypeDef.FORMATION_NORMAL
local maxPower = 0
for _, teamInfo in pairs(this.formationList) do
if teamId == teamInfo.teamId then
if #teamInfo.teamHeroInfos > 0 then
if this.GetFormationPower(teamInfo.teamId) > maxPower then
maxPower = this.GetFormationPower(teamInfo.teamId)
end
end
end
end
if maxPower > PlayerManager.maxForce then
NetManager.RequestUserForceChange(FormationTypeDef.FORMATION_NORMAL)
PlayerManager.maxForce = maxPower
Game.GlobalEvent:DispatchEvent(GameEvent.CustomEvent.OnPowerChange,PlayerManager.maxForce)
end
end
function this.GetMaxPowerForTeamID(teamId)
local teamId = teamId or FormationTypeDef.FORMATION_NORMAL
local maxPower = 0
for _, teamInfo in pairs(this.formationList) do
if teamId == teamInfo.teamId then
if #teamInfo.teamHeroInfos > 0 then
if this.GetFormationPower(teamInfo.teamId) > maxPower then
maxPower = this.GetFormationPower(teamInfo.teamId)
end
end
end
end
return maxPower
end
-- 获取相应编队的血量数据
function this.GetFormationHeroHp(formationIndex, dhId)
if formationIndex == FormationTypeDef.FORMATION_ENDLESS_MAP then
local data = EndLessMapManager.allHeroBlood[dhId]
if not data then return end
return data.percentHp
elseif formationIndex == FormationTypeDef.FORMATION_GUILD_FIGHT_ATTACK then
local dataList = GuildFightManager.GetMyHeroBloodData()
local data = dataList[dhId]
if not data then return end
return data
elseif formationIndex == FormationTypeDef.EXPEDITION then
local data = ExpeditionManager.heroInfo[dhId]
if not data then return end
return data.remainHp
elseif formationIndex == FormationTypeDef.DEFENSE_TRAINING then
local data = DefenseTrainingManager.heroInfo[dhId]
if not data then return end
return data.remainHp
elseif formationIndex == FormationTypeDef.BLITZ_STRIKE then
local data = BlitzStrikeManager.heroInfo[dhId]
if not data then return end
return data.remainHp
end
end
-- 检测编队正确性
function this.CheckFormationHp(formationIndex)
local formation = this.GetFormationByID(formationIndex)
local newFormation = {}
local newIndex = 1
for index = 1, #formation.teamHeroInfos do
local teamInfo = formation.teamHeroInfos[index]
local hp = this.GetFormationHeroHp(formationIndex, teamInfo.heroId)
if hp > 0 then
local singleData = {}
singleData.heroId = teamInfo.heroId
singleData.position = newIndex
newIndex = newIndex + 1
table.insert(newFormation, singleData)
end
end
this.RefreshFormation(formationIndex, newFormation, formation.teamPokemonInfos)
end
-- 检测编队是否有上阵人数
function this.CheckFormationValid(teamId)
local team = this.GetFormationByID(teamId)
local isValid = #team.teamHeroInfos > 0
return isValid
end
-- 检测公会战防守阶段玩家防守阵容正确性,防守阵容为空时将主线阵容复制到防守阵容
function FormationManager.CheckGuildFightDefendFormation()
if not ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.GUILD) then return end -- 公会未开启
if PlayerManager.familyId == 0 then return end -- 没有公会
local isInFight = GuildFightManager.IsInGuildFight()
local curStage = GuildFightManager.GetCurFightStage()
if not isInFight or curStage == GUILD_FIGHT_STAGE.DEFEND then
if not this.CheckFormationValid(FormationTypeDef.FORMATION_GUILD_FIGHT_DEFEND) then
local formation = this.GetFormationByID(FormationTypeDef.FORMATION_NORMAL)
local newFormation = {}
for index = 1, #formation.teamHeroInfos do
local teamInfo = formation.teamHeroInfos[index]
local singleData = {}
singleData.heroId = teamInfo.heroId
singleData.position = index
table.insert(newFormation, singleData)
end
this.RefreshFormation(FormationTypeDef.FORMATION_GUILD_FIGHT_DEFEND, newFormation, formation.teamPokemonInfos)
end
end
end
--设置元素共鸣激活索引
function this.GetElementIndex(curFormation)
local elementPropertyList = {}
local fireElementNum = 0
local windyElementNum = 0
local waterElementNum = 0
local groundElementNum = 0
for _, go in pairs(curFormation) do--将所有元素信息存入列表
if go and go.heroId then
local temp = HeroManager.GetSingleHeroData(go.heroId)
if not temp then
else
local heroPropertyType = temp.heroConfig.PropertyName
table.insert(elementPropertyList, heroPropertyType)
end
else
end
end
for i, v in pairs(elementPropertyList) do--遍历该列表拿筛选出各元素
if v == 1 then
fireElementNum = fireElementNum + 1
elseif v == 2 then
windyElementNum = windyElementNum + 1
elseif v == 3 then
waterElementNum = waterElementNum + 1
elseif v == 4 then
groundElementNum = groundElementNum + 1
end
end
local list = {}
list[1] = fireElementNum
list[2] = windyElementNum
list[3] = waterElementNum
list[4] = groundElementNum
local indexChoose = 0
for i = 1, #list do
local v = list[i]
if v == 4 then
indexChoose = 4
end
if v == 5 then
indexChoose = 5
end
if v == 6 then
indexChoose = 6
end
end
local count = 0
for i = 1, #list do
local v = list[i]
if v == 3 then
count = count + 1
end
end
if count == 1 then
indexChoose = 2
elseif count == 2 then
indexChoose = 3
end
local index = 0
for i = 1, #list do
local v = list[i]
if v == 2 then
index = index + 1
end
end
if index == 3 then
indexChoose = 1
end
return indexChoose
end
-- 获取所有正在编队的英雄id
function this.AllFormationDeleCurHeroId(heroDid)
for i, team in pairs(this.formationList) do
for j = 1, #team.teamHeroInfos do
if team.teamHeroInfos[j] and team.teamHeroInfos[j].heroId == heroDid then
team.teamHeroInfos[j] = nil
end
end
end
end
-- 获取当前光环的加成数据 type 编队类型
function this.GetCurFormationElementAdd(teamHeroInfos)
local data = {}
-- local index= this.GetElementIndex(teamHeroInfos)
-- if index==0 then return data end
-- local config=ConfigManager.GetConfig(ConfigName.ElementalResonanceConfig)
-- for i = 1, #config[index].Content do
-- table.insert(data,config[index].Content[i][1],config[index].Content[i][2])
-- end
local elementIds = TeamInfosToElementIds(teamHeroInfos)
local elementData = FormationManager.GetOpenElement(elementIds)
for i = 1, #elementData do
if elementData[i] then
for j = 1, #elementData[i] do
if elementData[i][j].isOpen then
for k = 1, #elementData[i][j].configData.BuffValue do
local pro = elementData[i][j].configData.BuffValue[k][1]
local value = elementData[i][j].configData.BuffValue[k][2]
if data[pro] then
data[pro] = data[pro] + value
else
data[pro] = value
end
-- table.insert(data, elementData[i][j].configData.BuffValue[k][1], elementData[i][j].configData.BuffValue[k][2])
end
end
end
end
end
return data
end
-- 获取当前光环的加成数据 type 编队类型
function this.GetCurFormationElementAddByType(type,heroDid)
local data = {}
local curFormation = this.GetFormationByID(type)
local isAdd = false
if not curFormation then return {} end
for i = 1, #curFormation.teamHeroInfos do
if curFormation.teamHeroInfos[i].heroId == heroDid then
isAdd = true
end
end
if isAdd then
local index = this.GetElementIndex(curFormation.teamHeroInfos)
if index == 0 then return data end
local config = ConfigManager.GetConfig(ConfigName.ElementalResonanceConfig)
for i = 1, #config[index].Content do
table.insert(data,config[index].Content[i][1],config[index].Content[i][2])
end
end
return data
end
-- 设置元素共鸣激活索引 by属性id列表(heroconfig.PropertyName)
function this.GetElementIndexByPropertyNameList(propertyNameList)
local elementPropertyList = {}
local fireElementNum = 0
local windyElementNum = 0
local waterElementNum = 0
local groundElementNum = 0
for _, v in ipairs(propertyNameList) do
table.insert(elementPropertyList, v)
end
for i, v in pairs(elementPropertyList) do--遍历该列表拿筛选出各元素
if v == 1 then
fireElementNum = fireElementNum + 1
elseif v == 2 then
windyElementNum = windyElementNum + 1
elseif v == 3 then
waterElementNum = waterElementNum + 1
elseif v == 4 then
groundElementNum = groundElementNum + 1
end
end
local list = {}
list[1] = fireElementNum
list[2] = windyElementNum
list[3] = waterElementNum
list[4] = groundElementNum
local indexChoose = 0
for i = 1, #list do
local v = list[i]
if v == 4 then
indexChoose = 4
end
if v == 5 then
indexChoose = 5
end
if v == 6 then
indexChoose = 6
end
end
local count = 0
for i = 1, #list do
local v = list[i]
if v == 3 then
count = count + 1
end
end
if count == 1 then
indexChoose = 2
elseif count == 2 then
indexChoose = 3
end
local index = 0
for i = 1, #list do
local v = list[i]
if v == 2 then
index = index + 1
end
end
if index == 3 then
indexChoose = 1
end
return indexChoose
end
-- 获取当前光环的加成数据 by属性id列表(heroconfig.PropertyName)
function this.GetCurFormationElementAddByPropertyNameList(propertyNameList)
local data = {}
local index = this.GetElementIndexByPropertyNameList(propertyNameList)
if index == 0 then return data end
local config = ConfigManager.GetConfig(ConfigName.ElementalResonanceConfig)
for i = 1, #config[index].Content do
table.insert(data,config[index].Content[i][1],config[index].Content[i][2])
end
return data
end
--> ******************************************************************************************************************************************
local m_formationId = 2 --<
--> 阵型 为改变阵型临时数据 真正上阵存储在formationList 只是上阵界面用 不用区分teamid int就可以
function FormationManager.SetFormationId(formationId)
m_formationId = formationId
end
function FormationManager.GetFormationId()
return m_formationId
end
function FormationManager.GetFormationPosList(teamId)
local posArray = formationConfig[this.formationList[teamId].formationId].pos
return posArray
end
--> 更新SupportSelect 数据
function FormationManager.UpdateSupportData()
for k, v in pairs(this.formationList) do
SupportManager.SetFormationSupportId(v.teamId, v.supportId)
end
end
--> 更新AdjutantSelect 数据
function FormationManager.UpdateAdjutantData()
for k, v in pairs(this.formationList) do
AdjutantManager.SetFormationAdjutantId(v.teamId, v.adjutantId)
end
end
--> 获取元素附加数据
function FormationManager.GetOpenElement(elementIds)
local a5 = {0, 0, 0, 0, 0, 0}
for _, v in ipairs(elementIds) do
local countryId = v
a5[countryId] = a5[countryId] + 1
end
local a6 = true
for i = 1, 5 do
if a5[i] ~= 1 then
a6 = false
end
end
local allElementData = {}
for _, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.FormationBuffConfig)) do
if allElementData[v.Type] == nil then
allElementData[v.Type] = {}
end
local isOpen = false
if v.Type ~= 6 and a5[v.Type] == v.Count then --< 刨除6类型
isOpen = true
end
if a6 then --< 6类型特殊判断
isOpen = false
if v.Type == 6 then
isOpen = true
end
end
table.insert(allElementData[v.Type], {isOpen = isOpen, configData = v})
end
return allElementData
end
local iconPic = {
["x1_TB_formationbuff_1_4"] = {1},
["x1_TB_formationbuff_1_3"] = {2},
["x1_TB_formationbuff_1_2"] = {3},
["x1_TB_formationbuff_1_5"] = {4},
["x1_TB_formationbuff_1_1"] = {5},
["x1_TB_formationbuff_2_8"] = {1, 2},
["x1_TB_formationbuff_2_11"] = {1, 3}, --x1_TB_formationbuff_2_6 蓝红
["x1_TB_formationbuff_2_10"] = {4, 1},
["x1_TB_formationbuff_2_3"] = {5, 1},
["x1_TB_formationbuff_2_5"] = {2, 3},
["x1_TB_formationbuff_2_9"] = {4, 2},
["x1_TB_formationbuff_2_2"] = {5, 2},
["x1_TB_formationbuff_2_7"] = {4, 3},
["x1_TB_formationbuff_2_1"] = {5, 3},
["x1_TB_formationbuff_2_4"] = {4, 5},
["x1_TB_formationbuff_3_9"] = {4, 1, 2},
["x1_TB_formationbuff_3_5"] = {5, 1, 2},
["x1_TB_formationbuff_3_4"] = {4, 2, 3},
["x1_TB_formationbuff_3_3"] = {5, 2, 3},
["x1_TB_formationbuff_3_8"] = {4, 1, 3},
["x1_TB_formationbuff_3_1"] = {5, 1, 3},
["x1_TB_formationbuff_3_7"] = {4, 5, 1},
["x1_TB_formationbuff_3_6"] = {4, 5, 2},
["x1_TB_formationbuff_3_2"] = {4, 5 ,3},
}
--> 获取布阵element icon num
function FormationManager.GetElementPicNum(elementIds)
local allElementData = FormationManager.GetOpenElement(elementIds)
local temp = {}
for i = 1, #allElementData do
for j = 1, #allElementData[i] do
if allElementData[i][j].isOpen then
if temp[allElementData[i][j].configData.Type] == nil then
temp[allElementData[i][j].configData.Type] = 0
end
-- temp[allElementData[i][j].configData.Type] = temp[allElementData[i][j].configData.Type] + 1
temp[allElementData[i][j].configData.Type] = math.max(temp[allElementData[i][j].configData.Type], allElementData[i][j].configData.Count)
end
end
end
local iconStr = nil
local numArray = {}
local isGray = false
if LengthOfTable(temp) == 0 then
iconStr = "x1_TB_formationbuff_all"
isGray = true
else
if LengthOfTable(temp) == 1 and temp[6] == 5 then
numArray = {}
iconStr = "x1_TB_formationbuff_all"
table.insert(numArray, 1)
else
iconStr = ""
for k, v in pairs(iconPic) do
local isFit = true
if #v == LengthOfTable(temp) then
for l, w in pairs(temp) do
local isH = false
for h = 1, #v do
if v[h] == l then
isH = true
break
end
end
if not isH then
isFit = false
end
end
else
isFit = false
end
if isFit then
iconStr = k
numArray = {}
for a = 1, #v do
table.insert(numArray, temp[v[a]])
end
break
end
end
if iconStr == "" then
LogError("### not found x1_TB_formationbuff !!!")
end
end
end
return iconStr, numArray, isGray
end
--> chooselist or teaminfos to elementids
function TeamInfosToElementIds(teaminfos,special)
local elementIds = {}
if special and DefenseTrainingManager.teamLock==1 then
for _, v in ipairs(teaminfos) do
local heroData = HeroTemporaryManager.GetSingleHeroData(v.heroId)
local countryId = heroData.heroConfig.PropertyName
table.insert(elementIds, countryId)
end
else
for _, v in ipairs(teaminfos) do
local heroData = HeroManager.GetSingleHeroData(v.heroId)
if heroData then
local countryId = heroData.heroConfig.PropertyName
table.insert(elementIds, countryId)
end
end
end
return elementIds
end
function FormationManager.FlutterPower(oldPower)
local newPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
if oldPower ~= newPower then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldPower,newValue = newPower, pos = Vector3.New(50, 18),duration = 0.7,isShowBg = true,isShowOldNum = true,pivot = Vector2.New(0.5,0.5)})
end
end
return this