1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 14:37:44 +00:00
sapphire/src/servers/sapphire_zone/Inventory/ItemContainer.cpp

98 lines
2 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>
2017-08-08 13:53:47 +02:00
#include "Actor/Player.h"
2017-08-08 13:53:47 +02:00
#include "Item.h"
#include "Framework.h"
#include "Forwards.h"
#include "ItemContainer.h"
2017-08-08 13:53:47 +02:00
2018-03-09 00:06:44 +01:00
extern Core::Framework g_fw;
2017-08-08 13:53:47 +02:00
Core::ItemContainer::ItemContainer( uint16_t locationId ) :
m_id( locationId ),
m_size( 35 )
2017-08-08 13:53:47 +02:00
{
}
Core::ItemContainer::~ItemContainer()
{
}
uint16_t Core::ItemContainer::getId() const
{
return m_id;
}
uint8_t Core::ItemContainer::getEntryCount() const
{
return static_cast< uint8_t >( m_itemMap.size() );
}
void Core::ItemContainer::removeItem( uint8_t slotId )
{
2018-03-09 00:06:44 +01:00
auto pLog = g_fw.get< Logger >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
2017-08-08 13:53:47 +02:00
ItemMap::iterator it = m_itemMap.find( slotId );
if( it != m_itemMap.end() )
{
2018-03-09 00:06:44 +01:00
pDb->execute( "DELETE FROM charaglobalitem WHERE itemId = " + std::to_string( it->second->getUId() ) );
2017-08-08 13:53:47 +02:00
m_itemMap.erase( it );
2018-03-09 00:06:44 +01:00
pLog->debug( "Dropped item from slot " + std::to_string( slotId ) );
2017-08-08 13:53:47 +02:00
}
else
{
2018-03-09 00:06:44 +01:00
pLog->debug( "Item could not be dropped from slot " + std::to_string( slotId ) );
2017-08-08 13:53:47 +02:00
}
}
Core::ItemMap & Core::ItemContainer::getItemMap()
{
return m_itemMap;
}
const Core::ItemMap & Core::ItemContainer::getItemMap() const
{
return m_itemMap;
}
int16_t Core::ItemContainer::getFreeSlot()
{
for( uint8_t slotId = 0; slotId < m_size; slotId++ )
2017-08-08 13:53:47 +02:00
{
ItemMap::iterator it = m_itemMap.find( slotId );
if( it == m_itemMap.end() ||
it->second == nullptr )
return slotId;
}
return -1;
}
Core::ItemPtr Core::ItemContainer::getItem( uint8_t slotId )
{
if( ( slotId > m_size ) || ( slotId == -1 ) )
{
2018-03-09 00:06:44 +01:00
auto pLog = g_fw.get< Logger >();
pLog->error( "Slot out of range " + std::to_string( slotId ) );
2017-08-08 13:53:47 +02:00
return nullptr;
}
return m_itemMap[slotId];
}
void Core::ItemContainer::setItem( uint8_t slotId, ItemPtr pItem )
2017-08-08 13:53:47 +02:00
{
if( ( slotId > m_size ) )
return;
m_itemMap[slotId] = pItem;
}