diff --git a/NETWORKING.md b/NETWORKING.md index a321ccec1..44021e1e4 100644 --- a/NETWORKING.md +++ b/NETWORKING.md @@ -104,7 +104,7 @@ The current server configuration xml looks like this: - + @@ -116,7 +116,7 @@ The current server configuration xml looks like this: - + @@ -140,10 +140,10 @@ The current server configuration xml looks like this: - + - + diff --git a/src/karts/abstract_kart.cpp b/src/karts/abstract_kart.cpp index a5d42c992..de61c0df8 100644 --- a/src/karts/abstract_kart.cpp +++ b/src/karts/abstract_kart.cpp @@ -80,7 +80,8 @@ void AbstractKart::loadKartProperties(const std::string& new_ident, m_kart_properties.reset(new KartProperties()); const KartProperties* kp = kart_properties_manager->getKart(new_ident); const KartProperties* kp_addon = NULL; - if (NetworkConfig::get()->isNetworking() && kp && kp->isAddon()) + if (NetworkConfig::get()->isNetworking() && + NetworkConfig::get()->useTuxHitboxAddon() && kp && kp->isAddon()) { // For addon kart in network we use the same hitbox (tux) so anyone // can use any addon karts with different graphical kart model @@ -89,7 +90,8 @@ void AbstractKart::loadKartProperties(const std::string& new_ident, } if (kp == NULL) { - if (!NetworkConfig::get()->isNetworking()) + if (!NetworkConfig::get()->isNetworking() || + !NetworkConfig::get()->useTuxHitboxAddon()) { Log::warn("Abstract_Kart", "Unknown kart %s, fallback to tux", new_ident.c_str()); diff --git a/src/network/network_config.cpp b/src/network/network_config.cpp index 773c7e7bb..605254808 100644 --- a/src/network/network_config.cpp +++ b/src/network/network_config.cpp @@ -153,6 +153,7 @@ NetworkConfig::NetworkConfig() m_state_frequency = 10; m_nat64_prefix_data.fill(-1); m_num_fixed_ai = 0; + m_tux_hitbox_addon = false; } // NetworkConfig // ---------------------------------------------------------------------------- diff --git a/src/network/network_config.hpp b/src/network/network_config.hpp index 273eacd08..d7537ae78 100644 --- a/src/network/network_config.hpp +++ b/src/network/network_config.hpp @@ -92,6 +92,9 @@ private: * AI. (usually used together with ai-handling in server config) */ bool m_network_ai_instance; + /** When live join is disabled addon kart will use their real hitbox */ + bool m_tux_hitbox_addon; + /** No. of fixed AI in all-in-one graphical client server, the player * connecting with 127.* or ::1/128 will be in charged of controlling the * AI. */ @@ -308,6 +311,10 @@ public: // ------------------------------------------------------------------------ static const std::vector >& getStunList(bool ipv4); + // ------------------------------------------------------------------------ + void setTuxHitboxAddon(bool val) { m_tux_hitbox_addon = val; } + // ------------------------------------------------------------------------ + bool useTuxHitboxAddon() const { return m_tux_hitbox_addon; } }; // class NetworkConfig #endif // HEADER_NETWORK_CONFIG diff --git a/src/network/protocols/client_lobby.cpp b/src/network/protocols/client_lobby.cpp index e41dd317c..e686dd4f4 100644 --- a/src/network/protocols/client_lobby.cpp +++ b/src/network/protocols/client_lobby.cpp @@ -764,6 +764,7 @@ void ClientLobby::handleServerInfo(Event* event) if (!GUIEngine::isNoGraphics()) NetworkingLobby::getInstance()->toggleServerConfigButton(server_config); m_server_live_joinable = data.getUInt8() == 1; + NetworkConfig::get()->setTuxHitboxAddon(m_server_live_joinable); } // handleServerInfo //----------------------------------------------------------------------------- diff --git a/src/network/protocols/server_lobby.cpp b/src/network/protocols/server_lobby.cpp index 7222f97dc..fbd88cd5f 100644 --- a/src/network/protocols/server_lobby.cpp +++ b/src/network/protocols/server_lobby.cpp @@ -582,7 +582,10 @@ void ServerLobby::updateAddons() auto all_k = kart_properties_manager->getAllAvailableKarts(); if (all_k.size() >= 65536) all_k.resize(65535); - m_available_kts.first = m_official_kts.first; + if (ServerConfig::m_live_players) + m_available_kts.first = m_official_kts.first; + else + m_available_kts.first = { all_k.begin(), all_k.end() }; } // updateAddons //----------------------------------------------------------------------------- @@ -700,7 +703,11 @@ void ServerLobby::setup() auto all_k = kart_properties_manager->getAllAvailableKarts(); if (all_k.size() >= 65536) all_k.resize(65535); - m_available_kts.first = m_official_kts.first; + if (ServerConfig::m_live_players) + m_available_kts.first = m_official_kts.first; + else + m_available_kts.first = { all_k.begin(), all_k.end() }; + NetworkConfig::get()->setTuxHitboxAddon(ServerConfig::m_live_players); updateTracksForMode(); m_server_has_loaded_world.store(false); diff --git a/src/network/server_config.hpp b/src/network/server_config.hpp index d958d2886..0543f9b80 100644 --- a/src/network/server_config.hpp +++ b/src/network/server_config.hpp @@ -234,7 +234,7 @@ namespace ServerConfig SERVER_CFG_PREFIX BoolServerConfigParam m_team_choosing SERVER_CFG_DEFAULT(BoolServerConfigParam(true, "team-choosing", "Enable team choosing in lobby in team game (soccer and CTF). " - "If owner-less is enabled and live-players is not enabled, than this " + "If owner-less is enabled and live-spectate is not enabled, than this " "option is always disabled.")); SERVER_CFG_PREFIX BoolServerConfigParam m_strict_players @@ -263,7 +263,8 @@ namespace ServerConfig "If true, players can live join or spectate the in-progress game. " "Currently live joining is only available if the current game mode " "used in server is FFA, CTF or soccer, also official-karts-threshold " - "will be made 1.0.")); + "will be made 1.0. If false addon karts will use their original " + "hitbox other than tux, all players having it restriction applies.")); SERVER_CFG_PREFIX FloatServerConfigParam m_flag_return_timeout SERVER_CFG_DEFAULT(FloatServerConfigParam(20.0f, "flag-return-timeout", @@ -307,12 +308,12 @@ namespace ServerConfig SERVER_CFG_PREFIX IntServerConfigParam m_max_ping SERVER_CFG_DEFAULT(IntServerConfigParam(300, "max-ping", "Maximum ping allowed for a player (in ms), it's recommended to use " - "default value if live-players is on.")); + "default value if live-spectate is on.")); SERVER_CFG_PREFIX IntServerConfigParam m_jitter_tolerance SERVER_CFG_DEFAULT(IntServerConfigParam(100, "jitter-tolerance", "Tolerance of jitter in network allowed (in ms), it's recommended to " - "use default value if live-players is on.")); + "use default value if live-spectate is on.")); SERVER_CFG_PREFIX BoolServerConfigParam m_kick_high_ping_players SERVER_CFG_DEFAULT(BoolServerConfigParam(false, diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index a00179e11..2147cc09d 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -869,7 +869,8 @@ void KartSelectionScreen::updateKartStats(uint8_t widget_id, const KartProperties *kp = kart_properties_manager->getKart(selection); // Adjust for online addon karts - if (kp && kp->isAddon() && NetworkConfig::get()->isNetworking()) + if (kp && kp->isAddon() && NetworkConfig::get()->isNetworking() && + NetworkConfig::get()->useTuxHitboxAddon()) kp = kart_properties_manager->getKart("tux"); if (kp != NULL) { diff --git a/src/states_screens/online/network_kart_selection.cpp b/src/states_screens/online/network_kart_selection.cpp index a2007a5e5..77abe1a4f 100644 --- a/src/states_screens/online/network_kart_selection.cpp +++ b/src/states_screens/online/network_kart_selection.cpp @@ -196,3 +196,14 @@ void NetworkKartSelectionScreen::updateProgressBarText() m_timer->setText(message); } } // updateProgressBarText + +// ---------------------------------------------------------------------------- +bool NetworkKartSelectionScreen::isIgnored(const std::string& ident) const +{ + // Online addon kart use tux for hitbox in server so we can allow any + // addon kart graphically, if live join is disabled + if (NetworkConfig::get()->useTuxHitboxAddon() && + ident.find("addon_") != std::string::npos) + return false; + return m_available_karts.find(ident) == m_available_karts.end(); +} // isIgnored diff --git a/src/states_screens/online/network_kart_selection.hpp b/src/states_screens/online/network_kart_selection.hpp index e626ceecc..e52e2c317 100644 --- a/src/states_screens/online/network_kart_selection.hpp +++ b/src/states_screens/online/network_kart_selection.hpp @@ -60,14 +60,7 @@ private: std::set m_available_karts; // ------------------------------------------------------------------------ - virtual bool isIgnored(const std::string& ident) const OVERRIDE - { - // Online addon kart use tux for hitbox in server so we can allow any - // addon kart graphically - if (ident.find("addon_") != std::string::npos) - return false; - return m_available_karts.find(ident) == m_available_karts.end(); - } + virtual bool isIgnored(const std::string& ident) const OVERRIDE; // ------------------------------------------------------------------------ void updateProgressBarText(); // ------------------------------------------------------------------------