diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-05-23 13:11:40 +0200 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-05-23 13:16:11 +0200 |
commit | 2a9f8e05312c210ec204e09861f47c3d017706eb (patch) | |
tree | a3aceadb77f5d54dd065f69fa348969a0c31eac2 /src | |
parent | 4deff8569279d5cf23a73fdc1c986592ca4f7ed2 (diff) | |
download | mana-2a9f8e05312c210ec204e09861f47c3d017706eb.tar.gz mana-2a9f8e05312c210ec204e09861f47c3d017706eb.tar.bz2 mana-2a9f8e05312c210ec204e09861f47c3d017706eb.tar.xz mana-2a9f8e05312c210ec204e09861f47c3d017706eb.zip |
Fixed the empty item link crash differently
The crash was due to an assertion which shouldn't have been there, so I
removed the assertion instead. I've also made sure the unknown item has
its id initialized to 0, so that it can be used to check against instead
of the item name.
Normalization of item names was moved within the item database.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/widgets/chattab.cpp | 22 | ||||
-rw-r--r-- | src/resources/itemdb.cpp | 26 | ||||
-rw-r--r-- | src/resources/iteminfo.h | 7 |
3 files changed, 25 insertions, 30 deletions
diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp index 85353bf7..ad0911c9 100644 --- a/src/gui/widgets/chattab.cpp +++ b/src/gui/widgets/chattab.cpp @@ -215,7 +215,7 @@ void ChatTab::chatInput(std::string &msg) while (start != std::string::npos && msg[start+1] != '@') { std::string::size_type end = msg.find(']', start); - if (start+1 != end && end != std::string::npos) + if (start + 1 != end && end != std::string::npos) { // Catch multiple embeds and ignore them // so it doesn't crash the client. @@ -227,22 +227,16 @@ void ChatTab::chatInput(std::string &msg) std::string temp = msg.substr(start + 1, end - start - 1); - // Do not parse an empty string (it crashes the client) - if (!temp.empty()) + const ItemInfo itemInfo = ItemDB::get(temp); + if (itemInfo.getId() != 0) { - toLower(trim(temp)); - - const ItemInfo itemInfo = ItemDB::get(temp); - if (itemInfo.getName() != _("Unknown item")) - { - msg.insert(end, "@@"); - msg.insert(start+1, "|"); - msg.insert(start+1, toString(itemInfo.getId())); - msg.insert(start+1, "@@"); - } + msg.insert(end, "@@"); + msg.insert(start + 1, "|"); + msg.insert(start + 1, toString(itemInfo.getId())); + msg.insert(start + 1, "@@"); } } - start = msg.find('[', start + 1); + start = msg.find('[', start + 1); } // Prepare ordinary message diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index 99907ca7..5dda2bfd 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -243,7 +243,7 @@ void ItemDB::unload() mLoaded = false; } -const ItemInfo& ItemDB::get(int id) +const ItemInfo &ItemDB::get(int id) { assert(mLoaded); @@ -251,30 +251,30 @@ const ItemInfo& ItemDB::get(int id) if (i == mItemInfos.end()) { - logger->log("ItemDB: Error, unknown item ID# %d", id); + logger->log("ItemDB: Warning, unknown item ID# %d", id); return *mUnknown; } - else - { - return *(i->second); - } + + return *(i->second); } -const ItemInfo& ItemDB::get(const std::string &name) +const ItemInfo &ItemDB::get(const std::string &name) { - assert(mLoaded && !name.empty()); + assert(mLoaded); NamedItemInfos::const_iterator i = mNamedItemInfos.find(name); if (i == mNamedItemInfos.end()) { - logger->log("ItemDB: Error, unknown item name %s", name.c_str()); + if (!name.empty()) + { + logger->log("ItemDB: Warning, unknown item name \"%s\"", + name.c_str()); + } return *mUnknown; } - else - { - return *(i->second); - } + + return *(i->second); } void loadSpriteRef(ItemInfo *itemInfo, xmlNodePtr node) diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h index 3329d95b..0c87b585 100644 --- a/src/resources/iteminfo.h +++ b/src/resources/iteminfo.h @@ -118,6 +118,7 @@ class ItemInfo mType(ITEM_UNUSABLE), mWeight(0), mView(0), + mId(0), mAttackType(ACTION_DEFAULT) { } @@ -162,10 +163,10 @@ class ItemInfo ItemType getType() const { return mType; } - void setWeight(short weight) + void setWeight(int weight) { mWeight = weight; } - short getWeight() const + int getWeight() const { return mWeight; } void setView(int view) @@ -198,7 +199,7 @@ class ItemInfo std::string mEffect; /**< Description of effects. */ ItemType mType; /**< Item type. */ std::string mParticle; /**< Particle effect used with this item */ - short mWeight; /**< Weight in grams. */ + int mWeight; /**< Weight in grams. */ int mView; /**< Item ID of how this item looks. */ int mId; /**< Item ID */ |