mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-29 07:37:45 +00:00
BNpcs will now also initiate combat when being attacked, Death should reset them properly.
This commit is contained in:
parent
61555edd44
commit
b17ce80ce6
6 changed files with 26 additions and 24 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ) );
|
||||
|
||||
|
|
|
@ -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 ) {};
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue