Scoreboard SendTo()
This commit is contained in:
parent
aa61f55b74
commit
fa4750f015
|
@ -270,6 +270,9 @@ void cClientHandle::Authenticate(void)
|
||||||
// Query player team
|
// Query player team
|
||||||
m_Player->UpdateTeam();
|
m_Player->UpdateTeam();
|
||||||
|
|
||||||
|
// Send scoreboard data
|
||||||
|
World->GetScoreBoard().SendTo(*this);
|
||||||
|
|
||||||
cRoot::Get()->GetPluginManager()->CallHookPlayerSpawned(*m_Player);
|
cRoot::Get()->GetPluginManager()->CallHookPlayerSpawned(*m_Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -707,7 +707,7 @@ void cProtocol172::SendExperienceOrb(const cExpOrb & a_ExpOrb)
|
||||||
|
|
||||||
void cProtocol172::SendScoreboardObjective(const AString & a_Name, const AString & a_DisplayName, Byte a_Mode)
|
void cProtocol172::SendScoreboardObjective(const AString & a_Name, const AString & a_DisplayName, Byte a_Mode)
|
||||||
{
|
{
|
||||||
cPacketizer Pkt(*this, 0x3b);
|
cPacketizer Pkt(*this, 0x3B);
|
||||||
Pkt.WriteString(a_Name);
|
Pkt.WriteString(a_Name);
|
||||||
Pkt.WriteString(a_DisplayName);
|
Pkt.WriteString(a_DisplayName);
|
||||||
Pkt.WriteByte(a_Mode);
|
Pkt.WriteByte(a_Mode);
|
||||||
|
@ -719,7 +719,7 @@ void cProtocol172::SendScoreboardObjective(const AString & a_Name, const AString
|
||||||
|
|
||||||
void cProtocol172::SendScoreUpdate(const AString & a_Objective, const AString & a_Player, cObjective::Score a_Score, Byte a_Mode)
|
void cProtocol172::SendScoreUpdate(const AString & a_Objective, const AString & a_Player, cObjective::Score a_Score, Byte a_Mode)
|
||||||
{
|
{
|
||||||
cPacketizer Pkt(*this, 0x3c);
|
cPacketizer Pkt(*this, 0x3C);
|
||||||
Pkt.WriteString(a_Player);
|
Pkt.WriteString(a_Player);
|
||||||
Pkt.WriteByte(a_Mode);
|
Pkt.WriteByte(a_Mode);
|
||||||
|
|
||||||
|
@ -736,7 +736,7 @@ void cProtocol172::SendScoreUpdate(const AString & a_Objective, const AString &
|
||||||
|
|
||||||
void cProtocol172::SendDisplayObjective(const AString & a_Objective, cScoreboard::eDisplaySlot a_Display)
|
void cProtocol172::SendDisplayObjective(const AString & a_Objective, cScoreboard::eDisplaySlot a_Display)
|
||||||
{
|
{
|
||||||
cPacketizer Pkt(*this, 0x3d);
|
cPacketizer Pkt(*this, 0x3D);
|
||||||
Pkt.WriteByte((int) a_Display);
|
Pkt.WriteByte((int) a_Display);
|
||||||
Pkt.WriteString(a_Objective);
|
Pkt.WriteString(a_Objective);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include "Scoreboard.h"
|
#include "Scoreboard.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include "ClientHandle.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,6 +179,20 @@ void cObjective::SetDisplayName(const AString & a_Name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cObjective::SendTo(cClientHandle & a_Client)
|
||||||
|
{
|
||||||
|
a_Client.SendScoreboardObjective(m_Name, m_DisplayName, 0);
|
||||||
|
|
||||||
|
for (cScoreMap::const_iterator it = m_Scores.begin(); it != m_Scores.end(); ++it)
|
||||||
|
{
|
||||||
|
a_Client.SendScoreUpdate(m_Name, it->first, it->second, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cTeam::cTeam(const AString & a_Name, const AString & a_DisplayName,
|
cTeam::cTeam(const AString & a_Name, const AString & a_DisplayName,
|
||||||
const AString & a_Prefix, const AString & a_Suffix)
|
const AString & a_Prefix, const AString & a_Suffix)
|
||||||
: m_AllowsFriendlyFire(true)
|
: m_AllowsFriendlyFire(true)
|
||||||
|
@ -397,11 +412,19 @@ void cScoreboard::SetDisplay(const AString & a_Objective, eDisplaySlot a_Slot)
|
||||||
|
|
||||||
cObjective * Objective = GetObjective(a_Objective);
|
cObjective * Objective = GetObjective(a_Objective);
|
||||||
|
|
||||||
m_Display[a_Slot] = Objective;
|
SetDisplay(Objective, a_Slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cScoreboard::SetDisplay(cObjective * a_Objective, eDisplaySlot a_Slot)
|
||||||
|
{
|
||||||
|
m_Display[a_Slot] = a_Objective;
|
||||||
|
|
||||||
ASSERT(m_World != NULL);
|
ASSERT(m_World != NULL);
|
||||||
m_World->BroadcastDisplayObjective(Objective ? a_Objective : "", a_Slot);
|
m_World->BroadcastDisplayObjective(a_Objective ? a_Objective->GetName() : "", a_Slot);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -440,6 +463,31 @@ void cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cScoreboard::SendTo(cClientHandle & a_Client)
|
||||||
|
{
|
||||||
|
cCSLock Lock(m_CSObjectives);
|
||||||
|
|
||||||
|
for (cObjectiveMap::iterator it = m_Objectives.begin(); it != m_Objectives.end(); ++it)
|
||||||
|
{
|
||||||
|
it->second.SendTo(a_Client);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < (int) E_DISPLAY_SLOT_COUNT; ++i)
|
||||||
|
{
|
||||||
|
// Avoid race conditions
|
||||||
|
cObjective * Objective = m_Display[i];
|
||||||
|
|
||||||
|
if (Objective)
|
||||||
|
{
|
||||||
|
a_Client.SendDisplayObjective(Objective->GetName(), (eDisplaySlot) i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int cScoreboard::GetNumObjectives(void) const
|
unsigned int cScoreboard::GetNumObjectives(void) const
|
||||||
{
|
{
|
||||||
return m_Objectives.size();
|
return m_Objectives.size();
|
||||||
|
|
|
@ -22,10 +22,13 @@ typedef cItemCallback<cObjective> cObjectiveCallback;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
class cObjective
|
class cObjective
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
typedef int Score;
|
typedef int Score;
|
||||||
|
|
||||||
enum eType
|
enum eType
|
||||||
|
@ -82,6 +85,9 @@ public:
|
||||||
|
|
||||||
void SetDisplayName(const AString & a_Name);
|
void SetDisplayName(const AString & a_Name);
|
||||||
|
|
||||||
|
/// Send this objective to the specified client
|
||||||
|
void SendTo(cClientHandle & a_Client);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
typedef std::pair<AString, Score> cTrackedPlayer;
|
typedef std::pair<AString, Score> cTrackedPlayer;
|
||||||
|
@ -105,10 +111,13 @@ private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
class cTeam
|
class cTeam
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
cTeam(
|
cTeam(
|
||||||
const AString & a_Name, const AString & a_DisplayName,
|
const AString & a_Name, const AString & a_DisplayName,
|
||||||
const AString & a_Prefix, const AString & a_Suffix
|
const AString & a_Prefix, const AString & a_Suffix
|
||||||
|
@ -169,10 +178,13 @@ private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// tolua_begin
|
||||||
class cScoreboard
|
class cScoreboard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
enum eDisplaySlot
|
enum eDisplaySlot
|
||||||
{
|
{
|
||||||
E_DISPLAY_SLOT_LIST = 0,
|
E_DISPLAY_SLOT_LIST = 0,
|
||||||
|
@ -209,11 +221,16 @@ public:
|
||||||
|
|
||||||
void SetDisplay(const AString & a_Objective, eDisplaySlot a_Slot);
|
void SetDisplay(const AString & a_Objective, eDisplaySlot a_Slot);
|
||||||
|
|
||||||
|
void SetDisplay(cObjective * a_Objective, eDisplaySlot a_Slot);
|
||||||
|
|
||||||
cObjective * GetObjectiveIn(eDisplaySlot a_Slot);
|
cObjective * GetObjectiveIn(eDisplaySlot a_Slot);
|
||||||
|
|
||||||
/// 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;
|
||||||
|
|
Loading…
Reference in New Issue