Switched player statistic store to save with UUID filenames. (#4002)
This commit is contained in:
parent
e33eb529ad
commit
dc294cdc51
@ -2203,7 +2203,7 @@ bool cPlayer::LoadFromFile(const AString & a_FileName, cWorldPtr & a_World)
|
|||||||
|
|
||||||
// Load the player stats.
|
// Load the player stats.
|
||||||
// We use the default world name (like bukkit) because stats are shared between dimensions / worlds.
|
// We use the default world name (like bukkit) because stats are shared between dimensions / worlds.
|
||||||
cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), &m_Stats);
|
cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), GetUUID().ToLongString(), &m_Stats);
|
||||||
StatSerializer.Load();
|
StatSerializer.Load();
|
||||||
|
|
||||||
LOGD("Player %s was read from file \"%s\", spawning at {%.2f, %.2f, %.2f} in world \"%s\"",
|
LOGD("Player %s was read from file \"%s\", spawning at {%.2f, %.2f, %.2f} in world \"%s\"",
|
||||||
@ -2301,7 +2301,7 @@ bool cPlayer::SaveToDisk()
|
|||||||
|
|
||||||
// Save the player stats.
|
// Save the player stats.
|
||||||
// We use the default world name (like bukkit) because stats are shared between dimensions / worlds.
|
// We use the default world name (like bukkit) because stats are shared between dimensions / worlds.
|
||||||
cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), &m_Stats);
|
cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), GetUUID().ToLongString(), &m_Stats);
|
||||||
if (!StatSerializer.Save())
|
if (!StatSerializer.Save())
|
||||||
{
|
{
|
||||||
LOGWARNING("Could not save stats for player %s", GetName().c_str());
|
LOGWARNING("Could not save stats for player %s", GetName().c_str());
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cStatSerializer::cStatSerializer(const AString & a_WorldName, const AString & a_PlayerName, cStatManager * a_Manager)
|
cStatSerializer::cStatSerializer(const AString & a_WorldName, const AString & a_PlayerName, const AString & a_FileName, cStatManager * a_Manager)
|
||||||
: m_Manager(a_Manager)
|
: m_Manager(a_Manager)
|
||||||
{
|
{
|
||||||
// Even though stats are shared between worlds, they are (usually) saved
|
// Even though stats are shared between worlds, they are (usually) saved
|
||||||
@ -20,7 +20,8 @@ cStatSerializer::cStatSerializer(const AString & a_WorldName, const AString & a_
|
|||||||
AString StatsPath;
|
AString StatsPath;
|
||||||
Printf(StatsPath, "%s%cstats", a_WorldName.c_str(), cFile::PathSeparator);
|
Printf(StatsPath, "%s%cstats", a_WorldName.c_str(), cFile::PathSeparator);
|
||||||
|
|
||||||
m_Path = StatsPath + "/" + a_PlayerName + ".json";
|
m_LegacyPath = StatsPath + "/" + a_PlayerName + ".json";
|
||||||
|
m_Path = StatsPath + "/" + a_FileName + ".json";
|
||||||
|
|
||||||
// Ensure that the directory exists.
|
// Ensure that the directory exists.
|
||||||
cFile::CreateFolder(FILE_IO_PREFIX + StatsPath);
|
cFile::CreateFolder(FILE_IO_PREFIX + StatsPath);
|
||||||
@ -35,7 +36,11 @@ bool cStatSerializer::Load(void)
|
|||||||
AString Data = cFile::ReadWholeFile(FILE_IO_PREFIX + m_Path);
|
AString Data = cFile::ReadWholeFile(FILE_IO_PREFIX + m_Path);
|
||||||
if (Data.empty())
|
if (Data.empty())
|
||||||
{
|
{
|
||||||
return false;
|
Data = cFile::ReadWholeFile(FILE_IO_PREFIX + m_LegacyPath);
|
||||||
|
if (Data.empty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::Value Root;
|
Json::Value Root;
|
||||||
|
@ -25,7 +25,7 @@ class cStatSerializer
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cStatSerializer(const AString & a_WorldName, const AString & a_PlayerName, cStatManager * a_Manager);
|
cStatSerializer(const AString & a_WorldName, const AString & a_PlayerName, const AString & a_FileName, cStatManager * a_Manager);
|
||||||
|
|
||||||
/* Try to load the player statistics. Returns whether the operation was successful or not. */
|
/* Try to load the player statistics. Returns whether the operation was successful or not. */
|
||||||
bool Load(void);
|
bool Load(void);
|
||||||
@ -45,6 +45,7 @@ private:
|
|||||||
|
|
||||||
cStatManager * m_Manager;
|
cStatManager * m_Manager;
|
||||||
|
|
||||||
|
AString m_LegacyPath; // The old <username>.json path to try to read from if the uuid path doesn't exist on load
|
||||||
AString m_Path;
|
AString m_Path;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user