UGCProjects/TwoOnTwo/Script/Global/BuffSystem/BuffAction/BuffAction_Counterattack.lua

58 lines
2.2 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
-- Script.Global.BuffSystem.BuffAction.BuffAction_Counterattack
local BuffActionBase = require('Script.Global.BuffSystem.BuffActionBase')
local BuffAction_Counterattack = setmetatable(
{
-- 每层增加伤害的缩放
LayerAddDamageScale = 0.1;
-- 每多少血量百分比增加一层
LayerHPInterval = 0.1;
-- 基础层级
BaseLayer = 1;
-- 上一层级
LastLayer = 0;
},
{ __index = BuffActionBase, __metatable = BuffActionBase }
);
function BuffAction_Counterattack:LuaDoAction()
BuffActionBase.LuaDoAction(self)
if not UGCGameSystem.IsServer() then return true end
UGCLogSystem.Log("[BuffAction_Counterattack_LuaDoAction]")
self:GetOwnerPawn().OnCharacterHpChange:Add(self.UpdateNowDamageScale, self)
local NowHP = UGCPawnAttrSystem.GetHealth(self:GetOwnerPawn())
local NowMaxHP = UGCPawnAttrSystem.GetHealthMax(self:GetOwnerPawn())
self:UpdateNowDamageScale(NowHP,NowMaxHP,NowHP)
end
function BuffAction_Counterattack:LuaUndoAction()
BuffActionBase.LuaUndoAction(self)
if not UGCGameSystem.IsServer() then return true end
UGCLogSystem.Log("[BuffAction_Counterattack_LuaUndoAction]")
local OwnerPawn = self:GetOwnerPawn()
if UE.IsValid(OwnerPawn) then
OwnerPawn:SetDamageScale(OwnerPawn:GetDamageScale() / self:GetDamageScaleFromLayer(self.LastLayer))
self.LastLayer = 0
end
end
function BuffAction_Counterattack:UpdateNowDamageScale(CurrentHP,MaxHP,PrevHP)
UGCLogSystem.Log("[BuffAction_Counterattack_UpdateNowDamageScale] CurrentHP:%s,MaxHP:%s,PrevHP:%s", tostring(CurrentHP), tostring(MaxHP), tostring(PrevHP))
local OwnerPawn = self:GetOwnerPawn()
if UE.IsValid(OwnerPawn) then
local NowLayer = (MaxHP - CurrentHP) / MaxHP // self.LayerHPInterval + self.BaseLayer
if NowLayer ~= self.LastLayer then
OwnerPawn:SetDamageScale(OwnerPawn:GetDamageScale() / self:GetDamageScaleFromLayer(self.LastLayer) * self:GetDamageScaleFromLayer(NowLayer))
self.LastLayer = NowLayer
end
end
end
function BuffAction_Counterattack:GetDamageScaleFromLayer(Layer)
return Layer * self.LayerAddDamageScale + 1
end
return BuffAction_Counterattack;