local BuffAction_ShowEnemyPos = { -- 以下参数信息可以通过manager的 GetBuffDefaultParam(BuffPath, ParamName)来获取 -- -- 默认颜色信息,非必要参数 BuffColor = {R = 0.97, G = 0.88, B = 0.1, A = 1.}; --BuffIconPath = "默认Icon路径,非必要参数"; --BuffParticlePath = "默认粒子路径,非必要参数"; --BuffDesc = "Buff描述信息,非必要参数"; -------------------------------------------------------------------------------- PlayerKey = {}; } --- 必须包含ApplyBuff函数 ---@param BuffTag any Buff的标签 ---@param ValidPawn UGCPlayerPawn_C ---@tparam Any ---@return bool function BuffAction_ShowEnemyPos:ApplyBuff(BuffTag, ValidPawn) local SelfPlayerKey = ValidPawn.PlayerKey local TeamId = UGCPlayerStateSystem.GetTeamID(SelfPlayerKey); UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "ApplyShowEnemyPos", true, TeamId, self.BuffType); self.PlayerKey = {}; local PCs = UGCGameSystem.GetAllPlayerController(false); for i, v in pairs(PCs) do local TheTeamId = UGCPlayerStateSystem.GetTeamID(v.PlayerKey); if TeamId == TheTeamId then self.PlayerKey[#self.PlayerKey + 1] = v.PlayerKey; end end return true; end --- 可以包含RemoveBuff,若包含该函数则玩家应用该Buff时会保存Buff信息缓存,作为移除或者获取玩家当前Buff的备份信息 ---@param BuffTag any Buff的标签 ---@param ValidPawn UGCPlayerPawn_C ---@tparam Args ... Any Args顺序必须与ApplyBuff顺序一致 function BuffAction_ShowEnemyPos:RemoveBuff(BuffTag, ValidPawn) -- Remove逻辑 -- 通过BuffManager调用RPC --BP_BuffManager.GetBuffManager():BuffNotifyRPC(ValidPawn.PlayerKey, BP_BuffManager.GetBuffFileName(), "Client_RPCFunc", ValidPawn, false) --UGCLogSystem.Log("[BuffAction_ShowEnemyPos:RemoveBuff] , self.BuffType = %s", self.BuffType); --local TeamId = UGCPlayerStateSystem.GetTeamID(ValidPawn.PlayerKey); --UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "ApplyShowEnemyPos", false, TeamId, self.BuffType); end function BuffAction_ShowEnemyPos:SetBuffType(InType) UGCLogSystem.Log("[BuffAction_ShowEnemyPos:SetBuffType] InType = %s", tostring(InType)); self.BuffType = InType; end --- Tick函数 服务器客户端均会调用 --function BuffAction_ShowEnemyPos:Tick(DeltaTime) -- -- Tick逻辑 --end --- 触发的RPC函数 ---@param ValidPawn UGCPlayerPawn_C ---@param Enable bool function BuffAction_ShowEnemyPos:Client_RPCFunc(ValidPawn, Enable) -- 显示一下 UGCLogSystem.Log("[BuffAction_ShowEnemyPos:Client_RPCFunc] 执行") self:ApplyShowEnemyPos(Enable, ValidPawn.PlayerKey) end --- 应用显示敌方位置 function BuffAction_ShowEnemyPos:ApplyShowEnemyPos(Enable, TeamId) if self.BuffType ~= nil then local ShowTable = BP_BuffManager.CachedInit[self.BuffType]; local OtherTeamPlayers = UGCGameSystem.GameState:GetOtherPlayerKeys(TeamId); if table.isEmpty(OtherTeamPlayers) then return end for i = 1, #OtherTeamPlayers do ShowTable[i]:SetTrackPlayerKey(OtherTeamPlayers[i]); end end end function BuffAction_ShowEnemyPos:GetBenefitPlayer() return self.PlayerKey; end --- 当玩家死亡时会触发该函数,作用于以PlayerKey给玩家Buff的BuffAction,以防UGC的Pawn不删除机制所引发的Bug function BuffAction_ShowEnemyPos:PlayerDeathCallBack(PlayerKey) end return BuffAction_ShowEnemyPos