1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 19:17: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_directorInitialized( false ),
m_onEnterEventDone( false ), m_onEnterEventDone( false ),
m_falling( false ), m_falling( false ),
m_pQueuedAction( nullptr ) m_pQueuedAction( nullptr ),
m_effect( 0 )
{ {
m_id = 0; m_id = 0;
m_currentStance = Stance::Passive; 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() ); Logger::debug( "[{0}] Spawning {1} for {2}", pTarget->getId(), getName(), pTarget->getName() );
pTarget->queuePacket( std::make_shared< PlayerSpawnPacket >( *getAsPlayer(), *pTarget ) ); 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 // despawn
@ -2538,6 +2546,25 @@ void Sapphire::Entity::Player::gaugeSetRaw( uint8_t* pData )
sendActorGauge(); 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 ) void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value )
{ {
assert( value >= 0 && value <= 100 ); assert( value >= 0 && value <= 100 );
@ -2545,12 +2572,10 @@ void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value )
if( ( oldValue == 0 && value != 0 ) || if( ( oldValue == 0 && value != 0 ) ||
( oldValue != 0 && value == 0 ) ) ( oldValue != 0 && value == 0 ) )
{ {
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( getId() ); if( m_effect == 0 && value != 0 )
if( value != 0 ) setVisualEffect( 7, true );
{ else if ( m_effect == 7 && value == 0 )
pPacket->data().id = 7; setVisualEffect( 0, true );
}
sendToInRangeSet( pPacket, true );
} }
m_gauge.war.beastGauge = value; m_gauge.war.beastGauge = value;
if( oldValue != value ) if( oldValue != value )
@ -2643,12 +2668,10 @@ void Sapphire::Entity::Player::gaugeDrkSetDarkSideTimer( uint16_t value, bool se
if( ( oldValue == 0 && value != 0 ) || if( ( oldValue == 0 && value != 0 ) ||
( oldValue != 0 && value == 0 ) ) ( oldValue != 0 && value == 0 ) )
{ {
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( getId() ); if( m_effect == 0 && value != 0 )
if( value != 0 ) setVisualEffect( 22, true );
{ else if ( m_effect == 22 && value == 0 )
pPacket->data().id = 22; setVisualEffect( 0, true );
}
sendToInRangeSet( pPacket, true );
} }
if( sendPacket ) if( sendPacket )
sendActorGauge(); sendActorGauge();

View file

@ -990,6 +990,10 @@ namespace Sapphire::Entity
void sendActorGauge(); void sendActorGauge();
void gaugeSetRaw( uint8_t* pData ); void gaugeSetRaw( uint8_t* pData );
uint32_t getVisualEffect();
void setVisualEffect( uint32_t effect, bool sendPacket = true );
void sendVisualEffect();
void gaugeWarSetIb( uint8_t value ); void gaugeWarSetIb( uint8_t value );
uint8_t gaugeWarGetIb(); uint8_t gaugeWarGetIb();
@ -1217,6 +1221,8 @@ namespace Sapphire::Entity
std::array< Common::HuntingLogEntry, 12 > m_huntingLogEntries; std::array< Common::HuntingLogEntry, 12 > m_huntingLogEntries;
std::unordered_map< uint32_t, std::vector< ShopBuyBackEntry > > m_shopBuyBackMap; 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; int32_t id;
sscanf( params.c_str(), "%d", &id ); sscanf( params.c_str(), "%d", &id );
auto pPacket = makeZonePacket< FFXIVIpcCharaVisualEffect >( player.getId() ); player.setVisualEffect( id );
pPacket->data().id = id;
player.sendToInRangeSet( pPacket, true );
} }
else else
{ {

View file

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