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

245 lines
4.6 KiB
C++
Raw Normal View History

2018-03-06 22:22:19 +01:00
#include <Common.h>
#include <Exd/ExdData.h>
2018-06-30 12:49:34 +10:00
#include <CommonGen.h>
2020-03-01 01:00:57 +11:00
#include <Service.h>
2017-08-08 13:53:47 +02:00
#include "Item.h"
2020-03-01 01:00:57 +11:00
Sapphire::Item::Item( uint64_t uId, uint32_t catalogId, bool isHq ) :
m_id( catalogId ),
m_uId( uId ),
2018-09-01 00:00:19 +10:00
m_isHq( isHq ),
m_stain( 0 ),
2018-12-28 15:48:13 +11:00
m_durability( 30000 ),
m_spiritBond( 0 ),
2023-02-12 14:09:23 +01:00
m_reservedFlag( 0 ),
m_pattern( 0 ),
m_glamModel1( 0 ),
m_glamModel2( 0 )
2017-08-08 13:53:47 +02:00
{
auto& exdData = Common::Service< Data::ExdData >::ref();
2022-01-27 21:24:54 +01:00
auto itemInfo = exdData.getRow< Excel::Item >( catalogId );
2018-06-30 12:49:34 +10:00
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 );
2022-02-18 02:24:18 +01:00
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;
2017-08-08 13:53:47 +02:00
}
float Sapphire::Item::getAutoAttackDmg() const
{
return m_autoAttackDmg;
}
uint16_t Sapphire::Item::getDelay() const
2017-08-08 13:53:47 +02:00
{
return m_delayMs;
2017-08-08 13:53:47 +02:00
}
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;
}
2022-02-18 02:24:18 +01:00
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
2017-08-08 13:53:47 +02:00
{
return m_id;
2017-08-08 13:53:47 +02:00
}
void Sapphire::Item::setId( uint32_t id )
2017-08-08 13:53:47 +02:00
{
m_id = id;
2017-08-08 13:53:47 +02:00
}
uint64_t Sapphire::Item::getUId() const
2017-08-08 13:53:47 +02:00
{
return m_uId;
2017-08-08 13:53:47 +02:00
}
void Sapphire::Item::setUId( uint64_t id )
2017-08-08 13:53:47 +02:00
{
m_uId = id;
2017-08-08 13:53:47 +02:00
}
void Sapphire::Item::setStackSize( uint32_t size )
2017-08-08 13:53:47 +02:00
{
m_stackSize = std::min< uint32_t >( size, m_maxStackSize );
2017-08-08 13:53:47 +02:00
}
uint32_t Sapphire::Item::getStackSize() const
2017-08-08 13:53:47 +02:00
{
return m_stackSize;
2017-08-08 13:53:47 +02:00
}
void Sapphire::Item::setCategory( Common::ItemUICategory categoryId )
2017-08-08 13:53:47 +02:00
{
m_category = categoryId;
2017-08-08 13:53:47 +02:00
}
Sapphire::Common::ItemUICategory Sapphire::Item::getCategory() const
2017-08-08 13:53:47 +02:00
{
return m_category;
2017-08-08 13:53:47 +02:00
}
2023-02-09 20:56:26 +01:00
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 )
2017-08-08 13:53:47 +02:00
{
m_model1 = model1;
m_model2 = model2;
2017-08-08 13:53:47 +02:00
}
uint64_t Sapphire::Item::getModelId1() const
2017-08-08 13:53:47 +02:00
{
2023-02-09 20:56:26 +01:00
return m_pattern != 0 ? m_glamModel1 : m_model1;
2017-08-08 13:53:47 +02:00
}
uint64_t Sapphire::Item::getModelId2() const
2017-08-08 13:53:47 +02:00
{
2023-02-09 20:56:26 +01:00
return m_pattern != 0 ? m_glamModel2 : m_model2;
2017-08-08 13:53:47 +02:00
}
bool Sapphire::Item::isHq() const
2017-08-08 13:53:47 +02:00
{
return m_isHq;
2017-08-08 13:53:47 +02:00
}
void Sapphire::Item::setHq( bool isHq )
2017-08-08 13:53:47 +02:00
{
m_isHq = isHq;
2017-08-08 13:53:47 +02:00
}
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;
}
2018-12-25 23:43:39 +11:00
2023-02-09 20:56:26 +01:00
uint32_t Sapphire::Item::getPattern() const
{
return m_pattern;
}
void Sapphire::Item::setPattern( uint32_t pattern )
{
m_pattern = pattern;
}
2018-12-25 23:43:39 +11:00
uint32_t Sapphire::Item::getAdditionalData() const
{
return m_additionalData;
}
2018-12-28 15:48:13 +11:00
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;
}