diff --git a/src/servers/Server_Zone/Actor/PlayerInventory.cpp b/src/servers/Server_Zone/Actor/PlayerInventory.cpp index 3b516c19..07f1172a 100644 --- a/src/servers/Server_Zone/Actor/PlayerInventory.cpp +++ b/src/servers/Server_Zone/Actor/PlayerInventory.cpp @@ -86,7 +86,7 @@ void Core::Entity::Player::equipWeapon( Core::ItemPtr pItem ) } // equip an item -void Core::Entity::Player::equipItem( Inventory::EquipSlot equipSlotId, Core::ItemPtr pItem, bool sendModel ) +void Core::Entity::Player::equipItem( Inventory::EquipSlot equipSlotId, Core::ItemPtr pItem, bool sendUpdate ) { //g_log.debug( "Equipping into slot " + std::to_string( equipSlotId ) ); @@ -118,11 +118,12 @@ void Core::Entity::Player::equipItem( Inventory::EquipSlot equipSlotId, Core::It } - if( sendModel ) + if( sendUpdate ) + { this->sendModel(); - - m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); - sendItemLevel(); + m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); + sendItemLevel(); + } } void Core::Entity::Player::unequipItem( Inventory::EquipSlot equipSlotId, ItemPtr pItem ) diff --git a/src/servers/Server_Zone/Inventory/Inventory.cpp b/src/servers/Server_Zone/Inventory/Inventory.cpp index ff97f6ae..45af7d61 100644 --- a/src/servers/Server_Zone/Inventory/Inventory.cpp +++ b/src/servers/Server_Zone/Inventory/Inventory.cpp @@ -833,20 +833,26 @@ uint16_t Core::Inventory::calculateEquippedGearItemLevel() { uint32_t iLvlResult = 0; - for ( uint16_t i = 0; i < sizeof( m_inventoryMap[GearSet0] ); i++ ) + auto gearSetMap = m_inventoryMap[GearSet0]->getItemMap(); + + auto it = gearSetMap.begin(); + + while ( it != gearSetMap.end() ) { - auto currItem = m_inventoryMap[GearSet0]->getItem( i ); + auto currItem = it->second; if ( currItem ) { - g_log.debug( std::to_string( currItem->getId() ) + " ilvl: " + std::to_string( currItem->getItemLevel() ) ); iLvlResult += currItem->getItemLevel(); - // If weapon isn't one-handed - if ( currItem->getCategory() != ItemCategory::CnjWep || - currItem->getCategory() != ItemCategory::ThmWep ) + // If item is weapon and isn't one-handed + if ( currItem->isWeapon() && + ( currItem->getCategory() != ItemCategory::CnjWep || + currItem->getCategory() != ItemCategory::ThmWep ) ) iLvlResult += currItem->getItemLevel(); } + + it++; } return boost::algorithm::clamp( iLvlResult / 12, 0, 9999 ); diff --git a/src/servers/Server_Zone/Inventory/Item.cpp b/src/servers/Server_Zone/Inventory/Item.cpp index b95d25e9..e66b414d 100644 --- a/src/servers/Server_Zone/Inventory/Item.cpp +++ b/src/servers/Server_Zone/Inventory/Item.cpp @@ -68,6 +68,11 @@ uint16_t Core::Item::getWeaponDmg() const return m_weaponDmg; } +bool Core::Item::isWeapon() const +{ + return (m_weaponDmg != 0); +} + uint32_t Core::Item::getId() const { return m_id; diff --git a/src/servers/Server_Zone/Inventory/Item.h b/src/servers/Server_Zone/Inventory/Item.h index a72cdfe9..ff33e1fa 100644 --- a/src/servers/Server_Zone/Inventory/Item.h +++ b/src/servers/Server_Zone/Inventory/Item.h @@ -48,6 +48,8 @@ public: uint16_t getWeaponDmg() const; + bool isWeapon() const; + float getAutoAttackDmg() const; uint16_t getItemLevel() const;