diff options
Diffstat (limited to 'source/game/StarUniverseClient.cpp')
-rw-r--r-- | source/game/StarUniverseClient.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp index ed59c4b..023140c 100644 --- a/source/game/StarUniverseClient.cpp +++ b/source/game/StarUniverseClient.cpp @@ -94,7 +94,8 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA else if (!protocolResponsePacket->allowed) return String(strf("Join failed! Server does not support connections with protocol version {}", StarProtocolVersion)); - if (!(m_legacyServer = protocolResponsePacket->compressionMode() != PacketCompressionMode::Enabled)) { + bool legacyServer = protocolResponsePacket->compressionMode() != PacketCompressionMode::Enabled; + if (!legacyServer) { if (auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket())) { if (protocolResponsePacket->info) { auto compressionName = protocolResponsePacket->info.getString("compression", "None"); @@ -104,13 +105,13 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA Logger::info("UniverseClient: Using '{}' network stream compression", NetCompressionModeNames.getRight(*compressionMode)); compressedSocket->setCompressionStreamEnabled(compressionMode == NetCompressionMode::Zstd); - } else if (!m_legacyServer) { + } else { Logger::info("UniverseClient: Defaulting to Zstd network stream compression (older server version)"); compressedSocket->setCompressionStreamEnabled(true);// old OpenSB server version always expects it! } } } - connection.packetSocket().setLegacy(m_legacyServer); + connection.packetSocket().setLegacy(legacyServer); auto clientConnect = make_shared<ClientConnectPacket>(Root::singleton().assets()->digest(), allowAssetsMismatch, m_mainPlayer->uuid(), m_mainPlayer->name(), m_mainPlayer->species(), m_playerStorage->loadShipData(m_mainPlayer->uuid()), m_mainPlayer->shipUpgrades(), m_mainPlayer->log()->introComplete(), account); @@ -133,14 +134,18 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA packet = connection.pullSingle(); } + NetCompatibilityRules compatibilityRules; + compatibilityRules.isLegacy = legacyServer; + if (auto success = as<ConnectSuccessPacket>(packet)) { m_universeClock = make_shared<Clock>(); m_clientContext = make_shared<ClientContext>(success->serverUuid, m_mainPlayer->uuid()); + m_clientContext->setNetCompatibilityRules(compatibilityRules); m_teamClient = make_shared<TeamClient>(m_mainPlayer, m_clientContext); m_mainPlayer->setClientContext(m_clientContext); m_mainPlayer->setStatistics(m_statistics); m_worldClient = make_shared<WorldClient>(m_mainPlayer); - m_worldClient->clientState().setLegacy(m_legacyServer); + m_worldClient->clientState().setNetCompatibilityRules(compatibilityRules); m_worldClient->setAsyncLighting(true); for (auto& pair : m_luaCallbacks) m_worldClient->setLuaCallbacks(pair.first, pair.second); @@ -149,7 +154,7 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA m_celestialDatabase = make_shared<CelestialSlaveDatabase>(std::move(success->celestialInformation)); m_systemWorldClient = make_shared<SystemWorldClient>(m_universeClock, m_celestialDatabase, m_mainPlayer->universeMap()); - Logger::info("UniverseClient: Joined {} server as client {}", m_legacyServer ? "Starbound" : "OpenStarbound", success->clientId); + Logger::info("UniverseClient: Joined {} server as client {}", legacyServer ? "Starbound" : "OpenStarbound", success->clientId); return {}; } else if (auto failure = as<ConnectFailurePacket>(packet)) { Logger::error("UniverseClient: Join failed: {}", failure->reason); @@ -263,7 +268,7 @@ void UniverseClient::update(float dt) { m_teamClient->update(); - auto contextUpdate = m_clientContext->writeUpdate(); + auto contextUpdate = m_clientContext->writeUpdate(m_clientContext->netCompatibilityRules()); if (!contextUpdate.empty()) m_connection->pushSingle(make_shared<ClientContextUpdatePacket>(std::move(contextUpdate))); @@ -650,7 +655,7 @@ void UniverseClient::handlePackets(List<PacketPtr> const& packets) { for (auto const& packet : packets) { try { if (auto clientContextUpdate = as<ClientContextUpdatePacket>(packet)) { - m_clientContext->readUpdate(clientContextUpdate->updateData); + m_clientContext->readUpdate(clientContextUpdate->updateData, m_clientContext->netCompatibilityRules()); m_playerStorage->applyShipUpdates(m_clientContext->playerUuid(), m_clientContext->newShipUpdates()); if (playerIsOriginal()) |