From 31ec883c094b448d048ebf3259afa2d5781c8b0d Mon Sep 17 00:00:00 2001 From: staphen Date: Sun, 30 Nov 2025 22:40:36 -0500 Subject: [PATCH] Add event player message displaying latency stats when hourglass appears --- Source/diablo.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index da770ea4d..d736495e8 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1564,6 +1564,28 @@ void TimeoutCursor(bool bTimeout) InfoString = StringOrView {}; AddInfoBoxString(_("-- Network timeout --")); AddInfoBoxString(_("-- Waiting for players --")); + for (uint8_t i = 0; i < Players.size(); i++) { + bool isConnected = (player_state[i] & PS_CONNECTED) != 0; + bool isActive = (player_state[i] & PS_ACTIVE) != 0; + if (!(isConnected && !isActive)) continue; + + DvlNetLatencies latencies = DvlNet_GetLatencies(i); + + std::string ping = fmt::format( + fmt::runtime(_(/* TRANSLATORS: {:s} means: Character Name */ "Player {:s} is timing out!")), + Players[i].name()); + + StrAppend(ping, "\n ", fmt::format(fmt::runtime(_(/* TRANSLATORS: Network connectivity statistics */ "Echo latency: {:d} ms")), latencies.echoLatency)); + + if (latencies.providerLatency) { + if (latencies.isRelayed && *latencies.isRelayed) { + StrAppend(ping, "\n ", fmt::format(fmt::runtime(_(/* TRANSLATORS: Network connectivity statistics */ "Provider latency: {:d} ms (Relayed)")), *latencies.providerLatency)); + } else { + StrAppend(ping, "\n ", fmt::format(fmt::runtime(_(/* TRANSLATORS: Network connectivity statistics */ "Provider latency: {:d} ms")), *latencies.providerLatency)); + } + } + EventPlrMsg(ping); + } NewCursor(CURSOR_HOURGLASS); RedrawEverything(); }