summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/perserver/default/groups.xml1
-rw-r--r--src/being/being.cpp6
-rw-r--r--src/resources/db/groupdb.cpp14
-rw-r--r--src/resources/db/groupdb.h1
-rw-r--r--src/resources/groupinfo.h4
5 files changed, 24 insertions, 2 deletions
diff --git a/data/perserver/default/groups.xml b/data/perserver/default/groups.xml
index 5458d7847..dcce80e22 100644
--- a/data/perserver/default/groups.xml
+++ b/data/perserver/default/groups.xml
@@ -25,6 +25,7 @@ Copyright (C) 2017 Evol Online -->
id="60"
name="GM"
longName="Game master"
+ showBadge="true"
/>
<group
id="80"
diff --git a/src/being/being.cpp b/src/being/being.cpp
index ff8593c11..147be14a4 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -86,6 +86,7 @@
#include "resources/db/avatardb.h"
#include "resources/db/badgesdb.h"
+#include "resources/db/groupdb.h"
#include "resources/db/elementaldb.h"
#include "resources/db/emotedb.h"
#include "resources/db/homunculusdb.h"
@@ -3498,7 +3499,10 @@ void Being::setGender(const GenderT gender) restrict2
void Being::showGmBadge(const bool show) restrict2
{
delete2(mBadges[BadgeIndex::Gm]);
- if (show && mIsGM && (mShowBadges != 0u))
+ if (show &&
+ mIsGM &&
+ mShowBadges != 0u &&
+ GroupDb::getShowBadge(mGroupId))
{
const std::string gmBadge = paths.getStringValue("gmbadge");
if (!gmBadge.empty())
diff --git a/src/resources/db/groupdb.cpp b/src/resources/db/groupdb.cpp
index 4b25e94bd..c65406841 100644
--- a/src/resources/db/groupdb.cpp
+++ b/src/resources/db/groupdb.cpp
@@ -96,6 +96,9 @@ void GroupDb::loadXmlFile(const std::string &fileName,
mGroups[id].longName = XML::langProperty(node,
"longName",
"");
+ mGroups[id].showBadge = XML::getBoolProperty(node,
+ "showBadge",
+ false);
}
}
}
@@ -128,6 +131,17 @@ const std::string &GroupDb::getLongName(const int id)
return (*it).second.longName;
}
+bool GroupDb::getShowBadge(const int id)
+{
+ GroupInfos::const_iterator it = mGroups.find(id);
+ if (it == mGroups.end())
+ {
+ reportAlways("Unknown group id requested: %d", id);
+ return mEmptyGroup.showBadge;
+ }
+ return (*it).second.showBadge;
+}
+
#ifdef UNITTESTS
GroupDb::GroupInfos &GroupDb::getGroups()
{
diff --git a/src/resources/db/groupdb.h b/src/resources/db/groupdb.h
index f2c027120..4e687dea9 100644
--- a/src/resources/db/groupdb.h
+++ b/src/resources/db/groupdb.h
@@ -40,6 +40,7 @@ namespace GroupDb
const SkipError skipError);
const std::string &getName(const int id);
const std::string &getLongName(const int id);
+ bool getShowBadge(const int id);
typedef std::map<int, GroupInfo> GroupInfos;
diff --git a/src/resources/groupinfo.h b/src/resources/groupinfo.h
index 1ca0ed30e..59a79a9bd 100644
--- a/src/resources/groupinfo.h
+++ b/src/resources/groupinfo.h
@@ -29,13 +29,15 @@ struct GroupInfo final
{
GroupInfo() :
name(),
- longName()
+ longName(),
+ showBadge(false)
{ }
A_DEFAULT_COPY(GroupInfo)
std::string name;
std::string longName;
+ bool showBadge;
};
#endif // RESOURCES_GROUPINFO_H