From 37fbb35c0a8a61d55e371ef4cdcae181e8da6376 Mon Sep 17 00:00:00 2001 From: collett Date: Tue, 12 May 2020 00:18:45 +0900 Subject: [PATCH] Fix armory. --- src/common/Common.h | 58 +++++++++++++++-------------- src/world/Actor/PlayerInventory.cpp | 4 +- src/world/Manager/ItemMgr.cpp | 46 +++++++++++------------ src/world/Manager/ItemMgr.h | 2 +- 4 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index 927b4f01..1d7c5fe2 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -159,44 +159,46 @@ namespace Sapphire::Common ModelRing2 = 9 }; - enum EquipSlotCategory : uint8_t + enum class EquipSlotCategory : uint8_t { - Unequippable = 0, - // main slots - CharaMainHand = 1, - CharaOffHand = 2, - CharaHead = 3, - CharaBody = 4, - CharaHands = 5, - CharaWaist = 6, - CharaLegs = 7, - CharaFeet = 8, - CharaEars = 9, - CharaNeck = 10, - CharaWrist = 11, - CharaRing = 12, - CharaSoulCrystal = 17, - - // specials + CharaMainHand = 0, + CharaOffHand = 1, + CharaHead = 2, + CharaBody = 3, + CharaHands = 4, + CharaWaist = 5, + CharaLegs = 6, + CharaFeet = 7, + CharaEars = 8, + CharaNeck = 9, + CharaWrist = 10, + CharaRing = 11, + CharaSoulCrystal = 12, + /* following slots not seem to exist any more. + when multi-slot gear is moved into equipment slot, normal slot listed above is used. + client will move any incompatible gears into armory but no InventoryModifiyHandler is sent. + server need to move those silently in order to sync with client. + */ + /*! Cannot equip gear to offhand slot */ - MainTwoHandedWeapon = 13, + //MainTwoHandedWeapon = 13, /*! Can be equipped in either main or offhand slot */ - MainOrOffHand = 14, // unused + //MainOrOffHand = 14, // unused /*! Cannot equip gear to head */ - BodyDisallowHead = 15, + //BodyDisallowHead = 15, /*! Cannot equip gear to hands, legs and feet slots */ - BodyDisallowHandsLegsFeet = 16, + //BodyDisallowHandsLegsFeet = 16, /*! Cannot equip gear to feet slot */ - LegsDisallowFeet = 18, + //LegsDisallowFeet = 18, /*! Cannot equp gear to head, hands, legs, feet slots */ - BodyDisallowAll = 19, + //BodyDisallowAll = 19, /*! Cannot equip gear to hands slot */ - BodyDisallowHands = 20, + //BodyDisallowHands = 20, /*! Cannot equip gear to legs & feet slots */ - BodyDisallowLegsFeet = 21, + //BodyDisallowLegsFeet = 21, }; enum InventoryType : uint16_t @@ -226,8 +228,8 @@ namespace Sapphire::Common ArmoryWaist = 3204, ArmoryLegs = 3205, ArmoryFeet = 3206, - ArmoryNeck = 3207, - ArmoryEar = 3208, + ArmoryEar = 3207, + ArmoryNeck = 3208, ArmoryWrist = 3209, ArmoryRing = 3300, diff --git a/src/world/Actor/PlayerInventory.cpp b/src/world/Actor/PlayerInventory.cpp index 5f597444..06ea2cfb 100644 --- a/src/world/Actor/PlayerInventory.cpp +++ b/src/world/Actor/PlayerInventory.cpp @@ -548,7 +548,7 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( ItemPtr itemToAdd, bool sil // add the related armoury bag to the applicable bags and try and fill a free slot there before falling back to regular inventory if( itemInfo->isEquippable && getEquipDisplayFlags() & StoreNewItemsInArmouryChest ) { - auto bag = World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( itemInfo->equipSlotCategory ); + auto bag = World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( static_cast< Common::EquipSlotCategory >( itemInfo->equipSlotCategory ) ); bags.insert( bags.begin(), bag ); } @@ -802,7 +802,7 @@ void Sapphire::Entity::Player::swapItem( uint16_t fromInventoryId, uint8_t fromS && !World::Manager::ItemMgr::isArmory( fromInventoryId ) ) { updateContainer( fromInventoryId, fromSlotId, nullptr ); - fromInventoryId = World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( toSlot ); + fromInventoryId = World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( static_cast< Common::EquipSlotCategory >( toSlot ) ); fromSlotId = static_cast < uint8_t >( m_storageMap[ fromInventoryId ]->getFreeSlot() ); } diff --git a/src/world/Manager/ItemMgr.cpp b/src/world/Manager/ItemMgr.cpp index a28cec61..3c08d82d 100644 --- a/src/world/Manager/ItemMgr.cpp +++ b/src/world/Manager/ItemMgr.cpp @@ -27,56 +27,56 @@ bool Sapphire::World::Manager::ItemMgr::isArmory( uint16_t containerId ) } -uint16_t Sapphire::World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( uint8_t slotId ) +uint16_t Sapphire::World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( Common::EquipSlotCategory slot ) { - switch( slotId ) + switch( slot ) { - case Common::CharaHead: + case Common::EquipSlotCategory::CharaHead: return Common::ArmoryHead; - case Common::CharaBody: - case Common::BodyDisallowHead: - case Common::BodyDisallowHandsLegsFeet: - case Common::BodyDisallowAll: - case Common::BodyDisallowHands: - case Common::BodyDisallowLegsFeet: + case Common::EquipSlotCategory::CharaBody: + //case Common::EquipSlotCategory::BodyDisallowHead: + //case Common::EquipSlotCategory::BodyDisallowHandsLegsFeet: + //case Common::EquipSlotCategory::BodyDisallowAll: + //case Common::EquipSlotCategory::BodyDisallowHands: + //case Common::EquipSlotCategory::BodyDisallowLegsFeet: return Common::ArmoryBody; - case Common::CharaEars: + case Common::EquipSlotCategory::CharaEars: return Common::ArmoryEar; - case Common::CharaFeet: + case Common::EquipSlotCategory::CharaFeet: return Common::ArmoryFeet; - case Common::CharaHands: + case Common::EquipSlotCategory::CharaHands: return Common::ArmoryHand; - case Common::CharaLegs: - case Common::LegsDisallowFeet: + case Common::EquipSlotCategory::CharaLegs: + //case Common::EquipSlotCategory::LegsDisallowFeet: return Common::ArmoryLegs; - case Common::CharaMainHand: - case Common::MainTwoHandedWeapon: - case Common::MainOrOffHand: + case Common::EquipSlotCategory::CharaMainHand: + //case Common::EquipSlotCategory::MainTwoHandedWeapon: + //case Common::EquipSlotCategory::MainOrOffHand: return Common::ArmoryMain; - case Common::CharaOffHand: + case Common::EquipSlotCategory::CharaOffHand: return Common::ArmoryOff; - case Common::CharaRing: + case Common::EquipSlotCategory::CharaRing: return Common::ArmoryRing; - case Common::CharaWaist: + case Common::EquipSlotCategory::CharaWaist: return Common::ArmoryWaist; - case Common::CharaWrist: + case Common::EquipSlotCategory::CharaWrist: return Common::ArmoryWrist; - case Common::CharaNeck: + case Common::EquipSlotCategory::CharaNeck: return Common::ArmoryNeck; - case Common::CharaSoulCrystal: + case Common::EquipSlotCategory::CharaSoulCrystal: return Common::ArmorySoulCrystal; default: diff --git a/src/world/Manager/ItemMgr.h b/src/world/Manager/ItemMgr.h index b24c56e9..6208cf94 100644 --- a/src/world/Manager/ItemMgr.h +++ b/src/world/Manager/ItemMgr.h @@ -20,7 +20,7 @@ namespace Sapphire::World::Manager static bool isOneHandedWeapon( Common::ItemUICategory weaponCategory ); static bool isArmory( uint16_t containerId ); static bool isEquipment( uint16_t containerId ); - static uint16_t getCharaEquipSlotCategoryToArmoryId( uint8_t slotId ); + static uint16_t getCharaEquipSlotCategoryToArmoryId( Common::EquipSlotCategory slot ); static Common::ContainerType getContainerType( uint32_t containerId ); };