Files
cuberite-2a/src/RankManager.h
T

156 lines
5.8 KiB
C++
Raw Normal View History

2014-08-05 18:37:00 +02:00
// RankManager.h
// Declares the cRankManager class that represents the rank manager responsible for assigning permissions and message visuals to players
#pragma once
#include "SQLiteCpp/Database.h"
class cRankManager
{
public:
cRankManager(void);
/** Returns the name of the rank that the specified player has assigned to them. */
AString GetPlayerRankName(const AString & a_PlayerUUID);
/** Returns the names of Groups that the specified player has assigned to them. */
AStringVector GetPlayerGroups(const AString & a_PlayerUUID);
2014-08-05 18:37:00 +02:00
/** Returns the permissions that the specified player has assigned to them. */
AStringVector GetPlayerPermissions(const AString & a_PlayerUUID);
/** Returns the names of groups that the specified rank has assigned to it.
Returns an empty vector if the rank doesn't exist. */
AStringVector GetRankGroups(const AString & a_RankName);
2014-08-05 18:37:00 +02:00
/** Returns the permissions that the specified group has assigned to it.
Returns an empty vector if the group doesn't exist. */
AStringVector GetGroupPermissions(const AString & a_GroupName);
/** Returns all permissions that the specified rank has assigned to it, through all its groups.
Returns an empty vector if the rank doesn't exist. Any non-existent groups are ignored. */
AStringVector GetRankPermissions(const AString & a_RankName);
2014-08-05 18:37:00 +02:00
/** Returns the names of all defined ranks. */
AStringVector GetAllRanks(void);
/** Returns the names of all permission groups. */
AStringVector GetAllGroups(void);
2014-08-05 18:37:00 +02:00
/** Returns all the distinct permissions that are stored in the DB. */
AStringVector GetAllPermissions(void);
2014-08-08 21:30:47 +02:00
/** Returns the message visuals (prefix, postfix, color) for the specified player.
Returns true if the visuals were read from the DB, false if not (player not found etc). */
bool GetPlayerMsgVisuals(
2014-08-05 18:37:00 +02:00
const AString & a_PlayerUUID,
AString & a_MsgPrefix,
2014-08-05 22:28:37 +02:00
AString & a_MsgSuffix,
2014-08-05 18:37:00 +02:00
AString & a_MsgNameColorCode
);
/** Adds a new rank. No action if the rank already exists. */
2014-08-05 22:28:37 +02:00
void AddRank(
const AString & a_RankName,
const AString & a_MsgPrefix,
const AString & a_MsgSuffix,
const AString & a_MsgNameColorCode
);
2014-08-05 18:37:00 +02:00
/** Adds a new permission group. No action if such a group already exists. */
void AddGroup(const AString & a_GroupName);
2014-08-05 18:37:00 +02:00
/** Adds the specified permission group to the specified rank.
Fails if the rank or group names are not found.
Returns true if successful, false on error. */
bool AddGroupToRank(const AString & a_GroupName, const AString & a_RankName);
2014-08-05 18:37:00 +02:00
/** Adds the specified permission to the specified permission group.
Fails if the permission group name is not found.
Returns true if successful, false on error. */
bool AddPermissionToGroup(const AString & a_Permission, const AString & a_GroupName);
2014-08-05 18:37:00 +02:00
/** Removes the specified rank.
2014-08-08 21:30:47 +02:00
All players assigned to that rank will be re-assigned to a_ReplacementRankName.
If a_ReplacementRankName is empty or not a valid rank, the player will be removed from the DB,
which means they will receive the default rank the next time they are queried. */
2014-08-05 18:37:00 +02:00
void RemoveRank(const AString & a_RankName, const AString & a_ReplacementRankName);
/** Removes the specified group completely.
The group will first be removed from all ranks using it, and then removed itself. */
void RemoveGroup(const AString & a_GroupName);
/** Removes the specified group from the specified rank.
The group will stay defined, even if no rank is using it. */
2014-08-08 21:30:47 +02:00
void RemoveGroupFromRank(const AString & a_GroupName, const AString & a_RankName);
2014-08-05 18:37:00 +02:00
/** Removes the specified permission from the specified group. */
void RemovePermissionFromGroup(const AString & a_Permission, const AString & a_GroupName);
2014-08-05 18:37:00 +02:00
/** Renames the specified rank. No action if the rank name is not found.
Fails if the new name is already used.
Returns true on success, false on failure. */
bool RenameRank(const AString & a_OldName, const AString & a_NewName);
/** Renames the specified group. No action if the rank name is not found.
2014-08-05 18:37:00 +02:00
Fails if the new name is already used.
Returns true on success, false on failure. */
bool RenameGroup(const AString & a_OldName, const AString & a_NewName);
2014-08-05 18:37:00 +02:00
/** Sets the specified player's rank.
2014-08-08 21:30:47 +02:00
If the player already had rank assigned to them, it is overwritten with the new rank and name.
2014-08-05 18:37:00 +02:00
Note that this doesn't change the cPlayer if the player is already connected, you need to update all the
2014-08-08 21:30:47 +02:00
cPlayer instances manually.
The PlayerName is provided for reference, so that GetRankPlayerNames() can work. */
void SetPlayerRank(const AString & a_PlayerUUID, const AString & a_PlayerName, const AString & a_RankName);
2014-08-05 18:37:00 +02:00
2014-08-05 22:28:37 +02:00
/** Sets the message visuals of an existing rank. No action if the rank name is not found. */
void SetRankVisuals(
const AString & a_RankName,
const AString & a_MsgPrefix,
const AString & a_MsgSuffix,
const AString & a_MsgNameColorCode
);
2014-08-09 17:36:19 +02:00
/** Returns the message visuals of an existing rank.
Returns true if successful, false on error (rank doesn't exist). */
bool GetRankVisuals(
const AString & a_RankName,
AString & a_MsgPrefix,
AString & a_MsgSuffix,
AString & a_MsgNameColorCode
);
/** Returns true iff the specified rank exists in the DB. */
bool RankExists(const AString & a_RankName);
/** Returns true iff the specified group exists in the DB. */
bool GroupExists(const AString & a_GroupName);
/** Returns true iff the specified player has a rank assigned to them in the DB. */
bool IsPlayerRankSet(const AString & a_PlayerUUID);
/** Returns true iff the specified rank contains the specified group. */
bool IsGroupInRank(const AString & a_GroupName, const AString & a_RankName);
/** Returns true iff the specified group contains the specified permission. */
bool IsPermissionInGroup(const AString & a_Permission, const AString & a_GroupName);
2014-08-05 18:37:00 +02:00
protected:
SQLite::Database m_DB;
} ;