- UZeusAOIComponent (Game/Network): componente de gameplay do player local com
plus de debug. Overlays via DrawDebug* (esfera AOI real; spawn/cell/handoff
placeholders) dirigidos pela UI via IZeusAOIDebugTarget + console vars. Estado
persiste no componente entre aberturas do menu (IsOverlayEnabled).
- AZeusCharacter: anexa o componente + abre/fecha o painel no F8 (UIOnly trava o
jogo; Esc/F8 fecham); LoadClass lazy do painel no content do PLUGIN
(/ZeusAdminTools/UI/WBP_AdminToolsAIO).
- ZMMO.Build.cs: depende de ZeusAdminToolsRuntime.
- UIProgressBar_Base: rename EaseOutCubic -> EaseOutCubicPB (fix unity-build).
- ZMMO.uproject: remove entrada NwiroIntegrationKit.
A UI e o C++ do plugin ZeusAdminTools vivem no repo Server (plugin autocontido).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ZeusHudWidget: porta de UZeusAttributeComponent legacy pra UZeusGASComponent
(delegate OnSnapshotAppliedRaw via AddUObject; FZeusAttributesSnapshot
construido pelo helper estatico FromPayload do plugin ZeusGAS). Logs
diagnosticos no bind.
- UIPlayerStatus_Window: mesmo porte (snapshot raw + StatAllocReply). Lock
de spam-click preservado.
- ZeusHudHpSpWidget: movido do plugin ZeusAttributes (deletado) pra ZMMO
/Game/UI/InGame/. API preservada (WBP filhos nao precisam mudar).
- ZeusCharacter: tira o dual-seed legacy; so' seedea UZeusGASComponent
via FindComponentByClass no HandleLocalSpawnReady.
- ZeusPlayerState/ZeusCharacter: comentarios atualizados pra refletir o
UZeusGASComponent como dono unico.
- ZMMO.Build.cs: remove dep "ZeusAttributes", adiciona "ZeusGAS" +
"GameplayAbilities".
- ZMMO.uproject: remove module "ZeusAttributes" (delete completo).
- DefaultGame.ini: remove linha legacy comentada do Component Registry.
- DefaultEngine.ini: adiciona [CoreRedirects] pra:
* ZMMOJobs module + ZMMOJobDataAsset class (Package+Class) — 7 DA_Job_*
* ZMMO.ZMMOMapDef struct (DT_Maps row)
* ZMMO.ZMMOLoadingTipRow struct (DT_LoadingTips row)
* ZMMO.ZMMOLoadingProfile/StepDef structs + EZMMOLoadingContext/StepStatus
enums (DA_LoadingProfiles)
- DELETE: Source/ZeusAttributes/ inteiro (5 .cpp + 5 .h + Build.cs +
module.json).
Pegadinha aprendida: ActiveClassRedirects so' renomeia classe (sem
package); CoreRedirects (ClassRedirects/StructRedirects/EnumRedirects/
PackageRedirects) e' obrigatorio quando muda modulo OU quando o asset
referencia USTRUCT/UENUM. Tipo errado nao da erro mas tambem nao funciona.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Servidor-side plugin foi renomeado de ZeusAbilities pra ZeusGAS (vai
absorver atributos + abilities + bridge ZeusNetwork). .uproject precisa
seguir o novo nome senao plugin deixa de carregar.
Server-side commit: ver Server repo branch GameplayAbilitySystem,
commit refactor(plugin): R.7 - rename plugin ZeusAbilities -> ZeusGAS.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Snapshot do trabalho em andamento na branch feat/ui-system: refinamentos do
UIButton_Base (header+impl), atualizacao de styles/themes do botao, mapa de
teste L_ZeusIATest, e demais .uasset/Config tocados durante a sessao de
playtest do meshing. Commit conjunto a pedido do usuario pra deixar a branch
limpa antes do proximo batch.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sub-módulo cliente do JobsSystem do server. Pavimenta dados visuais/UI por
job (DisplayName localizado, ícone, anim override, som de level up) sem
acoplar ao ZMMOAttributes.
ARQUITETURA — espelha o peer-module pattern do server (PR #9):
Server: Game/MMO/Modules/JobsSystem (módulo núcleo, LoadOrder=50)
Client: Source/ZMMOJobs/ (LoadingPhase=PreDefault, peer de ZMMOAttributes)
ZMMOAttributes NÃO depende de ZMMOJobs — server envia classId no snapshot,
cliente faz lookup local via Library/Subsystem.
NOVOS ARQUIVOS
C++ module (Source/ZMMOJobs/):
- module.json + ZMMOJobs.Build.cs (deps: Core/Engine/AssetRegistry)
- ZMMOJobsModule.h/.cpp — IMPLEMENT_MODULE
- ZMMOJobDataAsset.h/.cpp — UPrimaryDataAsset (BlueprintType)
campos: ClassId, TechnicalName,
DisplayName, JobIcon (soft),
DefaultAnimInstanceClass,
JobChangeMontage (soft),
LevelUpSoundCue (soft)
- ZMMOJobsSubsystem.h/.cpp — UGameInstanceSubsystem
scan AssetRegistry no Initialize +
cache TMap<int32, DA*> por ClassId
O(1) GetJobData(ClassId)
- ZMMOJobsLibrary.h/.cpp — UBlueprintFunctionLibrary
GetJobDisplayName/GetJobData/IsJobRegistered
fallback "Classe N" se ClassId desconhecido
Content:
- Content/ZMMO/Data/Jobs/DA_Job_Novice.uasset
(ClassId=0, TechnicalName="Novice", DisplayName="Aprendiz")
MODIFICADOS
- ZMMO.uproject: + Module "ZMMOJobs" (LoadingPhase PreDefault)
- Source/ZMMO/ZMMO.Build.cs: + "ZMMOJobs" em PublicDependencyModuleNames
- Source/ZMMO/Game/UI/FrontEnd/UICharCard_Base.cpp:51 — primeiro consumer
do Library: "Classe %d" hardcoded → UZMMOJobsLibrary::GetJobDisplayName(this, ClassId)
Card da seleção de personagem agora mostra "Aprendiz" via DA lookup.
BLUEPRINT ACCESS
Toda a API exposta pra BP via UFUNCTION(BlueprintPure):
- UZMMOJobsLibrary::GetJobDisplayName(Self, ClassId) → FText
- UZMMOJobsLibrary::GetJobData(Self, ClassId) → UZMMOJobDataAsset*
- UZMMOJobsSubsystem::GetJobData(ClassId)
- UZMMOJobDataAsset propriedades BlueprintReadOnly (UMG binding direto)
LOOKUP
AssetRegistry varre /Game/ por UZMMOJobDataAsset no boot do GameInstance.
Chave = campo ClassId do asset (não nome do arquivo — renomear .uasset OK).
Lookup O(1) via TMap. Custo de scan amortizado em 1 vez por sessão (~50ms
pra 50 jobs futuro).
VALIDAÇÃO
Editor:
[Log] DA class found: <class 'ZMMOJobDataAsset'>
[Log] Subsystem class found: <class 'ZMMOJobsSubsystem'>
[Log] Library class found: <class 'ZMMOJobsLibrary'>
[Log] AssetRegistry encontrou 1 ZMMOJobDataAsset(s):
- DA_Job_Novice @ /Game/ZMMO/Data/Jobs/DA_Job_Novice
Próximo módulo cliente: 1 linha no .uproject + .Build.cs + ZMMOJobs.Build.cs
não muda. Pattern estabelecido.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Camada de estilo data-driven do cliente ZMMO, portando o nucleo do projeto de referencia (Hyper) para C++ conforme ARQUITETURA.md (BP Struct proibido):
- Source/ZMMO/Data/UI: UIStyleTypes.h (enums EUI*), UIStyleTokens.h (tokens primitive/semantic/component), UIStyleRow.h (FUIStyle + FUIStyleRow). - ZMMOThemeSubsystem: GetActiveUIStyle() resolve DT_UI_Styles por ThemeId com fallback Default. - Fontes: 8 UFontFace Inline (Cinzel/Rajdhani) em Content/ZMMO/UI/Fonts + DT_UI_Styles preenchido. - ARQUITETURA.md: prefixo de widget UI_, classes base UUI*_Base (UCLASS Abstract) sem prefixo ZMMO. - Config/DefaultGame.ini: UIStyleTable apontando DT_UI_Styles. - Scripts/import_fonts.py (importador idempotente). Inclui tambem o scaffolding do modulo ZMMO ainda nao versionado (Source/ZMMO/Data, Game/UI, Content/ZMMO, uproject, Build.cs).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ZMMOPlayerCharacter: SendInputAxis agora envia viewYawDeg
(GetController()->GetControlRotation().Yaw, fallback para
GetActorRotation().Yaw) + posicao autoritativa (GetActorLocation)
+ velocidade XY (GetVelocity) — bate com o C_INPUT_AXIS de 41
bytes do servidor (ADR 0041).
ZMMOPlayerProxy:
- MOVE_Walking + RotationRate=0 + bRunPhysicsWithNoController=false
para o AnimBP do Quinn transitar entre Idle/Run sem o CMC
integrar fisica.
- Defaults visuais SKM_Quinn_Simple + ABP_Unarmed no construtor
para o proxy ser visivel em PIE sem precisar de BP filha.
- Line trace local de fallback (ECC_Visibility, 5m down) ajusta Z
quando o snapshot Z vier estranho. Armadilha conhecida: Landscape
do UE5 esta em ECC_WorldStatic — quando o trace falhar,
AdjustedPos.Z fica igual ao snapshot. Fix do canal fica no backlog
(bug do proxy sumir ao encostar parede).
ZMMO.uproject: indentacao tabs + plugin "meshy" registrado disabled.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Estrutura inicial do cliente Unreal Zeus MMO alinhada ao padrao
"cliente solto + servidor valida input/velocidade" (ADR 0038):
- Source/ZMMO/Game/Entity/ — IZMMOEntityInterface, AZMMOEntity (base
AActor para Mob/NPC/Object), AZMMOPlayerCharacter (player local com
CMC livre, Enhanced Input, envio de C_INPUT_AXIS), AZMMOPlayerProxy
(snapshot-only para players remotos).
- Source/ZMMO/Game/Controller/ — AZMMOPlayerController com IMC defaults
(IMC_Default + IMC_MouseLook) e suporte opcional a virtual joystick.
- Source/ZMMO/Game/Modes/ — AZMMOGameMode (defaults para PlayerCharacter
/ PlayerController), UZMMOGameInstance (auto-connect ao servidor Zeus
em Init e logging dos eventos OnConnected/OnDisconnected/...).
- Source/ZMMO/Game/Network/ — UZMMOWorldSubsystem (registry
EntityId -> AActor*, dispatch dos delegates OnPlayerSpawned/Despawned/
StateUpdate; ignora snapshots locais do cliente solto).
- Config/DefaultEngine.ini — GlobalDefaultGameMode aponta para
/Script/ZMMO.ZMMOGameMode; GameInstanceClass para
/Script/ZMMO.ZMMOGameInstance; redirects para a nova hierarquia.
- ZMMO.Build.cs — depende de ZeusNetwork; PublicIncludePaths para a
nova arvore Game/Entity|Controller|Modes|Network.
- Content — assets do template ThirdPerson (Mannequins, IAs/IMCs,
Lvl_ThirdPerson + TestWorld). Os Variant_* levels ficam no commit
inicial mas serao limpos numa proxima sessao com aprovacao explicita
(Master Rule para .umap/.uasset).
Notas:
- BP_ThirdPersonCharacter/GameMode/PlayerController ainda apontam para
a hierarquia antiga e estao a aguardar aprovacao para remocao
(Master Rule).
- README.md descreve a arquitectura e o smoke test de conexao.