mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 01:08:35 +00:00
fix(Core/Entities): Improve interactions between taxis and players regarding PvP flag. (#23681)
This commit is contained in:
@@ -83,29 +83,19 @@ WorldObject* CreatureAI::GetSummoner() const
|
||||
inline bool IsValidCombatTarget(Creature* source, Player* target)
|
||||
{
|
||||
if (target->IsGameMaster())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!source->IsInWorld() || !target->IsInWorld())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!source->IsAlive() || !target->IsAlive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!source->InSamePhase(target))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (source->HasUnitState(UNIT_STATE_IN_FLIGHT) || target->HasUnitState(UNIT_STATE_IN_FLIGHT))
|
||||
{
|
||||
if (source->IsInFlight() || target->IsInFlight())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1439,6 +1439,9 @@ void Player::UpdatePvPState()
|
||||
|
||||
if (pvpInfo.IsHostile) // in hostile area
|
||||
{
|
||||
if (IsInFlight()) // on taxi
|
||||
return;
|
||||
|
||||
if (!IsPvP() || pvpInfo.EndTimer != 0)
|
||||
UpdatePvP(true, true);
|
||||
}
|
||||
|
||||
@@ -1864,7 +1864,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
|
||||
|
||||
auto canTakeMeleeDamage = [&]()
|
||||
{
|
||||
return victim->IsAlive() && !victim->HasUnitState(UNIT_STATE_IN_FLIGHT) && (!victim->IsCreature() || !victim->ToCreature()->IsEvadingAttacks());
|
||||
return victim->IsAlive() && !victim->IsInFlight() && (!victim->IsCreature() || !victim->ToCreature()->IsEvadingAttacks());
|
||||
};
|
||||
|
||||
if (!canTakeMeleeDamage())
|
||||
@@ -18196,10 +18196,8 @@ void Unit::SetControlled(bool apply, UnitState state, Unit* source /*= nullptr*/
|
||||
|
||||
void Unit::SetStunned(bool apply)
|
||||
{
|
||||
if (HasUnitState(UNIT_STATE_IN_FLIGHT))
|
||||
{
|
||||
if (IsInFlight())
|
||||
return;
|
||||
}
|
||||
|
||||
if (apply)
|
||||
{
|
||||
|
||||
@@ -418,6 +418,7 @@ void FlightPathMovementGenerator::DoFinalize(Player* player)
|
||||
player->m_taxi.ClearTaxiDestinations();
|
||||
player->Dismount();
|
||||
player->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT);
|
||||
player->UpdatePvPState(); // to account for cases such as flying into a PvP territory, as it does not flag on the way in
|
||||
|
||||
if (player->m_taxi.empty())
|
||||
{
|
||||
@@ -447,6 +448,9 @@ void FlightPathMovementGenerator::DoReset(Player* player)
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->pvpInfo.EndTimer)
|
||||
player->UpdatePvP(false, true); // PvP flag timer immediately ends when starting taxi
|
||||
|
||||
player->getHostileRefMgr().setOnlineOfflineState(false);
|
||||
player->AddUnitState(UNIT_STATE_IN_FLIGHT);
|
||||
player->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT);
|
||||
|
||||
Reference in New Issue
Block a user