1
Fork 0
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:
Alice Ogeda 2023-02-10 16:53:00 -03:00
parent 38c176c4b6
commit 735e2f73bd
7 changed files with 22 additions and 12 deletions

View file

@ -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 ];
} }

View file

@ -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];

View file

@ -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();

View file

@ -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 )

View file

@ -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 )

View file

@ -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;

View file

@ -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 >
{ {