From e6d4de6f687ac74b1acd39b1ab931fa09ece0508 Mon Sep 17 00:00:00 2001 From: Eugenio Favalli Date: Wed, 20 Apr 2005 21:44:27 +0000 Subject: Adding first implementation of item database --- The Mana World.dev | 42 +++++++++++- docs/items.txt | 2 +- src/main.cpp | 5 +- src/resources/iteminfo.cpp | 101 ++++++++++++++++++++++++++++ src/resources/iteminfo.h | 85 ++++++++++++++++++++++++ src/resources/itemmanager.cpp | 149 ++++++++++++++++++++++++++++++++++++++++++ src/resources/itemmanager.h | 69 +++++++++++++++++++ 7 files changed, 450 insertions(+), 3 deletions(-) create mode 100644 src/resources/iteminfo.cpp create mode 100644 src/resources/iteminfo.h create mode 100644 src/resources/itemmanager.cpp create mode 100644 src/resources/itemmanager.h diff --git a/The Mana World.dev b/The Mana World.dev index f16f90c1..e1b47745 100644 --- a/The Mana World.dev +++ b/The Mana World.dev @@ -1,7 +1,7 @@ [Project] FileName=The Mana World.dev Name=tmw -UnitCount=119 +UnitCount=123 Type=0 Ver=1 ObjFiles= @@ -1247,3 +1247,43 @@ Priority=1000 OverrideBuildCmd=0 BuildCmd= +[Unit120] +FileName=src\resources\iteminfo.cpp +CompileCpp=1 +Folder=resources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit121] +FileName=src\resources\iteminfo.h +CompileCpp=1 +Folder=resources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit122] +FileName=src\resources\itemmanager.cpp +CompileCpp=1 +Folder=resources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit123] +FileName=src\resources\itemmanager.h +CompileCpp=1 +Folder=resources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/docs/items.txt b/docs/items.txt index e31f4904..9b760f0d 100644 --- a/docs/items.txt +++ b/docs/items.txt @@ -58,7 +58,7 @@ C&S means info is used by both * ANCIENT_WIZARD * NOT_IDENTIFIABLE reserved for future use -- weigth (S) -> unsigned short +- weight (S) -> unsigned short used by server to calculate if the being can carry more items. 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 @@ -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 + +/** + * 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 +#include +#include + +#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 +#include + +#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 db; + +}; + +#endif -- cgit v1.2.3-70-g09d2