1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 11:07:45 +00:00

make CharaVisualEffect a field in player so we can track and send to other players

This commit is contained in:
collett 2020-11-16 23:30:28 +09:00
parent 883eb72227
commit c1b70480ff
4 changed files with 44 additions and 16 deletions

View file

@ -83,7 +83,8 @@ Sapphire::Entity::Player::Player() :
m_directorInitialized( false ),
m_onEnterEventDone( false ),
m_falling( false ),
m_pQueuedAction( nullptr )
m_pQueuedAction( nullptr ),
m_effect( 0 )
{
m_id = 0;
m_currentStance = Stance::Passive;
@ -962,6 +963,13 @@ void Sapphire::Entity::Player::spawn( Entity::PlayerPtr pTarget )
Logger::debug( "[{0}] Spawning {1} for {2}", pTarget->getId(), getName(), pTarget->getName() );
pTarget->queuePacket( std::make_shared< PlayerSpawnPacket >( *getAsPlayer(), *pTarget ) );
if( m_effect > 0 )
{
auto effect = makeZonePacket< FFXIVIpcCharaVisualEffect >( pTarget->getId() );
effect->setSourceActor( getId() );
effect->data().id = m_effect;
pTarget->queuePacket( effect );
}
}
// despawn
@ -2538,6 +2546,25 @@ void Sapphire::Entity::Player::gaugeSetRaw( uint8_t* pData )
sendActorGauge();
}
uint32_t Sapphire::Entity::Player::getVisualEffect()
{
return m_effect;
}
void Sapphire::Entity::Player::setVisualEffect( uint32_t effect, bool sendPacket )
{
m_effect = effect;
if( sendPacket );
sendVisualEffect();
}
void Sapphire::Entity::Player::sendVisualEffect()
{
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( getId() );
pPacket->data().id = m_effect;
sendToInRangeSet( pPacket, true );
}
void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value )
{
assert( value >= 0 && value <= 100 );
@ -2545,12 +2572,10 @@ void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value )
if( ( oldValue == 0 && value != 0 ) ||
( oldValue != 0 && value == 0 ) )
{
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( getId() );
if( value != 0 )
{
pPacket->data().id = 7;
}
sendToInRangeSet( pPacket, true );
if( m_effect == 0 && value != 0 )
setVisualEffect( 7, true );
else if ( m_effect == 7 && value == 0 )
setVisualEffect( 0, true );
}
m_gauge.war.beastGauge = value;
if( oldValue != value )
@ -2643,12 +2668,10 @@ void Sapphire::Entity::Player::gaugeDrkSetDarkSideTimer( uint16_t value, bool se
if( ( oldValue == 0 && value != 0 ) ||
( oldValue != 0 && value == 0 ) )
{
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( getId() );
if( value != 0 )
{
pPacket->data().id = 22;
}
sendToInRangeSet( pPacket, true );
if( m_effect == 0 && value != 0 )
setVisualEffect( 22, true );
else if ( m_effect == 22 && value == 0 )
setVisualEffect( 0, true );
}
if( sendPacket )
sendActorGauge();

View file

@ -990,6 +990,10 @@ namespace Sapphire::Entity
void sendActorGauge();
void gaugeSetRaw( uint8_t* pData );
uint32_t getVisualEffect();
void setVisualEffect( uint32_t effect, bool sendPacket = true );
void sendVisualEffect();
void gaugeWarSetIb( uint8_t value );
uint8_t gaugeWarGetIb();
@ -1217,6 +1221,8 @@ namespace Sapphire::Entity
std::array< Common::HuntingLogEntry, 12 > m_huntingLogEntries;
std::unordered_map< uint32_t, std::vector< ShopBuyBackEntry > > m_shopBuyBackMap;
uint32_t m_effect;
};
}

View file

@ -375,9 +375,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player&
{
int32_t id;
sscanf( params.c_str(), "%d", &id );
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( player.getId() );
pPacket->data().id = id;
player.sendToInRangeSet( pPacket, true );
player.setVisualEffect( id );
}
else
{

View file

@ -402,6 +402,7 @@ void Sapphire::Network::GameConnection::finishLoadingHandler( const Packets::FFX
player.setIsLogin( false );
}
player.setVisualEffect( 0, false );
// spawn the player for himself
player.spawn( player.getAsPlayer() );