---@class BP_LandMine_C:BP_PlaceItemBase_C ---@field P_MiniGames_Boom_01 UParticleSystemComponent ---@field SphereDamage USphereComponent ---@field Sphere USphereComponent ---@field StaticMesh UStaticMeshComponent ---@field ExplosionSound UAkAudioEvent --Edit Below-- local PlaceItemBase = require("Script.Blueprint.PlaceItems.BP_PlaceItemBase") local BP_LandMine = setmetatable( { bIsCooling = false; Damage = 0; CoolingTime = 0; }, { __index = PlaceItemBase, __metatable = PlaceItemBase } ) function BP_LandMine:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); PlaceItemBase.ParentBeginPlay(self) if self:HasAuthority() then UGCSystemLibrary.BindBeginOverlapFunc(self.Sphere, self.OnBeginOverlap, self) end self.Damage = PlacementModeConfig.ItemInfo[EPlaceItemType.LandMine].Param.Damage self.CoolingTime = PlacementModeConfig.ItemInfo[EPlaceItemType.LandMine].Param.CoolingTime end function BP_LandMine:ReceiveEndPlay() PlaceItemBase.ParentEndPlay(self) self.SuperClass.ReceiveEndPlay(self); end function BP_LandMine:SetActive(InActive) -- UGCLogSystem.Log("[BP_LandMine_SetActive]") PlaceItemBase.SetActive(self, InActive) if self.CoolingTimeHandle then UGCEventSystem.StopTimer(self.CoolingTimeHandle) self.CoolingTimeHandle = nil end self.bIsCooling = false end function BP_LandMine:OnBeginOverlap(OverlappedComp, Other, OtherComp, OtherBodyIndex, bFromSweep, SweepResult) -- UGCLogSystem.Log("[BP_LandMine_OnBeginOverlap] bIsCooling:%s, bEnableActive:%s", tostring(self.bIsCooling), tostring(self.bEnableActive)) if self.bEnableActive and not self.bIsCooling and Other.PlayerKey ~= UGCGameSystem.GameState:GetNowDefender() then UGCLogSystem.Log("[BP_LandMine_OnBeginOverlap]2") self:Explosion() self.bIsCooling = true UGCEventSystem.SetTimer(self, function() self.bIsCooling = false end, self.CoolingTime) end end function BP_LandMine:Explosion() local AllPawn = UGCGameSystem.GetAllPlayerPawn() local Defender = UGCGameSystem.GameState:GetNowDefender() local DefenderPC = UGCGameSystem.GetPlayerControllerByPlayerKey(Defender) for i, v in pairs(AllPawn) do if v.PlayerKey ~= Defender and self.SphereDamage:IsOverlappingActor(v) then if PlacementModeConfig.IsPlaceMode() then UGCGameSystem.ApplyDamage(v, self.Damage, v:GetController(), self, EDamageType.UGCCustomDamageType + 1) UGCLogSystem.Log("[BP_LandMine_Explosion]1 Damage:%s", tostring(self.Damage)) else UGCGameSystem.ApplyDamage(v, self.Damage, DefenderPC, self, EDamageType.UGCCustomDamageType + 1) UGCLogSystem.Log("[BP_LandMine_Explosion]2 Damage:%s", tostring(self.Damage)) end UGCLogSystem.Log("[BP_LandMine_Explosion]3") end end UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientExplosionEffect") end function BP_LandMine:ClientExplosionEffect() self.P_MiniGames_Boom_01:SetActive(true, true) UGCSoundManagerSystem.PlaySoundAtLocation(self.ExplosionSound, self:K2_GetActorLocation(), self:K2_GetActorRotation()) end --[[ function BP_LandMine:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); end --]] --[[ function BP_LandMine:ReceiveTick(DeltaTime) self.SuperClass.ReceiveTick(self, DeltaTime); end --]] --[[ function BP_LandMine:ReceiveEndPlay() self.SuperClass.ReceiveEndPlay(self); end --]] --[[ function BP_LandMine:GetReplicatedProperties() return end --]] --[[ function BP_LandMine:GetAvailableServerRPCs() return end --]] return BP_LandMine;