58 lines
2.2 KiB
Lua
58 lines
2.2 KiB
Lua
|
-- 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;
|