1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-09 20:27:45 +00:00
sapphire/src/world/Inventory/Item.cpp
2023-02-12 14:10:51 +01:00

244 lines
4.6 KiB
C++

#include <Common.h>
#include <Exd/ExdData.h>
#include <CommonGen.h>
#include <Service.h>
#include "Item.h"
Sapphire::Item::Item( uint64_t uId, uint32_t catalogId, bool isHq ) :
m_id( catalogId ),
m_uId( uId ),
m_isHq( isHq ),
m_stain( 0 ),
m_durability( 30000 ),
m_spiritBond( 0 ),
m_reservedFlag( 0 ),
m_pattern( 0 ),
m_glamModel1( 0 ),
m_glamModel2( 0 )
{
auto& exdData = Common::Service< Data::ExdData >::ref();
auto itemInfo = exdData.getRow< Excel::Item >( catalogId );
m_delayMs = itemInfo->data().AttackInterval;
m_physicalDmg = itemInfo->data().Damage;
m_magicalDmg = itemInfo->data().MagicDamage;
m_model1 = itemInfo->data().ModelId;
m_model2 = itemInfo->data().SubModelId;
m_weaponDmg = ( m_physicalDmg != 0 ) ? m_physicalDmg : m_magicalDmg;
m_autoAttackDmg = static_cast< float >( m_weaponDmg * m_delayMs ) / 3000;
m_category = static_cast< Common::ItemUICategory >( itemInfo->data().UICategory );
m_slot = itemInfo->data().Slot;
m_itemLevel = itemInfo->data().Level;
m_maxStackSize = itemInfo->data().StackMax;
// EXD TODO: Not sure what this maps to
m_additionalData = itemInfo->data().CategoryArg;
m_blockRate = itemInfo->data().ShieldBlockRate;
m_block = itemInfo->data().ShieldRate;
m_defense = itemInfo->data().Defense;
m_defenseMag = itemInfo->data().MagicDefense;
for( int i = 0; i < 6; ++i )
{
m_baseParam[i].baseParam = itemInfo->data().BonusType[ i ];
m_baseParam[i].value = itemInfo->data().BonusValue[ i ];
}
}
uint16_t Sapphire::Item::getDefense() const
{
return m_defense;
}
uint16_t Sapphire::Item::getDefenseMag() const
{
return m_defenseMag;
}
float Sapphire::Item::getAutoAttackDmg() const
{
return m_autoAttackDmg;
}
uint16_t Sapphire::Item::getDelay() const
{
return m_delayMs;
}
uint16_t Sapphire::Item::getPhysicalDmg() const
{
return m_physicalDmg;
}
uint16_t Sapphire::Item::getMagicalDmg() const
{
return m_magicalDmg;
}
uint16_t Sapphire::Item::getItemLevel() const
{
return m_itemLevel;
}
uint8_t Sapphire::Item::getSlot() const
{
return m_slot;
}
uint16_t Sapphire::Item::getWeaponDmg() const
{
return m_weaponDmg;
}
bool Sapphire::Item::isWeapon() const
{
return ( m_weaponDmg != 0 );
}
uint32_t Sapphire::Item::getId() const
{
return m_id;
}
void Sapphire::Item::setId( uint32_t id )
{
m_id = id;
}
uint64_t Sapphire::Item::getUId() const
{
return m_uId;
}
void Sapphire::Item::setUId( uint64_t id )
{
m_uId = id;
}
void Sapphire::Item::setStackSize( uint32_t size )
{
m_stackSize = std::min< uint32_t >( size, m_maxStackSize );
}
uint32_t Sapphire::Item::getStackSize() const
{
return m_stackSize;
}
void Sapphire::Item::setCategory( Common::ItemUICategory categoryId )
{
m_category = categoryId;
}
Sapphire::Common::ItemUICategory Sapphire::Item::getCategory() const
{
return m_category;
}
void Sapphire::Item::setGlamModelIds()
{
auto& exdData = Common::Service< Data::ExdData >::ref();
if( m_pattern != 0 )
{
auto itemInfo = exdData.getRow< Excel::Item >( m_pattern );
m_glamModel1 = itemInfo->data().ModelId;
m_glamModel2 = itemInfo->data().SubModelId;
}
else
{
m_glamModel1 = 0;
m_glamModel2 = 0;
}
}
void Sapphire::Item::setModelIds( uint64_t model1, uint64_t model2 )
{
m_model1 = model1;
m_model2 = model2;
}
uint64_t Sapphire::Item::getModelId1() const
{
return m_pattern != 0 ? m_glamModel1 : m_model1;
}
uint64_t Sapphire::Item::getModelId2() const
{
return m_pattern != 0 ? m_glamModel2 : m_model2;
}
bool Sapphire::Item::isHq() const
{
return m_isHq;
}
void Sapphire::Item::setHq( bool isHq )
{
m_isHq = isHq;
}
uint32_t Sapphire::Item::getMaxStackSize() const
{
return m_maxStackSize;
}
uint16_t Sapphire::Item::getDurability() const
{
return m_durability;
}
void Sapphire::Item::setDurability( uint16_t durability )
{
m_durability = durability;
}
uint16_t Sapphire::Item::getStain() const
{
return m_stain;
}
void Sapphire::Item::setStain( uint16_t stain )
{
m_stain = stain;
}
uint32_t Sapphire::Item::getPattern() const
{
return m_pattern;
}
void Sapphire::Item::setPattern( uint32_t pattern )
{
m_pattern = pattern;
}
uint32_t Sapphire::Item::getAdditionalData() const
{
return m_additionalData;
}
uint16_t Sapphire::Item::getSpiritbond() const
{
return m_spiritBond;
}
void Sapphire::Item::setSpiritbond( uint16_t spiritbond )
{
m_spiritBond = spiritbond;
}
uint32_t Sapphire::Item::getReservedFlag() const
{
return m_reservedFlag;
}
void Sapphire::Item::setReservedFlag( uint32_t flag )
{
m_reservedFlag = flag;
}
Sapphire::Item::BaseParamStruct* Sapphire::Item::getBaseParams()
{
return m_baseParam;
}