mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-07 03:07:45 +00:00
Flags added to control BNpc behaviour in fights
This commit is contained in:
parent
c712c747c6
commit
bfda1adca4
3 changed files with 37 additions and 4 deletions
|
@ -63,6 +63,8 @@ public:
|
|||
instance.getDirectorId(), Common::BNpcType::Enemy );
|
||||
auto a3 = instance.createBNpcFromLevelEntry( INIT_POP_ENEMY_B_04, 10, 0, 1440, 938,
|
||||
instance.getDirectorId(), Common::BNpcType::Enemy );
|
||||
a2->setFlag( Entity::NoDeaggro );
|
||||
a3->setFlag( Entity::NoDeaggro );
|
||||
|
||||
auto pPlayer = instance.getPlayerPtr();
|
||||
a2->hateListAdd( pPlayer, 1 );
|
||||
|
@ -102,6 +104,11 @@ public:
|
|||
instance.getDirectorId(), Common::BNpcType::Friendly );
|
||||
auto a5 = instance.createBNpcFromLevelEntry( INIT_P_POP_PAPARIMO, 50, 0, 27780, 1376,
|
||||
instance.getDirectorId(), Common::BNpcType::Friendly );
|
||||
a1->setFlag( Entity::NoDeaggro );
|
||||
a2->setFlag( Entity::NoDeaggro );
|
||||
a3->setFlag( Entity::NoDeaggro );
|
||||
a4->setFlag( Entity::NoDeaggro );
|
||||
a5->setFlag( Entity::NoDeaggro );
|
||||
a1->hateListAdd( a4, 10000 );
|
||||
a1->hateListAdd( a5, 10000 );
|
||||
|
||||
|
|
|
@ -483,7 +483,7 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
|||
if( pHatedActor )
|
||||
aggro( pHatedActor );
|
||||
|
||||
if( Util::getTimeSeconds() - m_lastRoamTargetReached > roamTick )
|
||||
if( !hasFlag( Immobile ) && ( Util::getTimeSeconds() - m_lastRoamTargetReached > roamTick ) )
|
||||
{
|
||||
auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >();
|
||||
auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getBgPath() );
|
||||
|
@ -525,7 +525,7 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
|||
pHatedActor->getPos().y,
|
||||
pHatedActor->getPos().z );
|
||||
|
||||
if( distanceOrig > maxDistanceToOrigin )
|
||||
if( !hasFlag( NoDeaggro ) && ( distanceOrig > maxDistanceToOrigin ) )
|
||||
{
|
||||
hateListClear();
|
||||
changeTarget( INVALID_GAME_OBJECT_ID64 );
|
||||
|
@ -535,7 +535,7 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
|||
break;
|
||||
}
|
||||
|
||||
if( distance > minActorDistance )
|
||||
if( !hasFlag( Immobile ) && ( distance > minActorDistance ) )
|
||||
{
|
||||
//auto pTeriMgr = m_pFw->get< World::Manager::TerritoryMgr >();
|
||||
//if ( ( currTime - m_lastAttack ) > 600 && pTeriMgr->isDefaultTerritory( getCurrentZone()->getTerritoryTypeId() ) )
|
||||
|
@ -543,7 +543,7 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
|||
}
|
||||
else
|
||||
{
|
||||
if( face( pHatedActor->getPos() ) )
|
||||
if( !hasFlag( TurningDisabled ) && face( pHatedActor->getPos() ) )
|
||||
sendPositionUpdate();
|
||||
// in combat range. ATTACK!
|
||||
autoAttack( pHatedActor );
|
||||
|
@ -711,3 +711,13 @@ uint32_t Sapphire::Entity::BNpc::getLevelId() const
|
|||
{
|
||||
return m_levelId;
|
||||
}
|
||||
|
||||
bool Sapphire::Entity::BNpc::hasFlag( uint32_t flag ) const
|
||||
{
|
||||
return m_flags & flag;
|
||||
}
|
||||
|
||||
void Sapphire::Entity::BNpc::setFlag( uint32_t flag )
|
||||
{
|
||||
m_flags |= flag;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,17 @@ namespace Sapphire::Entity
|
|||
Dead,
|
||||
};
|
||||
|
||||
enum BNpcFlag
|
||||
{
|
||||
None = 0,
|
||||
Immobile = 1,
|
||||
TurningDisabled = 2,
|
||||
Invincible = 4,
|
||||
InvincibleRefill = 8,
|
||||
NoDeaggro = 16,
|
||||
Untargetable = 32,
|
||||
};
|
||||
|
||||
/*!
|
||||
\class BNpc
|
||||
\brief Base class for all BNpcs
|
||||
|
@ -105,6 +116,9 @@ namespace Sapphire::Entity
|
|||
void setLevelId( uint32_t levelId );
|
||||
uint32_t getLevelId() const;
|
||||
|
||||
bool hasFlag( uint32_t flag ) const;
|
||||
void setFlag( uint32_t flags );
|
||||
|
||||
private:
|
||||
uint32_t m_bNpcBaseId;
|
||||
uint32_t m_bNpcNameId;
|
||||
|
@ -119,6 +133,8 @@ namespace Sapphire::Entity
|
|||
uint8_t m_level;
|
||||
uint32_t m_levelId;
|
||||
|
||||
uint32_t m_flags;
|
||||
|
||||
float m_scale;
|
||||
float m_naviTargetReachedDistance;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue