diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 311bb57e7..e563e1d3c 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1324,9 +1324,24 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!targets) break; - for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsCreature(*itr)) - (*itr)->ToCreature()->SetInCombatWithZone(); + if (!me->GetMap()->IsDungeon()) + { + ObjectList* units = GetWorldObjectsInDist((float)e.action.combatZone.range); + if (!units->empty() && GetBaseObject()) + for (ObjectList::const_iterator itr = units->begin(); itr != units->end(); ++itr) + if (IsPlayer(*itr) && !(*itr)->ToPlayer()->isDead()) + { + me->SetInCombatWith((*itr)->ToPlayer()); + (*itr)->ToPlayer()->SetInCombatWith(me); + me->AddThreat((*itr)->ToPlayer(), 0.0f); + } + } + else + { + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + if (IsCreature(*itr)) + (*itr)->ToCreature()->SetInCombatWithZone(); + } delete targets; break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 08b1e31b3..86f3fd822 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -481,7 +481,7 @@ enum SMART_ACTION SMART_ACTION_EVADE = 24, // No Params SMART_ACTION_FLEE_FOR_ASSIST = 25, // With Emote SMART_ACTION_CALL_GROUPEVENTHAPPENS = 26, // QuestID - SMART_ACTION_COMBAT_STOP = 27, // + SMART_ACTION_COMBAT_STOP = 27, // No Params SMART_ACTION_REMOVEAURASFROMSPELL = 28, // Spellid (0 removes all auras), charges (0 removes aura) SMART_ACTION_FOLLOW = 29, // Distance (0 = default), Angle (0 = default), EndCreatureEntry, credit, creditType (0monsterkill, 1event) SMART_ACTION_RANDOM_PHASE = 30, // PhaseId1, PhaseId2, PhaseId3... @@ -492,7 +492,7 @@ enum SMART_ACTION SMART_ACTION_SET_INST_DATA64 = 35, // Field, SMART_ACTION_UPDATE_TEMPLATE = 36, // Entry, UpdateLevel SMART_ACTION_DIE = 37, // No Params - SMART_ACTION_SET_IN_COMBAT_WITH_ZONE = 38, // No Params + SMART_ACTION_SET_IN_COMBAT_WITH_ZONE = 38, // Range (if outside of dungeon) SMART_ACTION_CALL_FOR_HELP = 39, // Radius, With Emote SMART_ACTION_SET_SHEATH = 40, // Sheath (0-unarmed, 1-melee, 2-ranged) SMART_ACTION_FORCE_DESPAWN = 41, // timer @@ -733,6 +733,11 @@ struct SmartAction uint32 alternative; } activateObject; + struct + { + uint32 range; + } combatZone; + struct { uint32 creature;