diff options
author | Subv <s.v.h21@hotmail.com> | 2012-02-14 18:21:23 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-02-14 18:21:23 -0500 |
commit | 45910d613f947a91c9661ed1d05738a25cc22363 (patch) | |
tree | 29e20354d27e469d739e430db110d759363a67fa /src | |
parent | c53d722aa29ff3a39d881de7d6ef86b79deffe48 (diff) | |
parent | 60adf066d90b9bc9696bce8f750f9abc79a61f8e (diff) |
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 29484f2695a..04eab0b7d56 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12148,6 +12148,26 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell) co || target->GetReactionTo(this) > REP_NEUTRAL) return false; + // Not all neutral creatures can be attacked + if (GetReactionTo(target) == REP_NEUTRAL && + target->GetReactionTo(this) == REP_NEUTRAL) + { + if ( + !(target->GetTypeId() == TYPEID_PLAYER && GetTypeId() == TYPEID_PLAYER) && + !(target->GetTypeId() == TYPEID_UNIT && GetTypeId() == TYPEID_UNIT) + ) + { + Player const* player = target->GetTypeId() == TYPEID_PLAYER ? target->ToPlayer() : ToPlayer(); + Unit const* creature = target->GetTypeId() == TYPEID_UNIT ? target : this; + + if (FactionTemplateEntry const* factionTemplate = creature->getFactionTemplateEntry()) + if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplate->faction)) + if (FactionState const* repState = player->GetReputationMgr().GetState(factionEntry)) + if (repState->Flags & FACTION_FLAG_PEACE_FORCED) + return false; + } + } + Creature const* creatureAttacker = ToCreature(); if (creatureAttacker && creatureAttacker->GetCreatureInfo()->type_flags & CREATURE_TYPEFLAGS_UNK26) return false; |