From 8d687761bcea04c9d9d4add8699df5e48ec0d546 Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 23 Nov 2008 13:58:06 -0600 Subject: *Creatures with the same faction should always be friendly to each other. This fix the bug that creatures with the same faction fight earch other. *Allow "chain effect" when creatures call assistance. --HG-- branch : trunk --- src/game/Creature.cpp | 3 ++- src/game/GridNotifiers.h | 3 +++ src/game/Unit.cpp | 12 +++++++++--- src/shared/Database/DBCStructure.h | 4 ++++ 4 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index c547065b206..79c1bf18008 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1891,7 +1891,8 @@ void Creature::CallAssistence() for(std::list::iterator iter = assistList.begin(); iter != assistList.end(); ++iter) { - (*iter)->SetNoCallAssistence(true); + //(*iter)->SetNoCallAssistence(true); + (*iter)->CombatStart(getVictim()); if((*iter)->AI()) (*iter)->AI()->AttackStart(getVictim()); } diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index 3561f30861c..6b4dd39306c 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -783,6 +783,9 @@ namespace Trinity if(u->getFaction() != i_funit->getFaction() ) return false; + if(!u->isAggressive()) + return false; + // only free creature if( u->GetCharmerOrOwnerGUID() ) return false; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 83ad2b51b1c..642b49ee99a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8486,10 +8486,16 @@ void Unit::CombatStart(Unit* target) if(!target->isInCombat() && target->GetTypeId() != TYPEID_PLAYER && ((Creature*)target)->isAggressive() && ((Creature*)target)->AI()) + { + SetInCombatWith(target); + target->SetInCombatWith(this); ((Creature*)target)->AI()->AttackStart(this); - - SetInCombatWith(target); - target->SetInCombatWith(this); + } + else + { + SetInCombatWith(target); + target->SetInCombatWith(this); + } if(Player* attackedPlayer = target->GetCharmerOrOwnerPlayerOrPlayerItself()) SetContestedPvP(attackedPlayer); diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index a71f80ac8c7..ce72661066b 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -229,6 +229,8 @@ struct FactionTemplateEntry // helpers bool IsFriendlyTo(FactionTemplateEntry const& entry) const { + if(ID == entry.ID) + return true; if(enemyFaction1 == entry.faction || enemyFaction2 == entry.faction || enemyFaction3 == entry.faction || enemyFaction4 == entry.faction ) return false; if(friendFaction1 == entry.faction || friendFaction2 == entry.faction || friendFaction3 == entry.faction || friendFaction4 == entry.faction ) @@ -237,6 +239,8 @@ struct FactionTemplateEntry } bool IsHostileTo(FactionTemplateEntry const& entry) const { + if(ID == entry.ID) + return false; if(enemyFaction1 == entry.faction || enemyFaction2 == entry.faction || enemyFaction3 == entry.faction || enemyFaction4 == entry.faction ) return true; if(friendFaction1 == entry.faction || friendFaction2 == entry.faction || friendFaction3 == entry.faction || friendFaction4 == entry.faction ) -- cgit v1.2.3