---@class BP_Earthquake_C:BP_TriggerMechanismBase_C ---@field CG014_Version_2050_pickup UStaticMeshComponent ---@field P_EarthquakeDefault UParticleSystemComponent ---@field P_Earthquake2 UParticleSystemComponent ---@field P_Earthquake UParticleSystemComponent ---@field CylinderOverlap UStaticMeshComponent ---@field P_ShowRadius UParticleSystemComponent ---@field Scene USceneComponent ---@field TargetCameraShake UClass ---@field DamageTimeInterval float ---@field DamageValue float ---@field AKEarthquake UAkAudioEvent --Edit Below-- ---@type BP_Earthquake_C local MechanismBase = require('Script.Blueprint.MechanismActor.BP_TriggerMechanismBase') local BP_Earthquake = setmetatable( { DamageHandle = nil; EarthquakeEffectHandle = nil; }, { __index = MechanismBase, __metatable = MechanismBase } ); function BP_Earthquake:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); MechanismBase.MechanismBeginPlay(self) self:SetMechanismType(MechanismConfig.TriggerMechanismType.Earthquake) end function BP_Earthquake:ReceiveEndPlay() self:MechanismEndPlay() self.SuperClass.ReceiveEndPlay(self); end function BP_Earthquake:Trigger(InTriggeredPlayer, InTriggerDevice, InEnergyValue) MechanismBase.Trigger(self, InTriggeredPlayer, InTriggerDevice, InEnergyValue) if self.DamageHandle == nil then self.DamageHandle = UGCEventSystem.SetTimerLoop(self, self.ApplyEarthquakeDamage, self.DamageTimeInterval) end end function BP_Earthquake:CloseMechanism() MechanismBase.CloseMechanism(self) if self.DamageHandle then UGCEventSystem.StopTimer(self.DamageHandle) self.DamageHandle = nil end end function BP_Earthquake:EnableClientTriggerEffects() MechanismBase.EnableClientTriggerEffects(self) self.P_EarthquakeDefault:SetHiddenInGame(false) end function BP_Earthquake:DisableClientTriggerEffects() MechanismBase.DisableClientTriggerEffects(self) self.P_EarthquakeDefault:SetHiddenInGame(true) end function BP_Earthquake:ApplyEarthquakeDamage() local EnableDamagePlayerKeys = self:GetEnableDamagePlayer(self.TriggeredPlayer) local CauserController = UGCGameSystem.GetPlayerControllerByPlayerKey(self.TriggeredPlayer) UGCSendRPCSystem.ActorRPCNotify(nil, self, "EarthquakeEffect") for i, PlayerKey in pairs(EnableDamagePlayerKeys) do -- UGCLogSystem.Log("[BP_Earthquake_ApplyEarthquakeDamage]PlayerKey:%s", tostring(PlayerKey)) local TempPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey) if TempPawn and TempPawn:IsAlive() and self.CylinderOverlap:IsOverlappingActor(TempPawn) then UGCGameSystem.ApplyDamage(TempPawn, self.DamageValue, CauserController, self, self.MechanismType) UGCSendRPCSystem.ActorRPCNotify(PlayerKey, self, "TriggerPlayerCameraShake") UGCLogSystem.Log("[BP_Earthquake_ApplyEarthquakeDamage] PlayerKey:%s", tostring(PlayerKey)) end end end function BP_Earthquake:TriggerPlayerCameraShake() local CameraManager = UGCSystemLibrary.GetLocalPlayerController().PlayerCameraManager if UE.IsValid(CameraManager) then CameraManager:PlayCameraShake(self.TargetCameraShake, 1., ECameraAnimPlaySpace.CameraLocal, VectorHelper.RotZero()) UGCLogSystem.Log("[BP_Earthquake_TriggerPlayerCameraShake] Finish") else UGCLogSystem.LogError("[BP_Earthquake_TriggerPlayerCameraShake] CameraManager is nil") end end function BP_Earthquake:EarthquakeEffect() self.P_Earthquake:SetActive(true, true) self.P_Earthquake2:SetActive(true, true) UGCSoundManagerSystem.PlaySoundAtLocation(self.AKEarthquake, self:K2_GetActorLocation(), self:K2_GetActorRotation()) end function BP_Earthquake:CheckPlayerInRange(PlayerPawn) return self.CylinderOverlap:IsOverlappingActor(PlayerPawn) end --function BP_Earthquake:GetEnableTipPlayerInRange() -- UGCLogSystem.Log("[BP_TriggerMechanismBase_GetEnableTipPlayerInRange] Name:%s, bEnableTipPlayerInRange:%s", KismetSystemLibrary.GetObjectName(self), tostring(self.bEnableTipPlayerInRange)) -- return true --end return BP_Earthquake;