1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-06 10:47:45 +00:00
sapphire/src/world/Inventory/ItemContainer.cpp

127 lines
2.6 KiB
C++
Raw Normal View History

2018-03-06 22:22:19 +01:00
#include <Common.h>
#include <Logging/Logger.h>
#include <Database/DatabaseDef.h>
2020-03-01 01:00:57 +11:00
#include <Service.h>
2017-08-08 13:53:47 +02:00
#include "Actor/Player.h"
2017-08-08 13:53:47 +02:00
#include "Item.h"
#include "Forwards.h"
#include "ItemContainer.h"
2017-08-08 13:53:47 +02:00
Sapphire::ItemContainer::ItemContainer( uint16_t storageId, uint8_t maxSize, const std::string& tableName,
2020-03-01 01:00:57 +11:00
bool isMultiStorage, bool isPersistentStorage ) :
m_id( storageId ),
m_size( maxSize ),
m_tableName( tableName ),
m_bMultiStorage( isMultiStorage ),
m_isPersistentStorage( isPersistentStorage )
2017-08-08 13:53:47 +02:00
{
}
Sapphire::ItemContainer::~ItemContainer()
2017-08-08 13:53:47 +02:00
{
}
uint16_t Sapphire::ItemContainer::getId() const
2017-08-08 13:53:47 +02:00
{
return m_id;
2017-08-08 13:53:47 +02:00
}
uint8_t Sapphire::ItemContainer::getEntryCount() const
2017-08-08 13:53:47 +02:00
{
return static_cast< uint8_t >( m_itemMap.size() );
2017-08-08 13:53:47 +02:00
}
void Sapphire::ItemContainer::removeItem( uint8_t slotId, bool removeFromDb )
2017-08-08 13:53:47 +02:00
{
2020-03-01 01:00:57 +11:00
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto it = m_itemMap.find( slotId );
if( it != m_itemMap.end() )
{
if( m_isPersistentStorage && removeFromDb )
2020-03-01 01:00:57 +11:00
db.execute( "DELETE FROM charaglobalitem WHERE itemId = " + std::to_string( it->second->getUId() ) );
m_itemMap.erase( it );
Logger::debug( "Dropped item from slot {0}", slotId );
}
else
{
Logger::debug( "Item could not be dropped from slot {0}", slotId );
}
2017-08-08 13:53:47 +02:00
}
Sapphire::ItemMap& Sapphire::ItemContainer::getItemMap()
2017-08-08 13:53:47 +02:00
{
return m_itemMap;
2017-08-08 13:53:47 +02:00
}
const Sapphire::ItemMap& Sapphire::ItemContainer::getItemMap() const
2017-08-08 13:53:47 +02:00
{
return m_itemMap;
2017-08-08 13:53:47 +02:00
}
int8_t Sapphire::ItemContainer::getFreeSlot()
2017-08-08 13:53:47 +02:00
{
for( uint8_t slotId = 0; slotId < m_size; slotId++ )
{
ItemMap::iterator it = m_itemMap.find( slotId );
if( it == m_itemMap.end() ||
it->second == nullptr )
return (int8_t)slotId;
}
return -1;
2017-08-08 13:53:47 +02:00
}
Sapphire::ItemPtr Sapphire::ItemContainer::getItem( uint8_t slotId )
2017-08-08 13:53:47 +02:00
{
if( ( slotId > m_size ) )
{
Logger::error( "Slot out of range {0}", slotId );
return nullptr;
}
if( m_itemMap.find( slotId ) == m_itemMap.end() )
return nullptr;
2017-08-08 13:53:47 +02:00
return m_itemMap[ slotId ];
2017-08-08 13:53:47 +02:00
}
void Sapphire::ItemContainer::setItem( uint8_t slotId, ItemPtr pItem )
2017-08-08 13:53:47 +02:00
{
if( slotId > m_size )
{
Logger::error( "Slot out of range {0}", slotId );
return;
}
2017-08-08 13:53:47 +02:00
m_itemMap[ slotId ] = pItem;
2017-08-08 13:53:47 +02:00
}
uint8_t Sapphire::ItemContainer::getMaxSize() const
{
return m_size;
}
std::string Sapphire::ItemContainer::getTableName() const
{
return m_tableName;
}
bool Sapphire::ItemContainer::isMultiStorage() const
{
return m_bMultiStorage;
}
bool Sapphire::ItemContainer::isPersistentStorage() const
{
2018-12-29 13:05:13 +11:00
return m_isPersistentStorage;
}