-- 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;