diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2013-04-27 21:43:32 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2013-04-27 22:07:06 +0200 |
commit | 4b0da49b28bb64d2da293ca90fec63079c2c5849 (patch) | |
tree | 7cf17967002737836199966e6e123de417943d4d /src/resources/chardb.cpp | |
parent | 1a99d37d059df95f6a144c4f9e9fa85dacefd185 (diff) | |
download | mana-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.gz mana-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.bz2 mana-4b0da49b28bb64d2da293ca90fec63079c2c5849.tar.xz mana-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/chardb.cpp')
-rw-r--r-- | src/resources/chardb.cpp | 132 |
1 files changed, 132 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; +} |