1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-01 08:27:46 +00:00

fix bonus stats being unset on login;

This commit is contained in:
Alice Ogeda 2023-02-10 17:14:09 -03:00
parent 4b4ea95aae
commit 2ae6600a03
3 changed files with 38 additions and 24 deletions

View file

@ -317,6 +317,8 @@ void Player::removeOnlineStatus( const std::vector< Common::OnlineStatus >& stat
void Player::calculateStats() void Player::calculateStats()
{ {
calculateBonusStats();
uint8_t tribe = getLookAt( Common::CharaLook::Tribe ); uint8_t tribe = getLookAt( Common::CharaLook::Tribe );
uint8_t level = getLevel(); uint8_t level = getLevel();
auto job = static_cast< uint8_t >( getClass() ); auto job = static_cast< uint8_t >( getClass() );

View file

@ -741,6 +741,10 @@ namespace Sapphire::Entity
/*! calculate and return player ilvl based off equipped gear */ /*! calculate and return player ilvl based off equipped gear */
uint16_t calculateEquippedGearItemLevel(); uint16_t calculateEquippedGearItemLevel();
/*! calculate bonus stats from gear */
void calculateBonusStats();
ItemPtr getEquippedWeapon(); ItemPtr getEquippedWeapon();
/*! return the current amount of currency of type */ /*! return the current amount of currency of type */

View file

@ -224,18 +224,6 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item&
updateModels( 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(); calculateStats();
if( sendUpdate ) if( sendUpdate )
{ {
@ -256,18 +244,6 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite
if ( equipSlotId == SoulCrystal ) if ( equipSlotId == SoulCrystal )
unequipSoulCrystal(); 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(); calculateStats();
if( sendUpdate ) if( sendUpdate )
@ -955,6 +931,38 @@ uint16_t Sapphire::Entity::Player::calculateEquippedGearItemLevel()
return ilvl; 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() Sapphire::ItemPtr Sapphire::Entity::Player::getEquippedWeapon()
{ {
return m_storageMap[ GearSet0 ]->getItem( GearSetSlot::MainHand ); return m_storageMap[ GearSet0 ]->getItem( GearSetSlot::MainHand );