---@class BP_LineOfDefense_C:AActor ---@field Widget UWidgetComponent ---@field Capsule UCapsuleComponent ---@field P_LineOfDefense UParticleSystemComponent ---@field CG014_Motorbooth UStaticMeshComponent ---@field DefaultSceneRoot USceneComponent --Edit Below-- local BP_LineOfDefense = { -- 同一个玩家进入的时间间隔 EnterTimeInterval = 5; -- 玩家上一次进入的时间 PlayerEnterLineOfDefenseTime = {}; }; function BP_LineOfDefense:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); if UGCGameSystem.IsServer() then self.CheckPlayerOverlapHandle = UGCEventSystem.SetTimerLoop(self, self.CheckPlayerOverlap, 0.5) UGCSystemLibrary.BindBeginOverlapFunc(self.Capsule, self.PlayerOverlap, self) UGCEventSystem.AddListener(EventEnum.UpdateCanBreakThrough, self.CheckPlayerOverlap, self) end end function BP_LineOfDefense:CheckPlayerOverlap() local AllPawn = UGCGameSystem.GetAllPlayerPawn() for i, v in pairs(AllPawn) do if self.Capsule:IsOverlappingActor(v) then self:CheckEnterLineDefenseMeetCondition(v.PlayerKey) end end end --[[ function BP_LineOfDefense:ReceiveTick(DeltaTime) self.SuperClass.ReceiveTick(self, DeltaTime); end --]] function BP_LineOfDefense:PlayerOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult) if OtherActor and OtherActor:IsAlive() then self:CheckEnterLineDefenseMeetCondition(OtherActor.PlayerKey) end end function BP_LineOfDefense:CheckEnterLineDefenseMeetCondition(PlayerKey) if PlayerKey == nil then return end -- 判断是否为防守方玩家 if not UGCGameSystem.GameState:PlayerIsAttacker(PlayerKey) then return end UGCLogSystem.Log("[BP_LineOfDefense_CheckEnterLineDefenseMeetCondition] PlayerKey:%s", tostring(PlayerKey)) local LastEnterTime = self.PlayerEnterLineOfDefenseTime[PlayerKey] local NowTime = UGCSystemLibrary.GetGameTime() if LastEnterTime == nil or NowTime - LastEnterTime > self.EnterTimeInterval then self.PlayerEnterLineOfDefenseTime[PlayerKey] = NowTime UGCEventSystem.SendEvent(EventEnum.PlayerEnterLineOfDefense, PlayerKey) end end function BP_LineOfDefense:ReceiveEndPlay() if self.CheckPlayerOverlapHandle then UGCEventSystem.StopTimer(self.CheckPlayerOverlapHandle) self.CheckPlayerOverlapHandle = nil end self.SuperClass.ReceiveEndPlay(self); end --[[ function BP_LineOfDefense:GetReplicatedProperties() return end --]] --[[ function BP_LineOfDefense:GetAvailableServerRPCs() return end --]] return BP_LineOfDefense;