mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
creative stuff
This commit is contained in:
78
Project Reboot 3.0/FortAthenaCreativePortal.cpp
Normal file
78
Project Reboot 3.0/FortAthenaCreativePortal.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
#include "FortAthenaCreativePortal.h"
|
||||
|
||||
#include "FortPlayerPawn.h"
|
||||
#include "FortPlayerControllerAthena.h"
|
||||
|
||||
void AFortAthenaCreativePortal::TeleportPlayerToLinkedVolumeHook(UObject* Context, FFrame& Stack, void* Ret)
|
||||
{
|
||||
auto Portal = (AFortAthenaCreativePortal*)Context; // Cast?
|
||||
|
||||
if (!Portal)
|
||||
return TeleportPlayerToLinkedVolumeOriginal(Context, Stack, Ret);
|
||||
|
||||
AFortPlayerPawn* PlayerPawn = nullptr;
|
||||
bool bUseSpawnTags;
|
||||
|
||||
Stack.Step(Stack.Object, &PlayerPawn);
|
||||
Stack.Step(Stack.Object, &bUseSpawnTags);
|
||||
|
||||
LOG_INFO(LogDev, "PlayerPawn: {}", __int64(PlayerPawn));
|
||||
|
||||
if (!PlayerPawn)
|
||||
return TeleportPlayerToLinkedVolumeOriginal(Context, Stack, Ret);
|
||||
|
||||
auto LinkedVolume = Portal->GetLinkedVolume();
|
||||
|
||||
LOG_INFO(LogDev, "LinkedVolume: {}", __int64(LinkedVolume));
|
||||
|
||||
if (!LinkedVolume)
|
||||
return TeleportPlayerToLinkedVolumeOriginal(Context, Stack, Ret);
|
||||
|
||||
auto Location = LinkedVolume->GetActorLocation();
|
||||
Location.Z -= 1000; // proper 1:1
|
||||
PlayerPawn->TeleportTo(Location, FRotator());
|
||||
|
||||
return TeleportPlayerToLinkedVolumeOriginal(Context, Stack, Ret);
|
||||
}
|
||||
|
||||
void AFortAthenaCreativePortal::TeleportPlayerHook(UObject* Context, FFrame& Stack, void* Ret)
|
||||
{
|
||||
auto Portal = (AFortAthenaCreativePortal*)Context; // Cast?
|
||||
|
||||
if (!Portal)
|
||||
return TeleportPlayerOriginal(Context, Stack, Ret);
|
||||
|
||||
AFortPlayerPawn* PlayerPawn = nullptr;
|
||||
FRotator TeleportRotation;
|
||||
|
||||
Stack.Step(Stack.Object, &PlayerPawn);
|
||||
Stack.Step(Stack.Object, &TeleportRotation);
|
||||
|
||||
LOG_INFO(LogDev, "PlayerPawn: {}", __int64(PlayerPawn));
|
||||
|
||||
if (!PlayerPawn)
|
||||
return TeleportPlayerOriginal(Context, Stack, Ret);
|
||||
|
||||
static auto bReturnToCreativeHubOffset = Portal->GetOffset("bReturnToCreativeHub");
|
||||
auto bReturnToCreativeHub = Portal->Get<bool>(bReturnToCreativeHubOffset);
|
||||
|
||||
LOG_INFO(LogDev, "bReturnToCreativeHub: {}", bReturnToCreativeHub);
|
||||
|
||||
if (bReturnToCreativeHub)
|
||||
{
|
||||
auto Controller = Cast<AFortPlayerControllerAthena>(PlayerPawn->GetController());
|
||||
|
||||
if (!Controller)
|
||||
return TeleportPlayerOriginal(Context, Stack, Ret);
|
||||
|
||||
AFortPlayerControllerAthena::ServerTeleportToPlaygroundLobbyIslandHook(Controller);
|
||||
}
|
||||
else
|
||||
{
|
||||
static auto TeleportLocationOffset = Portal->GetOffset("TeleportLocation");
|
||||
auto& TeleportLocation = Portal->Get<FVector>(TeleportLocationOffset);
|
||||
PlayerPawn->TeleportTo(TeleportLocation, TeleportRotation);
|
||||
}
|
||||
|
||||
return TeleportPlayerOriginal(Context, Stack, Ret);
|
||||
}
|
||||
Reference in New Issue
Block a user