From 41cc92f73e39cec5dfea6b1164176610cccc7df4 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 15 Aug 2015 13:58:32 +0300 Subject: Add strong typed int for item color. --- src/CMakeLists.txt | 1 + src/Makefile.am | 1 + src/actions/actions.cpp | 17 +++--- src/actions/commands.cpp | 2 +- src/actormanager.cpp | 6 +- src/actormanager.h | 2 +- src/being/being.cpp | 79 ++++++++++++++++++--------- src/being/being.h | 17 +++--- src/being/localplayer.cpp | 8 +-- src/being/localplayer.h | 2 +- src/dragdrop.h | 26 +++++---- src/dropshortcut.cpp | 4 +- src/enums/simpletypes/intdefines.h | 6 +- src/enums/simpletypes/itemcolor.h | 29 ++++++++++ src/flooritem.cpp | 2 +- src/flooritem.h | 8 ++- src/gui/models/shopitems.cpp | 9 +-- src/gui/models/shopitems.h | 10 ++-- src/gui/popups/itempopup.cpp | 6 +- src/gui/popups/itempopup.h | 6 +- src/gui/popups/popupmenu.cpp | 19 ++++--- src/gui/popups/popupmenu.h | 8 ++- src/gui/widgets/itemlinkhandler.cpp | 4 +- src/gui/widgets/itemshortcutcontainer.cpp | 8 +-- src/gui/widgets/selldialog.cpp | 2 +- src/gui/widgets/selldialog.h | 4 +- src/gui/widgets/virtshortcutcontainer.cpp | 4 +- src/gui/windows/buydialog.cpp | 5 +- src/gui/windows/buydialog.h | 3 +- src/gui/windows/buyingstoreselldialog.cpp | 2 +- src/gui/windows/charcreatedialog.cpp | 9 ++- src/gui/windows/itemamountwindow.cpp | 3 +- src/gui/windows/maileditwindow.cpp | 3 +- src/gui/windows/mailviewwindow.cpp | 3 +- src/gui/windows/npcdialog.cpp | 4 +- src/gui/windows/outfitwindow.cpp | 11 ++-- src/gui/windows/outfitwindow.h | 4 +- src/gui/windows/shopwindow.cpp | 25 +++++---- src/gui/windows/tradewindow.cpp | 4 +- src/gui/windows/tradewindow.h | 5 +- src/inventory.cpp | 13 +++-- src/inventory.h | 7 ++- src/item.cpp | 10 ++-- src/item.h | 11 ++-- src/itemshortcut.cpp | 21 ++++--- src/itemshortcut.h | 20 ++++--- src/net/adminhandler.h | 4 +- src/net/cashshophandler.h | 4 +- src/net/ea/adminhandler.cpp | 5 +- src/net/ea/adminhandler.h | 3 +- src/net/ea/beinghandler.cpp | 2 +- src/net/ea/beinghandler.h | 2 +- src/net/ea/inventoryitem.h | 5 +- src/net/ea/itemhandler.cpp | 10 +++- src/net/eathena/beinghandler.cpp | 50 +++++++++-------- src/net/eathena/buyingstorehandler.cpp | 4 +- src/net/eathena/buysellhandler.cpp | 2 +- src/net/eathena/cashshophandler.cpp | 4 +- src/net/eathena/cashshophandler.h | 2 +- src/net/eathena/charserverhandler.cpp | 6 +- src/net/eathena/inventoryhandler.cpp | 91 ++++++++++++++++++++++++------- src/net/eathena/itemhandler.cpp | 10 +++- src/net/eathena/markethandler.cpp | 4 +- src/net/eathena/markethandler.h | 2 +- src/net/eathena/npchandler.cpp | 2 +- src/net/eathena/npchandler.h | 2 +- src/net/eathena/tradehandler.cpp | 12 ++-- src/net/eathena/vendinghandler.cpp | 2 +- src/net/markethandler.h | 4 +- src/net/npchandler.h | 3 +- src/net/tmwa/beinghandler.cpp | 50 +++++++++-------- src/net/tmwa/buysellhandler.cpp | 2 +- src/net/tmwa/cashshophandler.cpp | 2 +- src/net/tmwa/cashshophandler.h | 2 +- src/net/tmwa/charserverhandler.cpp | 7 ++- src/net/tmwa/inventoryhandler.cpp | 65 +++++++++++++++++----- src/net/tmwa/itemhandler.cpp | 2 +- src/net/tmwa/markethandler.cpp | 2 +- src/net/tmwa/markethandler.h | 2 +- src/net/tmwa/npchandler.cpp | 2 +- src/net/tmwa/npchandler.h | 2 +- src/net/tmwa/tradehandler.cpp | 12 ++-- src/resources/beinginfo.cpp | 4 +- src/resources/beinginfo.h | 7 ++- src/resources/db/colordb.cpp | 36 ++++++------ src/resources/db/colordb.h | 29 ++++++---- src/resources/iteminfo.cpp | 20 +++---- src/resources/iteminfo.h | 17 +++--- src/shopitem.cpp | 4 +- src/shopitem.h | 4 +- src/shortcutbase.cpp | 16 +++--- src/shortcutbase.h | 13 +++-- 92 files changed, 615 insertions(+), 373 deletions(-) create mode 100644 src/enums/simpletypes/itemcolor.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3610eb3e1..43a2e0c5f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1091,6 +1091,7 @@ SET(SRCS enums/simpletypes/identified.h enums/simpletypes/ignorerecord.h enums/simpletypes/intdefines.h + enums/simpletypes/itemcolor.h enums/simpletypes/keep.h enums/simpletypes/modal.h enums/simpletypes/modifiable.h diff --git a/src/Makefile.am b/src/Makefile.am index cf6a2a8a2..9ec08b226 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -561,6 +561,7 @@ SRC += events/actionevent.h \ enums/simpletypes/identified.h \ enums/simpletypes/ignorerecord.h \ enums/simpletypes/intdefines.h \ + enums/simpletypes/itemcolor.h \ enums/simpletypes/keep.h \ enums/simpletypes/modal.h \ enums/simpletypes/modifiable.h \ diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp index 92c0029ed..014ae10f8 100644 --- a/src/actions/actions.cpp +++ b/src/actions/actions.cpp @@ -439,7 +439,8 @@ impHandler(dropItemId) return false; // +++ ignoring item color for now - Item *const item = inv->findItem(atoi(event.args.c_str()), 1); + Item *const item = inv->findItem(atoi(event.args.c_str()), + ItemColor_one); if (item && !PlayerInfo::isItemProtected(item->getId())) { @@ -467,7 +468,8 @@ impHandler(dropItemIdAll) return false; // +++ ignoring item color for now - Item *const item = inv->findItem(atoi(event.args.c_str()), 1); + Item *const item = inv->findItem(atoi(event.args.c_str()), + ItemColor_one); if (item && !PlayerInfo::isItemProtected(item->getId())) PlayerInfo::dropItem(item, item->getQuantity(), Sfx_true); @@ -1485,14 +1487,14 @@ impHandler0(createItems) if (!colors) { - dialog->addItem(id, 0, 1, 100, 0); + dialog->addItem(id, 0, ItemColor_one, 100, 0); } else { - for (unsigned char f = 0; f < colors; f ++) + for (int f = 0; f < colors; f ++) { - if (!info->getColor(f).empty()) - dialog->addItem(id, 0, f, 100, 0); + if (!info->getColor(fromInt(f, ItemColor)).empty()) + dialog->addItem(id, 0, fromInt(f, ItemColor), 100, 0); } } } @@ -1548,7 +1550,8 @@ impHandler(useItem) if (inv) { // +++ ignoring item color for now - const Item *const item = inv->findItem(itemId, 1); + const Item *const item = inv->findItem(itemId, + ItemColor_one); PlayerInfo::useEquipItem(item, Sfx_true); } } diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp index 8070efcc7..0a8ef91ba 100644 --- a/src/actions/commands.cpp +++ b/src/actions/commands.cpp @@ -285,7 +285,7 @@ impHandler(chatAdd) if (inv) { // +++ need add also color here - item = inv->findItem(id, 1); + item = inv->findItem(id, ItemColor_one); } if (item) diff --git a/src/actormanager.cpp b/src/actormanager.cpp index 8e26e2f6b..96d234327 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -300,7 +300,7 @@ FloorItem *ActorManager::createItem(const BeingId id, const int itemId, const int x, const int y, const int amount, - const unsigned char color, + const ItemColor color, const int subX, const int subY) { FloorItem *const floorItem = new FloorItem(id, itemId, @@ -1840,12 +1840,12 @@ Being *ActorManager::cloneBeing(const Being *const srcBeing, for (int slot = 0; slot < sz; slot ++) { const int spriteId = srcBeing->getSpriteID(slot); - const unsigned char color = srcBeing->getSpriteColor(slot); + const ItemColor color = srcBeing->getSpriteColor(slot); dstBeing->setSprite(slot, spriteId, "", color, false); } const int hairSlot = charServerHandler->hairSprite(); const int hairStyle = -srcBeing->getSpriteID(hairSlot); - const unsigned char hairColor = srcBeing->getHairColor(); + const ItemColor hairColor = srcBeing->getHairColor(); dstBeing->setSprite(hairSlot, hairStyle * -1, ItemDB::get(-hairStyle).getDyeColorsString(hairColor)); dstBeing->setHairColor(hairColor); diff --git a/src/actormanager.h b/src/actormanager.h index 270530f48..af597cbfb 100644 --- a/src/actormanager.h +++ b/src/actormanager.h @@ -84,7 +84,7 @@ class ActorManager final: public ConfigListener const int itemId, const int x, const int y, const int amount, - const unsigned char color, + const ItemColor color, const int subX, const int subY); /** diff --git a/src/being/being.cpp b/src/being/being.cpp index 4ba600294..ca5d7fd1a 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -227,7 +227,7 @@ Being::Being(const BeingId id, mTeamId(0U), mLook(0U), mBadgesCount(0U), - mHairColor(0), + mHairColor(ItemColor_zero), mErased(false), mEnemy(false), mGotComment(false), @@ -354,7 +354,7 @@ void Being::setSubtype(const BeingTypeId subtype, setupSpriteDisplay(mInfo->getDisplay(), ForceDisplay_true, 0, - mInfo->getColor(mLook)); + mInfo->getColor(fromInt(mLook, ItemColor))); mYDiff = mInfo->getSortOffsetY(); } } @@ -368,7 +368,7 @@ void Being::setSubtype(const BeingTypeId subtype, setupSpriteDisplay(mInfo->getDisplay(), ForceDisplay_true, 0, - mInfo->getColor(mLook)); + mInfo->getColor(fromInt(mLook, ItemColor))); mYDiff = mInfo->getSortOffsetY(); } } @@ -381,7 +381,7 @@ void Being::setSubtype(const BeingTypeId subtype, setupSpriteDisplay(mInfo->getDisplay(), ForceDisplay_true, 0, - mInfo->getColor(mLook)); + mInfo->getColor(fromInt(mLook, ItemColor))); mYDiff = mInfo->getSortOffsetY(); } } @@ -394,7 +394,7 @@ void Being::setSubtype(const BeingTypeId subtype, setupSpriteDisplay(mInfo->getDisplay(), ForceDisplay_true, 0, - mInfo->getColor(mLook)); + mInfo->getColor(fromInt(mLook, ItemColor))); mYDiff = mInfo->getSortOffsetY(); } } @@ -456,7 +456,7 @@ void Being::setSubtype(const BeingTypeId subtype, if (charServerHandler) { setSprite(charServerHandler->baseSprite(), - id, info.getColor(mLook)); + id, info.getColor(fromInt(mLook, ItemColor))); } } } @@ -2296,9 +2296,12 @@ void Being::updateColors() } } -void Being::updateSprite(const unsigned int slot, const int id, - std::string color, const unsigned char colorId, - const bool isWeapon, const bool isTempSprite) +void Being::updateSprite(const unsigned int slot, + const int id, + std::string color, + const ItemColor colorId, + const bool isWeapon, + const bool isTempSprite) { if (!charServerHandler || slot >= charServerHandler->maxSprite()) return; @@ -2311,9 +2314,12 @@ void Being::updateSprite(const unsigned int slot, const int id, setSprite(slot, id, color, colorId, isWeapon, isTempSprite); } -void Being::setSprite(const unsigned int slot, const int id, - std::string color, const unsigned char colorId, - const bool isWeapon, const bool isTempSprite) +void Being::setSprite(const unsigned int slot, + const int id, + std::string color, + const ItemColor colorId, + const bool isWeapon, + const bool isTempSprite) { if (!charServerHandler || slot >= charServerHandler->maxSprite()) return; @@ -2328,7 +2334,7 @@ void Being::setSprite(const unsigned int slot, const int id, mSpriteColors.resize(slot + 1, ""); if (slot >= static_cast(mSpriteColorsIds.size())) - mSpriteColorsIds.resize(slot + 1, 1); + mSpriteColorsIds.resize(slot + 1, ItemColor_one); // disabled for now, because it may broke replace/reorder sprites logic // if (slot && mSpriteIDs[slot] == id) @@ -2421,7 +2427,7 @@ void Being::setHairStyle(const unsigned int slot, const int id) // dumpSprites(); } -void Being::setHairColor(const unsigned int slot, const unsigned char color) +void Being::setHairColor(const unsigned int slot, const ItemColor color) { mHairColor = color; setSprite(slot, mSpriteIDs[slot], ItemDB::get( @@ -2434,15 +2440,15 @@ void Being::dumpSprites() const const std::vector::const_iterator it1_end = mSpriteIDs.end(); StringVectCIter it2 = mSpriteColors.begin(); const StringVectCIter it2_end = mSpriteColors.end(); - std::vector::const_iterator it3 = mSpriteColorsIds.begin(); - const std::vector::const_iterator + std::vector::const_iterator it3 = mSpriteColorsIds.begin(); + const std::vector::const_iterator it3_end = mSpriteColorsIds.end(); logger->log("sprites"); for (; it1 != it1_end && it2 != it2_end && it3 != it3_end; ++ it1, ++ it2, ++ it3) { - logger->log("%d,%s,%d", *it1, (*it2).c_str(), *it3); + logger->log("%d,%s,%d", *it1, (*it2).c_str(), toInt(*it3, int)); } } @@ -2994,14 +3000,18 @@ void Being::recalcSpritesOrder() { setSprite(remSprite, repIt->second, mSpriteColors[remSprite], - 1, false, true); + ItemColor_one, + false, + true); } else { setSprite(remSprite, repIt->second, ItemDB::get(repIt->second) .getDyeColorsString(mHairColor), - 1, false, true); + ItemColor_one, + false, + true); } updatedSprite[remSprite] = true; } @@ -3023,7 +3033,9 @@ void Being::recalcSpritesOrder() { setSprite(slot2, repIt->second, mSpriteColors[slot2], - 1, false, true); + ItemColor_one, + false, + true); } else { @@ -3031,7 +3043,9 @@ void Being::recalcSpritesOrder() ItemDB::get(repIt->second) .getDyeColorsString( mHairColor), - 1, false, true); + ItemColor_one, + false, + true); } updatedSprite[slot2] = true; } @@ -3174,7 +3188,12 @@ void Being::recalcSpritesOrder() continue; updatedSprite[slot] = true; - setSprite(slot, id, mSpriteColors[slot], 1, false, true); + setSprite(slot, + id, + mSpriteColors[slot], + ItemColor_one, + false, + true); } } } @@ -3183,8 +3202,16 @@ void Being::recalcSpritesOrder() if (mSpriteHide[slot] == 0) { const int id = mSpriteIDs[slot]; - if (updatedSprite[slot] == false && mSpriteDraw[slot] != id) - setSprite(slot, id, mSpriteColors[slot], 1, false, true); + if (updatedSprite[slot] == false && + mSpriteDraw[slot] != id) + { + setSprite(slot, + id, + mSpriteColors[slot], + ItemColor_one, + false, + true); + } } } } @@ -3467,10 +3494,10 @@ int Being::getSpriteID(const int slot) const return mSpriteIDs[slot]; } -unsigned char Being::getSpriteColor(const int slot) const +ItemColor Being::getSpriteColor(const int slot) const { if (slot < 0 || static_cast(slot) >= mSpriteColorsIds.size()) - return 1; + return ItemColor_one; return mSpriteColorsIds[slot]; } diff --git a/src/being/being.h b/src/being/being.h index 8926e5548..7bb7def7d 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -27,6 +27,7 @@ #include "enums/gui/usercolorid.h" +#include "enums/simpletypes/itemcolor.h" #include "enums/simpletypes/move.h" #include "resources/beinginfo.h" @@ -306,13 +307,13 @@ class Being notfinal : public ActorSprite, */ void setSprite(const unsigned int slot, const int id, std::string color = "", - const unsigned char colorId = 1, + const ItemColor colorId = ItemColor_one, const bool isWeapon = false, const bool isTempSprite = false); void updateSprite(const unsigned int slot, const int id, std::string color = "", - const unsigned char colorId = 1, + const ItemColor colorId = ItemColor_one, const bool isWeapon = false, const bool isTempSprite = false); @@ -784,17 +785,17 @@ class Being notfinal : public ActorSprite, int getSpriteID(const int slot) const A_WARN_UNUSED; - unsigned char getSpriteColor(const int slot) const A_WARN_UNUSED; + ItemColor getSpriteColor(const int slot) const A_WARN_UNUSED; void setHairStyle(const unsigned int slot, const int id); void setHairColor(const unsigned int slot, - const unsigned char color); + const ItemColor color); - void setHairColor(const unsigned char color) + void setHairColor(const ItemColor color) { mHairColor = color; } - unsigned char getHairColor() const A_WARN_UNUSED + ItemColor getHairColor() const A_WARN_UNUSED { return mHairColor; } void recalcSpritesOrder(); @@ -1007,7 +1008,7 @@ class Being notfinal : public ActorSprite, StringVect mSpriteColors; std::vector mSpriteIDs; - std::vector mSpriteColorsIds; + std::vector mSpriteColorsIds; SpriteParticleInfo mSpriteParticles; // Character guild information @@ -1139,7 +1140,7 @@ class Being notfinal : public ActorSprite, uint16_t mTeamId; uint16_t mLook; uint16_t mBadgesCount; - unsigned char mHairColor; + ItemColor mHairColor; bool mErased; bool mEnemy; bool mGotComment; diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index acc6e2c0e..6722d5a4b 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -813,7 +813,7 @@ void LocalPlayer::untarget() void LocalPlayer::pickedUp(const ItemInfo &itemInfo, const int amount, - const unsigned char color, + const ItemColor color, const BeingId floorItemId, const PickupT fail) { @@ -1317,7 +1317,7 @@ void LocalPlayer::changeEquipmentBeforeAttack(const Being *const target) const const WeaponsInfos &swords = WeaponsDB::getSwords(); FOR_EACH (WeaponsInfosIter, it, swords) { - item = inv->findItem(*it, 0); + item = inv->findItem(*it, ItemColor_zero); if (item) break; } @@ -1337,7 +1337,7 @@ void LocalPlayer::changeEquipmentBeforeAttack(const Being *const target) const const WeaponsInfos &shields = WeaponsDB::getShields(); FOR_EACH (WeaponsInfosIter, it, shields) { - item = inv->findItem(*it, 0); + item = inv->findItem(*it, ItemColor_zero); if (item) break; } @@ -1352,7 +1352,7 @@ void LocalPlayer::changeEquipmentBeforeAttack(const Being *const target) const const WeaponsInfos &bows = WeaponsDB::getBows(); FOR_EACH (WeaponsInfosIter, it, bows) { - item = inv->findItem(*it, 0); + item = inv->findItem(*it, ItemColor_zero); if (item) break; } diff --git a/src/being/localplayer.h b/src/being/localplayer.h index 475101528..c258a14f1 100644 --- a/src/being/localplayer.h +++ b/src/being/localplayer.h @@ -176,7 +176,7 @@ class LocalPlayer final : public Being, */ void pickedUp(const ItemInfo &itemInfo, const int amount, - const unsigned char color, + const ItemColor color, const BeingId floorItemId, const PickupT fail); diff --git a/src/dragdrop.h b/src/dragdrop.h index 814434124..278fc7639 100644 --- a/src/dragdrop.h +++ b/src/dragdrop.h @@ -27,6 +27,8 @@ #include "enums/dragdropsource.h" +#include "enums/simpletypes/itemcolor.h" + #include "gui/widgets/skilldata.h" #include "gui/widgets/skillinfo.h" @@ -44,8 +46,8 @@ class DragDrop final mItem(item ? item->getId() : 0), mSelItem(0), mTag(-1), - mItemColor(item ? item->getColor() : static_cast(1U)), - mSelItemColor(1) + mItemColor(item ? item->getColor() : ItemColor_one), + mSelItemColor(ItemColor_one) { if (mItemImage) mItemImage->incRef(); @@ -62,7 +64,7 @@ class DragDrop final int getItem() const { return mItem; } - uint8_t getItemColor() const + ItemColor getItemColor() const { return mItemColor; } Image *getItemImage() @@ -93,7 +95,7 @@ class DragDrop final else { mItem = 0; - mItemColor = 1; + mItemColor = ItemColor_one; mItemImage = nullptr; mSource = DRAGDROP_SOURCE_EMPTY; mTag = -1; @@ -107,7 +109,7 @@ class DragDrop final if (mItemImage) mItemImage->decRef(); mItem = 0; - mItemColor = 1; + mItemColor = ItemColor_one; if (command) { @@ -141,7 +143,7 @@ class DragDrop final if (mItemImage) mItemImage->decRef(); mItem = 0; - mItemColor = 1; + mItemColor = ItemColor_one; mText.clear(); mItemImage = nullptr; mSource = DRAGDROP_SOURCE_EMPTY; @@ -169,7 +171,7 @@ class DragDrop final if (mItem) ItemSoundManager::playSfx(mItem, ItemSoundEvent::PUT); mItem = 0; - mItemColor = 1; + mItemColor = ItemColor_one; mItemImage = nullptr; mSource = DRAGDROP_SOURCE_EMPTY; mText.clear(); @@ -189,20 +191,20 @@ class DragDrop final else { mSelItem = 0; - mSelItemColor = 1; + mSelItemColor = ItemColor_one; } } void deselect() { mSelItem = 0; - mSelItemColor = 1; + mSelItemColor = ItemColor_one; } int getSelected() const { return mSelItem; } - uint8_t getSelectedColor() const + ItemColor getSelectedColor() const { return mSelItemColor; } bool isSelected() const @@ -242,8 +244,8 @@ class DragDrop final int mItem; int mSelItem; int mTag; - uint8_t mItemColor; - uint8_t mSelItemColor; + ItemColor mItemColor; + ItemColor mSelItemColor; }; extern DragDrop dragDrop; diff --git a/src/dropshortcut.cpp b/src/dropshortcut.cpp index 02e831114..96d44311e 100644 --- a/src/dropshortcut.cpp +++ b/src/dropshortcut.cpp @@ -58,7 +58,7 @@ void DropShortcut::dropFirst() const return; const int itemId = getItem(0); - const unsigned char itemColor = getItemColor(0); + const ItemColor itemColor = getItemColor(0); if (PlayerInfo::isItemProtected(itemId)) return; @@ -116,7 +116,7 @@ bool DropShortcut::dropItem(const int cnt) return false; int itemId = 0; - unsigned char itemColor = 1; + ItemColor itemColor = ItemColor_one; while (mLastDropIndex < DROP_SHORTCUT_ITEMS && itemId < 1) { if (!PlayerInfo::isItemProtected(itemId)) diff --git a/src/enums/simpletypes/intdefines.h b/src/enums/simpletypes/intdefines.h index 984e9d411..975c63c3f 100644 --- a/src/enums/simpletypes/intdefines.h +++ b/src/enums/simpletypes/intdefines.h @@ -29,7 +29,8 @@ enum class name : type \ { \ }; \ - const name name##_zero = static_cast(0) + const name name##_zero = static_cast(0); \ + const name name##_one = static_cast(1) #define fromInt(val, name) static_cast(val) #define toInt(val, name) static_cast(val) @@ -39,7 +40,8 @@ #define defIntEnum(name, type) \ typedef type name; \ - const name name##_zero = 0 + const name name##_zero = 0; \ + const name name##_one = 1 #define fromInt(val, name) (val) #define toInt(val, name) (val) #define defIntEnumNeg(name) const name name##_negOne = -1 diff --git a/src/enums/simpletypes/itemcolor.h b/src/enums/simpletypes/itemcolor.h new file mode 100644 index 000000000..55966596e --- /dev/null +++ b/src/enums/simpletypes/itemcolor.h @@ -0,0 +1,29 @@ +/* + * The ManaPlus Client + * Copyright (C) 2015 The ManaPlus 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 . + */ + +#ifndef ENUMS_SIMPLETYPES_ITEMCOLOR_H +#define ENUMS_SIMPLETYPES_ITEMCOLOR_H + +#include "enums/simpletypes/intdefines.h" + +defIntEnum(ItemColor, uint16_t); +defIntEnumNeg(ItemColor); + +#endif // ENUMS_SIMPLETYPES_ITEMCOLOR_H diff --git a/src/flooritem.cpp b/src/flooritem.cpp index ea4ae21d3..d846d5f9b 100644 --- a/src/flooritem.cpp +++ b/src/flooritem.cpp @@ -47,7 +47,7 @@ FloorItem::FloorItem(const BeingId id, const int itemId, const int x, const int y, const int amount, - const unsigned char color) : + const ItemColor color) : ActorSprite(id), mItemId(itemId), mX(x), diff --git a/src/flooritem.h b/src/flooritem.h index 33c95c062..fe0bd26ad 100644 --- a/src/flooritem.h +++ b/src/flooritem.h @@ -23,6 +23,8 @@ #ifndef FLOORITEM_H #define FLOORITEM_H +#include "enums/simpletypes/itemcolor.h" + #include "being/actorsprite.h" #include "resources/cursor.h" @@ -49,7 +51,7 @@ class FloorItem final : public ActorSprite const int itemId, const int x, const int y, const int amount, - const unsigned char color); + const ItemColor color); A_DELETE_COPY(FloorItem) @@ -88,7 +90,7 @@ class FloorItem final : public ActorSprite unsigned getPickupCount() const A_WARN_UNUSED { return mPickupCount; } - unsigned char getColor() const A_WARN_UNUSED + ItemColor getColor() const A_WARN_UNUSED { return mColor; } bool getShowMsg() const A_WARN_UNUSED @@ -111,7 +113,7 @@ class FloorItem final : public ActorSprite int mHeightPosDiff; unsigned int mPickupCount; Cursor::Cursor mCursor; - unsigned char mColor; + ItemColor mColor; bool mShowMsg; bool mHighlight; }; diff --git a/src/gui/models/shopitems.cpp b/src/gui/models/shopitems.cpp index 409ca3f63..05c4a5e6c 100644 --- a/src/gui/models/shopitems.cpp +++ b/src/gui/models/shopitems.cpp @@ -53,7 +53,7 @@ std::string ShopItems::getElementAt(int i) ShopItem *ShopItems::addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price) { @@ -65,7 +65,7 @@ ShopItem *ShopItems::addItem(const int id, ShopItem *ShopItems::addItemNoDup(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price) { @@ -82,7 +82,7 @@ ShopItem *ShopItems::addItemNoDup(const int id, ShopItem *ShopItems::addItem2(const int inventoryIndex, const int id, const int type, - const unsigned char color, + const ItemColor color, const int quantity, const int price) { @@ -155,7 +155,8 @@ void ShopItems::clear() mShopItems.clear(); } -ShopItem *ShopItems::findItem(const int id, const unsigned char color) const +ShopItem *ShopItems::findItem(const int id, + const ItemColor color) const { std::vector::const_iterator it = mShopItems.begin(); const std::vector::const_iterator e = mShopItems.end(); diff --git a/src/gui/models/shopitems.h b/src/gui/models/shopitems.h index b222f9385..c964bdfb9 100644 --- a/src/gui/models/shopitems.h +++ b/src/gui/models/shopitems.h @@ -23,6 +23,8 @@ #ifndef GUI_MODELS_SHOPITEMS_H #define GUI_MODELS_SHOPITEMS_H +#include "enums/simpletypes/itemcolor.h" + #include "gui/models/listmodel.h" #include @@ -60,7 +62,7 @@ class ShopItems final : public ListModel */ ShopItem *addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price); @@ -76,13 +78,13 @@ class ShopItems final : public ListModel ShopItem *addItem2(const int inventoryIndex, const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price); ShopItem *addItemNoDup(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price); @@ -145,7 +147,7 @@ class ShopItems final : public ListModel * @return the item found or 0 */ ShopItem *findItem(const int id, - const unsigned char color) const A_WARN_UNUSED; + const ItemColor color) const A_WARN_UNUSED; bool findInAllItems(std::vector::iterator &it, const ShopItem *const item); diff --git a/src/gui/popups/itempopup.cpp b/src/gui/popups/itempopup.cpp index 33b2eba91..ceb32cdaf 100644 --- a/src/gui/popups/itempopup.cpp +++ b/src/gui/popups/itempopup.cpp @@ -58,7 +58,7 @@ ItemPopup::ItemPopup() : mIcon(new Icon(this, nullptr)), mLastName(), mLastId(0), - mLastColor(1) + mLastColor(ItemColor_one) { // Item name mItemName->setFont(boldFont); @@ -153,7 +153,7 @@ void ItemPopup::setItem(const Item *const item, } void ItemPopup::setItem(const ItemInfo &item, - const unsigned char color, + const ItemColor color, const bool showImage, int id, const int *const cards) @@ -336,6 +336,6 @@ void ItemPopup::mouseMoved(MouseEvent &event) void ItemPopup::resetPopup() { mLastName.clear(); - mLastColor = 1; + mLastColor = ItemColor_one; mLastId = 0; } diff --git a/src/gui/popups/itempopup.h b/src/gui/popups/itempopup.h index fb3feefa2..a66262473 100644 --- a/src/gui/popups/itempopup.h +++ b/src/gui/popups/itempopup.h @@ -24,6 +24,8 @@ #ifndef GUI_POPUPS_ITEMPOPUP_H #define GUI_POPUPS_ITEMPOPUP_H +#include "enums/simpletypes/itemcolor.h" + #include "gui/widgets/popup.h" #include "resources/itemtype.h" @@ -58,7 +60,7 @@ class ItemPopup final : public Popup * Sets the info to be displayed given a particular item. */ void setItem(const ItemInfo &item, - const unsigned char color, + const ItemColor color, const bool showImage, int id, const int *const cards); @@ -82,7 +84,7 @@ class ItemPopup final : public Popup Icon *mIcon; std::string mLastName; int mLastId; - unsigned char mLastColor; + ItemColor mLastColor; void setLabelColor(Label *label, const ItemType::Type type) const A_NONNULL(2); diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index 9adcc7b58..71a6d81d5 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -105,7 +105,7 @@ PopupMenu::PopupMenu() : mFloorItemId(BeingId_zero), mItem(nullptr), mItemId(0), - mItemColor(1), + mItemColor(ItemColor_one), mMapItem(nullptr), mTab(nullptr), mSpell(nullptr), @@ -1558,7 +1558,7 @@ void PopupMenu::handleLink(const std::string &link, replaceAll(cmd, "'BEINGID'", toString(toInt(mBeingId, int))); replaceAll(cmd, "'FLOORID'", toString(toInt(mFloorItemId, int))); replaceAll(cmd, "'ITEMID'", toString(mItemId)); - replaceAll(cmd, "'ITEMCOLOR'", toString(mItemColor)); + replaceAll(cmd, "'ITEMCOLOR'", toString(toInt(mItemColor, int))); replaceAll(cmd, "'BEINGTYPEID'", toString(static_cast(mType))); replaceAll(cmd, "'PLAYER'", localPlayer->getName()); if (mItem) @@ -1594,7 +1594,7 @@ void PopupMenu::handleLink(const std::string &link, mFloorItemId = BeingId_zero; mItem = nullptr; mItemId = 0; - mItemColor = 1; + mItemColor = ItemColor_one; mMapItem = nullptr; mTab = nullptr; mSpell = nullptr; @@ -1751,8 +1751,9 @@ void PopupMenu::showPopup(Window *const parent, showPopup(x, y); } -void PopupMenu::showItemPopup(const int x, const int y, const int itemId, - const unsigned char color) +void PopupMenu::showItemPopup(const int x, const int y, + const int itemId, + const ItemColor color) { const Inventory *const inv = PlayerInfo::getInventory(); if (!inv) @@ -1788,7 +1789,8 @@ void PopupMenu::showItemPopup(const int x, const int y, const int itemId, } } -void PopupMenu::showItemPopup(const int x, const int y, Item *const item) +void PopupMenu::showItemPopup(const int x, const int y, + Item *const item) { mItem = item; mX = x; @@ -1801,7 +1803,7 @@ void PopupMenu::showItemPopup(const int x, const int y, Item *const item) else { mItemId = 0; - mItemColor = 1; + mItemColor = ItemColor_one; } mNick.clear(); mBrowserBox->clearRows(); @@ -2103,7 +2105,8 @@ void PopupMenu::showPickupItemPopup(const int x, const int y, } void PopupMenu::showUndressPopup(const int x, const int y, - const Being *const being, Item *const item) + const Being *const being, + Item *const item) { if (!being || !item) return; diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h index 727818317..3952178f2 100644 --- a/src/gui/popups/popupmenu.h +++ b/src/gui/popups/popupmenu.h @@ -28,6 +28,7 @@ #include "enums/inventorytype.h" #include "enums/simpletypes/beingid.h" +#include "enums/simpletypes/itemcolor.h" #include "gui/widgets/linkhandler.h" #include "gui/widgets/popup.h" @@ -105,8 +106,9 @@ class PopupMenu final : public Popup, public LinkHandler void showItemPopup(const int x, const int y, Item *const item); - void showItemPopup(const int x, const int y, const int itemId, - const unsigned char color); + void showItemPopup(const int x, const int y, + const int itemId, + const ItemColor color); void showDropPopup(const int x, const int y, Item *const item); @@ -208,7 +210,7 @@ class PopupMenu final : public Popup, public LinkHandler BeingId mFloorItemId; Item *mItem; int mItemId; - unsigned char mItemColor; + ItemColor mItemColor; MapItem *mMapItem; ChatTab *mTab; TextCommand *mSpell; diff --git a/src/gui/widgets/itemlinkhandler.cpp b/src/gui/widgets/itemlinkhandler.cpp index 5a11103d9..388f563bd 100644 --- a/src/gui/widgets/itemlinkhandler.cpp +++ b/src/gui/widgets/itemlinkhandler.cpp @@ -111,9 +111,9 @@ void ItemLinkHandler::handleLink(const std::string &link, MouseEvent *event) splitToIntVector(str, link, ','); if (str.empty()) return; - unsigned char color = 1; + ItemColor color = ItemColor_one; if (str.size() > 1) - color = static_cast(str[1]); + color = fromInt(str[1], ItemColor); const int id = str[0]; if (id > 0) { diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp index 689d967c8..21fe944ac 100644 --- a/src/gui/widgets/itemshortcutcontainer.cpp +++ b/src/gui/widgets/itemshortcutcontainer.cpp @@ -124,7 +124,7 @@ void ItemShortcutContainer::draw(Graphics *graphics) itemX + 2, itemY + 2); const int itemId = selShortcut->getItem(i); - const unsigned char itemColor = selShortcut->getItemColor(i); + const ItemColor itemColor = selShortcut->getItemColor(i); if (itemId < 0) continue; @@ -261,7 +261,7 @@ void ItemShortcutContainer::safeDraw(Graphics *graphics) itemX + 2, itemY + 2); const int itemId = selShortcut->getItem(i); - const unsigned char itemColor = selShortcut->getItemColor(i); + const ItemColor itemColor = selShortcut->getItemColor(i); if (itemId < 0) continue; @@ -372,7 +372,7 @@ void ItemShortcutContainer::mouseDragged(MouseEvent &event) return; const int itemId = selShortcut->getItem(index); - const unsigned char itemColor = selShortcut->getItemColor(index); + const ItemColor itemColor = selShortcut->getItemColor(index); if (itemId < 0) return; @@ -540,7 +540,7 @@ void ItemShortcutContainer::mouseMoved(MouseEvent &event) return; const int itemId = selShortcut->getItem(index); - const unsigned char itemColor = selShortcut->getItemColor(index); + const ItemColor itemColor = selShortcut->getItemColor(index); if (itemId < 0) return; diff --git a/src/gui/widgets/selldialog.cpp b/src/gui/widgets/selldialog.cpp index 6498c25b6..827d1c3ea 100644 --- a/src/gui/widgets/selldialog.cpp +++ b/src/gui/widgets/selldialog.cpp @@ -197,7 +197,7 @@ void SellDialog::addItem(const Item *const item, const int price) void SellDialog::addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price) { diff --git a/src/gui/widgets/selldialog.h b/src/gui/widgets/selldialog.h index dcc92cfd2..b5e91f67d 100644 --- a/src/gui/widgets/selldialog.h +++ b/src/gui/widgets/selldialog.h @@ -23,6 +23,8 @@ #ifndef GUI_WIDGETS_SELLDIALOG_H #define GUI_WIDGETS_SELLDIALOG_H +#include "enums/simpletypes/itemcolor.h" + #include "gui/widgets/window.h" #include "listeners/actionlistener.h" @@ -92,7 +94,7 @@ class SellDialog notfinal : public Window, void addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price); diff --git a/src/gui/widgets/virtshortcutcontainer.cpp b/src/gui/widgets/virtshortcutcontainer.cpp index 3c28f244f..4066a915c 100644 --- a/src/gui/widgets/virtshortcutcontainer.cpp +++ b/src/gui/widgets/virtshortcutcontainer.cpp @@ -233,7 +233,7 @@ void VirtShortcutContainer::mouseDragged(MouseEvent &event) return; const int itemId = mShortcut->getItem(index); - const unsigned char itemColor = mShortcut->getItemColor(index); + const ItemColor itemColor = mShortcut->getItemColor(index); if (itemId < 0) return; @@ -347,7 +347,7 @@ void VirtShortcutContainer::mouseMoved(MouseEvent &event) return; const int itemId = mShortcut->getItem(index); - const unsigned char itemColor = mShortcut->getItemColor(index); + const ItemColor itemColor = mShortcut->getItemColor(index); if (itemId < 0) return; diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp index 84a7a1182..667867ff4 100644 --- a/src/gui/windows/buydialog.cpp +++ b/src/gui/windows/buydialog.cpp @@ -363,7 +363,7 @@ void BuyDialog::reset() ShopItem *BuyDialog::addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price) { @@ -493,7 +493,8 @@ void BuyDialog::action(const ActionEvent &event) if (mNpcId == fromInt(Items, BeingId)) { adminHandler->createItems(item->getId(), - mAmountItems, item->getColor()); + item->getColor(), + mAmountItems); } else if (mNpcId != fromInt(Nick, BeingId)) { diff --git a/src/gui/windows/buydialog.h b/src/gui/windows/buydialog.h index 7aaa1e7c5..104b5c4ee 100644 --- a/src/gui/windows/buydialog.h +++ b/src/gui/windows/buydialog.h @@ -24,6 +24,7 @@ #define GUI_WINDOWS_BUYDIALOG_H #include "enums/simpletypes/beingid.h" +#include "enums/simpletypes/itemcolor.h" #include "gui/widgets/window.h" @@ -105,7 +106,7 @@ class BuyDialog final : public Window, */ ShopItem *addItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int amount, const int price); diff --git a/src/gui/windows/buyingstoreselldialog.cpp b/src/gui/windows/buyingstoreselldialog.cpp index 55b6a96fb..637bdc5bd 100644 --- a/src/gui/windows/buyingstoreselldialog.cpp +++ b/src/gui/windows/buyingstoreselldialog.cpp @@ -58,7 +58,7 @@ void BuyingStoreSellDialog::sellAction(const ActionEvent &event A_UNUSED) return; // +++ need add colors Item *const item2 = PlayerInfo::getInventory()->findItem( - item1->getId(), 1); + item1->getId(), ItemColor_one); if (!item2) return; diff --git a/src/gui/windows/charcreatedialog.cpp b/src/gui/windows/charcreatedialog.cpp index 2168ad0a1..6af4a6437 100644 --- a/src/gui/windows/charcreatedialog.cpp +++ b/src/gui/windows/charcreatedialog.cpp @@ -624,11 +624,13 @@ void CharCreateDialog::updateHair() { mHairColor = minHairColor; } - mHairColorNameLabel->setCaption(ColorDB::getHairColorName(mHairColor)); + mHairColorNameLabel->setCaption(ColorDB::getHairColorName( + fromInt(mHairColor, ItemColor))); mHairColorNameLabel->resizeTo(150, 150); mPlayer->setSprite(charServerHandler->hairSprite(), - mHairStyle * -1, item.getDyeColorsString(mHairColor)); + mHairStyle * -1, + item.getDyeColorsString(fromInt(mHairColor, ItemColor))); } void CharCreateDialog::updateRace() @@ -667,7 +669,8 @@ void CharCreateDialog::updateLook() } if (mLookNameLabel) { - mLookNameLabel->setCaption(item.getColorName(mLook)); + mLookNameLabel->setCaption(item.getColorName( + fromInt(mLook, ItemColor))); mLookNameLabel->resizeTo(150, 150); } } diff --git a/src/gui/windows/itemamountwindow.cpp b/src/gui/windows/itemamountwindow.cpp index b1c10f058..a48a6dab2 100644 --- a/src/gui/windows/itemamountwindow.cpp +++ b/src/gui/windows/itemamountwindow.cpp @@ -355,7 +355,8 @@ void ItemAmountWindow::action(const ActionEvent &event) const int id = ItemDB::get(mItemsModal->getElementAt( mItemDropDown->getSelected())).getId(); - mItem = new Item(id, 0, 10000, 0, 1, + mItem = new Item(id, 0, 10000, 0, + ItemColor_one, Identified_true, Damaged_true, Favorite_false, diff --git a/src/gui/windows/maileditwindow.cpp b/src/gui/windows/maileditwindow.cpp index 1699b979c..51495563d 100644 --- a/src/gui/windows/maileditwindow.cpp +++ b/src/gui/windows/maileditwindow.cpp @@ -138,7 +138,8 @@ void MailEditWindow::action(const ActionEvent &event) const Inventory *const inv = PlayerInfo::getInventory(); if (inv) { - const Item *const item = inv->findItem(tempItem->getId(), 1); + const Item *const item = inv->findItem( + tempItem->getId(), ItemColor_one); if (item) { mailHandler->setAttach(item->getInvIndex(), diff --git a/src/gui/windows/mailviewwindow.cpp b/src/gui/windows/mailviewwindow.cpp index 544c80f0d..ad7eb8a88 100644 --- a/src/gui/windows/mailviewwindow.cpp +++ b/src/gui/windows/mailviewwindow.cpp @@ -111,7 +111,8 @@ MailViewWindow::MailViewWindow(const MailMessage *const message) : const ItemInfo &item = ItemDB::get(message->itemId); Image *const image = resman->getImage(combineDye2( paths.getStringValue("itemIcons").append( - item.getDisplay().image), item.getDyeColorsString(1))); + item.getDisplay().image), + item.getDyeColorsString(ItemColor_one))); mIcon = new Icon(this, image); if (message->itemAmount != 1) diff --git a/src/gui/windows/npcdialog.cpp b/src/gui/windows/npcdialog.cpp index 10eb3dc8a..c0396bc06 100644 --- a/src/gui/windows/npcdialog.cpp +++ b/src/gui/windows/npcdialog.cpp @@ -369,7 +369,7 @@ void NpcDialog::action(const ActionEvent &event) if (item) { str = strprintf("%d,%d", item->getId(), - item->getColor()); + toInt(item->getColor(), int)); } else { @@ -382,7 +382,7 @@ void NpcDialog::action(const ActionEvent &event) if (item) { str.append(strprintf("%d,%d", item->getId(), - item->getColor())); + toInt(item->getColor(), int))); } else { diff --git a/src/gui/windows/outfitwindow.cpp b/src/gui/windows/outfitwindow.cpp index a0a7fa7c2..7ce43333b 100644 --- a/src/gui/windows/outfitwindow.cpp +++ b/src/gui/windows/outfitwindow.cpp @@ -172,7 +172,7 @@ void OutfitWindow::load(const bool oldConfig) for (size_t i = 0, sz = tokens2.size(); i < sz && i < OUTFIT_ITEM_COUNT; i++) { - mItemColors[o][i] = tokens2[i]; + mItemColors[o][i] = fromInt(tokens2[i], ItemColor); } mItemsUnequip[o] = cfg->getValueBool("OutfitUnequip" + toString(o), @@ -203,7 +203,7 @@ void OutfitWindow::save() const if (i < OUTFIT_ITEM_COUNT - 1) outfitStr.append(" "); outfitColorsStr.append(toString(static_cast( - mItemColors[o][i]))); + toInt(mItemColors[o][i], int)))); if (i < OUTFIT_ITEM_COUNT - 1) outfitColorsStr.append(" "); } @@ -278,7 +278,8 @@ void OutfitWindow::wearOutfit(const int outfit, const bool unwearEmpty, for (unsigned i = 0; i < OUTFIT_ITEM_COUNT; i++) { const Item *const item = PlayerInfo::getInventory()->findItem( - mItems[outfit][i], mItemColors[outfit][i]); + mItems[outfit][i], + mItemColors[outfit][i]); if (item && item->isEquipped() == Equipped_false && item->getQuantity()) @@ -453,7 +454,7 @@ void OutfitWindow::mouseDragged(MouseEvent &event) return; } const int itemId = mItems[mCurrentOutfit][index]; - const unsigned char itemColor = mItemColors[mCurrentOutfit][index]; + const ItemColor itemColor = mItemColors[mCurrentOutfit][index]; if (itemId < 0) { Window::mouseDragged(event); @@ -719,7 +720,7 @@ void OutfitWindow::clearCurrentOutfit() for (unsigned f = 0; f < OUTFIT_ITEM_COUNT; f++) { mItems[mCurrentOutfit][f] = -1; - mItemColors[mCurrentOutfit][f] = 1; + mItemColors[mCurrentOutfit][f] = ItemColor_one; } save(); } diff --git a/src/gui/windows/outfitwindow.h b/src/gui/windows/outfitwindow.h index 7033a3f13..27a3d73aa 100644 --- a/src/gui/windows/outfitwindow.h +++ b/src/gui/windows/outfitwindow.h @@ -23,6 +23,8 @@ #ifndef GUI_WINDOWS_OUTFITWINDOW_H #define GUI_WINDOWS_OUTFITWINDOW_H +#include "enums/simpletypes/itemcolor.h" + #include "gui/widgets/window.h" #include "listeners/actionlistener.h" @@ -119,7 +121,7 @@ class OutfitWindow final : public Window, int mItems[OUTFITS_COUNT + 1][OUTFIT_ITEM_COUNT]; int mAwayOutfit; - unsigned char mItemColors[OUTFITS_COUNT + 1][OUTFIT_ITEM_COUNT]; + ItemColor mItemColors[OUTFITS_COUNT + 1][OUTFIT_ITEM_COUNT]; bool mItemClicked; bool mItemsUnequip[OUTFITS_COUNT]; }; diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index b8e31ead8..c5014f902 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -348,7 +348,8 @@ void ShopWindow::action(const ActionEvent &event) if (!item) continue; // +++ need add colors - Item *const cartItem = inv->findItem(item->getId(), 1); + Item *const cartItem = inv->findItem(item->getId(), + ItemColor_one); if (!cartItem) continue; item->setInvIndex(cartItem->getInvIndex()); @@ -391,7 +392,7 @@ void ShopWindow::action(const ActionEvent &event) return; // +++ need support for colors - Item *const item = inv->findItem(mSelectedItem, 0); + Item *const item = inv->findItem(mSelectedItem, ItemColor_zero); if (item) { if (eventId == "add") @@ -551,12 +552,12 @@ void ShopWindow::loadList() if (tokens[1] && tokens[2] && mBuyShopItems) { mBuyShopItems->addItem( - tokens[0], 0, 1, tokens[1], tokens[2]); + tokens[0], 0, ItemColor_one, tokens[1], tokens[2]); } if (tokens[3] && tokens[4] && mSellShopItems) { mSellShopItems->addItem( - tokens[0], 0, 1, tokens[3], tokens[4]); + tokens[0], 0, ItemColor_one, tokens[3], tokens[4]); } } } @@ -748,7 +749,8 @@ void ShopWindow::giveList(const std::string &nick, const int mode) if (mode == SELL) { // +++ need support for colors - const Item *const item2 = inv->findItem(item->getId(), 0); + const Item *const item2 = inv->findItem(item->getId(), + ItemColor_zero); if (item2) { int amount = item->getQuantity(); @@ -844,19 +846,19 @@ void ShopWindow::showList(const std::string &nick, std::string data) int amount = decodeStr(data.substr(f + 6, 3)); // +++ need impliment colors? if (buyDialog && amount > 0) - buyDialog->addItem(id, 0, 1, amount, price); + buyDialog->addItem(id, 0, ItemColor_one, amount, price); if (sellDialog) { // +++ need support for colors - const Item *const item = inv->findItem(id, 0); + const Item *const item = inv->findItem(id, ItemColor_zero); if (item) { if (item->getQuantity() < amount) amount = item->getQuantity(); if (amount > 0) - sellDialog->addItem(id, 0, 1, amount, price); + sellDialog->addItem(id, 0, ItemColor_one, amount, price); else - sellDialog->addItem(id, 0, 1, -1, price); + sellDialog->addItem(id, 0, ItemColor_one, -1, price); } } } @@ -919,12 +921,13 @@ void ShopWindow::processRequest(const std::string &nick, std::string data, delete mTradeItem; // +++ need impliment colors? - mTradeItem = new ShopItem(-1, id, 0, 1, amount, price); + mTradeItem = new ShopItem(-1, id, 0, ItemColor_one, amount, price); if (mode == BUY) { // +++ need support for colors - const Item *const item2 = inv->findItem(mTradeItem->getId(), 0); + const Item *const item2 = inv->findItem(mTradeItem->getId(), + ItemColor_zero); if (!item2 || item2->getQuantity() < amount || !findShopItem(mTradeItem, SELL)) { diff --git a/src/gui/windows/tradewindow.cpp b/src/gui/windows/tradewindow.cpp index bf4963daf..7a835b686 100644 --- a/src/gui/windows/tradewindow.cpp +++ b/src/gui/windows/tradewindow.cpp @@ -196,7 +196,7 @@ void TradeWindow::addItem(const int id, const bool own, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite) const @@ -221,7 +221,7 @@ void TradeWindow::addItem2(const int id, const bool own, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, diff --git a/src/gui/windows/tradewindow.h b/src/gui/windows/tradewindow.h index a191671d5..b1ac84045 100644 --- a/src/gui/windows/tradewindow.h +++ b/src/gui/windows/tradewindow.h @@ -29,6 +29,7 @@ #include "enums/simpletypes/equipm.h" #include "enums/simpletypes/favorite.h" #include "enums/simpletypes/identified.h" +#include "enums/simpletypes/itemcolor.h" #include "listeners/actionlistener.h" #include "listeners/selectionlistener.h" @@ -75,7 +76,7 @@ class TradeWindow final : public Window, const bool own, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite) const; @@ -95,7 +96,7 @@ class TradeWindow final : public Window, const bool own, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, diff --git a/src/inventory.cpp b/src/inventory.cpp index 8b396e1d5..c83ea5353 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -83,15 +83,18 @@ Item *Inventory::getItem(const int index) const return mItems[index]; } -Item *Inventory::findItem(const int itemId, const unsigned char color) const +Item *Inventory::findItem(const int itemId, + const ItemColor color) const { for (unsigned i = 0; i < mSize; i++) { Item *const item = mItems[i]; if (item && item->mId == itemId) { - if (color == 0 || item->mColor == color - || (color == 1 && item->mColor <= 1)) + if (color == ItemColor_zero || + item->mColor == color || + (color == ItemColor_one && + item->mColor <= ItemColor_one)) { return item; } @@ -105,7 +108,7 @@ int Inventory::addItem(const int id, const int type, const int quantity, const uint8_t refine, - const uint8_t color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, @@ -123,7 +126,7 @@ void Inventory::setItem(const int index, const int type, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, diff --git a/src/inventory.h b/src/inventory.h index 588842d70..5fe92a84f 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -31,6 +31,7 @@ #include "enums/simpletypes/equipped.h" #include "enums/simpletypes/favorite.h" #include "enums/simpletypes/identified.h" +#include "enums/simpletypes/itemcolor.h" #include "enums/being/gender.h" @@ -81,7 +82,7 @@ class Inventory final * @return Item found on success, NULL on failure. */ Item *findItem(const int itemId, - const unsigned char color) const A_WARN_UNUSED; + const ItemColor color) const A_WARN_UNUSED; /** * Adds a new item in a free slot. @@ -90,7 +91,7 @@ class Inventory final const int type, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, @@ -105,7 +106,7 @@ class Inventory final const int type, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, diff --git a/src/item.cpp b/src/item.cpp index 7fa816c86..0ccfd025a 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -40,14 +40,14 @@ Item::Item(const int id, const int type, const int quantity, const uint8_t refine, - const unsigned char color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, const Equipm equipment, const Equipped equipped) : mId(0), - mColor(0), + mColor(ItemColor_zero), mQuantity(quantity), mImage(nullptr), mDescription(), @@ -78,7 +78,8 @@ Item::~Item() dragDrop.clearItem(this); } -void Item::setId(const int id, const unsigned char color) +void Item::setId(const int id, + const ItemColor color) { mId = id; mColor = color; @@ -114,7 +115,8 @@ bool Item::isHaveTag(const int tagId) const return (*it).second > 0; } -Image *Item::getImage(const int id, const unsigned char color) +Image *Item::getImage(const int id, + const ItemColor color) { ResourceManager *const resman = ResourceManager::getInstance(); const ItemInfo &info = ItemDB::get(id); diff --git a/src/item.h b/src/item.h index 815160c32..c3b22a9dc 100644 --- a/src/item.h +++ b/src/item.h @@ -28,6 +28,7 @@ #include "enums/simpletypes/equipped.h" #include "enums/simpletypes/favorite.h" #include "enums/simpletypes/identified.h" +#include "enums/simpletypes/itemcolor.h" #include "resources/db/itemdb.h" @@ -50,7 +51,7 @@ class Item notfinal const int type, const int quantity, const uint8_t refine, - const uint8_t color, + const ItemColor color, const Identified identified, const Damaged damaged, const Favorite favorite, @@ -67,7 +68,7 @@ class Item notfinal /** * Sets the item id, color the item type. */ - void setId(const int id, const unsigned char color); + void setId(const int id, const ItemColor color); /** * Returns the item id. @@ -168,11 +169,11 @@ class Item notfinal std::string getName() const A_WARN_UNUSED; static Image *getImage(const int id, - const unsigned char color) A_WARN_UNUSED; + const ItemColor color) A_WARN_UNUSED; bool isHaveTag(const int tagId) const A_WARN_UNUSED; - unsigned char getColor() const A_WARN_UNUSED + ItemColor getColor() const A_WARN_UNUSED { return mColor; } const std::string &getDescription() const A_WARN_UNUSED @@ -214,7 +215,7 @@ class Item notfinal void addCard(const int card); int mId; /**< Item type id. */ - unsigned char mColor; + ItemColor mColor; int mQuantity; /**< Number of items. */ protected: diff --git a/src/itemshortcut.cpp b/src/itemshortcut.cpp index 05035c5d0..b9696a2a2 100644 --- a/src/itemshortcut.cpp +++ b/src/itemshortcut.cpp @@ -39,7 +39,7 @@ ItemShortcut *itemShortcut[SHORTCUT_TABS]; ItemShortcut::ItemShortcut(const int number) : mItemSelected(-1), - mItemColorSelected(1), + mItemColorSelected(ItemColor_one), mNumber(number) { load(); @@ -74,8 +74,9 @@ void ItemShortcut::load(const bool oldConfig) for (unsigned int i = 0; i < SHORTCUT_ITEMS; i++) { const int itemId = cfg->getValue(name + toString(i), -1); - const unsigned char itemColor = static_cast( - cfg->getValue(color + toString(i), 1)); + const ItemColor itemColor = fromInt( + cfg->getValue(color + toString(i), 1), + ItemColor); mItems[i] = itemId; mItemColors[i] = itemColor; @@ -103,7 +104,8 @@ void ItemShortcut::save() const for (unsigned int i = 0; i < SHORTCUT_ITEMS; i++) { const int itemId = mItems[i] ? mItems[i] : -1; - const int itemColor = mItemColors[i] ? mItemColors[i] : 1; + const int itemColor = (mItemColors[i] != ItemColor_zero) ? + toInt(mItemColors[i], int) : 1; if (itemId != -1) { serverConfig.setValue(name + toString(i), itemId); @@ -124,7 +126,7 @@ void ItemShortcut::useItem(const int index) const return; const int itemId = mItems[index]; - const unsigned char itemColor = mItemColors[index]; + const ItemColor itemColor = mItemColors[index]; if (itemId >= 0) { if (itemId < SPELL_MIN_ID) @@ -195,7 +197,7 @@ void ItemShortcut::setItemSelected(const Item *const item) else { mItemSelected = -1; - mItemColorSelected = 1; + mItemColorSelected = ItemColor_one; } } @@ -206,8 +208,9 @@ void ItemShortcut::setItem(const int index) save(); } -void ItemShortcut::setItem(const int index, const int item, - const unsigned char color) +void ItemShortcut::setItem(const int index, + const int item, + const ItemColor color) { mItems[index] = item; mItemColors[index] = color; @@ -226,7 +229,7 @@ void ItemShortcut::swap(const int index1, const int index2) const int tmpItem = mItems[index1]; mItems[index1] = mItems[index2]; mItems[index2] = tmpItem; - const unsigned char tmpColor = mItemColors[index1]; + const ItemColor tmpColor = mItemColors[index1]; mItemColors[index1] = mItemColors[index2]; mItemColors[index2] = tmpColor; save(); diff --git a/src/itemshortcut.h b/src/itemshortcut.h index 30549f0b8..7dd093abd 100644 --- a/src/itemshortcut.h +++ b/src/itemshortcut.h @@ -23,6 +23,8 @@ #ifndef ITEMSHORTCUT_H #define ITEMSHORTCUT_H +#include "enums/simpletypes/itemcolor.h" + #include "localconsts.h" const unsigned int SHORTCUT_ITEMS = 20; @@ -66,7 +68,7 @@ class ItemShortcut final int getItem(const int index) const A_WARN_UNUSED { return mItems[index]; } - unsigned char getItemColor(const int index) const A_WARN_UNUSED + ItemColor getItemColor(const int index) const A_WARN_UNUSED { return mItemColors[index]; } /** @@ -88,8 +90,9 @@ class ItemShortcut final */ void setItem(const int index); - void setItem(const int index, const int item, - const unsigned char color); + void setItem(const int index, + const int item, + const ItemColor color); /** * Adds an item to the items store specified by the index. @@ -97,8 +100,9 @@ class ItemShortcut final * @param index Index of the item. * @param itemId ID of the item. */ - void setItems(const int index, const int itemId, - const unsigned char color) + void setItems(const int index, + const int itemId, + const ItemColor color) { mItems[index] = itemId; mItemColors[index] = color; save(); } /** @@ -149,10 +153,10 @@ class ItemShortcut final void swap(const int index1, const int index2); private: - int mItems[SHORTCUT_ITEMS]; /**< The items. */ - unsigned char mItemColors[SHORTCUT_ITEMS]; /**< The item colors. */ + int mItems[SHORTCUT_ITEMS]; /**< The items. */ + ItemColor mItemColors[SHORTCUT_ITEMS]; /**< The item colors. */ int mItemSelected; - unsigned char mItemColorSelected; + ItemColor mItemColorSelected; int mNumber; }; diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h index 77f0508a8..328290ea8 100644 --- a/src/net/adminhandler.h +++ b/src/net/adminhandler.h @@ -24,6 +24,7 @@ #define NET_ADMINHANDLER_H #include "enums/simpletypes/beingid.h" +#include "enums/simpletypes/itemcolor.h" #include @@ -69,7 +70,8 @@ class AdminHandler notfinal virtual void warp(const std::string &map, const int x, const int y) const = 0; - virtual void createItems(const int id, const int color, + virtual void createItems(const int id, + const ItemColor color, const int amount) const = 0; virtual void gotoName(const std::string &name) const = 0; diff --git a/src/net/cashshophandler.h b/src/net/cashshophandler.h index 64a04d8ed..1577aa543 100644 --- a/src/net/cashshophandler.h +++ b/src/net/cashshophandler.h @@ -23,6 +23,8 @@ #ifdef EATHENA_SUPPORT +#include "enums/simpletypes/itemcolor.h" + #include #include "localconsts.h" @@ -38,7 +40,7 @@ class CashShopHandler notfinal virtual void buyItem(const int points, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const = 0; virtual void close() const = 0; diff --git a/src/net/ea/adminhandler.cpp b/src/net/ea/adminhandler.cpp index bf4bd590c..2cc98acb0 100644 --- a/src/net/ea/adminhandler.cpp +++ b/src/net/ea/adminhandler.cpp @@ -74,7 +74,8 @@ void AdminHandler::ipcheckName(const std::string &name) const chatHandler->talk("@ipcheck " + name, GENERAL_CHANNEL); } -void AdminHandler::createItems(const int id, const int color, +void AdminHandler::createItems(const int id, + const ItemColor color, const int amount) const { if (!serverFeatures->haveItemColors()) @@ -85,7 +86,7 @@ void AdminHandler::createItems(const int id, const int color, else { chatHandler->talk(strprintf("@item %d %d %d", - id, color, amount), GENERAL_CHANNEL); + id, toInt(color, int), amount), GENERAL_CHANNEL); } } diff --git a/src/net/ea/adminhandler.h b/src/net/ea/adminhandler.h index acabd288a..ab7b8c557 100644 --- a/src/net/ea/adminhandler.h +++ b/src/net/ea/adminhandler.h @@ -60,7 +60,8 @@ class AdminHandler notfinal : public Net::AdminHandler void ipcheckName(const std::string &name) const override final; - void createItems(const int id, const int color, + void createItems(const int id, + const ItemColor color, const int amount) const override final; protected: diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index 76fe061ed..2c2c65652 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -76,7 +76,7 @@ Being *BeingHandler::createBeing(const BeingId id, void BeingHandler::setSprite(Being *const being, const unsigned int slot, const int id, const std::string &color, - const unsigned char colorId, + const ItemColor colorId, const bool isWeapon, const bool isTempSprite) { diff --git a/src/net/ea/beinghandler.h b/src/net/ea/beinghandler.h index 20622e514..6c372ce1f 100644 --- a/src/net/ea/beinghandler.h +++ b/src/net/ea/beinghandler.h @@ -42,7 +42,7 @@ class BeingHandler notfinal : public Net::BeingHandler static void setSprite(Being *const being, const unsigned int slot, const int id, const std::string &color = "", - const unsigned char colorId = 1, + const ItemColor colorId = ItemColor_one, const bool isWeapon = false, const bool isTempSprite = false); diff --git a/src/net/ea/inventoryitem.h b/src/net/ea/inventoryitem.h index b318b2f23..d4d9c3637 100644 --- a/src/net/ea/inventoryitem.h +++ b/src/net/ea/inventoryitem.h @@ -27,6 +27,7 @@ #include "enums/simpletypes/equipm.h" #include "enums/simpletypes/favorite.h" #include "enums/simpletypes/identified.h" +#include "enums/simpletypes/itemcolor.h" #if defined(__GXX_EXPERIMENTAL_CXX0X__) #include @@ -51,7 +52,7 @@ class InventoryItem final int cards[4]; int quantity; uint8_t refine; - unsigned char color; + ItemColor color; Identified identified; Damaged damaged; Favorite favorite; @@ -63,7 +64,7 @@ class InventoryItem final const int *const cards0, const int quantity0, const uint8_t refine0, - const unsigned char color0, + const ItemColor color0, const Identified identified0, const Damaged damaged0, const Favorite favorite0, diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp index 2c297f69f..478c17990 100644 --- a/src/net/ea/itemhandler.cpp +++ b/src/net/ea/itemhandler.cpp @@ -43,7 +43,7 @@ void ItemHandler::processItemVisible(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readInt16("item id"); - const uint8_t identify = msg.readUInt8("identify"); + const ItemColor identify = fromInt(msg.readUInt8("identify"), ItemColor); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int amount = msg.readInt16("amount"); @@ -52,8 +52,12 @@ void ItemHandler::processItemVisible(Net::MessageIn &msg) if (actorManager) { - actorManager->createItem(id, itemId, - x, y, amount, identify, subX, subY); + actorManager->createItem(id, + itemId, + x, y, + amount, + identify, + subX, subY); } } diff --git a/src/net/eathena/beinghandler.cpp b/src/net/eathena/beinghandler.cpp index 35d549149..5c748915b 100644 --- a/src/net/eathena/beinghandler.cpp +++ b/src/net/eathena/beinghandler.cpp @@ -585,100 +585,101 @@ void BeingHandler::processBeingChangeLookContinue(Net::MessageIn &msg, dstBeing->getLook()); break; case 1: // eAthena LOOK_HAIR - dstBeing->setHairColor(id); + dstBeing->setHairColor(fromInt(id, ItemColor)); dstBeing->setSpriteID(SPRITE_HAIR_COLOR, id * -1); break; case 2: // LOOK_WEAPON Weapon ID in id, Shield ID in id2 - dstBeing->setSprite(SPRITE_BODY, id, "", 1, true); + dstBeing->setSprite(SPRITE_BODY, id, "", ItemColor_one, true); dstBeing->setSprite(SPRITE_FLOOR, id2); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR); break; case 3: // LOOK_HEAD_BOTTOM dstBeing->setSprite(SPRITE_WEAPON, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_WEAPON); break; case 4: // LOOK_HEAD_TOP Change upper headgear for eAthena, hat for us dstBeing->setSprite(SPRITE_CLOTHES_COLOR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_CLOTHES_COLOR); break; case 5: // LOOK_HEAD_MID Change middle headgear for eathena, // armor for us dstBeing->setSprite(SPRITE_HEAD_BOTTOM, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_BOTTOM); break; case 6: // eAthena LOOK_HAIR_COLOR - dstBeing->setHairColor(id); + dstBeing->setHairColor(fromInt(id, ItemColor)); dstBeing->setSpriteColor(SPRITE_HAIR_COLOR, ItemDB::get(dstBeing->getSpriteID( - SPRITE_HAIR_COLOR)).getDyeColorsString(id)); + SPRITE_HAIR_COLOR)).getDyeColorsString( + fromInt(id, ItemColor))); break; case 7: // Clothes color. Now used as look dstBeing->setLook(static_cast(id)); break; case 8: // eAthena LOOK_SHIELD dstBeing->setSprite(SPRITE_FLOOR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR); break; case 9: // eAthena LOOK_SHOES dstBeing->setSprite(SPRITE_HAIR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_HAIR); break; case 10: // LOOK_GLOVES dstBeing->setSprite(SPRITE_SHOES, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_SHOES); break; case 11: // LOOK_FLOOR dstBeing->setSprite(SPRITE_SHIELD, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_SHIELD); break; case 12: // LOOK_ROBE dstBeing->setSprite(SPRITE_HEAD_TOP, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_TOP); break; case 13: // COSTUME_HEAD_TOP dstBeing->setSprite(SPRITE_HEAD_MID, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_MID); break; case 14: // COSTUME_HEAD_MID dstBeing->setSprite(SPRITE_ROBE, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_ROBE); break; case 15: // COSTUME_HEAD_LOW dstBeing->setSprite(SPRITE_EVOL2, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL2); break; case 16: // COSTUME_GARMENT dstBeing->setSprite(SPRITE_EVOL3, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL3); break; case 17: // ARMOR dstBeing->setSprite(SPRITE_EVOL4, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); if (localPlayer) localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL4); break; @@ -769,7 +770,7 @@ void BeingHandler::processBeingVisible(Net::MessageIn &msg) const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const int hairColor = msg.readInt16("hair color"); + const ItemColor hairColor = fromInt(msg.readInt16("hair color"), ItemColor); const uint16_t shoes = msg.readInt16("shoes or clothes color?"); const uint16_t gloves = msg.readInt16("head dir / gloves"); @@ -795,7 +796,7 @@ void BeingHandler::processBeingVisible(Net::MessageIn &msg) setSprite(dstBeing, SPRITE_CLOTHES_COLOR, headTop); setSprite(dstBeing, SPRITE_HAIR, shoes); setSprite(dstBeing, SPRITE_SHOES, gloves); - setSprite(dstBeing, SPRITE_BODY, weapon, "", 1, true); + setSprite(dstBeing, SPRITE_BODY, weapon, "", ItemColor_one, true); // setSprite(dstBeing, SPRITE_FLOOR, shield); } else if (dstBeing->getType() == ActorType::Npc @@ -930,7 +931,8 @@ void BeingHandler::processBeingMove(Net::MessageIn &msg) const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const int hairColor = msg.readInt16("hair color"); + const ItemColor hairColor = fromInt( + msg.readInt16("hair color"), ItemColor); const uint16_t shoes = msg.readInt16("shoes or clothes color?"); const uint16_t gloves = msg.readInt16("head dir / gloves"); @@ -958,7 +960,7 @@ void BeingHandler::processBeingMove(Net::MessageIn &msg) setSprite(dstBeing, SPRITE_CLOTHES_COLOR, headTop); setSprite(dstBeing, SPRITE_HAIR, shoes); setSprite(dstBeing, SPRITE_SHOES, gloves); - setSprite(dstBeing, SPRITE_BODY, weapon, "", 1, true); + setSprite(dstBeing, SPRITE_BODY, weapon, "", ItemColor_one, true); } // setSprite(dstBeing, SPRITE_FLOOR, shield); } @@ -1097,9 +1099,9 @@ void BeingHandler::processBeingSpawn(Net::MessageIn &msg) const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const int hairColor = msg.readInt16("hair color"); + const ItemColor hairColor = fromInt( + msg.readInt16("hair color"), ItemColor); const uint16_t shoes = msg.readInt16("shoes or clothes color?"); - const uint16_t gloves = msg.readInt16("head dir / gloves"); // may be use robe as gloves? msg.readInt16("robe"); @@ -1123,7 +1125,7 @@ void BeingHandler::processBeingSpawn(Net::MessageIn &msg) setSprite(dstBeing, SPRITE_CLOTHES_COLOR, headTop); setSprite(dstBeing, SPRITE_HAIR, shoes); setSprite(dstBeing, SPRITE_SHOES, gloves); - setSprite(dstBeing, SPRITE_BODY, weapon, "", 1, true); + setSprite(dstBeing, SPRITE_BODY, weapon, "", ItemColor_one, true); // setSprite(dstBeing, SPRITE_FLOOR, shield); } else if (dstBeing->getType() == ActorType::Npc diff --git a/src/net/eathena/buyingstorehandler.cpp b/src/net/eathena/buyingstorehandler.cpp index d42d66b07..4fcad8637 100644 --- a/src/net/eathena/buyingstorehandler.cpp +++ b/src/net/eathena/buyingstorehandler.cpp @@ -210,11 +210,11 @@ void BuyingStoreHandler::processBuyingStoreItemsList(Net::MessageIn &msg) if (!inv) continue; - const Item *const item = inv->findItem(itemId, 1); + const Item *const item = inv->findItem(itemId, ItemColor_one); if (!item) continue; // +++ need add colors support - dialog->addItem(itemId, itemType, 1, amount, price); + dialog->addItem(itemId, itemType, ItemColor_one, amount, price); } } diff --git a/src/net/eathena/buysellhandler.cpp b/src/net/eathena/buysellhandler.cpp index da64491ed..6e145a171 100644 --- a/src/net/eathena/buysellhandler.cpp +++ b/src/net/eathena/buysellhandler.cpp @@ -103,7 +103,7 @@ void BuySellHandler::processNpcBuy(Net::MessageIn &msg) msg.readInt32("dc value?"); const int type = msg.readUInt8("type"); const int itemId = msg.readInt16("item id"); - const unsigned char color = 1; + const ItemColor color = ItemColor_one; mBuyDialog->addItem(itemId, type, color, 0, value); } mBuyDialog->sort(); diff --git a/src/net/eathena/cashshophandler.cpp b/src/net/eathena/cashshophandler.cpp index 23d6ab66d..012923424 100644 --- a/src/net/eathena/cashshophandler.cpp +++ b/src/net/eathena/cashshophandler.cpp @@ -104,7 +104,7 @@ void CashShopHandler::processCashShopOpen(Net::MessageIn &msg) const int value = msg.readInt32("discount price"); const int type = msg.readUInt8("item type"); const int itemId = msg.readInt16("item id"); - const int color = 1; + const ItemColor color = ItemColor_one; mBuyDialog->addItem(itemId, type, color, 0, value); } mBuyDialog->sort(); @@ -168,7 +168,7 @@ void CashShopHandler::processCashShopSchedule(Net::MessageIn &msg) void CashShopHandler::buyItem(const int points, const int itemId, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount) const { createOutPacket(CMSG_NPC_CASH_SHOP_BUY); diff --git a/src/net/eathena/cashshophandler.h b/src/net/eathena/cashshophandler.h index cc8859a89..851b62527 100644 --- a/src/net/eathena/cashshophandler.h +++ b/src/net/eathena/cashshophandler.h @@ -43,7 +43,7 @@ class CashShopHandler final : public MessageHandler, void buyItem(const int points, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const override final; void close() const override final; diff --git a/src/net/eathena/charserverhandler.cpp b/src/net/eathena/charserverhandler.cpp index b2310b029..960acf44d 100644 --- a/src/net/eathena/charserverhandler.cpp +++ b/src/net/eathena/charserverhandler.cpp @@ -235,7 +235,7 @@ void CharServerHandler::readPlayerData(Net::MessageIn &msg, const int option A_UNUSED = (msg.readInt16("weapon") | 1) ^ 1; const int weapon = 0; - tempPlayer->setSprite(SPRITE_BODY, weapon, "", 1, true); + tempPlayer->setSprite(SPRITE_BODY, weapon, "", ItemColor_one, true); data.mAttributes[Attributes::LEVEL] = msg.readInt16("level"); @@ -245,8 +245,8 @@ void CharServerHandler::readPlayerData(Net::MessageIn &msg, const int hat = msg.readInt16("head top"); const int topClothes = msg.readInt16("head mid"); - const uint16_t color = msg.readInt16("hair color"); - tempPlayer->setHairColor(static_cast(color)); + const ItemColor color = fromInt(msg.readInt16("hair color"), ItemColor); + tempPlayer->setHairColor(color); tempPlayer->setSprite(SPRITE_HAIR_COLOR, hairStyle * -1, ItemDB::get(-hairStyle).getDyeColorsString( color)); diff --git a/src/net/eathena/inventoryhandler.cpp b/src/net/eathena/inventoryhandler.cpp index 86faea2e7..c2b01be22 100644 --- a/src/net/eathena/inventoryhandler.cpp +++ b/src/net/eathena/inventoryhandler.cpp @@ -458,8 +458,12 @@ void InventoryHandler::processPlayerEquipment(Net::MessageIn &msg) flags.byte = msg.readUInt8("flags"); if (inventory) { - inventory->setItem(index, itemId, itemType, 1, refine, + inventory->setItem(index, + itemId, + itemType, 1, + refine, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), @@ -542,14 +546,23 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) break; } if (localPlayer) - localPlayer->pickedUp(itemInfo, 0, 1, floorId, pickup); + { + localPlayer->pickedUp(itemInfo, + 0, + ItemColor_one, + floorId, + pickup); + } } else { if (localPlayer) { - localPlayer->pickedUp(itemInfo, amount, - 1, floorId, Pickup::OKAY); + localPlayer->pickedUp(itemInfo, + amount, + ItemColor_one, + floorId, + Pickup::OKAY); } if (inventory) @@ -559,8 +572,12 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) if (item && item->getId() == itemId) amount += item->getQuantity(); - inventory->setItem(index, itemId, itemType, amount, refine, - 1, + inventory->setItem(index, + itemId, + itemType, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), fromBool(damaged, Damaged), Favorite_false, @@ -608,8 +625,12 @@ void InventoryHandler::processPlayerInventory(Net::MessageIn &msg) if (inventory) { - inventory->setItem(index, itemId, itemType, amount, - 0, 1, + inventory->setItem(index, + itemId, + itemType, + amount, + 0, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), @@ -645,8 +666,13 @@ void InventoryHandler::processPlayerStorage(Net::MessageIn &msg) ItemFlags flags; flags.byte = msg.readUInt8("flags"); - mInventoryItems.push_back(Ea::InventoryItem(index, itemId, itemType, - cards, amount, 0, 1, + mInventoryItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + 0, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), @@ -746,8 +772,13 @@ void InventoryHandler::processPlayerStorageEquip(Net::MessageIn &msg) ItemFlags flags; flags.byte = msg.readUInt8("flags"); - mInventoryItems.push_back(Ea::InventoryItem(index, itemId, itemType, - cards, amount, refine, 1, + mInventoryItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + refine, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), @@ -773,15 +804,19 @@ void InventoryHandler::processPlayerStorageAdd(Net::MessageIn &msg) if (Item *const item = mStorage->getItem(index)) { - item->setId(itemId, 1); + item->setId(itemId, ItemColor_one); item->increaseQuantity(amount); } else { if (mStorage) { - mStorage->setItem(index, itemId, itemType, amount, - refine, 1, + mStorage->setItem(index, + itemId, + itemType, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -960,8 +995,12 @@ void InventoryHandler::processPlayerCartAdd(Net::MessageIn &msg) if (item && item->getId() == itemId) amount += item->getQuantity(); - inventory->setItem(index, itemId, itemType, amount, refine, - 1, + inventory->setItem(index, + itemId, + itemType, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -995,8 +1034,13 @@ void InventoryHandler::processPlayerCartEquip(Net::MessageIn &msg) ItemFlags flags; flags.byte = msg.readUInt8("flags"); - mCartItems.push_back(Ea::InventoryItem(index, itemId, itemType, - cards, amount, refine, 1, + mCartItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + refine, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), @@ -1027,8 +1071,13 @@ void InventoryHandler::processPlayerCartItems(Net::MessageIn &msg) ItemFlags flags; flags.byte = msg.readUInt8("flags"); - mCartItems.push_back(Ea::InventoryItem(index, itemId, itemType, - cards, amount, 0, 1, + mCartItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + 0, + ItemColor_one, fromBool(flags.bits.isIdentified, Identified), fromBool(flags.bits.isDamaged, Damaged), fromBool(flags.bits.isFavorite, Favorite), diff --git a/src/net/eathena/itemhandler.cpp b/src/net/eathena/itemhandler.cpp index ce5dfadfb..4fa4a7e3e 100644 --- a/src/net/eathena/itemhandler.cpp +++ b/src/net/eathena/itemhandler.cpp @@ -82,7 +82,7 @@ void ItemHandler::processItemDropped(Net::MessageIn &msg) const BeingId id = msg.readBeingId("id"); const int itemId = msg.readInt16("item id"); msg.readInt16("type"); - const uint8_t identify = msg.readUInt8("identify"); + msg.readUInt8("identify"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int subX = static_cast(msg.readInt8("subx")); @@ -91,8 +91,12 @@ void ItemHandler::processItemDropped(Net::MessageIn &msg) if (actorManager) { - actorManager->createItem(id, itemId, - x, y, amount, identify, subX, subY); + actorManager->createItem(id, + itemId, + x, y, + amount, + ItemColor_one, + subX, subY); } } diff --git a/src/net/eathena/markethandler.cpp b/src/net/eathena/markethandler.cpp index 265fc7ca5..d0e8ff6ce 100644 --- a/src/net/eathena/markethandler.cpp +++ b/src/net/eathena/markethandler.cpp @@ -87,7 +87,7 @@ void MarketHandler::processMarketOpen(Net::MessageIn &msg) const int value = msg.readInt32("price"); const int amount = msg.readInt32("amount"); msg.readInt16("view"); - const unsigned char color = 1; + const ItemColor color = ItemColor_one; mBuyDialog->addItem(itemId, type, color, amount, value); } mBuyDialog->sort(); @@ -116,7 +116,7 @@ void MarketHandler::close() void MarketHandler::buyItem(const int itemId, const int type, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount) const { const bool nonStack = type == 4 || type == 5 || type == 7 || type == 8; diff --git a/src/net/eathena/markethandler.h b/src/net/eathena/markethandler.h index 42a4bcac0..e58ac1e68 100644 --- a/src/net/eathena/markethandler.h +++ b/src/net/eathena/markethandler.h @@ -43,7 +43,7 @@ class MarketHandler final : public MessageHandler, void buyItem(const int itemId, const int type, - const unsigned char color, + const ItemColor color, const int amount) const override final; protected: diff --git a/src/net/eathena/npchandler.cpp b/src/net/eathena/npchandler.cpp index e8a7daf8b..7b376fbeb 100644 --- a/src/net/eathena/npchandler.cpp +++ b/src/net/eathena/npchandler.cpp @@ -212,7 +212,7 @@ void NpcHandler::sell(const BeingId beingId) const void NpcHandler::buyItem(const BeingId beingId A_UNUSED, const int itemId, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount) const { createOutPacket(CMSG_NPC_BUY_REQUEST); diff --git a/src/net/eathena/npchandler.h b/src/net/eathena/npchandler.h index 75d9a245d..3b35cadc5 100644 --- a/src/net/eathena/npchandler.h +++ b/src/net/eathena/npchandler.h @@ -60,7 +60,7 @@ class NpcHandler final : public MessageHandler, public Ea::NpcHandler void buyItem(const BeingId beingId, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const override final; void sellItem(const BeingId beingId, diff --git a/src/net/eathena/tradehandler.cpp b/src/net/eathena/tradehandler.cpp index 749d9343e..a76a08130 100644 --- a/src/net/eathena/tradehandler.cpp +++ b/src/net/eathena/tradehandler.cpp @@ -199,10 +199,14 @@ void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) } else { - tradeWindow->addItem2(type, itemType, - cards, 4, - false, amount, - refine, 1, + tradeWindow->addItem2(type, + itemType, + cards, + 4, + false, + amount, + refine, + ItemColor_one, fromBool(identify, Identified), Damaged_false, Favorite_false, diff --git a/src/net/eathena/vendinghandler.cpp b/src/net/eathena/vendinghandler.cpp index 48b301a77..584aa1f23 100644 --- a/src/net/eathena/vendinghandler.cpp +++ b/src/net/eathena/vendinghandler.cpp @@ -158,7 +158,7 @@ void VendingHandler::processItemsList(Net::MessageIn &msg) for (int d = 0; d < 4; d ++) msg.readInt16("card"); - const unsigned char color = 1; + const ItemColor color = ItemColor_one; ShopItem *const item = mBuyDialog->addItem(itemId, type, color, amount, value); if (item) diff --git a/src/net/markethandler.h b/src/net/markethandler.h index f98b1b18d..13027024e 100644 --- a/src/net/markethandler.h +++ b/src/net/markethandler.h @@ -23,6 +23,8 @@ #ifdef EATHENA_SUPPORT +#include "enums/simpletypes/itemcolor.h" + #include #include "localconsts.h" @@ -40,7 +42,7 @@ class MarketHandler notfinal virtual void buyItem(const int itemId, const int type, - const unsigned char color, + const ItemColor color, const int amount) const = 0; }; diff --git a/src/net/npchandler.h b/src/net/npchandler.h index 1f4642b4d..29ecc5632 100644 --- a/src/net/npchandler.h +++ b/src/net/npchandler.h @@ -28,6 +28,7 @@ #include "enums/being/cookingtype.h" #include "enums/simpletypes/beingid.h" +#include "enums/simpletypes/itemcolor.h" #include "localconsts.h" @@ -65,7 +66,7 @@ class NpcHandler notfinal virtual void buyItem(const BeingId beingId, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const = 0; virtual void sellItem(const BeingId beingId, diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp index 8092a519f..d336bdf47 100644 --- a/src/net/tmwa/beinghandler.cpp +++ b/src/net/tmwa/beinghandler.cpp @@ -339,70 +339,70 @@ void BeingHandler::processBeingChangeLookContinue(Net::MessageIn &msg, break; } case 2: // Weapon ID in id, Shield ID in id2 - dstBeing->setSprite(SPRITE_BODY, id, "", 1, true); + dstBeing->setSprite(SPRITE_BODY, id, "", ItemColor_one, true); dstBeing->setSprite(SPRITE_FLOOR, id2); localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR); break; case 3: // Change lower headgear for eAthena, pants for us dstBeing->setSprite(SPRITE_WEAPON, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_WEAPON); break; case 4: // Change upper headgear for eAthena, hat for us dstBeing->setSprite(SPRITE_CLOTHES_COLOR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_CLOTHES_COLOR); break; case 5: // Change middle headgear for eathena, armor for us dstBeing->setSprite(SPRITE_HEAD_BOTTOM, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_BOTTOM); break; case 6: // eAthena LOOK_HAIR_COLOR dstBeing->setHairColor(SPRITE_HAIR_COLOR, - static_cast(id)); + fromInt(id, ItemColor)); break; case 7: // Clothes color // ignoring it break; case 8: // eAthena LOOK_SHIELD dstBeing->setSprite(SPRITE_FLOOR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR); break; case 9: // eAthena LOOK_SHOES dstBeing->setSprite(SPRITE_HAIR, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_HAIR); break; case 10: // LOOK_GLOVES dstBeing->setSprite(SPRITE_SHOES, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_SHOES); break; case 11: // LOOK_CAPE dstBeing->setSprite(SPRITE_SHIELD, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_SHIELD); break; case 12: dstBeing->setSprite(SPRITE_HEAD_TOP, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_TOP); break; case 13: dstBeing->setSprite(SPRITE_HEAD_MID, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_MID); break; case 14: dstBeing->setSprite(SPRITE_ROBE, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_ROBE); break; case 15: dstBeing->setSprite(SPRITE_EVOL2, id, color, - static_cast(id2)); + fromInt(id2, ItemColor)); localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL2); break; case 16: @@ -483,7 +483,8 @@ void BeingHandler::processPlayerUpdate1(Net::MessageIn &msg) const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt( + msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); msg.readInt32("unused"); @@ -508,7 +509,7 @@ void BeingHandler::processPlayerUpdate1(Net::MessageIn &msg) if (!disguiseId) { // Set these after the gender, as the sprites may be gender-specific - dstBeing->updateSprite(SPRITE_BODY, weapon, "", 1, true); + dstBeing->updateSprite(SPRITE_BODY, weapon, "", ItemColor_one, true); dstBeing->updateSprite(SPRITE_FLOOR, shield); dstBeing->updateSprite(SPRITE_WEAPON, headBottom); dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid); @@ -617,7 +618,8 @@ void BeingHandler::processPlayerUpdate2(Net::MessageIn &msg) const uint16_t headBottom = msg.readInt16("head bottom"); const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt( + msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); msg.readInt32("unused"); @@ -642,7 +644,7 @@ void BeingHandler::processPlayerUpdate2(Net::MessageIn &msg) if (!disguiseId) { // Set these after the gender, as the sprites may be gender-specific - dstBeing->updateSprite(SPRITE_BODY, weapon, "", 1, true); + dstBeing->updateSprite(SPRITE_BODY, weapon, "", ItemColor_one, true); dstBeing->updateSprite(SPRITE_FLOOR, shield); dstBeing->updateSprite(SPRITE_WEAPON, headBottom); dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid); @@ -751,7 +753,8 @@ void BeingHandler::processPlayerMove(Net::MessageIn &msg) const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt( + msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); msg.readInt32("unused"); @@ -776,7 +779,7 @@ void BeingHandler::processPlayerMove(Net::MessageIn &msg) if (!disguiseId) { // Set these after the gender, as the sprites may be gender-specific - dstBeing->updateSprite(SPRITE_BODY, weapon, "", 1, true); + dstBeing->updateSprite(SPRITE_BODY, weapon, "", ItemColor_one, true); dstBeing->updateSprite(SPRITE_FLOOR, shield); dstBeing->updateSprite(SPRITE_WEAPON, headBottom); dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid); @@ -942,7 +945,7 @@ void BeingHandler::processBeingVisible(Net::MessageIn &msg) const uint16_t shield = msg.readInt16("shield"); const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt(msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); const uint16_t shoes = msg.readInt16("shoes / clothes color"); @@ -1004,7 +1007,7 @@ void BeingHandler::processBeingVisible(Net::MessageIn &msg) setSprite(dstBeing, SPRITE_CLOTHES_COLOR, headTop); setSprite(dstBeing, SPRITE_HAIR, shoes); setSprite(dstBeing, SPRITE_SHOES, gloves); - setSprite(dstBeing, SPRITE_BODY, weapon, "", 1, true); + setSprite(dstBeing, SPRITE_BODY, weapon, "", ItemColor_one, true); setSprite(dstBeing, SPRITE_FLOOR, shield); } else if (dstBeing->getType() == ActorType::Npc @@ -1143,7 +1146,8 @@ void BeingHandler::processBeingMove(Net::MessageIn &msg) const uint16_t shield = msg.readInt16("shield"); const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt( + msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); const uint16_t shoes = msg.readInt16("shoes / clothes color"); @@ -1205,7 +1209,7 @@ void BeingHandler::processBeingMove(Net::MessageIn &msg) setSprite(dstBeing, SPRITE_CLOTHES_COLOR, headTop); setSprite(dstBeing, SPRITE_HAIR, shoes); setSprite(dstBeing, SPRITE_SHOES, gloves); - setSprite(dstBeing, SPRITE_BODY, weapon, "", 1, true); + setSprite(dstBeing, SPRITE_BODY, weapon, "", ItemColor_one, true); setSprite(dstBeing, SPRITE_FLOOR, shield); } else if (dstBeing->getType() == ActorType::Npc diff --git a/src/net/tmwa/buysellhandler.cpp b/src/net/tmwa/buysellhandler.cpp index e09fd2ae8..e41b1580e 100644 --- a/src/net/tmwa/buysellhandler.cpp +++ b/src/net/tmwa/buysellhandler.cpp @@ -110,7 +110,7 @@ void BuySellHandler::processNpcBuy(Net::MessageIn &msg) msg.readInt32("dc value?"); const int type = msg.readUInt8("type"); const int itemId = msg.readInt16("item id"); - uint8_t color = 1; + const ItemColor color = ItemColor_one; mBuyDialog->addItem(itemId, type, color, 0, value); } mBuyDialog->sort(); diff --git a/src/net/tmwa/cashshophandler.cpp b/src/net/tmwa/cashshophandler.cpp index c9fecd9fb..45a4aaacb 100644 --- a/src/net/tmwa/cashshophandler.cpp +++ b/src/net/tmwa/cashshophandler.cpp @@ -44,7 +44,7 @@ void CashShopHandler::handleMessage(Net::MessageIn &msg A_UNUSED) void CashShopHandler::buyItem(const int points A_UNUSED, const int itemId A_UNUSED, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount A_UNUSED) const { } diff --git a/src/net/tmwa/cashshophandler.h b/src/net/tmwa/cashshophandler.h index 588aba087..3b4c668ec 100644 --- a/src/net/tmwa/cashshophandler.h +++ b/src/net/tmwa/cashshophandler.h @@ -42,7 +42,7 @@ class CashShopHandler final : public MessageHandler, void buyItem(const int points, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const override final; void close() const override final; diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index 12d698186..229339ef4 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -168,7 +168,7 @@ void CharServerHandler::readPlayerData(Net::MessageIn &msg, const uint16_t look = msg.readUInt8("look"); tempPlayer->setSubtype(fromInt(race, BeingTypeId), look); const uint16_t weapon = msg.readInt16("weapon"); - tempPlayer->setSprite(SPRITE_BODY, weapon, "", 1, true); + tempPlayer->setSprite(SPRITE_BODY, weapon, "", ItemColor_one, true); data.mAttributes[Attributes::LEVEL] = msg.readInt16("level"); @@ -179,11 +179,12 @@ void CharServerHandler::readPlayerData(Net::MessageIn &msg, const int hat = msg.readInt16("hat"); const int topClothes = msg.readInt16("top clothes"); - const uint8_t hairColor = msg.readUInt8("hair color"); + const ItemColor hairColor = fromInt( + msg.readUInt8("hair color"), ItemColor); msg.readUInt8("unused"); tempPlayer->setSprite(SPRITE_HAIR_COLOR, hairStyle * -1, ItemDB::get(-hairStyle).getDyeColorsString(hairColor)); - tempPlayer->setHairColor(static_cast(hairColor)); + tempPlayer->setHairColor(hairColor); const int misc2 = msg.readInt16("misc2"); tempPlayer->setName(msg.readString(24, "name")); diff --git a/src/net/tmwa/inventoryhandler.cpp b/src/net/tmwa/inventoryhandler.cpp index 5ff9325ae..05ed6e40d 100644 --- a/src/net/tmwa/inventoryhandler.cpp +++ b/src/net/tmwa/inventoryhandler.cpp @@ -292,8 +292,12 @@ void InventoryHandler::processPlayerEquipment(Net::MessageIn &msg) if (inventory) { - inventory->setItem(index, itemId, itemType, 1, refine, + inventory->setItem(index, + itemId, + itemType, 1, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -374,14 +378,23 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) break; } if (localPlayer) - localPlayer->pickedUp(itemInfo, 0, identified, floorId, pickup); + { + localPlayer->pickedUp(itemInfo, + 0, + fromInt(identified, ItemColor), + floorId, + pickup); + } } else { if (localPlayer) { - localPlayer->pickedUp(itemInfo, amount, - identified, floorId, Pickup::OKAY); + localPlayer->pickedUp(itemInfo, + amount, + fromInt(identified, ItemColor), + floorId, + Pickup::OKAY); } if (inventory) @@ -391,8 +404,12 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) if (item && item->getId() == itemId) amount += item->getQuantity(); - inventory->setItem(index, itemId, type, amount, refine, - 1, + inventory->setItem(index, + itemId, + type, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -449,8 +466,12 @@ void InventoryHandler::processPlayerInventory(Net::MessageIn &msg) if (inventory) { - inventory->setItem(index, itemId, itemType, amount, - 0, 1, + inventory->setItem(index, + itemId, + itemType, + amount, + 0, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -490,8 +511,13 @@ void InventoryHandler::processPlayerStorage(Net::MessageIn &msg) cards[0], cards[1], cards[2], cards[3]); } - mInventoryItems.push_back(Ea::InventoryItem(index, itemId, - itemType, cards, amount, 0, 1, + mInventoryItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + 0, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -559,8 +585,13 @@ void InventoryHandler::processPlayerStorageEquip(Net::MessageIn &msg) static_cast(refine)); } - mInventoryItems.push_back(Ea::InventoryItem(index, itemId, - itemType, cards, amount, refine, 1, + mInventoryItems.push_back(Ea::InventoryItem(index, + itemId, + itemType, + cards, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, @@ -585,15 +616,19 @@ void InventoryHandler::processPlayerStorageAdd(Net::MessageIn &msg) if (Item *const item = mStorage->getItem(index)) { - item->setId(itemId, identified); + item->setId(itemId, ItemColor_one); item->increaseQuantity(amount); } else { if (mStorage) { - mStorage->setItem(index, itemId, 0, amount, - refine, 1, + mStorage->setItem(index, + itemId, + 0, + amount, + refine, + ItemColor_one, fromBool(identified, Identified), Damaged_false, Favorite_false, diff --git a/src/net/tmwa/itemhandler.cpp b/src/net/tmwa/itemhandler.cpp index 7ad3f733a..745c79865 100644 --- a/src/net/tmwa/itemhandler.cpp +++ b/src/net/tmwa/itemhandler.cpp @@ -72,7 +72,7 @@ void ItemHandler::processItemDropped(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readInt16("item id"); - const uint8_t identify = msg.readUInt8("identify"); + const ItemColor identify = fromInt(msg.readUInt8("identify"), ItemColor); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int subX = static_cast(msg.readInt8("sub x")); diff --git a/src/net/tmwa/markethandler.cpp b/src/net/tmwa/markethandler.cpp index 6fff692c8..4e322b1cf 100644 --- a/src/net/tmwa/markethandler.cpp +++ b/src/net/tmwa/markethandler.cpp @@ -53,7 +53,7 @@ void MarketHandler::close() void MarketHandler::buyItem(const int itemId A_UNUSED, const int type A_UNUSED, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount A_UNUSED) const { } diff --git a/src/net/tmwa/markethandler.h b/src/net/tmwa/markethandler.h index bf817ac04..65d299251 100644 --- a/src/net/tmwa/markethandler.h +++ b/src/net/tmwa/markethandler.h @@ -43,7 +43,7 @@ class MarketHandler final : public MessageHandler, void buyItem(const int itemId, const int type, - const unsigned char color, + const ItemColor color, const int amount) const override final; }; diff --git a/src/net/tmwa/npchandler.cpp b/src/net/tmwa/npchandler.cpp index 60d41a7ef..b01c3277f 100644 --- a/src/net/tmwa/npchandler.cpp +++ b/src/net/tmwa/npchandler.cpp @@ -178,7 +178,7 @@ void NpcHandler::sell(const BeingId beingId) const void NpcHandler::buyItem(const BeingId beingId A_UNUSED, const int itemId, - const unsigned char color A_UNUSED, + const ItemColor color A_UNUSED, const int amount) const { createOutPacket(CMSG_NPC_BUY_REQUEST); diff --git a/src/net/tmwa/npchandler.h b/src/net/tmwa/npchandler.h index c8da3fd42..35a6f9459 100644 --- a/src/net/tmwa/npchandler.h +++ b/src/net/tmwa/npchandler.h @@ -60,7 +60,7 @@ class NpcHandler final : public MessageHandler, public Ea::NpcHandler void buyItem(const BeingId beingId, const int itemId, - const unsigned char color, + const ItemColor color, const int amount) const override final; void sellItem(const BeingId beingId, diff --git a/src/net/tmwa/tradehandler.cpp b/src/net/tmwa/tradehandler.cpp index c445f8d06..845a7af6b 100644 --- a/src/net/tmwa/tradehandler.cpp +++ b/src/net/tmwa/tradehandler.cpp @@ -184,10 +184,14 @@ void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) } else { - tradeWindow->addItem2(type, 0, - cards, 4, - false, amount, - refine, 1, + tradeWindow->addItem2(type, + 0, + cards, + 4, + false, + amount, + refine, + ItemColor_one, fromBool(identify, Identified), Damaged_false, Favorite_false, diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp index f63e65134..1f1033e3c 100644 --- a/src/resources/beinginfo.cpp +++ b/src/resources/beinginfo.cpp @@ -206,12 +206,12 @@ void BeingInfo::setColorsList(const std::string &name) mColors = ColorDB::getColorsList(name); } -std::string BeingInfo::getColor(const int idx) const +std::string BeingInfo::getColor(const ItemColor idx) const { if (!mColors) return std::string(); - const std::map ::const_iterator + const std::map ::const_iterator it = mColors->find(idx); if (it == mColors->end()) return std::string(); diff --git a/src/resources/beinginfo.h b/src/resources/beinginfo.h index 0a6330470..3429515e0 100644 --- a/src/resources/beinginfo.h +++ b/src/resources/beinginfo.h @@ -28,6 +28,7 @@ #include "enums/resources/map/blocktype.h" #include "enums/simpletypes/beingtypeid.h" +#include "enums/simpletypes/itemcolor.h" #include "resources/beingmenuitem.h" #include "resources/cursor.h" @@ -38,7 +39,7 @@ struct Attack; namespace ColorDB { - class ItemColor; + class ItemColorData; } typedef std::map Attacks; @@ -312,7 +313,7 @@ class BeingInfo final void setColorsList(const std::string &name); - std::string getColor(const int idx) const A_WARN_UNUSED; + std::string getColor(const ItemColor idx) const A_WARN_UNUSED; void addMenu(const std::string &name, const std::string &command); @@ -332,7 +333,7 @@ class BeingInfo final std::vector mMenu; unsigned char mBlockWalkMask; BlockType::BlockType mBlockType; - const std::map *mColors; + const std::map *mColors; int mTargetOffsetX; int mTargetOffsetY; int mNameOffsetX; diff --git a/src/resources/db/colordb.cpp b/src/resources/db/colordb.cpp index 1b636e407..62f7beef6 100644 --- a/src/resources/db/colordb.cpp +++ b/src/resources/db/colordb.cpp @@ -41,7 +41,7 @@ void ColorDB::load() if (mLoaded) unload(); - std::map colors; + std::map colors; ColorListsIterator it = mColorLists.find("hair"); if (it != mColorLists.end()) colors = it->second; @@ -68,7 +68,7 @@ void ColorDB::load() } void ColorDB::loadHair(const std::string &fileName, - std::map &colors) + std::map &colors) { XML::Document *doc = new XML::Document(fileName, UseResman_true, @@ -78,8 +78,8 @@ void ColorDB::loadHair(const std::string &fileName, if (!root || !xmlNameEqual(root, "colors")) { logger->log("ColorDB: Failed to find hair colors file."); - if (colors.find(0) == colors.end()) - colors[0] = ItemColor(0, "", ""); + if (colors.find(ItemColor_zero) == colors.end()) + colors[ItemColor_zero] = ItemColorData(ItemColor_zero, "", ""); delete doc; return; } @@ -95,12 +95,13 @@ void ColorDB::loadHair(const std::string &fileName, } else if (xmlNameEqual(node, "color")) { - const int id = XML::getProperty(node, "id", 0); + const ItemColor id = fromInt(XML::getProperty( + node, "id", 0), ItemColor); if (colors.find(id) != colors.end()) - logger->log("ColorDB: Redefinition of dye ID %d", id); + logger->log("ColorDB: Redefinition of dye ID %d", toInt(id, int)); - colors[id] = ItemColor(id, XML::langProperty(node, "name", ""), + colors[id] = ItemColorData(id, XML::langProperty(node, "name", ""), XML::getProperty(node, "value", "#FFFFFF")); } } @@ -135,7 +136,7 @@ void ColorDB::loadColorLists(const std::string &fileName) if (name.empty()) continue; - std::map colors; + std::map colors; const ColorListsIterator it = mColorLists.find(name); if (it != mColorLists.end()) @@ -145,11 +146,14 @@ void ColorDB::loadColorLists(const std::string &fileName) { if (xmlNameEqual(colorNode, "color")) { - ItemColor c(XML::getProperty(colorNode, "id", -1), - XML::langProperty(colorNode, "name", ""), - XML::getProperty(colorNode, "value", "")); - if (c.id > -1) - colors[c.id] = c; + const int id = XML::getProperty(colorNode, "id", -1); + if (id > -1) + { + ItemColorData c(fromInt(id, ItemColor), + XML::langProperty(colorNode, "name", ""), + XML::getProperty(colorNode, "value", "")); + colors[c.id] = c; + } } } mColorLists[name] = colors; @@ -166,7 +170,7 @@ void ColorDB::unload() mLoaded = false; } -std::string &ColorDB::getHairColorName(const int id) +std::string &ColorDB::getHairColorName(const ItemColor id) { if (!mLoaded) load(); @@ -182,7 +186,7 @@ std::string &ColorDB::getHairColorName(const int id) if (i == (*it).second.end()) { - logger->log("ColorDB: Error, unknown dye ID# %d", id); + logger->log("ColorDB: Error, unknown dye ID# %d", toInt(id, int)); return mFail; } else @@ -196,7 +200,7 @@ int ColorDB::getHairSize() return mHairColorsSize; } -const std::map +const std::map *ColorDB::getColorsList(const std::string &name) { const ColorListsIterator it = mColorLists.find(name); diff --git a/src/resources/db/colordb.h b/src/resources/db/colordb.h index c2923f382..6468b76e3 100644 --- a/src/resources/db/colordb.h +++ b/src/resources/db/colordb.h @@ -22,6 +22,8 @@ #ifndef RESOURCES_DB_COLORDB_H #define RESOURCES_DB_COLORDB_H +#include "enums/simpletypes/itemcolor.h" + #include #include @@ -32,24 +34,25 @@ */ namespace ColorDB { - class ItemColor final + class ItemColorData final { public: - ItemColor() : - id(0), + ItemColorData() : + id(ItemColor_zero), name(), color() { } - ItemColor(const int id0, const std::string &name0, - const std::string &color0) : + ItemColorData(const ItemColor id0, + const std::string &name0, + const std::string &color0) : id(id0), name(name0), color(color0) { } - int id; + ItemColor id; std::string name; std::string color; }; @@ -63,7 +66,7 @@ namespace ColorDB * Loads the color data from colors.xml. */ void loadHair(const std::string &fileName, - std::map &colors); + std::map &colors); void loadColorLists(const std::string &fileName); @@ -72,17 +75,19 @@ namespace ColorDB */ void unload(); - std::string &getHairColorName(const int id) A_WARN_UNUSED; + std::string &getHairColorName(const ItemColor id) A_WARN_UNUSED; int getHairSize() A_WARN_UNUSED; - const std::map *getColorsList(const std::string - &name) A_WARN_UNUSED; + const std::map *getColorsList(const std::string + &name) + A_WARN_UNUSED; // Color DB - typedef std::map Colors; + typedef std::map Colors; typedef Colors::iterator ColorIterator; - typedef std::map > ColorLists; + typedef std::map > + ColorLists; typedef ColorLists::iterator ColorListsIterator; } // namespace ColorDB diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp index 768825f44..c439be5c5 100644 --- a/src/resources/iteminfo.cpp +++ b/src/resources/iteminfo.cpp @@ -201,12 +201,12 @@ void ItemInfo::setColorsList(const std::string &name) } } -std::string ItemInfo::getDyeColorsString(const int color) const +std::string ItemInfo::getDyeColorsString(const ItemColor color) const { if (!mColors || mColorList.empty()) return ""; - const std::map ::const_iterator + const std::map ::const_iterator it = mColors->find(color); if (it == mColors->end()) return ""; @@ -214,23 +214,23 @@ std::string ItemInfo::getDyeColorsString(const int color) const return it->second.color; } -const std::string ItemInfo::getDescription(const unsigned char color) const +const std::string ItemInfo::getDescription(const ItemColor color) const { return replaceColors(mDescription, color); } -const std::string ItemInfo::getName(const unsigned char color) const +const std::string ItemInfo::getName(const ItemColor color) const { return replaceColors(mName, color); } const std::string ItemInfo::replaceColors(std::string str, - const unsigned char color) const + const ItemColor color) const { std::string name; if (mColors && !mColorList.empty()) { - const std::map ::const_iterator + const std::map ::const_iterator it = mColors->find(color); if (it == mColors->end()) name = "unknown"; @@ -369,24 +369,24 @@ void ItemInfo::setSprite(const std::string &animationFile, mAnimationFiles[static_cast(gender) + race * 4] = animationFile; } -std::string ItemInfo::getColorName(const int idx) const +std::string ItemInfo::getColorName(const ItemColor idx) const { if (!mColors) return std::string(); - const std::map ::const_iterator + const std::map ::const_iterator it = mColors->find(idx); if (it == mColors->end()) return std::string(); return it->second.name; } -std::string ItemInfo::getColor(const int idx) const +std::string ItemInfo::getColor(const ItemColor idx) const { if (!mColors) return std::string(); - const std::map ::const_iterator + const std::map ::const_iterator it = mColors->find(idx); if (it == mColors->end()) return std::string(); diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h index 4d40390d9..976d30c1d 100644 --- a/src/resources/iteminfo.h +++ b/src/resources/iteminfo.h @@ -26,6 +26,7 @@ #include "enums/being/gender.h" #include "enums/simpletypes/beingtypeid.h" +#include "enums/simpletypes/itemcolor.h" #include "resources/cursor.h" #include "resources/itemtype.h" @@ -34,7 +35,7 @@ namespace ColorDB { - class ItemColor; + class ItemColorData; } // sprite, @@ -69,7 +70,7 @@ class ItemInfo final const std::string &getName() const A_WARN_UNUSED { return mName; } - const std::string getName(const unsigned char color) + const std::string getName(const ItemColor color) const A_WARN_UNUSED; void setDisplay(const SpriteDisplay &display) @@ -84,7 +85,7 @@ class ItemInfo final const std::string &getDescription() const A_WARN_UNUSED { return mDescription; } - const std::string getDescription(const unsigned char color) + const std::string getDescription(const ItemColor color) const A_WARN_UNUSED; void setEffect(const std::string &effect) @@ -238,7 +239,7 @@ class ItemInfo final const SpriteToItemMap *getSpriteToItemReplaceMap(const int directions) const A_WARN_UNUSED; - std::string getDyeColorsString(const int color) const A_WARN_UNUSED; + std::string getDyeColorsString(const ItemColor color) const A_WARN_UNUSED; void setColorsList(const std::string &name); @@ -246,7 +247,7 @@ class ItemInfo final { return !mColorList.empty(); } const std::string replaceColors(std::string str, - const unsigned char color) + const ItemColor color) const A_WARN_UNUSED; void setPickupCursor(const std::string &cursor) @@ -267,9 +268,9 @@ class ItemInfo final int getColorsSize() const { return mColors ? static_cast(mColors->size()) : 0; } - std::string getColorName(const int idx) const; + std::string getColorName(const ItemColor idx) const; - std::string getColor(const int idx) const; + std::string getColor(const ItemColor idx) const; int mDrawBefore[10]; int mDrawAfter[10]; @@ -317,7 +318,7 @@ class ItemInfo final /** Stores the names of sounds to be played at certain event. */ std::map mSounds; std::map mTags; - const std::map *mColors; + const std::map *mColors; std::string mColorList; int mHitEffectId; int mCriticalHitEffectId; diff --git a/src/shopitem.cpp b/src/shopitem.cpp index 3fa7c6480..faf635fbd 100644 --- a/src/shopitem.cpp +++ b/src/shopitem.cpp @@ -35,7 +35,7 @@ ShopItem::ShopItem(const int inventoryIndex, const int id, const int type, - const unsigned char color, + const ItemColor color, const int quantity, const int price) : Item(id, type, 0, 0, color, @@ -57,7 +57,7 @@ ShopItem::ShopItem(const int inventoryIndex, ShopItem::ShopItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int price) : Item(id, type, 0, 0, color, Identified_true, diff --git a/src/shopitem.h b/src/shopitem.h index 68bdc51b5..a1c3d5649 100644 --- a/src/shopitem.h +++ b/src/shopitem.h @@ -47,7 +47,7 @@ class ShopItem final : public Item ShopItem(const int inventoryIndex, const int id, const int type, - const unsigned char color, + const ItemColor color, const int quantity, const int price); @@ -60,7 +60,7 @@ class ShopItem final : public Item */ ShopItem(const int id, const int type, - const unsigned char color, + const ItemColor color, const int price); A_DELETE_COPY(ShopItem) diff --git a/src/shortcutbase.cpp b/src/shortcutbase.cpp index 0b076b16b..8bb0b3a54 100644 --- a/src/shortcutbase.cpp +++ b/src/shortcutbase.cpp @@ -31,12 +31,12 @@ ShortcutBase::ShortcutBase(const std::string &itemName, const std::string &colorName, const int maxSize) : mItems(new int[maxSize]), - mItemColors(new unsigned char[maxSize]), + mItemColors(new ItemColor[maxSize]), mItemName(itemName), mColorName(colorName), mItemSelected(-1), mMaxSize(maxSize), - mItemColorSelected(1) + mItemColorSelected(ItemColor_one) { clear(false); load(); @@ -61,8 +61,9 @@ void ShortcutBase::load(const bool oldConfig) for (int i = 0; i < mMaxSize; i++) { const int itemId = cfg->getValue(mItemName + toString(i), -1); - const unsigned char itemColor = static_cast( - cfg->getValue(mColorName + toString(i), -1)); + const ItemColor itemColor = fromInt( + cfg->getValue(mColorName + toString(i), -1), + ItemColor); if (itemId != -1) { @@ -77,7 +78,8 @@ void ShortcutBase::save() const for (int i = 0; i < mMaxSize; i++) { const int itemId = mItems[i] ? mItems[i] : -1; - const int itemColor = mItemColors[i] ? mItemColors[i] : 1; + const int itemColor = (mItemColors[i] != ItemColor_zero) + ? toInt(mItemColors[i], int) : 1; if (itemId != -1) { serverConfig.setValue(mItemName + toString(i), itemId); @@ -101,7 +103,7 @@ void ShortcutBase::setItemSelected(const Item *const item) else { mItemSelected = -1; - mItemColorSelected = 1; + mItemColorSelected = ItemColor_one; } } @@ -120,7 +122,7 @@ void ShortcutBase::clear(const bool isSave) for (int i = 0; i < mMaxSize; i++) { mItems[i] = -1; - mItemColors[i] = 1; + mItemColors[i] = ItemColor_one; } if (isSave) save(); diff --git a/src/shortcutbase.h b/src/shortcutbase.h index e742b6b18..58520a8ad 100644 --- a/src/shortcutbase.h +++ b/src/shortcutbase.h @@ -23,6 +23,8 @@ #ifndef SHORTCUTBASE_H #define SHORTCUTBASE_H +#include "enums/simpletypes/itemcolor.h" + #include #include "localconsts.h" @@ -67,7 +69,7 @@ class ShortcutBase notfinal int getItem(const int index) const A_WARN_UNUSED { return mItems[index]; } - unsigned char getItemColor(const int index) const A_WARN_UNUSED + ItemColor getItemColor(const int index) const A_WARN_UNUSED { return mItemColors[index]; } /** @@ -95,8 +97,9 @@ class ShortcutBase notfinal * @param index Index of the item. * @param itemId ID of the item. */ - void setItems(const int index, const int itemId, - const unsigned char color) + void setItems(const int index, + const int itemId, + const ItemColor color) { mItems[index] = itemId; mItemColors[index] = color; save(); } /** @@ -125,12 +128,12 @@ class ShortcutBase notfinal private: int *mItems A_NONNULLPOINTER; - unsigned char *mItemColors A_NONNULLPOINTER; + ItemColor *mItemColors A_NONNULLPOINTER; std::string mItemName; std::string mColorName; int mItemSelected; int mMaxSize; - unsigned char mItemColorSelected; + ItemColor mItemColorSelected; }; #endif // SHORTCUTBASE_H -- cgit v1.2.3-70-g09d2