summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2013-04-27 21:43:32 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2013-04-27 22:07:06 +0200
commit4b0da49b28bb64d2da293ca90fec63079c2c5849 (patch)
tree7cf17967002737836199966e6e123de417943d4d /src/resources
parent1a99d37d059df95f6a144c4f9e9fa85dacefd185 (diff)
downloadmana-client-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.gz
mana-client-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.bz2
mana-client-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.xz
mana-client-4b0da49b28bb64d2da293ca90fec63079c2c5849.zip
Added support for charcreation.xml settings
This file was introduced by ManaPlus as a way of configuring the character creation process. It defines the number of hair styles and colors, how stat points should be divided and what the starting equipment of the player is. The minimum and maximum hair color/style IDs are not supported at the moment. This is mostly a backport of ManaPlus commits 10cf52b5 and dcc18eba, with some style changes. Mantis-issue: 501 Reviewed-by: Ablu
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/chardb.cpp132
-rw-r--r--src/resources/chardb.h48
2 files changed, 180 insertions, 0 deletions
diff --git a/src/resources/chardb.cpp b/src/resources/chardb.cpp
new file mode 100644
index 00000000..40ecd999
--- /dev/null
+++ b/src/resources/chardb.cpp
@@ -0,0 +1,132 @@
+/*
+ * Character creation settings
+ * Copyright (C) 2011-2013 The ManaPlus Developers
+ * Copyright (C) 2013 The Mana Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "resources/chardb.h"
+
+#include "log.h"
+
+#include "utils/xml.h"
+
+namespace
+{
+ bool mLoaded = false;
+ unsigned mMinHairColor = 0;
+ unsigned mMaxHairColor = 0;
+ unsigned mMinHairStyle = 0;
+ unsigned mMaxHairStyle = 0;
+ unsigned mMinStat = 0;
+ unsigned mMaxStat = 0;
+ unsigned mSumStat = 0;
+ std::vector<int> mDefaultItems;
+}
+
+static void loadMinMax(xmlNodePtr node, unsigned *min, unsigned *max)
+{
+ *min = XML::getProperty(node, "min", 1);
+ *max = XML::getProperty(node, "max", 10);
+}
+
+void CharDB::load()
+{
+ if (mLoaded)
+ unload();
+
+ XML::Document doc("charcreation.xml");
+ xmlNodePtr root = doc.rootNode();
+
+ if (!root || !xmlStrEqual(root->name, BAD_CAST "chars"))
+ {
+ logger->log("CharDB: Failed to parse charcreation.xml.");
+ return;
+ }
+
+ for_each_xml_child_node(node, root)
+ {
+ if (xmlStrEqual(node->name, BAD_CAST "haircolor"))
+ {
+ loadMinMax(node, &mMinHairColor, &mMaxHairColor);
+ }
+ else if (xmlStrEqual(node->name, BAD_CAST "hairstyle"))
+ {
+ loadMinMax(node, &mMinHairStyle, &mMaxHairStyle);
+ }
+ else if (xmlStrEqual(node->name, BAD_CAST "stat"))
+ {
+ loadMinMax(node, &mMinStat, &mMaxStat);
+ mSumStat = XML::getProperty(node, "sum", 0);
+ }
+ else if (xmlStrEqual(node->name, BAD_CAST "item"))
+ {
+ const int id = XML::getProperty(node, "id", 0);
+ if (id > 0)
+ mDefaultItems.push_back(id);
+ }
+ }
+
+ mLoaded = true;
+}
+
+void CharDB::unload()
+{
+ logger->log("Unloading chars database...");
+
+ mLoaded = false;
+}
+
+unsigned CharDB::getMinHairColor()
+{
+ return mMinHairColor;
+}
+
+unsigned CharDB::getMaxHairColor()
+{
+ return mMaxHairColor;
+}
+
+unsigned CharDB::getMinHairStyle()
+{
+ return mMinHairStyle;
+}
+
+unsigned CharDB::getMaxHairStyle()
+{
+ return mMaxHairStyle;
+}
+
+unsigned CharDB::getMinStat()
+{
+ return mMinStat;
+}
+
+unsigned CharDB::getMaxStat()
+{
+ return mMaxStat;
+}
+
+unsigned CharDB::getSumStat()
+{
+ return mSumStat;
+}
+
+const std::vector<int> &CharDB::getDefaultItems()
+{
+ return mDefaultItems;
+}
diff --git a/src/resources/chardb.h b/src/resources/chardb.h
new file mode 100644
index 00000000..10530b26
--- /dev/null
+++ b/src/resources/chardb.h
@@ -0,0 +1,48 @@
+/*
+ * Character creation settings
+ * Copyright (C) 2011-2013 The ManaPlus Developers
+ * Copyright (C) 2013 The Mana Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RESOURCES_CHARDB_H
+#define RESOURCES_CHARDB_H
+
+#include <vector>
+
+/**
+ * Character creation settings.
+ */
+namespace CharDB
+{
+ void load();
+ void unload();
+
+ unsigned getMinHairColor();
+ unsigned getMaxHairColor();
+
+ unsigned getMinHairStyle();
+ unsigned getMaxHairStyle();
+
+ unsigned getMinStat();
+ unsigned getMaxStat();
+ unsigned getSumStat();
+
+ const std::vector<int> &getDefaultItems();
+}
+
+#endif // RESOURCES_CHARDB_H