289 lines
9.3 KiB
Lua
289 lines
9.3 KiB
Lua
|
|
PowerCenterManager = {}
|
|||
|
|
local this = PowerCenterManager
|
|||
|
|
local SpecialConfig = ConfigManager.GetConfig(ConfigName.SpecialConfig)
|
|||
|
|
local PowerCenterConfig = ConfigManager.GetConfig(ConfigName.PowerCenterConfig)
|
|||
|
|
this.maxField = tonumber(SpecialConfig[561].Value)
|
|||
|
|
this.cd = tonumber(SpecialConfig[562].Value)
|
|||
|
|
this.powerCenterIsActivate = false
|
|||
|
|
|
|||
|
|
function this.Initialize()
|
|||
|
|
this.allData = {level = 0, hero = {}, linkPos = {}, equip = {}}
|
|||
|
|
for i = 1, PowerCenterManager.maxField do
|
|||
|
|
this.allData.linkPos[i] = {position = i, heroId = "", readyTime = -1, heroLevel = 0, heroBreakId = 0, state = 2}
|
|||
|
|
end
|
|||
|
|
this.speedUpCdCost = {}
|
|||
|
|
local reward = string.split(SpecialConfig[563].Value, "|")
|
|||
|
|
for i = 1, #reward do
|
|||
|
|
local data = string.split(reward[i], "#")
|
|||
|
|
this.speedUpCdCost[i] = {tonumber(data[1]), tonumber(data[2])}
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--请求异能中心信息
|
|||
|
|
function PowerCenterManager.GetPowerCenterInfo(func)
|
|||
|
|
--[[
|
|||
|
|
level
|
|||
|
|
active
|
|||
|
|
strongestHero = {}
|
|||
|
|
linkPos = {
|
|||
|
|
[1] = {
|
|||
|
|
position
|
|||
|
|
heroId = 英雄唯一ID
|
|||
|
|
readyTime = 冷却完成时间
|
|||
|
|
heroLevel = 原等级
|
|||
|
|
heroBreakId = 原阶数
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
equip = {
|
|||
|
|
[1] = {
|
|||
|
|
position
|
|||
|
|
equipId
|
|||
|
|
heroId
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
]]
|
|||
|
|
if not ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.PowerCenter) then
|
|||
|
|
if func then
|
|||
|
|
func()
|
|||
|
|
end
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
NetManager.GetPowerCenterInfo(function (msg)
|
|||
|
|
this.SetInfo(msg)
|
|||
|
|
if func then
|
|||
|
|
func(msg)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function this.SetInfo(msg)
|
|||
|
|
this.powerCenterIsActivate = msg.active
|
|||
|
|
for i = 1, #msg.strongestHero do
|
|||
|
|
this.allData.hero[i] = HeroManager.GetSingleHeroData(msg.strongestHero[i])
|
|||
|
|
-- if HeroManager.GetSingleHeroData(msg.strongestHero[i]) == nil then
|
|||
|
|
-- LogError(msg.strongestHero[i])
|
|||
|
|
-- end
|
|||
|
|
end
|
|||
|
|
for i = 1, PowerCenterManager.maxField do
|
|||
|
|
local data
|
|||
|
|
for m = 1, #msg.linkPos do
|
|||
|
|
if msg.linkPos[m].position == i then
|
|||
|
|
data = msg.linkPos[m]
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if data then
|
|||
|
|
local state = 0
|
|||
|
|
if data.readyTime > 0 then
|
|||
|
|
if data.readyTime/1000 - GetTimeStamp() > 0 then
|
|||
|
|
state = 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
this.allData.linkPos[i] = {
|
|||
|
|
position = data.position,
|
|||
|
|
heroId = data.heroId,
|
|||
|
|
readyTime = data.readyTime,
|
|||
|
|
heroLevel = data.heroLevel,
|
|||
|
|
heroBreakId = data.heroBreakId,
|
|||
|
|
state = state
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
local state = 2
|
|||
|
|
if i == #msg.linkPos+1 then
|
|||
|
|
if this.PowerCenterUnLockRedpoint() then
|
|||
|
|
state = 3
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
this.allData.linkPos[i] = {position = i, heroId = "", readyTime = -1, heroLevel = 0, heroBreakId = 0, state = state}
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
for i = 1, #msg.equip do
|
|||
|
|
this.allData.equip[i] = msg.equip[i]
|
|||
|
|
end
|
|||
|
|
this.allData.level = msg.level
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--异能中心链接&取消链接 type--0:取消链接,1:链接
|
|||
|
|
function PowerCenterManager.GetPowerCenterLinkHero(position, heroId, type, func)
|
|||
|
|
--[[
|
|||
|
|
linkHeroInfo = {
|
|||
|
|
heroId
|
|||
|
|
heroLevel
|
|||
|
|
heroBreakId = 阶数
|
|||
|
|
equip
|
|||
|
|
}
|
|||
|
|
]]
|
|||
|
|
|
|||
|
|
local data = HeroManager.GetSingleHeroData(heroId)
|
|||
|
|
local allAddProVal = HeroManager.CalculateHeroAllProValList(1, data.dynamicId, false)
|
|||
|
|
local cur = {
|
|||
|
|
lv = data.lv,
|
|||
|
|
dynamicId = data.dynamicId,
|
|||
|
|
hp = allAddProVal[HeroProType.Hp],
|
|||
|
|
attack = allAddProVal[HeroProType.Attack],
|
|||
|
|
pDef = allAddProVal[HeroProType.PhysicalDefence],
|
|||
|
|
speed = allAddProVal[HeroProType.Speed],
|
|||
|
|
}
|
|||
|
|
NetManager.GetPowerCenterLinkHero(position, heroId, type, function (msg)
|
|||
|
|
this.RefreshHeroData(msg)
|
|||
|
|
if type == 0 then
|
|||
|
|
this.allData.linkPos[position] = {position = position, heroId = "", readyTime = (GetTimeStamp()+this.cd)*1000, heroLevel = 0, heroBreakId = 0, state = 1}
|
|||
|
|
if func then
|
|||
|
|
func(msg)
|
|||
|
|
end
|
|||
|
|
elseif type == 1 then
|
|||
|
|
UIManager.OpenPanel(UIName.PowerCenterLinkWinPanel, cur, function ()
|
|||
|
|
this.allData.linkPos[position] = {position = position, heroId = msg.heroId, readyTime = 0, heroLevel = cur.lv, heroBreakId = msg.heroBreakId, state = 0}
|
|||
|
|
if func then
|
|||
|
|
func(msg)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--异能中心解锁链接栏位
|
|||
|
|
function PowerCenterManager.GetPowerCenterUnlockPos(func)
|
|||
|
|
if not this.PowerCenterUnLockRedpoint() then
|
|||
|
|
PopupTipPanel.ShowTip(GetLanguageStrById("材料不足"))
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
NetManager.GetPowerCenterUnlockPos(function (msg)
|
|||
|
|
local index = 0
|
|||
|
|
for i = 1, PowerCenterManager.maxField do
|
|||
|
|
if this.allData.linkPos[i].state == 3 then
|
|||
|
|
index = i
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
this.allData.linkPos[index] = {position = index, heroId = "", readyTime = 0, state = 0}
|
|||
|
|
local state = 2
|
|||
|
|
if this.PowerCenterUnLockRedpoint() then
|
|||
|
|
state = 3
|
|||
|
|
end
|
|||
|
|
this.allData.linkPos[index+1] = {position = index+1, heroId = "", readyTime = 0, state = state}
|
|||
|
|
if func then
|
|||
|
|
func(msg)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--异能中心加速栏位冷却
|
|||
|
|
function PowerCenterManager.GetPowerCenterSpeedUpLinkPos(position, costType, func)
|
|||
|
|
NetManager.GetPowerCenterSpeedUpLinkPos(position, costType, function (msg)
|
|||
|
|
this.allData.linkPos[position] = {position = position, heroId = "", readyTime = 0, heroLevel = 0, heroBreakId = 0, state = 0}
|
|||
|
|
if func then
|
|||
|
|
func(msg)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function this.EventPowerCenterInfoIndication(msg)
|
|||
|
|
--[[
|
|||
|
|
powerCenterInfo
|
|||
|
|
linkHeroInfo = {
|
|||
|
|
[1] = {
|
|||
|
|
heroId
|
|||
|
|
heroLevel
|
|||
|
|
heroBreakId = 阶数
|
|||
|
|
equip
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
]]
|
|||
|
|
-- LogError("EventPowerCenterInfoIndication")
|
|||
|
|
this.SetInfo(msg.powerCenterInfo)
|
|||
|
|
for i = 1, #msg.linkHeroInfo do
|
|||
|
|
this.RefreshHeroData(msg.linkHeroInfo[i])
|
|||
|
|
end
|
|||
|
|
Game.GlobalEvent:DispatchEvent(GameEvent.PowerCenter.RefreshLinkList)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--刷新背包英雄数据
|
|||
|
|
function this.RefreshHeroData(data)
|
|||
|
|
local hero = HeroManager.GetSingleHeroData(data.heroId)
|
|||
|
|
HeroManager.UpdateSingleHeroDatas(data.heroId, data.heroLevel, hero.star, data.heroBreakId, hero.upStarId, false)
|
|||
|
|
--移除装备
|
|||
|
|
local equipList = {}
|
|||
|
|
for e = 1, #data.equip do
|
|||
|
|
table.insert(equipList, data.equip[e].equipId)
|
|||
|
|
EquipManager.SetEquipUpHeroDid(data.equip[e].equipId, data.heroId)
|
|||
|
|
end
|
|||
|
|
HeroManager.SetHeroEquipIdList(data.heroId, equipList)
|
|||
|
|
--移除戒指
|
|||
|
|
if hero.planList and #hero.planList > 0 then
|
|||
|
|
for p = 1, #hero.planList do
|
|||
|
|
if not this.CheckUnlockCombatPlan(data.heroLevel, hero.star, hero.planList[p].position) then
|
|||
|
|
CombatPlanManager.DownPlanData(data.heroId, hero.planList[p].planId)
|
|||
|
|
table.remove(hero.planList, p)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function this.CheckUnlockCombatPlan(lv, star, slot)
|
|||
|
|
local s_type = 0
|
|||
|
|
local s_value = 0
|
|||
|
|
local specialConfig = ConfigManager.GetConfigDataByKey(ConfigName.SpecialConfig, "Key", "CombatPlanUnlock")
|
|||
|
|
local valueArray = string.split(specialConfig.Value, "|")
|
|||
|
|
local a = string.split(valueArray[slot], "#")
|
|||
|
|
s_type = a[2]
|
|||
|
|
s_value = a[3]
|
|||
|
|
if tonumber(s_type) == 1 then
|
|||
|
|
return lv >= tonumber(s_value)
|
|||
|
|
elseif tonumber(s_type) == 2 then
|
|||
|
|
return star >= tonumber(s_value)
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--可解锁红点
|
|||
|
|
function PowerCenterManager.PowerCenterUnLockRedpoint()
|
|||
|
|
if not ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.PowerCenter) then
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
if not this.powerCenterIsActivate then
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
local index = 1
|
|||
|
|
for i = 1, #this.allData.linkPos do
|
|||
|
|
if this.allData.linkPos[i].state == 2 or this.allData.linkPos[i].state == 3 then
|
|||
|
|
index = i
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if index == 1 or index == this.maxField then
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
local cost = PowerCenterConfig[index].Cost
|
|||
|
|
if BagManager.GetItemCountById(cost[1][1]) >= cost[1][2] then
|
|||
|
|
this.allData.linkPos[index] = {position = index, heroId = "", readyTime = 0, state = 3}
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--查找英雄是否是链接英雄
|
|||
|
|
function PowerCenterManager.FindHeroIsLinkHeroForDynamicId(dynamicId)
|
|||
|
|
if not ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.PowerCenter) then
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
for i = 1, #this.allData.linkPos do
|
|||
|
|
if this.allData.linkPos[i].heroId == dynamicId then
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取解锁栏位消耗
|
|||
|
|
function PowerCenterManager.GetUnlockCost()
|
|||
|
|
local index = 0
|
|||
|
|
for i = 1, #PowerCenterManager.allData.linkPos do
|
|||
|
|
if PowerCenterManager.allData.linkPos[i].state == 2 or PowerCenterManager.allData.linkPos[i].state == 3 then
|
|||
|
|
index = i
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return PowerCenterConfig[index].Cost
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return PowerCenterManager
|