mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-06 02:37:47 +00:00
Calculate and display character stats correctly
This commit is contained in:
parent
704a9df6ed
commit
986a692fcd
2 changed files with 85 additions and 91 deletions
|
@ -254,7 +254,6 @@ void Sapphire::Entity::Player::calculateStats()
|
|||
auto tribeInfo = pExdData->get< Sapphire::Data::Tribe >( tribe );
|
||||
auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( level );
|
||||
|
||||
// TODO: put formula somewhere else...
|
||||
float base = Math::CalcStats::calculateBaseStat( getAsPlayer() );
|
||||
|
||||
m_baseStats.str = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierStrength ) / 100 ) +
|
||||
|
@ -270,6 +269,8 @@ void Sapphire::Entity::Player::calculateStats()
|
|||
m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) +
|
||||
tribeInfo->pIE );
|
||||
|
||||
m_baseStats.determination = static_cast< uint32_t >( base );
|
||||
m_baseStats.pie = static_cast< uint32_t >( base );
|
||||
m_baseStats.skillSpeed = paramGrowthInfo->baseSpeed;
|
||||
m_baseStats.spellSpeed = paramGrowthInfo->baseSpeed;
|
||||
m_baseStats.accuracy = paramGrowthInfo->baseSpeed;
|
||||
|
@ -278,6 +279,10 @@ void Sapphire::Entity::Player::calculateStats()
|
|||
m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed;
|
||||
m_baseStats.tenacity = paramGrowthInfo->baseSpeed;
|
||||
|
||||
m_baseStats.attack = m_baseStats.str;
|
||||
m_baseStats.attackPotMagic = m_baseStats.inte;
|
||||
m_baseStats.healingPotMagic = m_baseStats.mnd;
|
||||
|
||||
m_baseStats.max_mp = Math::CalcStats::calculateMaxMp( getAsPlayer(), m_pFw );
|
||||
|
||||
m_baseStats.max_hp = Math::CalcStats::calculateMaxHp( getAsPlayer(), m_pFw );
|
||||
|
@ -288,9 +293,6 @@ void Sapphire::Entity::Player::calculateStats()
|
|||
if( m_hp > m_baseStats.max_hp )
|
||||
m_hp = m_baseStats.max_hp;
|
||||
|
||||
|
||||
m_baseStats.determination = static_cast< uint32_t >( base );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -327,10 +329,10 @@ void Sapphire::Entity::Player::sendStats()
|
|||
statPacket->data().spellSpeed1 = m_baseStats.spellSpeed;
|
||||
statPacket->data().spellSpeedMod = 100;
|
||||
|
||||
statPacket->data().criticalHitRate = m_baseStats.spellSpeed;
|
||||
statPacket->data().defense = m_baseStats.spellSpeed;
|
||||
statPacket->data().magicDefense = m_baseStats.spellSpeed;
|
||||
statPacket->data().attack = m_baseStats.spellSpeed;
|
||||
statPacket->data().criticalHitRate = m_baseStats.critHitRate;
|
||||
statPacket->data().defense = m_baseStats.defense;
|
||||
statPacket->data().magicDefense = m_baseStats.magicDefense;
|
||||
statPacket->data().tenacity = m_baseStats.tenacity;
|
||||
|
||||
queuePacket( statPacket );
|
||||
}
|
||||
|
|
|
@ -13,12 +13,12 @@
|
|||
using namespace Sapphire::Math;
|
||||
using namespace Sapphire::Entity;
|
||||
|
||||
const int levelTable[70][8] =
|
||||
const int levelTable[70][7] =
|
||||
{
|
||||
// PIE, MP, MAIN,SUB,DIV,HP,ELMT,THREAT
|
||||
{ 50, 104, 20, 56, 56, 0, 52, 2 },
|
||||
{ 55, 114, 21, 57, 57, 0, 54, 2 },
|
||||
{ 60, 123, 22, 60, 60, 0, 56, 3 },
|
||||
{ 50, 104, 20, 56, 56, 0, 52 },
|
||||
{ 55, 114, 21, 57, 57, 0, 54 },
|
||||
{ 60, 123, 22, 60, 60, 0, 56 },
|
||||
{ 65, 133, 24, 62, 62, 0, 58 },
|
||||
{ 70, 142, 26, 65, 65, 0, 60 },
|
||||
{ 75, 152, 27, 68, 68, 0, 62 },
|
||||
|
@ -87,6 +87,7 @@ const int levelTable[70][8] =
|
|||
{ 890, 11450, 284, 363, 1978, 3500, 294 },
|
||||
{ 890, 12000, 292, 364, 2170, 3600, 295 }
|
||||
};
|
||||
|
||||
/*
|
||||
Class used for battle-related formulas and calculations.
|
||||
Big thanks to the Theoryjerks group!
|
||||
|
@ -111,19 +112,10 @@ float CalcStats::calculateBaseStat( PlayerPtr pPlayer )
|
|||
float base = 0.0f;
|
||||
uint8_t level = pPlayer->getLevel();
|
||||
|
||||
// SB Base Stat Formula (Aligned)
|
||||
if( level > 60 )
|
||||
{
|
||||
base = static_cast< float >( ( ( ( level == 61 ) ? 224 : 220 ) + ( level - 61 ) * 8 ) );
|
||||
}
|
||||
// HW Base Stat Formula (Aligned)
|
||||
else if( level > 50 )
|
||||
base = 1.63f * level + 121.02f;
|
||||
// ARR Base Stat Formula (Off by one in several cases)
|
||||
else
|
||||
base = 0.052602f * ( level * level ) + ( 1.0179f * level ) + 19.6f;
|
||||
if( level > 70 )
|
||||
level = 70;
|
||||
|
||||
return base;
|
||||
return static_cast< float >( levelTable[level][2] );
|
||||
}
|
||||
|
||||
// Leggerless' HP Formula
|
||||
|
|
Loading…
Add table
Reference in a new issue