@@ -750,48 +750,76 @@ CON_COMMAND_F(cs2f_fullupdate, "- Force a full update for all clients.", FCVAR_L
750750 g_playerManager->FullUpdateAllClients ();
751751}
752752
753+ void VoiceChatPrintPlayer (CCSPlayerController* player, int slot)
754+ {
755+ CCSPlayerController* pController = CCSPlayerController::FromSlot (slot);
756+ ZEPlayer* pPlayer = g_playerManager->GetPlayer (slot);
757+
758+ bool bSteamIDAuthed = pPlayer->IsAuthenticated ();
759+ uint64 uSteamID = bSteamIDAuthed ? pPlayer->GetSteamId64 () : pPlayer->GetUnauthenticatedSteamId64 ();
760+ std::string strPlayerName = pController->GetPlayerName ();
761+ CPlayerUserId userId = g_pEngineServer2->GetPlayerUserId (slot);
762+
763+ ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " \x04 %s \x06 [#%hu] \x05 [%llu%s\x05 ]" , strPlayerName.c_str (), userId, uSteamID, bSteamIDAuthed ? " " : " \x02 (No Auth)" );
764+
765+ if (player)
766+ ClientPrint (player, HUD_PRINTCONSOLE , CHAT_PREFIX " %s [#%hu] [%llu%s]" , strPlayerName.c_str (), userId, uSteamID, bSteamIDAuthed ? " " : " (No Auth)" );
767+ }
768+
753769void VoiceChatPrintCmd (const CCommand& args, CCSPlayerController* player)
754770{
755771 if (!GetGlobals ()) return ;
756772
757773 std::vector<int > vecActivePlayers;
774+ std::vector<std::pair<int , float >> vecRecentPlayers;
775+
758776 for (int i = 0 ; i < GetGlobals ()->maxClients ; i++)
759777 {
760778 ZEPlayer* pPlayer = g_playerManager->GetPlayer (i);
761779
762- if (pPlayer && !pPlayer->GetVoiceTimer ().expired ())
780+ if (!pPlayer)
781+ continue ;
782+
783+ float flLastVoiceTime = pPlayer->GetLastVoiceTime ();
784+
785+ if (flLastVoiceTime + 0 .3f > GetGlobals ()->curtime )
786+ {
763787 vecActivePlayers.push_back (i);
788+ }
789+ else if (flLastVoiceTime + 15 .0f > GetGlobals ()->curtime )
790+ {
791+ auto iter = std::lower_bound (vecRecentPlayers.begin (), vecRecentPlayers.end (), flLastVoiceTime, [](const std::pair<int , float >& recentPlayer, float flCompareVoiceTime) {
792+ return recentPlayer.second < flCompareVoiceTime;
793+ });
794+
795+ vecRecentPlayers.insert (iter, {i, flLastVoiceTime});
796+ }
764797 }
765798
766- if (vecActivePlayers.empty ())
799+ if (vecActivePlayers.empty () && vecRecentPlayers. empty () )
767800 {
768- ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " There are no players currently using voice chat." );
801+ ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " No players have recently used the voice chat." );
769802 return ;
770803 }
771804
772- ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " List of players using voice chat:" );
773- if (player)
774- ClientPrint (player, HUD_PRINTCONSOLE , CHAT_PREFIX " List of players using voice chat:" );
805+ if (!vecRecentPlayers.empty ())
806+ {
807+ ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " Players who recently used voice chat:" );
808+ if (player)
809+ ClientPrint (player, HUD_PRINTCONSOLE , CHAT_PREFIX " Players who recently used voice chat:" );
810+
811+ for (const auto & recentPlayer : vecRecentPlayers)
812+ VoiceChatPrintPlayer (player, recentPlayer.first );
813+ }
775814
776- for ( const auto & slot : vecActivePlayers)
815+ if (! vecActivePlayers. empty () )
777816 {
778- CCSPlayerController* pController = CCSPlayerController::FromSlot (slot);
779- ZEPlayer* pPlayer = g_playerManager->GetPlayer (slot);
780-
781- bool bSteamIDAuthed = pPlayer->IsAuthenticated ();
782- uint64 uSteamID = bSteamIDAuthed ? pPlayer->GetSteamId64 () : pPlayer->GetUnauthenticatedSteamId64 ();
783-
784- ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " \x04 %s \x06 [#%hu] \x05 [%llu%s\x05 ]" ,
785- pController->GetPlayerName ().c_str (),
786- g_pEngineServer2->GetPlayerUserId (slot),
787- uSteamID,
788- bSteamIDAuthed ? " " : " \x02 (No Auth)" );
789- if (!player) continue ;
790- ClientPrint (player, HUD_PRINTCONSOLE , CHAT_PREFIX " %s [#%hu] [%llu%s]" ,
791- pController->GetPlayerName ().c_str (),
792- g_pEngineServer2->GetPlayerUserId (slot),
793- uSteamID,
794- bSteamIDAuthed ? " " : " (No Auth)" );
817+ ClientPrint (player, HUD_PRINTTALK , CHAT_PREFIX " Players using voice chat:" );
818+ if (player)
819+ ClientPrint (player, HUD_PRINTCONSOLE , CHAT_PREFIX " Players using voice chat:" );
820+
821+ for (int slot : vecActivePlayers)
822+ VoiceChatPrintPlayer (player, slot);
795823 }
796824}
797825
0 commit comments