summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-05-13 22:03:58 +0300
committerAndrei Karas <akaras@inbox.ru>2016-05-13 22:03:58 +0300
commit546d5180247512270a2ccd114266fb36cd426e61 (patch)
treec87626cf176fef05e503637d3f68a79102a9a8fe
parent9d93ff1cf9e33ec1304a7deadd84bfd690110142 (diff)
downloadmv-546d5180247512270a2ccd114266fb36cd426e61.tar.gz
mv-546d5180247512270a2ccd114266fb36cd426e61.tar.bz2
mv-546d5180247512270a2ccd114266fb36cd426e61.tar.xz
mv-546d5180247512270a2ccd114266fb36cd426e61.zip
Add check asserts in ItemDB. Also fix new asserts from log.
-rw-r--r--src/const/resources/item/cards.h4
-rw-r--r--src/itemcolormanager.cpp11
-rw-r--r--src/resources/db/itemdb.cpp9
3 files changed, 20 insertions, 4 deletions
diff --git a/src/const/resources/item/cards.h b/src/const/resources/item/cards.h
index 8e759fbc7..93ca08c90 100644
--- a/src/const/resources/item/cards.h
+++ b/src/const/resources/item/cards.h
@@ -24,4 +24,8 @@
#define maxCards 4
#define maxMailCards 4
+#define CARD0_FORGE 0x00FF
+#define CARD0_CREATE 0x00FE
+#define CARD0_PET ((short)0xFF00)
+
#endif // CONST_RESOURCES_ITEM_CARDS_H
diff --git a/src/itemcolormanager.cpp b/src/itemcolormanager.cpp
index 9344ff856..0cf48015b 100644
--- a/src/itemcolormanager.cpp
+++ b/src/itemcolormanager.cpp
@@ -32,9 +32,18 @@ ItemColor ItemColorManager::getColorFromCards(const int *const cards)
{
if (!cards)
return ItemColor_one;
+ if (cards[0] == CARD0_FORGE ||
+ cards[0] == CARD0_CREATE ||
+ cards[0] == CARD0_PET)
+ {
+ return ItemColor_one;
+ }
for (int f = 0; f < maxCards; f ++)
{
- const ItemInfo &info = ItemDB::get(cards[f]);
+ const int id = cards[f];
+ if (id == 0)
+ continue;
+ const ItemInfo &info = ItemDB::get(id);
const ItemColor &color = info.getCardColor();
if (color != ItemColor_zero)
return color;
diff --git a/src/resources/db/itemdb.cpp b/src/resources/db/itemdb.cpp
index a6dcd48ab..6c79c12e8 100644
--- a/src/resources/db/itemdb.cpp
+++ b/src/resources/db/itemdb.cpp
@@ -38,6 +38,7 @@
#include "net/serverfeatures.h"
+#include "utils/checkutils.h"
#include "utils/delete2.h"
#include "utils/dtor.h"
#include "utils/files.h"
@@ -285,7 +286,8 @@ void ItemDB::load()
// Hairstyles are encoded as negative numbers. Count how far negative
// we can go.
int hairstyles = 1;
- while (ItemDB::get(-hairstyles).getSprite(Gender::MALE,
+ while (ItemDB::exists(-hairstyles) &&
+ ItemDB::get(-hairstyles).getSprite(Gender::MALE,
BeingTypeId_zero) != paths.getStringValue("spriteErrorFile"))
{
hairstyles ++;
@@ -293,7 +295,8 @@ void ItemDB::load()
mNumberOfHairstyles = hairstyles;
int races = 100;
- while (ItemDB::get(-races).getSprite(Gender::MALE, BeingTypeId_zero) !=
+ while (ItemDB::exists(-races) &&
+ ItemDB::get(-races).getSprite(Gender::MALE, BeingTypeId_zero) !=
paths.getStringValue("spriteErrorFile"))
{
races ++;
@@ -744,7 +747,7 @@ const ItemInfo &ItemDB::get(const int id)
if (i == mItemInfos.end())
{
- logger->log("ItemDB: Warning, unknown item ID# %d", id);
+ reportAlways("ItemDB: Warning, unknown item ID# %d", id);
return *mUnknown;
}