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:
parent
883eb72227
commit
c1b70480ff
4 changed files with 44 additions and 16 deletions
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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() );
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue