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:
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()
|
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() );
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
Loading…
Add table
Reference in a new issue