Add Respawn 14 >

This commit is contained in:
Heliato
2025-03-16 01:50:10 +01:00
parent 12d3a5ee51
commit 5b510513f3
6 changed files with 85 additions and 0 deletions

View File

@@ -646,4 +646,60 @@ void AFortPlayerControllerAthena::UpdateTrackedAttributesHook(AFortPlayerControl
if (ItemInstancesToRemove.size() > 0)
WorldInventory->Update();
}
void AFortPlayerControllerAthena::ServerClientIsReadyToRespawnHook(AFortPlayerControllerAthena* PlayerControllerAthena)
{
AFortPlayerStateAthena* PlayerStateAthena = Cast<AFortPlayerStateAthena>(PlayerControllerAthena->GetPlayerState());
AFortGameModeAthena* GameModeAthena = Cast<AFortGameModeAthena>(GetWorld()->GetGameMode());
if (!PlayerStateAthena || !GameModeAthena)
return;
AFortGameStateAthena* GameStateAthena = Cast<AFortGameStateAthena>(GameModeAthena->GetGameState());
if (!GameStateAthena) return;
if (GameStateAthena->IsRespawningAllowed(PlayerStateAthena))
{
FFortRespawnData* RespawnData = PlayerStateAthena->GetRespawnData();
if (RespawnData->IsServerReady() && RespawnData->IsRespawnDataAvailable())
{
const FVector& RespawnLocation = RespawnData->GetRespawnLocation();
const FRotator& RespawnRotation = RespawnData->GetRespawnRotation();
// RestartPlayer doesn't work, idk why
static auto SpawnDefaultPawnAtTransformFn = FindObject<UFunction>(L"/Script/Engine.GameModeBase.SpawnDefaultPawnAtTransform");
FTransform SpawnTransform{};
SpawnTransform.Translation = RespawnLocation;
SpawnTransform.Rotation = RespawnRotation.Quaternion();
SpawnTransform.Scale3D = FVector(1, 1, 1);
struct { AController* NewPlayer; FTransform SpawnTransform; APawn* ReturnValue; }
AGameModeBase_SpawnDefaultPawnAtTransform_Params{ PlayerControllerAthena, SpawnTransform };
GameModeAthena->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params);
AFortPlayerPawn* PlayerPawn = Cast<AFortPlayerPawn>(AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue);
if (!PlayerPawn)
return;
PlayerPawn->SetOwner(PlayerControllerAthena);
PlayerControllerAthena->Possess(PlayerPawn);
PlayerPawn->SetMaxHealth(100);
PlayerPawn->SetHealth(100);
PlayerPawn->SetMaxShield(100);
PlayerPawn->SetShield(100);
PlayerControllerAthena->RespawnPlayerAfterDeath(true);
RespawnData->IsClientReady() = true;
}
}
printf_s(__FUNCTION__"\n");
}