From eb1779f58c61759dee4551adc48636b06ef41a35 Mon Sep 17 00:00:00 2001 From: Edgar Date: Tue, 30 Jun 2020 11:43:06 +0200 Subject: [PATCH] Fix showothers for specchar --- src/game/client/components/nameplates.cpp | 4 +++- src/game/client/components/players.cpp | 4 +++- src/game/server/player.cpp | 14 +++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/game/client/components/nameplates.cpp b/src/game/client/components/nameplates.cpp index 597f1c171..ed202396e 100644 --- a/src/game/client/components/nameplates.cpp +++ b/src/game/client/components/nameplates.cpp @@ -177,7 +177,9 @@ void CNamePlates::OnRender() if(m_pClient->m_aClients[i].m_SpecCharPresent) { - RenderNameplatePos(m_pClient->m_aClients[i].m_SpecChar, pInfo, 0.4f); + bool OtherTeam = m_pClient->IsOtherTeam(i); + float Alpha = 0.4f * (OtherTeam ? g_Config.m_ClShowOthersAlpha / 100.0f : 1.0f); + RenderNameplatePos(m_pClient->m_aClients[i].m_SpecChar, pInfo, Alpha); } // only render active characters diff --git a/src/game/client/components/players.cpp b/src/game/client/components/players.cpp index 63868e803..3bb6aa19e 100644 --- a/src/game/client/components/players.cpp +++ b/src/game/client/components/players.cpp @@ -675,8 +675,10 @@ void CPlayers::OnRender() { continue; } + bool OtherTeam = m_pClient->IsOtherTeam(i); + float Alpha = OtherTeam ? g_Config.m_ClShowOthersAlpha / 100.0f : 1.0f; vec2 Pos = m_pClient->m_aClients[i].m_SpecChar; - RenderTools()->RenderTee(CAnimState::GetIdle(), &m_RenderInfoSpec, EMOTE_BLINK, vec2(1, 0), Pos, 1.0f); + RenderTools()->RenderTee(CAnimState::GetIdle(), &m_RenderInfoSpec, EMOTE_BLINK, vec2(1, 0), Pos, Alpha); } else { diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp index 8bc65b4a6..c12cd1ee8 100644 --- a/src/game/server/player.cpp +++ b/src/game/server/player.cpp @@ -404,7 +404,19 @@ void CPlayer::Snap(int SnappingClient) pRaceInfo->m_RaceStartTick = m_pCharacter->m_StartTime; } - if(m_pCharacter && m_pCharacter->IsPaused()) + bool ShowSpec = m_pCharacter && m_pCharacter->IsPaused(); + + if(SnappingClient >= 0) + { + CPlayer *pSnapPlayer = GameServer()->m_apPlayers[SnappingClient]; + ShowSpec = ShowSpec && ( + GameServer()->GetDDRaceTeam(id) == GameServer()->GetDDRaceTeam(SnappingClient) + || pSnapPlayer->m_ShowOthers + || (pSnapPlayer->GetTeam() == TEAM_SPECTATORS || pSnapPlayer->IsPaused()) + ); + } + + if(ShowSpec) { CNetObj_SpecChar *pSpecChar = static_cast(Server()->SnapNewItem(NETOBJTYPE_SPECCHAR, id, sizeof(CNetObj_SpecChar))); pSpecChar->m_X = m_pCharacter->Core()->m_Pos.x;