PGRData/Script/matrix/xentity/xguildwar/battle/node/XSentinelGWNode.lua

140 lines
No EOL
4.6 KiB
Lua

local XGWEliteMonster = require("XEntity/XGuildWar/Battle/XGWEliteMonster")
local XNormalGWNode = require("XEntity/XGuildWar/Battle/Node/XNormalGWNode")
-- 前哨区节点
local XSentinelGWNode = XClass(XNormalGWNode, "XSentinelGWNode")
function XSentinelGWNode:Ctor(id)
-- 节点死亡时间
self.DeadTime = 0
-- 节点增加的重建时间
self.AddRebuildTime = 0
-- 出生的精英怪 XGWEliteMonster
self.BornMonster = nil
-- 下一个精英怪出生的时间
self.NextMonsterBornTime = nil
end
-- data : XGuildWarNodeData
function XSentinelGWNode:UpdateWithServerData(data)
XSentinelGWNode.Super.UpdateWithServerData(self, data)
self.DeadTime = data.DeadTime or 0
self.AddRebuildTime = data.AddRebuildTime or 0
self.NextMonsterBornTime = data.NextMstBornTime or 0
end
function XSentinelGWNode:GetNextMonsterBornTimeTip()
return XUiHelper.GetTime(math.max(0, self.NextMonsterBornTime
- XTime.GetServerNowTimestamp()), XUiHelper.TimeFormatType.HOUR_MINUTE_SECOND)
end
-- 获取重建时间
function XSentinelGWNode:GetRebuildTime(addRebuildTime)
if addRebuildTime == nil then addRebuildTime = 0 end
addRebuildTime = self.AddRebuildTime + addRebuildTime
return math.min(self.DeadTime + self.Config.RebuildTime + addRebuildTime
, self.DeadTime + self.Config.RebuildMaxTime)
end
function XSentinelGWNode:GetRebuildTimeStr(addRebuildTime)
local nowTime = XTime.GetServerNowTimestamp()
return XUiHelper.GetTime(math.max(0, self:GetRebuildTime(addRebuildTime)
- nowTime), XUiHelper.TimeFormatType.HOUR_MINUTE_SECOND)
end
function XSentinelGWNode:GetIsOverMaxRebuildTime()
return self.Config.RebuildTime + self.AddRebuildTime
> self.Config.RebuildMaxTime
end
function XSentinelGWNode:GetMaxRebuildMaxTime()
return self.DeadTime + self.Config.RebuildMaxTime
end
function XSentinelGWNode:GetOverRebuildTime()
return self.Config.RebuildTime + self.AddRebuildTime - self.Config.RebuildMaxTime
end
-- 获取历史最高重建时间
function XSentinelGWNode:GetHistoryMaxRebuildTime()
local damage = XDataCenter.GuildWarManager
.GetBattleManager():GetMaxDamageByUID(self:GetUID(), XGuildWarConfig.FightRecordAliveType.Die)
return self:GetRebuildTimeByDamage(damage)
end
-- 根据伤害获取重建时间
function XSentinelGWNode:GetRebuildTimeByDamage(value)
return value / self.Config.MaxSubHp * self.Config.RebuildTimeFactor
end
-- 获取重建进度
function XSentinelGWNode:GetRebuildProgress(addRebuildTime)
return (XTime.GetServerNowTimestamp() - self.DeadTime) / (self:GetRebuildTime(addRebuildTime) - self.DeadTime)
end
-- 获取节点状态:正常,复活中,死亡
-- return : XGuildWarConfig.NodeStatusType
function XSentinelGWNode:GetStutesType()
local result = XSentinelGWNode.Super.GetStutesType(self)
if self:GetHP() <= 0 then
return XGuildWarConfig.NodeStatusType.Revive
end
return result
end
function XSentinelGWNode:GetBornMonster()
if self.BornMonster == nil then
self.BornMonster = XGWEliteMonster.New(self.Config.EliteMonsterId)
end
return self.BornMonster
end
function XSentinelGWNode:GetStageId()
if self:GetStutesType() == XGuildWarConfig.NodeStatusType.Revive then
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.Stage
, self.Config.RebuildGuildWarStageId).StageId
end
return XSentinelGWNode.Super.GetStageId(self)
end
-- 检查是否能够扫荡
function XSentinelGWNode:CheckCanSweep(checkCostEnergy)
if self:GetStutesType() == XGuildWarConfig.NodeStatusType.Revive then
if self:GetHistoryMaxRebuildTime() <= 0 then
return false
end
end
if self:GetMaxDamage() <= 0 then
return false
end
if checkCostEnergy then
return XDataCenter.GuildWarManager.GetCurrentActionPoint() >= self.Config.SweepCostEnergy
end
return true
end
-- 获取当前节点当场最高伤害
function XSentinelGWNode:GetMaxDamage()
local aliveType = XGuildWarConfig.FightRecordAliveType.Die
if self:GetHP() > 0 then
aliveType = XGuildWarConfig.FightRecordAliveType.Alive
end
return XDataCenter.GuildWarManager
.GetBattleManager():GetMaxDamageByUID(self.UID, aliveType)
end
-- 检查是否能够扫荡
function XSentinelGWNode:CheckCanSweep(checkCostEnergy)
if self:GetMaxDamage() <= 0 then
return false
end
if checkCostEnergy then
return XDataCenter.GuildWarManager.GetCurrentActionPoint() >= self.Config.SweepCostEnergy
end
return true
end
function XSentinelGWNode:GetEliteMonsterBornInterval()
return self.Config.EliteMonsterBornInterval
end
return XSentinelGWNode