diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 5 | ||||
-rw-r--r-- | src/resources/iteminfo.cpp | 101 | ||||
-rw-r--r-- | src/resources/iteminfo.h | 85 | ||||
-rw-r--r-- | src/resources/itemmanager.cpp | 149 | ||||
-rw-r--r-- | src/resources/itemmanager.h | 69 |
5 files changed, 408 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index 5f4595f5..f7340ff2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,7 @@ #include "sound.h" #include "graphics.h" #include "resources/resourcemanager.h" +#include "resources/itemmanager.h" #include "net/protocol.h" #include <iostream> @@ -72,10 +73,12 @@ bool useOpenGL = false; Sound sound; Music *bgm; -// ini file configuration reader +// Xml file configuration reader Configuration config; // Log object Logger logger("tmw.log"); +// Item database object +ItemManager itemDb; /** * Listener used for responding to map start error dialog. diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp new file mode 100644 index 00000000..bceeffef --- /dev/null +++ b/src/resources/iteminfo.cpp @@ -0,0 +1,101 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "iteminfo.h" + +ItemInfo::ItemInfo() : + image(0), name(""), + description(""), type(0), + weight(0), slot(0) +{ +} + +void ItemInfo::setImage(short image) +{ + this->image = image; +} + +short ItemInfo::getImage() +{ + return image; +} + +void ItemInfo::setArt(short art) +{ + this->art = art; +} + +short ItemInfo::getArt() +{ + return art; +} + +void ItemInfo::setName(const std::string &name) +{ + this->name = name; +} + +std::string ItemInfo::getName() +{ + return name; +} + +void ItemInfo::setDescription(const std::string &description) +{ + this->description = description; +} + +std::string ItemInfo::getDescription() +{ + return description; +} + +void ItemInfo::setType(short type) +{ + this->type = type; +} + +short ItemInfo::getType() +{ + return type; +} + +void ItemInfo::setWeight(short weight) +{ + this->weight = weight; +} + +short ItemInfo::getWeight() +{ + return weight; +} + +void ItemInfo::setSlot(char slot) +{ + this->slot = slot; +} + +char ItemInfo::getSlot() +{ + return slot; +} diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h new file mode 100644 index 00000000..c9c5c85c --- /dev/null +++ b/src/resources/iteminfo.h @@ -0,0 +1,85 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#ifndef _TMW_ITEMINFO_H +#define _TMW_ITEMINFO_H + +#include <string> + +/** + * Defines a class for storing item infos. + */ +class ItemInfo +{ + public: + /** + * Constructor. + */ + ItemInfo(); + + + void setImage(short image); + + short getImage(); + + void setArt(short art); + + short getArt(); + + void setName(const std::string &name); + + std::string getName(); + + void setDescription(const std::string &description); + + std::string getDescription(); + + void setType(short type); + + short getType(); + + void setWeight(short weight); + + short getWeight(); + + void setSlot(char slot); + + char getSlot(); + + + protected: + /** + * Destructor. + */ + ~ItemInfo(); + + short image, art; + std::string name; + std::string description; + short type, weight; + char slot; + + +}; + +#endif diff --git a/src/resources/itemmanager.cpp b/src/resources/itemmanager.cpp new file mode 100644 index 00000000..5ad4e66d --- /dev/null +++ b/src/resources/itemmanager.cpp @@ -0,0 +1,149 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include <libxml/parser.h> +#include <libxml/tree.h> +#include <iostream> + +#include "itemmanager.h" +#include "../main.h" +#include "../log.h" + +// MSVC libxml2 at the moment doesn't work right when using MinGW, missing this +// function at link time. +#ifdef WIN32 +#undef xmlFree +#define xmlFree(x) ; +#endif + +ItemManager::ItemManager() +{ + // Check that file exists before trying to parse it + std::fstream dbFile; + dbFile.open("./data/items.xml", std::ios::in); + if (!dbFile.is_open()) { + logger.log("Cannot find item database!"); + return; + } + dbFile.close(); + + xmlDocPtr doc = xmlParseFile("./data/items.xml"); + + if (doc) { + xmlNodePtr node = xmlDocGetRootElement(doc); + + if (!node || !xmlStrEqual(node->name, BAD_CAST "items")) { + logger.log("Warning: Not a valid database file!"); + } else { + for (node = node->xmlChildrenNode; node != NULL; node = node->next) + { + if (xmlStrEqual(node->name, BAD_CAST "item")) + { + xmlChar *prop; + prop = xmlGetProp(node, BAD_CAST "id"); + int id = atoi((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "image"); + int image = atoi((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "art"); + int art = atoi((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "name"); + std::string name((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "description"); + std::string description((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "type"); + int type = atoi((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "weight"); + int weight = atoi((const char*)prop); + xmlFree(prop); + prop = xmlGetProp(node, BAD_CAST "slot"); + int slot = atoi((const char*)prop); + xmlFree(prop); + + ItemInfo *itemInfo = new ItemInfo(); + itemInfo->setImage(image); + itemInfo->setArt(art); + itemInfo->setName(name); + itemInfo->setDescription(description); + itemInfo->setType(type); + itemInfo->setWeight(weight); + itemInfo->setSlot(slot); + db[id] = itemInfo; + + /*logger.log("Item: %i %i %i %s %s %i %i %i", id, + getImage(id), getArt(id), getName(id).c_str(), + getDescription(id).c_str(), getType(id), getWeight(id), + getSlot(id));*/ + } + } + } + + xmlFreeDoc(doc); + } else { + logger.log("Error while parsing item database!"); + } +} + +ItemManager::~ItemManager() +{ +} + +short ItemManager::getImage(int id) +{ + return db[id]->getImage(); +} + +short ItemManager::getArt(int id) +{ + return db[id]->getArt(); +} + +std::string ItemManager::getName(int id) +{ + return db[id]->getName(); +} + +std::string ItemManager::getDescription(int id) +{ + return db[id]->getDescription(); +} + +short ItemManager::getType(int id) +{ + return db[id]->getType(); +} + +short ItemManager::getWeight(int id) +{ + return db[id]->getWeight(); +} + +char ItemManager::getSlot(int id) +{ + return db[id]->getSlot(); +} diff --git a/src/resources/itemmanager.h b/src/resources/itemmanager.h new file mode 100644 index 00000000..0db5893f --- /dev/null +++ b/src/resources/itemmanager.h @@ -0,0 +1,69 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#ifndef _TMW_ITEM_MANAGER_H +#define _TMW_ITEM_MANAGER_H + +#include <string> +#include <map> + +#include "iteminfo.h" + +/** + * Defines a class to load items database. + */ +class ItemManager +{ + public: + /** + * Constructor. + */ + ItemManager(); + + /** + * Destructor. + */ + ~ItemManager(); + + short getImage(int id); + + short getArt(int id); + + std::string getName(int id); + + std::string getDescription(int id); + + short getType(int id); + + short getWeight(int id); + + char getSlot(int id); + + + protected: + // Items database + std::map <int, ItemInfo *> db; + +}; + +#endif |