summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2024-02-02 22:09:41 +0100
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2024-02-02 22:10:21 +0100
commite8ec55df9173c588a774f50e71cfd2be77271166 (patch)
treef6d2b9611ae02850f9ab47e28499e0495cafe8bf
parent83df149da22fe69787b4b543022e8a1c18555643 (diff)
downloadmana-e8ec55df9173c588a774f50e71cfd2be77271166.tar.gz
mana-e8ec55df9173c588a774f50e71cfd2be77271166.tar.bz2
mana-e8ec55df9173c588a774f50e71cfd2be77271166.tar.xz
mana-e8ec55df9173c588a774f50e71cfd2be77271166.zip
Restored support for setting monster ID offset on monsters tag
Apparently this was supported before, but support for that was lost in bd1fdd87eed48ba3ffcc413936d6a6a60a429a97. Fixes #46
-rw-r--r--src/resources/monsterdb.cpp8
-rw-r--r--src/resources/monsterdb.h2
-rw-r--r--src/resources/settingsmanager.cpp8
-rw-r--r--src/utils/xml.cpp5
-rw-r--r--src/utils/xml.h9
5 files changed, 28 insertions, 4 deletions
diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp
index 5fd74c24..c4abeecf 100644
--- a/src/resources/monsterdb.cpp
+++ b/src/resources/monsterdb.cpp
@@ -53,11 +53,15 @@ void MonsterDB::init()
if (mLoaded)
unload();
- // This used to be read from offset attribute of monsters root tag, however
- // I couldn't find any place it was used, so for now the default values are set
+ // This can be overridden by an 'offset' attribute on a 'monsters' root tag.
mMonsterIdOffset = Net::getNetworkType() == ServerInfo::TMWATHENA ? OLD_TMWATHENA_OFFSET : 0;
}
+void MonsterDB::setMonsterIdOffset(int offset)
+{
+ mMonsterIdOffset = offset;
+}
+
/**
* Read <monster> node from settings.
*/
diff --git a/src/resources/monsterdb.h b/src/resources/monsterdb.h
index 5b2f3c2d..dc8b50cb 100644
--- a/src/resources/monsterdb.h
+++ b/src/resources/monsterdb.h
@@ -33,6 +33,8 @@ namespace MonsterDB
{
void init();
+ void setMonsterIdOffset(int offset);
+
void readMonsterNode(xmlNodePtr node, const std::string &filename);
void checkStatus();
diff --git a/src/resources/settingsmanager.cpp b/src/resources/settingsmanager.cpp
index b307d565..f4a40577 100644
--- a/src/resources/settingsmanager.cpp
+++ b/src/resources/settingsmanager.cpp
@@ -121,6 +121,14 @@ namespace SettingsManager
return false;
}
+ if (xmlStrEqual(node->name, BAD_CAST "monsters"))
+ {
+ if (XML::hasProperty(node, "offset"))
+ {
+ MonsterDB::setMonsterIdOffset(XML::getProperty(node, "offset", 0));
+ }
+ }
+
// go through every node
for_each_xml_child_node(childNode, node)
{
diff --git a/src/utils/xml.cpp b/src/utils/xml.cpp
index d0f51230..2fb9d66b 100644
--- a/src/utils/xml.cpp
+++ b/src/utils/xml.cpp
@@ -92,6 +92,11 @@ namespace XML
return mDoc ? xmlDocGetRootElement(mDoc) : nullptr;
}
+ bool hasProperty(xmlNodePtr node, const char *name)
+ {
+ return xmlHasProp(node, BAD_CAST name) != nullptr;
+ }
+
int getProperty(xmlNodePtr node, const char* name, int def)
{
int &ret = def;
diff --git a/src/utils/xml.h b/src/utils/xml.h
index 60355aa6..df8dd1bd 100644
--- a/src/utils/xml.h
+++ b/src/utils/xml.h
@@ -60,9 +60,9 @@ namespace XML
};
/**
- * Gets an floating point property from an xmlNodePtr.
+ * Returns whether a certain property is present.
*/
- double getFloatProperty(xmlNodePtr node, const char *name, double def);
+ bool hasProperty(xmlNodePtr node, const char *name);
/**
* Gets an integer property from an xmlNodePtr.
@@ -70,6 +70,11 @@ namespace XML
int getProperty(xmlNodePtr node, const char *name, int def);
/**
+ * Gets an floating point property from an xmlNodePtr.
+ */
+ double getFloatProperty(xmlNodePtr node, const char *name, double def);
+
+ /**
* Gets a string property from an xmlNodePtr.
*/
std::string getProperty(xmlNodePtr node, const char *name,