diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index f80d3253..ba981e6f 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -329,7 +329,7 @@ void Sapphire::Entity::BNpc::hateListAddOrUpdate( Sapphire::Entity::CharaPtr pCh if( pChara->isPlayer() ) { auto pPlayer = pChara->getAsPlayer(); - pPlayer->hateListAdd( getAsBNpc() ); + pPlayer->onMobAggro( getAsBNpc() ); } auto& scriptMgr = Common::Service< Sapphire::Scripting::ScriptMgr >::ref(); scriptMgr.onBNpcHateListAdd( *this, *pChara ); diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 689a540f..030c5c06 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1657,14 +1657,17 @@ void Sapphire::Entity::Player::sendHateList() void Sapphire::Entity::Player::onMobAggro( BNpcPtr pBNpc ) { hateListAdd( pBNpc ); - queuePacket( makeActorControl( getId(), ToggleAggro, 1 ) ); - setStateFlag( Common::PlayerStateFlag::InCombat ); + if( !hasStateFlag( Common::PlayerStateFlag::InCombat ) ) + { + queuePacket( makeActorControl( getId(), ToggleAggro, 1 ) ); + setStateFlag( Common::PlayerStateFlag::InCombat ); + } } void Sapphire::Entity::Player::onMobDeaggro( BNpcPtr pBNpc ) { hateListRemove( pBNpc ); - if( m_actorIdTohateSlotMap.empty() ) + if( m_actorIdTohateSlotMap.empty() && hasStateFlag( Common::PlayerStateFlag::InCombat ) ) { queuePacket( makeActorControl( getId(), ToggleAggro ) ); unsetStateFlag( Common::PlayerStateFlag::InCombat );