mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-06 10:47:45 +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 tribeInfo = pExdData->get< Sapphire::Data::Tribe >( tribe );
|
||||||
auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( level );
|
auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( level );
|
||||||
|
|
||||||
// TODO: put formula somewhere else...
|
|
||||||
float base = Math::CalcStats::calculateBaseStat( getAsPlayer() );
|
float base = Math::CalcStats::calculateBaseStat( getAsPlayer() );
|
||||||
|
|
||||||
m_baseStats.str = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierStrength ) / 100 ) +
|
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 ) +
|
m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) +
|
||||||
tribeInfo->pIE );
|
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.skillSpeed = paramGrowthInfo->baseSpeed;
|
||||||
m_baseStats.spellSpeed = paramGrowthInfo->baseSpeed;
|
m_baseStats.spellSpeed = paramGrowthInfo->baseSpeed;
|
||||||
m_baseStats.accuracy = paramGrowthInfo->baseSpeed;
|
m_baseStats.accuracy = paramGrowthInfo->baseSpeed;
|
||||||
|
@ -278,6 +279,10 @@ void Sapphire::Entity::Player::calculateStats()
|
||||||
m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed;
|
m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed;
|
||||||
m_baseStats.tenacity = 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_mp = Math::CalcStats::calculateMaxMp( getAsPlayer(), m_pFw );
|
||||||
|
|
||||||
m_baseStats.max_hp = Math::CalcStats::calculateMaxHp( 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 )
|
if( m_hp > m_baseStats.max_hp )
|
||||||
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().spellSpeed1 = m_baseStats.spellSpeed;
|
||||||
statPacket->data().spellSpeedMod = 100;
|
statPacket->data().spellSpeedMod = 100;
|
||||||
|
|
||||||
statPacket->data().criticalHitRate = m_baseStats.spellSpeed;
|
statPacket->data().criticalHitRate = m_baseStats.critHitRate;
|
||||||
statPacket->data().defense = m_baseStats.spellSpeed;
|
statPacket->data().defense = m_baseStats.defense;
|
||||||
statPacket->data().magicDefense = m_baseStats.spellSpeed;
|
statPacket->data().magicDefense = m_baseStats.magicDefense;
|
||||||
statPacket->data().attack = m_baseStats.spellSpeed;
|
statPacket->data().tenacity = m_baseStats.tenacity;
|
||||||
|
|
||||||
queuePacket( statPacket );
|
queuePacket( statPacket );
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
using namespace Sapphire::Math;
|
using namespace Sapphire::Math;
|
||||||
using namespace Sapphire::Entity;
|
using namespace Sapphire::Entity;
|
||||||
|
|
||||||
const int levelTable[70][8] =
|
const int levelTable[70][7] =
|
||||||
{
|
{
|
||||||
// PIE, MP, MAIN,SUB,DIV,HP,ELMT,THREAT
|
// PIE, MP, MAIN,SUB,DIV,HP,ELMT,THREAT
|
||||||
{ 50, 104, 20, 56, 56, 0, 52, 2 },
|
{ 50, 104, 20, 56, 56, 0, 52 },
|
||||||
{ 55, 114, 21, 57, 57, 0, 54, 2 },
|
{ 55, 114, 21, 57, 57, 0, 54 },
|
||||||
{ 60, 123, 22, 60, 60, 0, 56, 3 },
|
{ 60, 123, 22, 60, 60, 0, 56 },
|
||||||
{ 65, 133, 24, 62, 62, 0, 58 },
|
{ 65, 133, 24, 62, 62, 0, 58 },
|
||||||
{ 70, 142, 26, 65, 65, 0, 60 },
|
{ 70, 142, 26, 65, 65, 0, 60 },
|
||||||
{ 75, 152, 27, 68, 68, 0, 62 },
|
{ 75, 152, 27, 68, 68, 0, 62 },
|
||||||
|
@ -87,6 +87,7 @@ const int levelTable[70][8] =
|
||||||
{ 890, 11450, 284, 363, 1978, 3500, 294 },
|
{ 890, 11450, 284, 363, 1978, 3500, 294 },
|
||||||
{ 890, 12000, 292, 364, 2170, 3600, 295 }
|
{ 890, 12000, 292, 364, 2170, 3600, 295 }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class used for battle-related formulas and calculations.
|
Class used for battle-related formulas and calculations.
|
||||||
Big thanks to the Theoryjerks group!
|
Big thanks to the Theoryjerks group!
|
||||||
|
@ -111,19 +112,10 @@ float CalcStats::calculateBaseStat( PlayerPtr pPlayer )
|
||||||
float base = 0.0f;
|
float base = 0.0f;
|
||||||
uint8_t level = pPlayer->getLevel();
|
uint8_t level = pPlayer->getLevel();
|
||||||
|
|
||||||
// SB Base Stat Formula (Aligned)
|
if( level > 70 )
|
||||||
if( level > 60 )
|
level = 70;
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
return base;
|
return static_cast< float >( levelTable[level][2] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Leggerless' HP Formula
|
// Leggerless' HP Formula
|
||||||
|
|
Loading…
Add table
Reference in a new issue