@@ -1987,7 +1987,23 @@ void ServerLobby::asynchronousUpdate()
1987
1987
if (areKartFiltersIgnoringKarts ())
1988
1988
current_kart = " " ;
1989
1989
std::string name = StringUtils::wideToUtf8 (players[i]->getName ());
1990
- players[i]->setKartName (getKartForBadKartChoice (players[i]->getPeer ().get (), name, current_kart));
1990
+ // Note 1: setKartName also resets KartData, and should be called
1991
+ // only if current kart name is not suitable.
1992
+ // Note 2: filters only support standard karts for now, so GKFBKC
1993
+ // cannot return an addon; when addons are supported, this part of
1994
+ // code will also have to provide kart data (or setKartName has to
1995
+ // set the correct hitbox itself).
1996
+ std::string new_kart = getKartForBadKartChoice (
1997
+ players[i]->getPeer ().get (), name, current_kart);
1998
+ if (new_kart != current_kart)
1999
+ {
2000
+ // Filters only support standard karts for now, but when they
2001
+ // start supporting addons, probably type should not be empty
2002
+ players[i]->setKartName (new_kart);
2003
+ KartData kart_data;
2004
+ setKartDataProperly (kart_data, new_kart, players[i], " " );
2005
+ players[i]->setKartData (kart_data);
2006
+ }
1991
2007
}
1992
2008
1993
2009
NetworkString* load_world_message = getLoadWorldMessage (players,
@@ -6358,25 +6374,7 @@ void ServerLobby::setPlayerKarts(const NetworkString& ns, STKPeer* peer) const
6358
6374
std::string type = kart_data.m_kart_type ;
6359
6375
auto & player = peer->getPlayerProfiles ()[i];
6360
6376
const std::string& kart_id = player->getKartName ();
6361
- if (NetworkConfig::get ()->useTuxHitboxAddon () &&
6362
- StringUtils::startsWith (kart_id, " addon_" ) &&
6363
- kart_properties_manager->hasKartTypeCharacteristic (type))
6364
- {
6365
- const KartProperties* real_addon =
6366
- kart_properties_manager->getKart (kart_id);
6367
- if (ServerConfig::m_real_addon_karts && real_addon)
6368
- {
6369
- kart_data = KartData (real_addon);
6370
- }
6371
- else
6372
- {
6373
- const KartProperties* tux_kp =
6374
- kart_properties_manager->getKart (" tux" );
6375
- kart_data = KartData (tux_kp);
6376
- kart_data.m_kart_type = type;
6377
- }
6378
- player->setKartData (kart_data);
6379
- }
6377
+ setKartDataProperly (kart_data, kart_id, player, type);
6380
6378
}
6381
6379
} // setPlayerKarts
6382
6380
@@ -8289,3 +8287,37 @@ std::string ServerLobby::getKartForBadKartChoice(STKPeer* peer, const std::strin
8289
8287
return *it;
8290
8288
} // getKartForRandomKartChoice
8291
8289
// -----------------------------------------------------------------------------
8290
+ void ServerLobby::setKartDataProperly (KartData& kart_data, const std::string& kart_name,
8291
+ std::shared_ptr<NetworkPlayerProfile> player,
8292
+ const std::string& type) const
8293
+ {
8294
+ // This should set kart data for kart name at least in the following cases:
8295
+ // 1. useTuxHitboxAddon() is true
8296
+ // 2. kart_name is installed on the server
8297
+ // (for addons; standard karts are not processed here it seems)
8298
+ // 3. kart type is fine
8299
+ // Maybe I'm mistaken and then it should be fixed.
8300
+ // I extracted this into a separate function because if kart_name is set
8301
+ // by the server (for random addon kart, or due to a filter), kart data
8302
+ // has to be set in another place than default one.
8303
+ if (NetworkConfig::get ()->useTuxHitboxAddon () &&
8304
+ StringUtils::startsWith (kart_name, " addon_" ) &&
8305
+ kart_properties_manager->hasKartTypeCharacteristic (type))
8306
+ {
8307
+ const KartProperties* real_addon =
8308
+ kart_properties_manager->getKart (kart_name);
8309
+ if (ServerConfig::m_real_addon_karts && real_addon)
8310
+ {
8311
+ kart_data = KartData (real_addon);
8312
+ }
8313
+ else
8314
+ {
8315
+ const KartProperties* tux_kp =
8316
+ kart_properties_manager->getKart (" tux" );
8317
+ kart_data = KartData (tux_kp);
8318
+ kart_data.m_kart_type = type;
8319
+ }
8320
+ player->setKartData (kart_data);
8321
+ }
8322
+ } // setKartDataProperly
8323
+ // -----------------------------------------------------------------------------
0 commit comments