Add MVP server travel flow

This commit is contained in:
2026-05-18 15:12:20 -07:00
parent 1367f5963a
commit ebc7aa1ec6
6 changed files with 147 additions and 1 deletions
@@ -22,6 +22,20 @@
namespace
{
const FVector GroundZeroDeveloperTravelHomeLocation(-22000.0f, -3500.0f, 1148.0f);
const TCHAR* GroundZeroServerTravelMapPath = TEXT("/Game/Agrarian/Maps/L_GroundZeroTerrain_Test");
bool ResolveAgrarianServerTravelMap(const FName MapName, FString& OutTravelMap)
{
if (MapName == NAME_None
|| MapName == TEXT("GroundZero")
|| MapName == TEXT("L_GroundZeroTerrain_Test"))
{
OutTravelMap = GroundZeroServerTravelMapPath;
return true;
}
return false;
}
bool ApplyAgrarianItemUseEffect(const FName ItemId, const int32 Quantity, UAgrarianSurvivalComponent* SurvivalComponent, FString& OutEffectSummary)
{
@@ -260,6 +274,11 @@ void AAgrarianGamePlayerController::AgrarianTravelHome()
ServerAgrarianTravel(GroundZeroDeveloperTravelHomeLocation);
}
void AAgrarianGamePlayerController::AgrarianServerTravel(FName MapName)
{
ServerAgrarianServerTravel(MapName);
}
void AAgrarianGamePlayerController::ServerAgrarianGrantItem_Implementation(FName ItemId, int32 Quantity)
{
AAgrarianGameCharacter* AgrarianCharacter = GetPawn<AAgrarianGameCharacter>();
@@ -521,3 +540,24 @@ void AAgrarianGamePlayerController::ServerAgrarianTravel_Implementation(FVector
ClientMessage(TEXT("Developer travel failed: invalid destination."));
}
}
void AAgrarianGamePlayerController::ServerAgrarianServerTravel_Implementation(FName MapName)
{
UWorld* World = GetWorld();
if (!World || !HasAuthority())
{
ClientMessage(TEXT("Agrarian server travel failed: no authoritative world."));
return;
}
FString TravelMap;
if (!ResolveAgrarianServerTravelMap(MapName, TravelMap))
{
ClientMessage(TEXT("Usage: AgrarianServerTravel GroundZero"));
return;
}
const FString TravelURL = FString::Printf(TEXT("%s?listen"), *TravelMap);
ClientMessage(FString::Printf(TEXT("Agrarian server travel requested: %s"), *TravelURL));
World->ServerTravel(TravelURL, false, false);
}