Files
ZMMO/Source/ZMMO/Data/World/MapDef.h
Mateus Rodrigues 6a6a28a086 refactor: prefixo ZMMO -> Zeus em classes/módulos C++ do cliente
- Renomeia ~50 classes UCLASS/USTRUCT/UENUM/UINTERFACE pra Zeus*
  (AZeusGameMode, AZeusCharacter, UZeusGameInstance, IZeusEntityInterface,
  UZeusWorldSubsystem, FZeusEntitySnapshot, etc.)
- Encurta AZMMOPlayerCharacter -> AZeusCharacter
- Renomeia módulos satélite ZMMOAttributes -> ZeusAttributes e
  ZMMOJobs -> ZeusJobs (pasta + .Build.cs + .uproject)
- Mantém módulo principal ZMMO (renomeia depois quando jogo ganhar nome)
- DefaultEngine.ini: ActiveClassRedirects ZMMOX -> ZeusX (preserva BPs/assets)
- DefaultGame.ini: sections atualizadas pra ZeusThemeSubsystem/ZeusPlayerState
- Category="ZMMO|..." -> "Zeus|..." em UPROPERTYs
- Preserva LogZMMO, ZMMO_API, /Script/ZMMO., /Game/ZMMO/, classes Target

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 17:24:38 -03:00

93 lines
3.2 KiB
C

#pragma once
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "Engine/World.h"
#include "ZoneRow.h"
#include "MapDef.generated.h"
/**
* FZeusMapSpawn
*
* Ponto de spawn dentro de um mapa, identificado por `Tag`. Usado pelo
* server pra decidir onde materializar um char quando ele entra:
* - Char sem posicao salva: usa spawn com tag="default"
* - Char saindo de raid: pode pedir tag="raid_return"
* - Char morto: pode pedir tag="graveyard"
*
* ZeusEditorTools pode auto-popular o `Spawns[]` do FZeusMapDef varrendo
* todos APlayerStart (ou ator custom AZeusMapSpawnPoint) presentes no
* `.umap` do `ClientLevel` — botao "Sync from level".
*/
USTRUCT(BlueprintType)
struct ZMMO_API FZeusMapSpawn
{
GENERATED_BODY()
/** Identificador do spawn (ex.: "default", "raid_return"). "default" e obrigatorio. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Spawn")
FName Tag = TEXT("default");
/** Posicao em cm (espaco do mundo). */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Spawn")
FVector PositionCm = FVector::ZeroVector;
/** Yaw em graus. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Spawn")
float YawDeg = 0.f;
};
/**
* FZeusMapDef
*
* Definicao canonica de um mapa do MMO. Linha da DT_Maps no cliente.
* Exportada para `Server/ZeusServerEngine/Config/DataTables/maps_config.json`
* pelo plugin ZeusEditorTools — o JSON e a fonte que o WorldServer consome.
*
* Identidade:
* - `MapId` (uint16) e a chave estavel cross-cliente/server. 0 = invalido
* (detecta bug de leitura de DB / migration esquecida).
* - RowName na DataTable e o nome interno (ex.: "TestWorld") — usado no
* exporter como `name` do JSON. Nao duplicamos em campo `Name`.
*
* Wire economy:
* - `S_CHAR_SELECT_OK` envia `mapId` como uint16 (2 bytes) em vez de
* `mapName` (string), evitando ~10-30 bytes por handoff.
*/
USTRUCT(BlueprintType)
struct ZMMO_API FZeusMapDef : public FTableRowBase
{
GENERATED_BODY()
/** ID estavel uint16. 0 = invalido. int32 aqui pois UE nao expoe uint16 em UPROPERTY. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map", meta = (ClampMin = "1", ClampMax = "65535"))
int32 MapId = 0;
/** Nome de exibicao localizavel. Aparece em UI/loading screen. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map")
FText DisplayName;
/** Asset do level no cliente. Exporter converte pra string canonica no JSON do server. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map|Level")
TSoftObjectPtr<UWorld> ClientLevel;
/**
* Pontos de spawn taggeados. Editavel inline na DataTable;
* ZeusEditorTools pode auto-popular varrendo PlayerStart do .umap.
* Pelo menos um com Tag="default" e esperado.
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map|Spawns")
TArray<FZeusMapSpawn> Spawns;
/** Regras PvP/Safe/Dungeon. Reusa enum de FZoneRow. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map")
EZoneRules Rules = EZoneRules::PvE;
/** Faixa de level recomendada — display only. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map|Display")
int32 RecommendedLevelMin = 1;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Map|Display")
int32 RecommendedLevelMax = 99;
};