mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 00:27:44 +00:00
fix bonus stats being unset on login;
This commit is contained in:
parent
4b4ea95aae
commit
2ae6600a03
3 changed files with 38 additions and 24 deletions
|
@ -317,6 +317,8 @@ void Player::removeOnlineStatus( const std::vector< Common::OnlineStatus >& stat
|
|||
|
||||
void Player::calculateStats()
|
||||
{
|
||||
calculateBonusStats();
|
||||
|
||||
uint8_t tribe = getLookAt( Common::CharaLook::Tribe );
|
||||
uint8_t level = getLevel();
|
||||
auto job = static_cast< uint8_t >( getClass() );
|
||||
|
|
|
@ -741,6 +741,10 @@ namespace Sapphire::Entity
|
|||
/*! calculate and return player ilvl based off equipped gear */
|
||||
uint16_t calculateEquippedGearItemLevel();
|
||||
|
||||
|
||||
/*! calculate bonus stats from gear */
|
||||
void calculateBonusStats();
|
||||
|
||||
ItemPtr getEquippedWeapon();
|
||||
|
||||
/*! return the current amount of currency of type */
|
||||
|
|
|
@ -224,18 +224,6 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item&
|
|||
|
||||
updateModels( equipSlotId, item );
|
||||
|
||||
auto baseParams = item.getBaseParams();
|
||||
for( auto i = 0; i < 6; ++i )
|
||||
{
|
||||
auto itemBaseParam = baseParams[ i ].baseParam;
|
||||
auto itemBaseVal = baseParams[ i ].value;
|
||||
if( itemBaseParam != static_cast< uint8_t >( Common::BaseParam::None ) )
|
||||
m_bonusStats[ itemBaseParam ] += itemBaseVal;
|
||||
}
|
||||
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::Defense ) ] += item.getDefense();
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::MagicDefense ) ] += item.getDefenseMag();
|
||||
|
||||
calculateStats();
|
||||
if( sendUpdate )
|
||||
{
|
||||
|
@ -256,18 +244,6 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite
|
|||
if ( equipSlotId == SoulCrystal )
|
||||
unequipSoulCrystal();
|
||||
|
||||
auto baseParams = item.getBaseParams();
|
||||
for( auto i = 0; i < 6; ++i )
|
||||
{
|
||||
auto itemBaseParam = baseParams[ i ].baseParam;
|
||||
auto itemBaseVal = baseParams[ i ].value;
|
||||
if( itemBaseParam != static_cast< uint8_t >( Common::BaseParam::None ) )
|
||||
m_bonusStats[ itemBaseParam ] -= itemBaseVal;
|
||||
}
|
||||
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::Defense ) ] -= item.getDefense();
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::MagicDefense ) ] -= item.getDefenseMag();
|
||||
|
||||
calculateStats();
|
||||
|
||||
if( sendUpdate )
|
||||
|
@ -955,6 +931,38 @@ uint16_t Sapphire::Entity::Player::calculateEquippedGearItemLevel()
|
|||
return ilvl;
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Player::calculateBonusStats()
|
||||
{
|
||||
m_bonusStats.fill( 0 );
|
||||
|
||||
auto gearSetMap = m_storageMap[ GearSet0 ]->getItemMap();
|
||||
|
||||
auto it = gearSetMap.begin();
|
||||
|
||||
while( it != gearSetMap.end() )
|
||||
{
|
||||
auto pItem = it->second;
|
||||
|
||||
if( pItem && pItem->getCategory() != Common::ItemUICategory::SoulCrystal )
|
||||
{
|
||||
auto baseParams = pItem->getBaseParams();
|
||||
for( auto i = 0; i < 6; ++i )
|
||||
{
|
||||
auto itemBaseParam = baseParams[ i ].baseParam;
|
||||
auto itemBaseVal = baseParams[ i ].value;
|
||||
if( itemBaseParam != static_cast< uint8_t >( Common::BaseParam::None ) )
|
||||
m_bonusStats[ itemBaseParam ] += itemBaseVal;
|
||||
}
|
||||
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::Defense ) ] += pItem->getDefense();
|
||||
m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::MagicDefense ) ] += pItem->getDefenseMag();
|
||||
}
|
||||
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Sapphire::ItemPtr Sapphire::Entity::Player::getEquippedWeapon()
|
||||
{
|
||||
return m_storageMap[ GearSet0 ]->getItem( GearSetSlot::MainHand );
|
||||
|
|
Loading…
Add table
Reference in a new issue