ZMMOWorldSubsystem:
- Bind dos delegates + replay do cache de proxies remotos movidos
de Initialize pra OnWorldBeginPlay. Initialize roda muito cedo no
pipeline de LoadMap (antes do GameMode ser instanciado e do
WorldPartition terminar de carregar cells) — atores dinamicos
spawnados ali eram perdidos durante o setup posterior do mundo.
- Replay agora acontece quando o World REALMENTE comeca (GameMode
ativo, cells inicializadas) — proxies remotos persistem.
WireHelpers.h (novo):
- Helpers de leitura/escrita binarios LE/UTF-8 (ReadU8/U16/U32/U64/
Float/StringUtf8/Uuid16 + Write*) como inline em namespace
ZMMOWire. Substitui anonymous namespaces duplicados que existiam
em 3 telas do FrontEnd. UBT Adaptive Build agrupava os .cpp em
unity files diferentes; quando reorganizava as unities, dois
arquivos caiam na mesma TU e os anonymous namespaces colidiam
(ODR violation — "funcao ja tem corpo").
- inline em header tem semantica de "uma definicao por programa",
resolvendo a colisao independente de como o UBT organize unities.
UIServerSelectScreen_Base, UIUserLobbyScreen_Base, UICharacterCreatePage_Base:
- Removidas as definicoes duplicadas, agora usam ZMMOWire::* via
using-declarations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Lobby:
- HandleCharSelectOk invoca UZeusNetworkSubsystem->ConnectToZeusServerWithTicket
(host, port, token) recebido do CharServer no S_CHAR_SELECT_OK.
Server travel:
- HandleServerTravelRequested força ZMMOGameMode via URL option
(`?game=/Script/ZMMO.ZMMOGameMode`) no OpenLevel, independente do
GameModeOverride do .umap. Evita herdar ZMMOFrontEndGameMode em mapas
copiados/baseados em L_FrontEnd.
PlayerController:
- ZMMOPlayerController::BeginPlay força FInputModeGameOnly + cursor off +
FlushPressedKeys ao tomar posse. Necessário pq UIManagerSubsystem é
LocalPlayerSubsystem (sobrevive ao travel) e o controller anterior
(AZMMOFrontEndPlayerController) tinha setado FInputModeUIOnly — sem este
reset, WASD/Look não chegavam ao pawn no novo mundo.
Assets:
- TestWorld: PlayerStart adicionado, World Settings com GameModeOverride=
ZMMOGameMode + Default Pawn=ZMMOPlayerCharacter + Controller=
ZMMOPlayerController.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
UILoginScreen_Base agora envia uint8(PASSWORD) + string(user) +
string(pass) no C_CHAR_AUTH_REQUEST (em vez de string(token dev:N)).
Servidor valida via AccountService.login (Argon2id + lockout) — contas
são criadas com 'npm run account' no ZeusCharServer.
CharServerOpcodes.h espelha do servidor:
- ZMMOCharAuthMethod::{TOKEN=0, PASSWORD=1}
- ZMMOCharRejectReason::{InvalidToken, AccountBanned, AlreadyOnline,
InvalidCredentials=4, AccountLocked=5, AccountSuspended=6,
CredentialsAuthDisabled=7}
S_CHAR_AUTH_REJECT mapeia por switch:
- 4 → InvalidCredentialsText (Usuário ou senha inválidos.)
- 5 → AccountLockedText (Conta bloqueada por excesso de tentativas.)
- 6 → AccountSuspendedText (Conta suspensa.)
- 7 → CredentialsDisabledText (Auth indisponível no servidor.)
- outros → RejectedText + código
MakeDevToken removido (StubTokenValidator continua aceitando dev:N
no servidor para testes diretos via outro cliente).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- UI_Input_Master refatorado: SizeBox -> Overlay -> Background/Stroke (UImage)
+ EditableTextBox. Cor magenta default eliminada — UImages atrás
pintam o visual via DT_UI_Styles.
- UI_Label_Master novo: wrapper "label + input" com 2 slots de UI_Input_Master
(Stacked/Inline). Reaproveita o input puro como composição reutilizável.
- UILabel_Base/UIInput_Base (C++): hierarquia limpa, propagação de Variant/
HintText/FontSize/PreferredWidth/Height/bIsPassword pai->filho com
passthrough em 0/vazio (override só quando setado).
- FUIStyleInput*: campos avulsos (BackgroundColor/Texture/DrawAs/Margin)
trocados por FSlateBrush completo — DT expõe agora Image, ImageSize,
Matiz, Desenhar como, Ladrilhos, Margin, UV no Designer.
- 11 texturas Hyper copiadas (T_Bar_Gradient_Background_Long + 10 borders)
e referenciadas em DT_UI_Styles row Default (Backgrounds + Strokes das 4
variantes Box/Outline/Underline/Search).
- ZMMOThemeSubsystem.Initialize: força chamada de ResolveActiveUIStyle
mesmo quando ActiveTheme não muda — evita ActiveUIStyle ficar vazio
quando DefaultThemeAsset é nullptr (sintoma: Brushes não renderizavam
em PIE/runtime).
- "Lembrar Acesso": UZMMOLoginSaveGame nova (USaveGame com SavedUsername
+ bRememberAccess), load assíncrono em NativeOnActivated, save/delete
em HandleLoginClicked. Slot "LoginCache" em Saved/SaveGames/. Padrão
alinhado com jogos comerciais — nunca persiste senha (CWE-256);
refresh token + DPAPI virão quando auth real entrar.
- WBP_Login: Input_User/Password agora são UI_Label_Master_C; checkbox
Lembrar bindada por nome (RememberAccess -> UUICheckBox_Base*).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
UUIBootScreen_Base::SetReady: Btn_Start agora alterna visibilidade —
Collapsed (sem ocupar layout) enquanto conecta ao ZeusCharServer; ao
conectar fica Visible + interagível. Antes ficava só desabilitado.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Primeira tela concreta do front-end, cópia fiel do WBP_BootScreen gerado
pelo Zeus UMG Forge, adaptada aos componentes do projeto:
- UUIBootScreen_Base : UUIActivatableScreen_Base — observa o
UZeusCharServerSubsystem; libera "Iniciar" no OnConnected; clique →
UUIFrontEndFlowSubsystem::RequestEnterLogin → estado Login.
- UUISpinner_Base (componente compartilhado temável) + FUIStyleSpinner.
- FUIStyle.ScreenBackground (brush data-driven); fundo via DT_UI_Styles
(T_Boot_Background em UI/Themes/Default/Boot), sem hard-ref no WBP (§5).
- ThemeKeys: Boot_Background/Logo/Music.
- Correção do Flow: pré-login agora conecta no UZeusCharServerSubsystem
(WebSocket 7100), não mais no UDP do world server (que fica só p/
EnteringWorld/InWorld); RequestEnterLogin() adicionado.
- WBP_Boot duplicado fiel + reparent UUIBootScreen_Base; swap manual no
Designer (Btn_Start/Spinner_Connect/Text_Status); slots de layout
(Container_Root/Stage/Content) ajustados p/ preencher/centralizar.
- WBP_PrimaryGameLayout: Stack_Modal corrigido p/ Fill/Fill.
- DA_FrontEndScreenSet: StateScreens[Boot] = WBP_Boot.
- ARQUITETURA.md (§2.1/§2.2/§4.8 + nota CharServer).
Validado em PIE: tela centralizada, fundo, conexão ao ZeusCharServer e
liberação do botão. Crash do plugin tratado em commit separado do server.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>