From 5f17cde1dd15a2b74bf5c86bfd4d2d7fbdfe8f86 Mon Sep 17 00:00:00 2001 From: tilgep Date: Sun, 19 Apr 2026 16:48:02 +0100 Subject: [PATCH 1/2] Strip trailing space from player names --- src/cs2_sdk/entity/cbaseplayercontroller.h | 14 +++++++++++++- src/cs2_sdk/entity/ccsplayercontroller.h | 2 +- src/detours.cpp | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cs2_sdk/entity/cbaseplayercontroller.h b/src/cs2_sdk/entity/cbaseplayercontroller.h index 4aa2de7b8..621e016f9 100644 --- a/src/cs2_sdk/entity/cbaseplayercontroller.h +++ b/src/cs2_sdk/entity/cbaseplayercontroller.h @@ -51,7 +51,19 @@ class CBasePlayerController : public CBaseEntity // - An observer pawn if spectating // - A bot pawn if controlling one CBasePlayerPawn* GetPawn() { return m_hPawn.Get(); } - const char* GetPlayerName() { return m_iszPlayerName(); } + const char* GetPlayerName() + { + static char buf[128]; + const char* name = m_iszPlayerName(); + strncpy(buf, name, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; + + size_t len = strlen(buf); + if (len > 0 && buf[len - 1] == ' ') + buf[len - 1] = '\0'; + + return buf; + } int GetPlayerSlot() { return entindex() - 1; } bool IsConnected() { return m_iConnected() == PlayerConnectedState::PlayerConnected; } void SetPawn(CCSPlayerPawn* pawn) diff --git a/src/cs2_sdk/entity/ccsplayercontroller.h b/src/cs2_sdk/entity/ccsplayercontroller.h index a53eaad09..cc994b9d9 100644 --- a/src/cs2_sdk/entity/ccsplayercontroller.h +++ b/src/cs2_sdk/entity/ccsplayercontroller.h @@ -157,7 +157,7 @@ class CCSPlayerController : public CBasePlayerController m_szClan = g_pEntitySystem->AllocPooledString(pszClanTag); // This name swap trick is necessary to get clients to display the new clan tag - std::string strName = GetPlayerName(); + std::string strName = m_iszPlayerName(); if (!strName.empty() && strName.back() == ' ') strName.pop_back(); diff --git a/src/detours.cpp b/src/detours.cpp index 89c52f0bd..534afdc53 100644 --- a/src/detours.cpp +++ b/src/detours.cpp @@ -386,7 +386,7 @@ void FASTCALL Detour_UTIL_SayText2Filter( Message("Chat from %s to %s: %s\n", param1, target->GetPlayerName(), param2); #endif - UTIL_SayText2Filter(filter, pEntity, eMessageType, msg_name, param1, param2, param3, param4); + UTIL_SayText2Filter(filter, pEntity, eMessageType, msg_name, pEntity->GetPlayerName(), param2, param3, param4); } bool FASTCALL Detour_CCSPlayer_WeaponServices_CanUse(CCSPlayer_WeaponServices* pWeaponServices, CBasePlayerWeapon* pPlayerWeapon) From 503a63868e90cf38e69518ae35f67c453c3858ec Mon Sep 17 00:00:00 2001 From: tilgep Date: Mon, 20 Apr 2026 00:51:57 +0100 Subject: [PATCH 2/2] Remove trailing space check in player targetting --- src/playermanager.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/playermanager.cpp b/src/playermanager.cpp index 9fc7214d9..3fd08da14 100644 --- a/src/playermanager.cpp +++ b/src/playermanager.cpp @@ -1590,13 +1590,7 @@ ETargetError CPlayerManager::GetPlayersFromString(CCSPlayerController* pPlayer, if (!pTarget || !pTarget->IsController() || !pTarget->IsConnected() || pTarget->m_bIsHLTV) continue; - std::string strName = pTarget->GetPlayerName(); - - // Ignore space that might be added by clan tag name swap trick - if (!strName.empty() && strName.back() == ' ') - strName.pop_back(); - - if ((!bExactName && V_stristr(strName.c_str(), pszTarget)) || !V_strcmp(strName.c_str(), pszTarget)) + if ((!bExactName && V_stristr(pTarget->GetPlayerName(), pszTarget)) || !V_strcmp(pTarget->GetPlayerName(), pszTarget)) { nType = ETargetType::PLAYER; if (iNumClients == 1)