1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 23:27:45 +00:00

BNpcs will now also initiate combat when being attacked, Death should reset them properly.

This commit is contained in:
Mordred 2019-01-20 13:36:34 +01:00
parent 61555edd44
commit b17ce80ce6
6 changed files with 26 additions and 24 deletions

View file

@ -389,3 +389,20 @@ void Sapphire::Entity::BNpc::update( int64_t currTime )
}
}
}
void Sapphire::Entity::BNpc::onActionHostile( Sapphire::Entity::CharaPtr pSource )
{
if( !hateListGetHighest() )
aggro( pSource );
//if( !getClaimer() )
// setOwner( pSource->getAsPlayer() );
}
void Sapphire::Entity::BNpc::onDeath()
{
setTargetId( INVALID_GAME_OBJECT_ID );
m_currentStance = Stance::Passive;
m_state = BNpcState::Dead;
hateListClear();
}

View file

@ -79,6 +79,10 @@ namespace Sapphire::Entity
void update( int64_t currTime ) override;
void onActionHostile( CharaPtr pSource ) override;
void onDeath() override;
private:
uint32_t m_bNpcBaseId;
uint32_t m_bNpcNameId;

View file

@ -393,7 +393,7 @@ void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget )
if( ( tick - m_lastAttack ) > 2500 )
{
pTarget->onActionHostile( *this );
pTarget->onActionHostile( getAsChara() );
m_lastAttack = tick;
srand( static_cast< uint32_t >( tick ) );
@ -461,7 +461,7 @@ void Sapphire::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionI
sendToInRangeSet( effectPacket, true );
if( target.isAlive() )
target.onActionHostile( *this );
target.onActionHostile( getAsChara() );
target.takeDamage( static_cast< uint32_t >( param1 ) );
@ -481,7 +481,7 @@ void Sapphire::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionI
if( pHitActor->getAsChara()->isAlive() )
pHitActor->getAsChara()->onActionHostile( *this );
pHitActor->getAsChara()->onActionHostile( getAsChara() );
pHitActor->getAsChara()->takeDamage( static_cast< uint32_t >( param1 ) );

View file

@ -219,7 +219,7 @@ namespace Sapphire::Entity
virtual void onDamageTaken( Chara& pSource ) {};
virtual void onActionHostile( Chara& source ) {};
virtual void onActionHostile( CharaPtr pSource ) {};
virtual void onActionFriendly( Chara& pSource ) {};

View file

@ -1515,7 +1515,7 @@ void Sapphire::Entity::Player::autoAttack( CharaPtr pTarget )
auto mainWeap = getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
pTarget->onActionHostile( *this );
pTarget->onActionHostile( getAsChara() );
//uint64_t tick = Util::getTimeMs();
//srand(static_cast< uint32_t >(tick));

View file

@ -44,12 +44,8 @@ namespace Sapphire::Network::Packets::Server
m_data.pose = bnpc.getPose();
memcpy( m_data.look, bnpc.getLookArray(), sizeof( m_data.look ) );
auto models = bnpc.getModelArray();
memcpy( m_data.models, bnpc.getModelArray(), sizeof( m_data.models ) );
memcpy( m_data.look, bnpc.getLookArray(), sizeof( m_data.look ) );
m_data.pos.x = bnpc.getPos().x;
m_data.pos.y = bnpc.getPos().y;
m_data.pos.z = bnpc.getPos().z;
@ -61,10 +57,6 @@ namespace Sapphire::Network::Packets::Server
m_data.aggressionMode = bnpc.getAggressionMode();
m_data.classJob = 0;
//m_data.voice = bnpc.getVoiceId();
//m_data.currentMount = bnpc.getCurrentMount();
//m_data.onlineStatus = static_cast< uint8_t >( bnpc.getOnlineStatus() );
//m_data.u23 = 0x04;
//m_data.u24 = 256;
@ -85,21 +77,10 @@ namespace Sapphire::Network::Packets::Server
// 0x20 == spawn hidden to be displayed by the spawneffect control
//m_data.displayFlags = bnpc.getDisplayFlags();
/*if( bnpc.getZoningType() != Common::ZoneingType::None )
{
m_data.displayFlags |= static_cast< uint16_t >( Common::DisplayFlags::Invisible );
}*/
//m_data.currentMount = bnpc.getCurrentMount();
//m_data.persistentEmote = bnpc.getPersistentEmote();
m_data.targetId = static_cast< uint64_t >( bnpc.getTargetId() );
//m_data.type = 1;
//m_data.unknown_33 = 4;
//m_data.unknown_38 = 0x70;
//m_data.unknown_60 = 3;
//m_data.unknown_61 = 7;
uint64_t currentTimeMs = Sapphire::Util::getTimeMs();