From 8cacf35e4bfcc6a127198b9a855ceb763e6b1e92 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 21 Mar 2019 18:53:32 +0100 Subject: [PATCH] Pieity bonus applies to mp and vitality to hp now --- src/world/Actor/Chara.cpp | 5 +++++ src/world/Actor/Chara.h | 4 +++- src/world/Actor/PlayerInventory.cpp | 10 +++++++++- src/world/Math/CalcStats.cpp | 7 +++++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index 2a7f7869..76033015 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -386,6 +386,11 @@ void Sapphire::Entity::Chara::setCurrentAction( Sapphire::Action::ActionPtr pAct m_pCurrentAction = std::move( pAction ); } +uint32_t Sapphire::Entity::Chara::getBonusStat( Common::BaseParam bonus ) const +{ + return m_bonusStats[ static_cast< uint8_t >( bonus ) ]; +} + /*! Autoattack prototype implementation TODO: move the check if the autoAttack can be performed to the callee diff --git a/src/world/Actor/Chara.h b/src/world/Actor/Chara.h index 2b58c5f0..62fdc0ca 100644 --- a/src/world/Actor/Chara.h +++ b/src/world/Actor/Chara.h @@ -66,7 +66,7 @@ namespace Sapphire::Entity } m_baseStats; // array for bonuses, 80 to have some spare room. - uint32_t m_bonusStats[80]; + uint32_t m_bonusStats[ 80 ]; protected: char m_name[34]; @@ -243,6 +243,8 @@ namespace Sapphire::Entity void setCurrentAction( Action::ActionPtr pAction ); + uint32_t getBonusStat( Common::BaseParam bonus ) const; + }; } diff --git a/src/world/Actor/PlayerInventory.cpp b/src/world/Actor/PlayerInventory.cpp index 8ed41a04..f24cce2d 100644 --- a/src/world/Actor/PlayerInventory.cpp +++ b/src/world/Actor/PlayerInventory.cpp @@ -239,7 +239,12 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, ItemP m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::Defense ) ] += pItem->getDefense(); m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::MagicDefense ) ] += pItem->getDefenseMag(); - sendStats(); + calculateStats(); + if( sendUpdate ) + { + sendStats(); + sendStatusUpdate(); + } } @@ -270,9 +275,12 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::Defense ) ] -= pItem->getDefense(); m_bonusStats[ static_cast< uint8_t >( Common::BaseParam::MagicDefense ) ] -= pItem->getDefenseMag(); + calculateStats(); + if( sendUpdate ) { sendStats(); + sendStatusUpdate(); } } diff --git a/src/world/Math/CalcStats.cpp b/src/world/Math/CalcStats.cpp index 77f306b8..e86c080e 100644 --- a/src/world/Math/CalcStats.cpp +++ b/src/world/Math/CalcStats.cpp @@ -136,8 +136,9 @@ uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pF uint8_t level = pPlayer->getLevel(); + auto vitMod = pPlayer->getBonusStat( Common::BaseParam::Vitality ); float baseStat = calculateBaseStat( pPlayer ); - uint16_t vitStat = pPlayer->getStats().vit; + uint16_t vitStat = pPlayer->getStats().vit + static_cast< uint16_t >( vitMod ); uint16_t hpMod = paramGrowthInfo->hpModifier; uint16_t jobModHp = classInfo->modifierHitPoints; float approxBaseHp = 0.0f; // Read above @@ -169,8 +170,10 @@ uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pF if( !classInfo || !paramGrowthInfo ) return 0; + auto pieMod = pPlayer->getBonusStat( Common::BaseParam::Piety ); + float baseStat = calculateBaseStat( pPlayer ); - uint16_t piety = pPlayer->getStats().pie; + uint16_t piety = pPlayer->getStats().pie + pieMod; uint16_t pietyScalar = paramGrowthInfo->mpModifier; uint16_t jobModMp = classInfo->modifierManaPoints; uint16_t baseMp = paramGrowthInfo->mpModifier;