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