2025-01-04 23:00:19 +08:00

89 lines
3.4 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
说明文档:
1、将BuffSystem文件夹加入Script.Global文件夹中
2、require此文件
3、GameState的BeginPlay中调用BuffManager.InitRegister(InGameState)
4、GameState的UGCGameState:GetReplicatedProperties()函数末尾加入 BuffManager.GetReplicatedProperties()
]]
require('Script.Global.BuffSystem.BuffManager')
BuffSystemAPI = BuffSystemAPI or {}
---获取给予拥有者该Buff的控制器
---生效范围Server
---@return AController*
---@param InBuffID uint
function BuffSystemAPI.GetBuffCauser(InBuffID)
if BuffManager.BuffInstList[InBuffID] then
return BuffManager.BuffInstList[InBuffID].BuffCauser
end
end
---获取给予拥有者该Buff的Actor 如燃烧子弹、燃烧瓶等
---生效范围Server
---@return AActor*
---@param InBuffID uint
function BuffSystemAPI.GetCauserActor(InBuffID)
if BuffManager.BuffInstList[InBuffID] then
return BuffManager.BuffInstList[InBuffID].CauserActor
end
end
---为玩家添加Buff
---生效范围Server
---@return BuffID int @Buff唯一ID
---@param PlayerPawn PlayerPawn* @玩家角色。所有的接口里的PlayerPawn都可以扩展成任意的Actor只要这个Actor有一个名字叫BuffSystemComponent的Buff组件即可。
---@param InBuffAssetType EBuffAssetType @Buff资产类型
---@param BuffCauser AController* @施加Buff的玩家或AI。可以是nil
---@param CauserActor AActor* @施加Buff的Actor比如说PlayerPawn、燃烧瓶Actor等等 可以是nil
function BuffSystemAPI.PlayerAddBuff(PlayerPawn, InBuffAssetType, BuffCauser, CauserActor)
return BuffManager.PlayerAddBuff(PlayerPawn, InBuffAssetType, BuffCauser, CauserActor)
end
---为玩家移除Buff
---生效范围Server
---@param PlayerPawn PlayerPawn* @玩家角色
---@param BuffName String @Buff名
---@param LayerCount int @层数
function BuffSystemAPI.PlayerRemoveBuffFromBuffAssetType(PlayerPawn, InBuffAssetType, LayerCount)
return BuffManager.PlayerRemoveBuffFromBuffAssetType(PlayerPawn, InBuffAssetType, LayerCount)
end
---移除Buff
---生效范围Server
---@param InBuffID uint
function BuffSystemAPI.RemoveBuffFromBuffID(InBuffID)
return BuffManager.RemoveBuffFromBuffID(InBuffID)
end
---是否存在该Buff
---生效范围Server
---@return HasBuff bool @是否存在Buff
---@param PlayerPawn PlayerPawn* @玩家角色
---@param InBuffAssetType EBuffAssetType @Buff资产类型
function BuffManager.PlayerHasBuff(InPawn, InBuffAssetType)
return BuffManager.PlayerHasBuff(InPawn, InBuffAssetType)
end
---获取Buff当前层数
---生效范围:服务器&客户端
---@return Layer int @层数
---@param PlayerPawn PlayerPawn* @玩家角色
---@param InBuffAssetType EBuffAssetType @Buff资产类型
function BuffSystemAPI.GetCurLayer(PlayerPawn, InBuffAssetType)
-- 玩家拥有这个Buff的所有的BuffID
local OwnedThisBuffIDs = BuffManager.GetPlayerOwnedBuffIDFromBuffAssetType(PlayerPawn, InBuffAssetType)
return #OwnedThisBuffIDs
end
---@param InPlayerKey "nil则是广播或客户端发送服务器table则发送对应客户端int则为对应玩家"
---@param BuffID "nil则调单个实例int则为对应Buff实例中的Action客户端可能存在同步不及时的情况建议使用单个实例"
---@param BuffActionType EBuffActionType
---@param FuncName string
function BuffSystemAPI.RPCAction(InPlayerKey, BuffID, BuffActionType, FuncName, ...)
BuffManager.RPCActionFunc(InPlayerKey, BuffID, BuffActionType, FuncName, ...)
end