diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index d95e9056..ae698688 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -130,6 +130,11 @@ void Sapphire::Entity::BNpc::spawn( PlayerPtr pTarget ) pTarget->queuePacket( std::make_shared< NpcSpawnPacket >( *getAsBNpc(), *pTarget ) ); } +void Sapphire::Entity::BNpc::despawn( PlayerPtr pTarget ) +{ + pTarget->freePlayerSpawnId( getId() ); +} + Sapphire::Entity::BNpcState Sapphire::Entity::BNpc::getState() const { return m_state; @@ -306,6 +311,10 @@ void Sapphire::Entity::BNpc::update( int64_t currTime ) case BNpcState::Idle: { + // passive mobs should ignore players unless aggro'd + if( m_aggressionMode == 1 ) + return; + CharaPtr pClosestChara = getClosestChara(); if( pClosestChara && pClosestChara->isAlive() ) diff --git a/src/world/Actor/BNpc.h b/src/world/Actor/BNpc.h index 65bd166a..04a39164 100644 --- a/src/world/Actor/BNpc.h +++ b/src/world/Actor/BNpc.h @@ -44,6 +44,7 @@ namespace Sapphire::Entity virtual ~BNpc() override; void spawn( PlayerPtr pTarget ) override; + void despawn( PlayerPtr pTarget ) override; uint16_t getModelChara() const; uint8_t getLevel() const override;