feat: ZMMO client base (Game/Entity|Controller|Modes|Network)

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.
This commit is contained in:
2026-05-07 20:21:21 -03:00
parent 9a5a0eef61
commit 3d4d0de40b
828 changed files with 7799 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
From f7238064c8680f6392793eb664ee2c773daff594 Mon Sep 17 00:00:00 2001
From: Oleksandr Kozlov <okozlov@microsoft.com>
Date: Tue, 1 Apr 2025 15:22:14 +0200
Subject: [PATCH] Support extra UBT args in UAT.BuildPlugin
Forwarding extra parameters to UBT to allow customizing the build of a plugin.
Example: runuat.bat buildpluing -plugin=... -ubtargs="-LinkerArguments=\"/profile\""
---
.../Scripts/BuildPluginCommand.Automation.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs b/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs
index 5a43dc0c4..aaf3f192f 100644
--- a/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs
+++ b/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs
@@ -64,6 +64,9 @@ public sealed class BuildPlugin : BuildCommand
// Option for verifying that all include directive s
bool bStrictIncludes = ParseParam("StrictIncludes");
+ // Extra arguments forwarded to UBT
+ string UBTArgs = ParseParamValue("ubtargs");
+
// Make sure the packaging directory is valid
DirectoryReference PackageDir = new DirectoryReference(PackageParam);
@@ -126,6 +129,16 @@ public sealed class BuildPlugin : BuildCommand
AdditionalArgs.Append(" -NoPCH -NoSharedPCH -DisableUnity");
}
+ // Pass extra parameters to UBT
+ if (string.IsNullOrEmpty(UBTArgs) == false)
+ {
+ Logger.LogInformation("Building with extra UBT parameters: {UBTArgs}", UBTArgs);
+ string Arg = UBTArgs;
+ Arg = Arg.TrimStart(new char[] { '\"' });
+ Arg = Arg.TrimEnd(new char[] { '\"' });
+ AdditionalArgs.Append(' ').Append(Arg);
+ }
+
// check if any architectures were specified
foreach (UnrealTargetPlatform Platform in UnrealTargetPlatform.GetValidPlatforms())
{
--
2.49.0.windows.1

View File

@@ -0,0 +1,21 @@
{
"tsaVersion": "TsaV2",
"codebase": "NewOrUpdate",
"codebaseName": "vc-ue-extensions",
"tsaStamp": "DevDiv",
"tsaEnvironment": "PROD",
"notificationAliases": [
"hebaggio@microsoft.com",
"cpp-apogee@microsoft.com"
],
"codebaseAdmins": [
"REDMOND\\hebaggio",
"REDMOND\\cpp-apogee"
],
"instanceUrl": "https://devdiv.visualstudio.com",
"projectName": "DevDiv",
"areaPath": "DevDiv\\Cpp Developer Experience\\GameDev Experience\\Unreal Engine integrations",
"iterationPath": "DevDiv",
"alltools": true,
"repositoryName": "vc-ue-extensions"
}

View File

@@ -0,0 +1,125 @@
# IMPORTANT:
# Do not run BinSkim because we do not control producing the binaries. That process is owned by
# Epic. We just provide source code. Since we do not control the build, BinSkim is not needed.
variables:
Codeql.Enabled: true
Codeql.SourceRoot: '$(Build.SourcesDirectory)'
trigger:
- main
pr:
autoCancel: true
branches:
include:
- main
- dev/*
schedules:
- cron: "0 12 * * Sun"
displayName: Weekly run
branches:
include:
- main
always: true
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
pool:
name: VSEngSS-MicroBuild2022-1ES
os: windows
customBuildTags:
- ES365AIMigrationTooling
stages:
- stage: stage
jobs:
- job: 'UnrealEngine_VisualStudioTools_Compliance'
timeoutInMinutes: 1440
steps:
- task: CmdLine@2
displayName: 'Clone Unreal Engine Repository'
inputs:
script: 'git clone "https://$(token)@github.com/EpicGames/UnrealEngine" --single-branch --branch $(ue_branch) --depth 1 ue'
workingDirectory: '$(Agent.BuildDirectory)'
- task: CmdLine@2
displayName: 'Apply patch to allow us to pass linker flags to the build'
inputs:
script: 'git apply --ignore-whitespace $(Build.SourcesDirectory)/azure-pipelines/Support-extra-UBT-args-in-UAT.BuildPlugin.patch'
workingDirectory: '$(Agent.BuildDirectory)\ue'
- task: PowerShell@2
displayName: '[UE] Append /unattended option'
inputs:
targetType: 'inline'
script:
$filePath = "$(Agent.BuildDirectory)/ue/Setup.bat";
(Get-Content $filePath).Replace("/register", "/register /unattended") | Set-Content $filePath
- task: CmdLine@2
displayName: '[UE] Run Setup.bat'
inputs:
script: 'ue\Setup.bat --force'
workingDirectory: '$(Agent.BuildDirectory)'
- task: MSBuild@1
displayName: 'Build Plugin'
timeoutInMinutes: 300
inputs:
solution: '$(Build.SourcesDirectory)/build.proj'
msbuildArguments: '/p:UnrealEngine=$(Agent.BuildDirectory)\ue /p:OutputPath=$(Build.ArtifactStagingDirectory)\drop /p:VulkanReadyBinaries=true'
createLogFile: true
- task: CopyFiles@2
displayName: 'Collect binaries to analyze'
inputs:
SourceFolder: '$(Build.ArtifactStagingDirectory)\drop'
Contents: '**\unrealeditor-visualstudiotools.*'
TargetFolder: '$(Build.ArtifactStagingDirectory)\binariesToAnalyze'
CleanTargetFolder: true
OverWrite: true
- task: PoliCheck@2
inputs:
targetType: 'F'
targetArgument: '$(Build.SourcesDirectory)'
- task: ComponentGovernanceComponentDetection@0
inputs:
ignoreDirectories: '$(Agent.BuildDirectory)\ue'
displayName: 'Component Detection'
- task: APIScan@2
displayName: 'Run APIScan'
inputs:
azureSubscription: 'VSEng-APIScanSC'
softwareFolder: '$(Build.ArtifactStagingDirectory)/binariesToAnalyze'
softwareName: 'Visual Studio Tools for Unreal Engine'
softwareVersionNum: '2.4'
softwareBuildNum: '$(Build.BuildId)'
toolVersion: 'Latest'
env:
AzureServicesAuthConnectionString: RunAs=App;AppId=d318cba7-db4d-4fb3-99e1-01879cb74e91;TenantId=72f988bf-86f1-41af-91ab-2d7cd011db47;ServiceConnectionId=93e24264-c5e6-4681-8175-ec8a41668480;
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- task: SDLNativeRules@3
displayName: 'Run the PREfast SDL Native Rules for MSBuild'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
inputs:
publishXML: true
userProvideBuildInfo: auto
rulesetName: Recommended
setupCommandlinePicker: 'vs2022'
- task: PublishSecurityAnalysisLogs@3
displayName: 'Publish security analysis logs'
inputs:
ArtifactName: 'CodeAnalysisLogs'
ArtifactType: 'Container'
AllTools: true
ToolLogsNotFoundAction: 'Standard'
- task: TSAUpload@2
displayName: 'TSA upload'
inputs:
GdnPublishTsaOnboard: True
GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)/azure-pipelines/TSAOptions.json'

View File

@@ -0,0 +1,122 @@
# IMPORTANT:
# Do not run BinSkim because we do not control producing the binaries. That process is owned by
# Epic. We just provide source code. Since we do not control the build, BinSkim is not needed.
# Manual trigger for now
trigger: none
pr: none
parameters:
- name: SignTypeOverride
displayName: Signing Type (default is real for the main branch and test otherwise)
type: string
default: default
values:
- default
- test
- real
variables:
# MicroBuild requires TeamName to be set.
- name: TeamName
value: C++ Unreal Engine
- name: TagName
value: $[replace(variables['Build.SourceBranch'], 'refs/tags/', '')]
# If the user didn't override the signing type, then only real-sign on main.
- ${{ if ne(parameters.SignTypeOverride, 'default') }}:
- name: SignType
value: ${{ parameters.SignTypeOverride }}
- ${{ if and(eq(parameters.SignTypeOverride, 'default'), or(eq(variables['Build.SourceBranchName'], 'main'), startsWith(variables['Build.SourceBranch'], 'refs/tags'))) }}:
- name: SignType
value: real
- ${{ if and(eq(parameters.SignTypeOverride, 'default'), not(or(eq(variables['Build.SourceBranchName'], 'main'), startsWith(variables['Build.SourceBranch'], 'refs/tags')))) }}:
- name: SignType
value: test
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
pool:
name: VSEngSS-MicroBuild2022-1ES
os: windows
customBuildTags:
- ES365AIMigrationTooling
stages:
- stage: stage
jobs:
- job: 'UnrealEngine_VisualStudioTools_Release'
timeoutInMinutes: 1440
templateContext:
outputParentDirectory: $(Agent.BuildDirectory)/out/
outputs:
- output: pipelineArtifact
displayName: 'Publish signed plugin files'
targetPath: $(Agent.BuildDirectory)/out
artifactName: SignedPlugin
artifactType: container
sbomEnabled: false
steps:
- powershell: |
Write-Host "##vso[task.setVariable variable=SHA1]$(git rev-parse HEAD)"
displayName: Save tag commit hash
workingDirectory: '$(Build.SourcesDirectory)'
- task: MicroBuildSigningPlugin@4
displayName: Install MicroBuild Signing
inputs:
signType: $(SignType)
zipSources: true
feedsource: 'https://pkgs.dev.azure.com/devdiv/_packaging/MicroBuildToolset/nuget/v3/index.json'
${{ if eq(variables.SignType, 'real')}}:
ConnectedPMEServiceName: '6cc74545-d7b9-4050-9dfa-ebefcc8961ea'
- task: PowerShell@2
displayName: "Create zip excluding .git folder"
inputs:
targetType: 'inline'
script: |
$destinationDirectory = "$(Agent.BuildDirectory)/out"
New-Item -Path $destinationDirectory -ItemType Directory
git archive -o "$destinationDirectory/VisualStudioTools.zip" $(SHA1)
- powershell: New-FileCatalog -Path .\VisualStudioTools.zip -CatalogFilePath .\VisualStudioTools.zip.cat -CatalogVersion 2.0
displayName: Create standalone catalog
workingDirectory: '$(Agent.BuildDirectory)\out'
- task: NuGetToolInstaller@1
inputs:
versionSpec: 5.7
- task: NuGetCommand@2
displayName: 'NuGet Restore MicroBuild Signing Extension'
inputs:
command: 'restore'
restoreSolution: 'Scripts/SignDetached.proj'
feedsToUse: 'config'
restoreDirectory: '$(Build.SourcesDirectory)\Scripts\packages'
- task: MSBuild@1
displayName: Sign catalogs
inputs:
solution: Scripts/SignDetached.proj
msbuildArguments: /p:SignType=$(SignType) /p:BaseOutputDirectory=$(Agent.BuildDirectory)\out
# === Disabled for now in favor of uploading the artifacts to the pipeline ===
# - task: GitHubRelease@1
# displayName: Pre-release to public repo
# condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
# inputs:
# gitHubConnection: GitHub-VSCodeExtensions
# repositoryName: microsoft/vc-ue-extensions
# action: create
# target: $(SHA1)
# tagSource: gitTag
# tag: $(TagName)
# title: $(TagName)
# isDraft: true
# isPreRelease: true
# assets: |
# $(Agent.BuildDirectory)\out\VisualStudioTools.zip
# $(Agent.BuildDirectory)\out\VisualStudioTools.zip.cat