diff options
Diffstat (limited to 'source/game/StarPlayerStorage.cpp')
-rw-r--r-- | source/game/StarPlayerStorage.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/source/game/StarPlayerStorage.cpp b/source/game/StarPlayerStorage.cpp index bba080e..7687e97 100644 --- a/source/game/StarPlayerStorage.cpp +++ b/source/game/StarPlayerStorage.cpp @@ -41,9 +41,12 @@ PlayerStorage::PlayerStorage(String const& storageDir) { try { auto json = VersionedJson::readFile(filename); Uuid uuid(json.content.getString("uuid")); - auto& playerCacheData = m_savedPlayersCache[uuid]; - playerCacheData = entityFactory->loadVersionedJson(json, EntityType::Player); - m_playerFileNames.insert(uuid, file.first.rsplit('.', 1).at(0)); + if (m_playerFileNames.insert(uuid, file.first.rsplit('.', 1).at(0))) { + auto& playerCacheData = m_savedPlayersCache[uuid]; + playerCacheData = entityFactory->loadVersionedJson(json, EntityType::Player); + } else { + Logger::warn("Duplicate player? Skipping player file {} because it has the same UUID as {}.player ({})", file.first, m_playerFileNames.getRight(uuid), uuid.hex()); + } } catch (std::exception const& e) { Logger::error("Error loading player file, ignoring! {} : {}", filename, outputException(e, false)); } @@ -168,7 +171,9 @@ Json PlayerStorage::savePlayer(PlayerPtr const& player) { if (playerCacheData != newPlayerData) { playerCacheData = newPlayerData; VersionedJson versionedJson = entityFactory->storeVersionedJson(EntityType::Player, playerCacheData); - VersionedJson::writeFile(versionedJson, File::relativeTo(m_storageDirectory, strf("{}.player", uuidFileName(uuid)))); + auto fileName = strf("{}.player", uuidFileName(uuid)); + VersionedJson::writeFile(versionedJson, File::relativeTo(m_storageDirectory, fileName)); + Logger::info("Saved player {} to {}", Text::stripEscapeCodes(player->name()), fileName); } return newPlayerData; } |