From d20744c0ff83572dc209389df900826b7d088546 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 23 Nov 2014 16:45:46 +0300 Subject: Add support for additional slots in net code. Now projectile slot depend on server. --- src/being/localplayer.cpp | 2 +- src/equipment.h | 2 +- src/gui/windows/equipmentwindow.cpp | 7 +++++-- src/gui/windows/statuswindow.cpp | 5 +++-- src/net/ea/eaprotocol.h | 7 +++++++ src/net/ea/inventoryhandler.cpp | 4 ++-- src/net/eathena/inventoryhandler.cpp | 2 +- src/net/eathena/inventoryhandler.h | 3 +++ src/net/inventoryhandler.h | 2 ++ src/net/tmwa/inventoryhandler.h | 3 +++ src/resources/equipmentslots.h | 7 ++++++- 11 files changed, 34 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 60518842d..935b64c70 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -2944,7 +2944,7 @@ void LocalPlayer::imitateOutfit(const Being *const player, const int equipmentSlot = inventoryHandler ->convertFromServerSlot(sprite); // logger->log("equipmentSlot: " + toString(equipmentSlot)); - if (equipmentSlot == ItemSlot::PROJECTILE_SLOT) + if (equipmentSlot == inventoryHandler->getProjectileSlot()) return; const Item *const item = PlayerInfo::getEquipment(equipmentSlot); diff --git a/src/equipment.h b/src/equipment.h index 1adc69136..d9210a2fe 100644 --- a/src/equipment.h +++ b/src/equipment.h @@ -23,7 +23,7 @@ #ifndef EQUIPMENT_H #define EQUIPMENT_H -static const int EQUIPMENT_SIZE = 22; +static const int EQUIPMENT_SIZE = 27; #include "localconsts.h" diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp index e37d623d6..a78052404 100644 --- a/src/gui/windows/equipmentwindow.cpp +++ b/src/gui/windows/equipmentwindow.cpp @@ -53,11 +53,13 @@ #include "utils/dtor.h" #include "utils/gettext.h" +#include "net/inventoryhandler.h" + #include "debug.h" EquipmentWindow *equipmentWindow = nullptr; EquipmentWindow *beingEquipmentWindow = nullptr; -static const int BOX_COUNT = 22; +static const int BOX_COUNT = 27; std::map EquipmentWindow::mSlotNames; EquipmentWindow::EquipmentWindow(Equipment *const equipment, @@ -241,6 +243,7 @@ void EquipmentWindow::draw(Graphics *graphics) } i = 0; + const int projSlot = inventoryHandler->getProjectileSlot(); for (std::vector::const_iterator it = boxes.begin(), it_end = boxes.end(); it != it_end; ++ it, ++ i) { @@ -258,7 +261,7 @@ void EquipmentWindow::draw(Graphics *graphics) // with maximum opacity graphics->drawImage(image, box->x + mItemPadding, box->y + mItemPadding); - if (i == ItemSlot::PROJECTILE_SLOT) + if (i == projSlot) { graphics->setColorAll(mLabelsColor, mLabelsColor2); const std::string str = toString(item->getQuantity()); diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp index 9d979f27f..8803654c8 100644 --- a/src/gui/windows/statuswindow.cpp +++ b/src/gui/windows/statuswindow.cpp @@ -50,8 +50,9 @@ #include "gui/widgets/vertcontainer.h" #include "gui/widgets/windowcontainer.h" -#include "net/playerhandler.h" #include "net/gamehandler.h" +#include "net/inventoryhandler.h" +#include "net/playerhandler.h" #include "utils/delete2.h" #include "utils/gettext.h" @@ -585,7 +586,7 @@ void StatusWindow::updateArrowsBar(ProgressBar *const bar) return; const Item *const item = equipmentWindow->getEquipment( - Equipment::EQUIP_PROJECTILE_SLOT); + inventoryHandler->getProjectileSlot()); if (item && item->getQuantity() > 0) bar->setText(toString(item->getQuantity())); diff --git a/src/net/ea/eaprotocol.h b/src/net/ea/eaprotocol.h index 46677f25a..89d8dd791 100644 --- a/src/net/ea/eaprotocol.h +++ b/src/net/ea/eaprotocol.h @@ -92,6 +92,13 @@ enum EA_SPRITE_EVOL3, EA_SPRITE_EVOL4, EA_SPRITE_EVOL5, + EA_SPRITE_EVOL6, + EA_SPRITE_EVOL7, + EA_SPRITE_EVOL8, + EA_SPRITE_EVOL9, + EA_SPRITE_EVOL10, + EA_SPRITE_EVOL11, + EA_SPRITE_EVOL12, EA_SPRITE_VECTOREND }; diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index 074459841..1f6d0e2a2 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -147,7 +147,7 @@ int InventoryHandler::getSlot(const int eAthenaSlot) return Equipment::EQUIP_VECTOREND; if (eAthenaSlot & 0x8000) - return Equipment::EQUIP_PROJECTILE_SLOT; + return inventoryHandler->getProjectileSlot(); unsigned int mask = 1; int position = 0; @@ -327,7 +327,7 @@ void InventoryHandler::processPlayerArrowEquip(Net::MessageIn &msg) return; index -= INVENTORY_OFFSET; - mEquips.setEquipment(Equipment::EQUIP_PROJECTILE_SLOT, index); + mEquips.setEquipment(inventoryHandler->getProjectileSlot(), index); ArrowsListener::distributeEvent(); BLOCK_END("InventoryHandler::processPlayerArrowEquip") } diff --git a/src/net/eathena/inventoryhandler.cpp b/src/net/eathena/inventoryhandler.cpp index af08fa1b2..384ca86b2 100644 --- a/src/net/eathena/inventoryhandler.cpp +++ b/src/net/eathena/inventoryhandler.cpp @@ -57,7 +57,7 @@ const Equipment::Slot EQUIP_CONVERT[] = Equipment::EQUIP_FIGHT1_SLOT, // 10 SPRITE_WEAPON Equipment::EQUIP_FIGHT2_SLOT, // 11 SPRITE_SHIELD Equipment::EQUIP_EVOL_RING2_SLOT, // 12 - Equipment::EQUIP_EVOL_RING2_SLOT, // 13 SPRITE_EVOL2 + Equipment::EQUIP_PROJECTILE_SLOT, // 13 SPRITE_EVOL2 Equipment::EQUIP_COSTUME_ROBE_SLOT, // 14 SPRITE_EVOL3 Equipment::EQUIP_MISSING1_SLOT, // 15 SPRITE_EVOL4 }; diff --git a/src/net/eathena/inventoryhandler.h b/src/net/eathena/inventoryhandler.h index 272d3a82b..794f9ca7a 100644 --- a/src/net/eathena/inventoryhandler.h +++ b/src/net/eathena/inventoryhandler.h @@ -71,6 +71,9 @@ class InventoryHandler final : public MessageHandler, int convertFromServerSlot(const int serverSlot) const override final A_WARN_UNUSED; + int getProjectileSlot() const override final + { return 23; } + protected: static void processPlayerEquipment(Net::MessageIn &msg); diff --git a/src/net/inventoryhandler.h b/src/net/inventoryhandler.h index ec822531a..13b2c847f 100644 --- a/src/net/inventoryhandler.h +++ b/src/net/inventoryhandler.h @@ -84,6 +84,8 @@ class InventoryHandler notfinal const bool favorite) const = 0; virtual void selectEgg(const Item *const item) const = 0; + + virtual int getProjectileSlot() const = 0; }; } // namespace Net diff --git a/src/net/tmwa/inventoryhandler.h b/src/net/tmwa/inventoryhandler.h index 84f6dd974..d8caf7a84 100644 --- a/src/net/tmwa/inventoryhandler.h +++ b/src/net/tmwa/inventoryhandler.h @@ -71,6 +71,9 @@ class InventoryHandler final : public MessageHandler, int convertFromServerSlot(const int serverSlot) const override final A_WARN_UNUSED; + int getProjectileSlot() const override final + { return 10; } + protected: static void processPlayerEquipment(Net::MessageIn &msg); diff --git a/src/resources/equipmentslots.h b/src/resources/equipmentslots.h index 31373a8e4..6b7db61c4 100644 --- a/src/resources/equipmentslots.h +++ b/src/resources/equipmentslots.h @@ -85,7 +85,12 @@ static const EquipmentSlotMap equipmentSlots[] = {"slot18", 18}, {"slot19", 19}, {"slot20", 20}, - {"slot21", 21} + {"slot21", 21}, + {"slot22", 22}, + {"slot23", 23}, + {"slot24", 24}, + {"slot25", 25}, + {"slot26", 26} }; #endif // RESOURCES_EQUIPMENTSLOTS_H -- cgit v1.2.3-60-g2f50