mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 16:37:45 +00:00
hudparam fixes; int type fixes;
This commit is contained in:
parent
38c176c4b6
commit
735e2f73bd
7 changed files with 22 additions and 12 deletions
|
@ -774,6 +774,8 @@ uint32_t Sapphire::Entity::Chara::getBonusStat( Sapphire::Common::BaseParam base
|
||||||
auto index = static_cast< uint32_t >( baseParam );
|
auto index = static_cast< uint32_t >( baseParam );
|
||||||
assert( index < m_bonusStats.size() );
|
assert( index < m_bonusStats.size() );
|
||||||
|
|
||||||
|
if( isPlayer() )
|
||||||
|
auto val = m_bonusStats[ index ];
|
||||||
return m_bonusStats[ index ];
|
return m_bonusStats[ index ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
using ActorStatsArray = std::array< uint32_t, STAT_ARRAY_SIZE >;
|
using ActorStatsArray = std::array< uint32_t, STAT_ARRAY_SIZE >;
|
||||||
|
|
||||||
ActorStatsArray m_baseStats;
|
ActorStatsArray m_baseStats{ 0 };
|
||||||
ActorStatsArray m_bonusStats;
|
ActorStatsArray m_bonusStats{ 0 };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
char m_name[34];
|
char m_name[34];
|
||||||
|
|
|
@ -227,8 +227,10 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item&
|
||||||
auto baseParams = item.getBaseParams();
|
auto baseParams = item.getBaseParams();
|
||||||
for( auto i = 0; i < 6; ++i )
|
for( auto i = 0; i < 6; ++i )
|
||||||
{
|
{
|
||||||
if( baseParams[ i ].baseParam != static_cast< uint8_t >( Common::BaseParam::None ) )
|
auto itemBaseParam = baseParams[ i ].baseParam;
|
||||||
m_bonusStats[ baseParams[ i ].baseParam ] += baseParams[ i ].value;
|
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::Defense ) ] += item.getDefense();
|
||||||
|
@ -257,8 +259,10 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite
|
||||||
auto baseParams = item.getBaseParams();
|
auto baseParams = item.getBaseParams();
|
||||||
for( auto i = 0; i < 6; ++i )
|
for( auto i = 0; i < 6; ++i )
|
||||||
{
|
{
|
||||||
if( baseParams[ i ].baseParam != static_cast< uint8_t >( Common::BaseParam::None ) )
|
auto itemBaseParam = baseParams[ i ].baseParam;
|
||||||
m_bonusStats[ baseParams[ i ].baseParam ] -= baseParams[ i ].value;
|
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::Defense ) ] -= item.getDefense();
|
||||||
|
|
|
@ -167,7 +167,11 @@ void PlayerMgr::onPlayerStatusUpdate( Entity::Player& player )
|
||||||
|
|
||||||
void PlayerMgr::onPlayerHpMpTpChanged( Entity::Player& player )
|
void PlayerMgr::onPlayerHpMpTpChanged( Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto& server = Common::Service< World::WorldServer >::ref();
|
||||||
|
|
||||||
player.sendToInRangeSet( std::make_shared< UpdateHpMpTpPacket >( player ), true );
|
player.sendToInRangeSet( std::make_shared< UpdateHpMpTpPacket >( player ), true );
|
||||||
|
auto hudParamPacket = makeHudParam( player );
|
||||||
|
server.queueForPlayer( player.getCharacterId(), hudParamPacket );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onPlayerItemLevelUpdate( Entity::Player& player )
|
void PlayerMgr::onPlayerItemLevelUpdate( Entity::Player& player )
|
||||||
|
|
|
@ -117,7 +117,6 @@ void WarpMgr::finishWarp( Entity::Player& player )
|
||||||
server.queueForPlayer( player.getCharacterId(), zoneInPacket );
|
server.queueForPlayer( player.getCharacterId(), zoneInPacket );
|
||||||
|
|
||||||
playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas );
|
playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WarpMgr::requestPlayerTeleport( Entity::Player& player, uint16_t aetheryteId, uint8_t teleportType )
|
void WarpMgr::requestPlayerTeleport( Entity::Player& player, uint16_t aetheryteId, uint8_t teleportType )
|
||||||
|
|
|
@ -139,15 +139,16 @@ uint32_t CalcStats::calculateMaxHp( Player& player )
|
||||||
|
|
||||||
auto vitMod = player.getBonusStat( Common::BaseParam::Vitality );
|
auto vitMod = player.getBonusStat( Common::BaseParam::Vitality );
|
||||||
float baseStat = calculateBaseStat( player );
|
float baseStat = calculateBaseStat( player );
|
||||||
uint16_t vitStat = static_cast< uint16_t >( player.getStatValue( Common::BaseParam::Vitality ) ) + static_cast< uint16_t >( vitMod );
|
auto baseParamVit = player.getStatValue( Common::BaseParam::Vitality );
|
||||||
|
auto vitStat = player.getStatValue( Common::BaseParam::Vitality ) + vitMod;
|
||||||
uint16_t hpMod = paramGrowthInfo->data().ParamBase;
|
uint16_t hpMod = paramGrowthInfo->data().ParamBase;
|
||||||
uint16_t jobModHp = classInfo->data().Hp;
|
uint16_t jobModHp = classInfo->data().Hp;
|
||||||
float approxBaseHp = 0.0f; // Read above
|
float approxBaseHp = 0.0f; // Read above
|
||||||
|
|
||||||
approxBaseHp = static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::HP ] );
|
approxBaseHp = static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::HP ] );
|
||||||
|
|
||||||
uint16_t result = static_cast< uint16_t >( floor( jobModHp * ( approxBaseHp / 100.0f ) ) +
|
auto result = static_cast< uint32_t >( floor( jobModHp * ( approxBaseHp / 100.0f ) ) +
|
||||||
floor( hpMod / 100.0f * ( vitStat - baseStat ) ) );
|
floor( hpMod / 100.0f * ( vitStat - baseStat ) ) );
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -176,7 +177,7 @@ uint32_t CalcStats::calculateMaxHp( Chara& chara )
|
||||||
|
|
||||||
approxBaseHp = static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::HP ] );
|
approxBaseHp = static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::HP ] );
|
||||||
|
|
||||||
uint16_t result = static_cast< uint16_t >( floor( jobModHp * ( approxBaseHp / 100.0f ) ) +
|
auto result = static_cast< uint32_t >( floor( jobModHp * ( approxBaseHp / 100.0f ) ) +
|
||||||
floor( hpMod / 100.0f * ( vitStat - baseStat ) ) );
|
floor( hpMod / 100.0f * ( vitStat - baseStat ) ) );
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The Ping response packet.
|
* @brief HUD stats packet.
|
||||||
*/
|
*/
|
||||||
class HudParamPacket : public ZoneChannelPacket< FFXIVIpcHudParam >
|
class HudParamPacket : public ZoneChannelPacket< FFXIVIpcHudParam >
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue