---@class BP_SpawnPickupWrapper_C:AActor ---@field Sphere USphereComponent ---@field SpawnTF UArrowComponent ---@field P_ItemHandle UParticleSystemComponent ---@field Center USceneComponent ---@field Box UBoxComponent ---@field DefaultSceneRoot USceneComponent ---@field ItemID int32 ---@field CoolingTime float ---@field ItemScale float ---@field ActiveColor FLinearColor ---@field NotActiveColor FLinearColor ---@field DelayStart float ---@field IsActive bool ---@field OverlapAutoPickUp bool --Edit Below-- ---@type BP_SpawnPickupWrapper_C local BP_SpawnPickupWrapper = { WrapperClass = nil; PickupWrapper = nil; NowActive = false; }; function BP_SpawnPickupWrapper:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); if UGCGameSystem.IsServer() then UGCLogSystem.Log("[BP_SpawnPickupWrapper_ReceiveBeginPlay]") self.WrapperClass = UE.LoadClass(UGCBackPackSystem.GetPickupWrapperClassPath(self.ItemID)) self.DelayStartHandle = UGCEventSystem.SetTimer(self, self.SpawnItem, self.DelayStart) UGCSystemLibrary.BindBeginOverlapFunc(self.Sphere, self.OverlapPlayer, self) end end function BP_SpawnPickupWrapper:OverlapPlayer(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult) if self.OverlapAutoPickUp and self.IsActive and OtherActor and OtherActor.PickupManager then OtherActor.PickupManager:ServerPickUpTarget(self.PickupWrapper, 0, 1) UGCLogSystem.Log("[BP_SpawnPickupWrapper_OverlapPlayer]") end end function BP_SpawnPickupWrapper:GetPickupWrapper() if UE.IsValid(self.PickupWrapper) then return self.PickupWrapper end return nil end function BP_SpawnPickupWrapper:SpawnItem() self.SpawnHandle = nil self.DelayStartHandle = nil if self.IsActive == false then if UE.IsValid(self.WrapperClass) then self.PickupWrapper = ScriptGameplayStatics.SpawnActor(UGCGameSystem.GameState, self.WrapperClass, self.SpawnTF:K2_GetComponentLocation(), self.SpawnTF:K2_GetComponentRotation(), { X = self.ItemScale, Y = self.ItemScale, Z = self.ItemScale }); if self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate then self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate:Add(self.PickUpWrapperCallBack, self) UGCLogSystem.Log("[BP_SpawnPickupWrapper_SpawnItem] SpawnSucceed") else UGCLogSystem.Log("[BP_SpawnPickupWrapper_SpawnItem] UGC_PickUpWrapperDestroyDelegate is nil") end self.IsActive = true UGCSendRPCSystem.ActorRPCNotify(nil, self, "SetClientEffectActive", true) else UGCLogSystem.LogError("[BP_SpawnPickupWrapper_SpawnItem] WrapperClass is not Valid") end end end function BP_SpawnPickupWrapper:PickUpWrapperCallBack() self.IsActive = false UGCSendRPCSystem.ActorRPCNotify(nil, self, "SetClientEffectActive", false) if self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate then self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate:Remove(self.PickUpWrapperCallBack, self) end self.SpawnHandle = UGCEventSystem.SetTimer(self, self.SpawnItem, self.CoolingTime) end function BP_SpawnPickupWrapper:OnRep_IsActive() self:SetClientEffectActive(self.IsActive) end function BP_SpawnPickupWrapper:SetClientEffectActive(InIsActive) UGCLogSystem.Log("[BP_SpawnPickupWrapper_SetClientEffectActive] InIsActive:%s", tostring(InIsActive)) if self then if self.NowActive ~= InIsActive then self.NowActive = InIsActive if self.NowActive then self.P_ItemHandle:SetColorParameter("Color", self.ActiveColor) else self.P_ItemHandle:SetColorParameter("Color", self.NotActiveColor) end end end end function BP_SpawnPickupWrapper:ReceiveEndPlay() if self.SpawnHandle then UGCEventSystem.StopTimer(self.SpawnHandle) self.SpawnHandle = nil end if self.DelayStartHandle then UGCEventSystem.StopTimer(self.DelayStartHandle) self.DelayStartHandle = nil end self.SuperClass.ReceiveEndPlay(self); end return BP_SpawnPickupWrapper;