summaryrefslogtreecommitdiffstats
path: root/src/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities')
-rw-r--r--src/Entities/Player.cpp81
-rw-r--r--src/Entities/Player.h10
2 files changed, 53 insertions, 38 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index de4acc806..30650a6d0 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -1567,7 +1567,7 @@ void cPlayer::PermuteEnchantmentSeed()
-bool cPlayer::HasPermission(const AString & a_Permission)
+bool cPlayer::HasPermission(const AString & a_Permission) const
{
if (a_Permission.empty())
{
@@ -1786,7 +1786,7 @@ void cPlayer::TossPickup(const cItem & a_Item)
void cPlayer::LoadFromDisk()
{
- LoadRank();
+ RefreshRank();
Json::Value Root;
const auto & UUID = GetUUID();
@@ -2295,39 +2295,11 @@ void cPlayer::UpdateMovementStats(const Vector3d & a_DeltaPos, bool a_PreviousIs
void cPlayer::LoadRank(void)
{
- const auto & UUID = GetUUID();
- cRankManager * RankMgr = cRoot::Get()->GetRankManager();
-
- // Load the values from cRankManager:
- m_Rank = RankMgr->GetPlayerRankName(UUID);
- if (m_Rank.empty())
- {
- m_Rank = RankMgr->GetDefaultRank();
- }
- else
- {
- // Update the name:
- RankMgr->UpdatePlayerName(UUID, GetName());
- }
- m_Permissions = RankMgr->GetPlayerPermissions(UUID);
- m_Restrictions = RankMgr->GetPlayerRestrictions(UUID);
- RankMgr->GetRankVisuals(m_Rank, m_MsgPrefix, m_MsgSuffix, m_MsgNameColorCode);
+ // Update our permissions:
+ RefreshRank();
- // Break up the individual permissions on each dot, into m_SplitPermissions:
- m_SplitPermissions.clear();
- m_SplitPermissions.reserve(m_Permissions.size());
- for (auto & Permission: m_Permissions)
- {
- m_SplitPermissions.push_back(StringSplit(Permission, "."));
- } // for Permission - m_Permissions[]
-
- // Break up the individual restrictions on each dot, into m_SplitRestrictions:
- m_SplitRestrictions.clear();
- m_SplitRestrictions.reserve(m_Restrictions.size());
- for (auto & Restriction: m_Restrictions)
- {
- m_SplitRestrictions.push_back(StringSplit(Restriction, "."));
- } // for itr - m_Restrictions[]
+ // Send a permission level update:
+ m_ClientHandle->SendPlayerPermissionLevel();
}
@@ -2808,6 +2780,47 @@ void cPlayer::TickFreezeCode()
+void cPlayer::RefreshRank()
+{
+ const auto & UUID = GetUUID();
+ cRankManager * RankMgr = cRoot::Get()->GetRankManager();
+
+ // Load the values from cRankManager:
+ m_Rank = RankMgr->GetPlayerRankName(UUID);
+ if (m_Rank.empty())
+ {
+ m_Rank = RankMgr->GetDefaultRank();
+ }
+ else
+ {
+ // Update the name:
+ RankMgr->UpdatePlayerName(UUID, GetName());
+ }
+ m_Permissions = RankMgr->GetPlayerPermissions(UUID);
+ m_Restrictions = RankMgr->GetPlayerRestrictions(UUID);
+ RankMgr->GetRankVisuals(m_Rank, m_MsgPrefix, m_MsgSuffix, m_MsgNameColorCode);
+
+ // Break up the individual permissions on each dot, into m_SplitPermissions:
+ m_SplitPermissions.clear();
+ m_SplitPermissions.reserve(m_Permissions.size());
+ for (auto & Permission : m_Permissions)
+ {
+ m_SplitPermissions.push_back(StringSplit(Permission, "."));
+ }
+
+ // Break up the individual restrictions on each dot, into m_SplitRestrictions:
+ m_SplitRestrictions.clear();
+ m_SplitRestrictions.reserve(m_Restrictions.size());
+ for (auto & Restriction : m_Restrictions)
+ {
+ m_SplitRestrictions.push_back(StringSplit(Restriction, "."));
+ }
+}
+
+
+
+
+
void cPlayer::ApplyArmorDamage(int a_DamageBlocked)
{
short ArmorDamage = static_cast<short>(std::max(a_DamageBlocked / 4, 1));
diff --git a/src/Entities/Player.h b/src/Entities/Player.h
index 87eaad2fe..e0a88814d 100644
--- a/src/Entities/Player.h
+++ b/src/Entities/Player.h
@@ -301,7 +301,7 @@ public:
// tolua_end
- bool HasPermission(const AString & a_Permission); // tolua_export
+ bool HasPermission(const AString & a_Permission) const; // tolua_export
/** Returns true iff a_Permission matches the a_Template.
A match is defined by either being exactly the same, or each sub-item matches until there's a wildcard in a_Template.
@@ -545,8 +545,7 @@ public:
/** Returns wheter the player can fly or not. */
virtual bool CanFly(void) const { return m_IsFlightCapable; }
- /** (Re)loads the rank and permissions from the cRankManager.
- Loads the m_Rank, m_Permissions, m_MsgPrefix, m_MsgSuffix and m_MsgNameColorCode members. */
+ /** (Re)loads the rank and permissions from the cRankManager and sends a permission level update to the client. */
void LoadRank(void);
/** Sends the block in the specified range around the specified coord to the client
@@ -626,7 +625,6 @@ private:
This is used mainly by the HasPermission() function to optimize the lookup. */
AStringVectorVector m_SplitRestrictions;
-
// Message visuals:
AString m_MsgPrefix, m_MsgSuffix;
AString m_MsgNameColorCode;
@@ -787,6 +785,10 @@ private:
void TickFreezeCode();
+ /** (Re)loads the rank and permissions from the cRankManager.
+ Loads the m_Rank, m_Permissions, m_MsgPrefix, m_MsgSuffix and m_MsgNameColorCode members. */
+ void RefreshRank();
+
// cEntity overrides:
virtual void ApplyArmorDamage(int DamageBlocked) override;
virtual void BroadcastMovementUpdate(const cClientHandle * a_Exclude = nullptr) override;