From 16de963301a640edc4e057e22d2d64fff0330234 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues Date: Wed, 3 Jun 2026 21:56:49 -0300 Subject: [PATCH] fix(net): S_CHAR_INFO so' aplica em si mesmo (anti name overwrite por proxy) Bug: handler aceitava qualquer S_CHAR_INFO do server (proprio + catch-up de proxies pre-existentes) e sobrescrevia o PlayerState local. Resultado: nome do ultimo proxy recebido virava o nome do char local na tela. Fix: bail se InEntityId != ZeusEntityId (proxies remotos sao roteados pelo registry no UZeusWorldSubsystem; nameplate por EntityId fica pra futuro). --- Source/ZMMO/Game/Entity/ZeusCharacter.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp index 11943f2..2538956 100644 --- a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp +++ b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp @@ -432,6 +432,17 @@ void AZeusCharacter::HandleZeusCharInfo(const int64 InEntityId, const FString& C TEXT("AZeusCharacter: S_CHAR_INFO recebido EntityId=%lld name=%s guild=%s"), InEntityId, *CharName, *GuildName); + // 2026-06-03 fix: server envia S_CHAR_INFO de TODOS os players (proprio + + // catch-up de proxies pre-existentes). Sem este filtro, o nome do ultimo + // proxy recebido sobrescrevia o do pawn local (ex: player Mateuus loga e + // ve "Olatudook" em si mesmo porque o catch-up do Olatudook chegou depois + // do S_CHAR_INFO proprio). Proxies remotos sao roteados pelo registry no + // UZeusWorldSubsystem (futuro nameplate por EntityId). + if (ZeusEntityId != 0 && InEntityId != ZeusEntityId) + { + return; + } + APlayerState* PS = GetPlayerState(); if (!PS) {