cWorld now saves/loads the scoreboard
This commit is contained in:
parent
9bd8f74b59
commit
dd04f5a73c
@ -238,6 +238,8 @@ bool cTeam::HasPlayer(const AString & a_Name) const
|
|||||||
|
|
||||||
void cTeam::Reset(void)
|
void cTeam::Reset(void)
|
||||||
{
|
{
|
||||||
|
// TODO 2014-01-22 xdot: Inform online players
|
||||||
|
|
||||||
m_Players.clear();
|
m_Players.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,3 +507,4 @@ unsigned int cScoreboard::GetNumTeams(void) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,8 +27,6 @@ class cObjective
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// tolua_end
|
|
||||||
|
|
||||||
typedef int Score;
|
typedef int Score;
|
||||||
|
|
||||||
enum eType
|
enum eType
|
||||||
@ -52,6 +50,8 @@ public:
|
|||||||
E_TYPE_STAT_ENTITY_KILLED_BY
|
E_TYPE_STAT_ENTITY_KILLED_BY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
static AString TypeToString(eType a_Type);
|
static AString TypeToString(eType a_Type);
|
||||||
|
|
||||||
static eType StringToType(const AString & a_Name);
|
static eType StringToType(const AString & a_Name);
|
||||||
@ -60,6 +60,8 @@ public:
|
|||||||
|
|
||||||
cObjective(const AString & a_Name, const AString & a_DisplayName, eType a_Type, cWorld * a_World);
|
cObjective(const AString & a_Name, const AString & a_DisplayName, eType a_Type, cWorld * a_World);
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
|
|
||||||
eType GetType(void) const { return m_Type; }
|
eType GetType(void) const { return m_Type; }
|
||||||
|
|
||||||
const AString & GetName(void) const { return m_Name; }
|
const AString & GetName(void) const { return m_Name; }
|
||||||
@ -85,6 +87,8 @@ public:
|
|||||||
|
|
||||||
void SetDisplayName(const AString & a_Name);
|
void SetDisplayName(const AString & a_Name);
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
/// Send this objective to the specified client
|
/// Send this objective to the specified client
|
||||||
void SendTo(cClientHandle & a_Client);
|
void SendTo(cClientHandle & a_Client);
|
||||||
|
|
||||||
@ -135,6 +139,8 @@ public:
|
|||||||
/// Removes all registered players
|
/// Removes all registered players
|
||||||
void Reset(void);
|
void Reset(void);
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
|
|
||||||
/// Returns the number of registered players
|
/// Returns the number of registered players
|
||||||
unsigned int GetNumPlayers(void) const;
|
unsigned int GetNumPlayers(void) const;
|
||||||
|
|
||||||
@ -147,13 +153,15 @@ public:
|
|||||||
const AString & GetPrefix(void) const { return m_Prefix; }
|
const AString & GetPrefix(void) const { return m_Prefix; }
|
||||||
const AString & GetSuffix(void) const { return m_Suffix; }
|
const AString & GetSuffix(void) const { return m_Suffix; }
|
||||||
|
|
||||||
void SetFriendlyFire(bool a_Flag) { m_AllowsFriendlyFire = a_Flag; }
|
void SetFriendlyFire(bool a_Flag) { m_AllowsFriendlyFire = a_Flag; }
|
||||||
void SetCanSeeFriendlyInvisible(bool a_Flag) { m_CanSeeFriendlyInvisible = a_Flag; }
|
void SetCanSeeFriendlyInvisible(bool a_Flag) { m_CanSeeFriendlyInvisible = a_Flag; }
|
||||||
|
|
||||||
void SetDisplayName(const AString & a_Name);
|
void SetDisplayName(const AString & a_Name);
|
||||||
|
|
||||||
void SetPrefix(const AString & a_Prefix);
|
void SetPrefix(const AString & a_Prefix) { m_Prefix = a_Prefix; }
|
||||||
void SetSuffix(const AString & a_Suffix);
|
void SetSuffix(const AString & a_Suffix) { m_Suffix = a_Suffix; }
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -183,8 +191,6 @@ class cScoreboard
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// tolua_end
|
|
||||||
|
|
||||||
enum eDisplaySlot
|
enum eDisplaySlot
|
||||||
{
|
{
|
||||||
E_DISPLAY_SLOT_LIST = 0,
|
E_DISPLAY_SLOT_LIST = 0,
|
||||||
@ -194,11 +200,15 @@ public:
|
|||||||
E_DISPLAY_SLOT_COUNT
|
E_DISPLAY_SLOT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cScoreboard(cWorld * a_World);
|
cScoreboard(cWorld * a_World);
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
|
|
||||||
/// Registers a new scoreboard objective, returns the cObjective instance, NULL on name collision
|
/// Registers a new scoreboard objective, returns the cObjective instance, NULL on name collision
|
||||||
cObjective * RegisterObjective(const AString & a_Name, const AString & a_DisplayName, cObjective::eType a_Type);
|
cObjective * RegisterObjective(const AString & a_Name, const AString & a_DisplayName, cObjective::eType a_Type);
|
||||||
|
|
||||||
@ -228,13 +238,15 @@ public:
|
|||||||
/// Execute callback for each objective with the specified type
|
/// Execute callback for each objective with the specified type
|
||||||
void ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback);
|
void ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback);
|
||||||
|
|
||||||
/// Send this scoreboard to the specified client
|
|
||||||
void SendTo(cClientHandle & a_Client);
|
|
||||||
|
|
||||||
unsigned int GetNumObjectives(void) const;
|
unsigned int GetNumObjectives(void) const;
|
||||||
|
|
||||||
unsigned int GetNumTeams(void) const;
|
unsigned int GetNumTeams(void) const;
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
|
/// Send this scoreboard to the specified client
|
||||||
|
void SendTo(cClientHandle & a_Client);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "ChunkMap.h"
|
#include "ChunkMap.h"
|
||||||
#include "Generating/ChunkDesc.h"
|
#include "Generating/ChunkDesc.h"
|
||||||
#include "OSSupport/Timer.h"
|
#include "OSSupport/Timer.h"
|
||||||
|
#include "WorldStorage/ScoreboardSerializer.h"
|
||||||
|
|
||||||
// Entities (except mobs):
|
// Entities (except mobs):
|
||||||
#include "Entities/ExpOrb.h"
|
#include "Entities/ExpOrb.h"
|
||||||
@ -248,6 +249,10 @@ cWorld::cWorld(const AString & a_WorldName) :
|
|||||||
LOGD("cWorld::cWorld(\"%s\")", a_WorldName.c_str());
|
LOGD("cWorld::cWorld(\"%s\")", a_WorldName.c_str());
|
||||||
|
|
||||||
cFile::CreateFolder(FILE_IO_PREFIX + m_WorldName);
|
cFile::CreateFolder(FILE_IO_PREFIX + m_WorldName);
|
||||||
|
|
||||||
|
// Load the scoreboard
|
||||||
|
cScoreboardSerializer Serializer(m_WorldName, &m_Scoreboard);
|
||||||
|
Serializer.Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -267,6 +272,10 @@ cWorld::~cWorld()
|
|||||||
|
|
||||||
m_Storage.WaitForFinish();
|
m_Storage.WaitForFinish();
|
||||||
|
|
||||||
|
// Unload the scoreboard
|
||||||
|
cScoreboardSerializer Serializer(m_WorldName, &m_Scoreboard);
|
||||||
|
Serializer.Save();
|
||||||
|
|
||||||
delete m_ChunkMap;
|
delete m_ChunkMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,12 @@
|
|||||||
cScoreboardSerializer::cScoreboardSerializer(const AString & a_WorldName, cScoreboard* a_ScoreBoard)
|
cScoreboardSerializer::cScoreboardSerializer(const AString & a_WorldName, cScoreboard* a_ScoreBoard)
|
||||||
: m_ScoreBoard(a_ScoreBoard)
|
: m_ScoreBoard(a_ScoreBoard)
|
||||||
{
|
{
|
||||||
Printf(m_Path, "%s/data/scoreboard.dat", a_WorldName.c_str());
|
AString DataPath;
|
||||||
|
Printf(DataPath, "%s/data", a_WorldName.c_str());
|
||||||
|
|
||||||
|
m_Path = DataPath + "/scoreboard.dat";
|
||||||
|
|
||||||
|
cFile::CreateFolder(FILE_IO_PREFIX + DataPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -33,7 +38,7 @@ bool cScoreboardSerializer::Load(void)
|
|||||||
{
|
{
|
||||||
cFile File;
|
cFile File;
|
||||||
|
|
||||||
if (!File.Open(m_Path, cFile::fmReadWrite))
|
if (!File.Open(FILE_IO_PREFIX + m_Path, cFile::fmReadWrite))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -60,7 +65,7 @@ bool cScoreboardSerializer::Load(void)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the NBT data:
|
// Parse the NBT data:
|
||||||
cParsedNBT NBT(Uncompressed, strm.total_out);
|
cParsedNBT NBT(Uncompressed, strm.total_out);
|
||||||
if (!NBT.IsValid())
|
if (!NBT.IsValid())
|
||||||
@ -81,7 +86,7 @@ bool cScoreboardSerializer::Save(void)
|
|||||||
cFastNBTWriter Writer;
|
cFastNBTWriter Writer;
|
||||||
|
|
||||||
Writer.BeginCompound("");
|
Writer.BeginCompound("");
|
||||||
|
m_ScoreBoard->RegisterObjective("test","test",cObjective::E_TYPE_DUMMY)->AddScore("dot", 2);
|
||||||
SaveScoreboardToNBT(Writer);
|
SaveScoreboardToNBT(Writer);
|
||||||
|
|
||||||
Writer.EndCompound();
|
Writer.EndCompound();
|
||||||
@ -91,7 +96,7 @@ bool cScoreboardSerializer::Save(void)
|
|||||||
cParsedNBT TestParse(Writer.GetResult().data(), Writer.GetResult().size());
|
cParsedNBT TestParse(Writer.GetResult().data(), Writer.GetResult().size());
|
||||||
ASSERT(TestParse.IsValid());
|
ASSERT(TestParse.IsValid());
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
gzFile gz = gzopen((FILE_IO_PREFIX + m_Path).c_str(), "wb");
|
gzFile gz = gzopen((FILE_IO_PREFIX + m_Path).c_str(), "wb");
|
||||||
if (gz != NULL)
|
if (gz != NULL)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user