aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2013-03-09 02:03:37 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2013-03-09 02:03:37 +0100
commit83c98d6dff6e3c1a4577bc206692a4f294415d66 (patch)
tree7facfcf424726f63f0baeb7920859396e89fc915
parentdeabbb0e763f5dea47116c8413160be58a2bbbe0 (diff)
Core/SmartAI: Implement SMART_ACTION_SUMMON_CREATURE_GROUP (107)
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp13
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h9
3 files changed, 22 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 71e35b9f50c..b5af76a1219 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2068,6 +2068,19 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
delete targets;
break;
}
+ case SMART_ACTION_SUMMON_CREATURE_GROUP:
+ {
+ std::list<TempSummon*> summonList;
+ GetBaseObject()->SummonCreatureGroup(e.action.creatureGroup.group, &summonList);
+
+ for (std::list<TempSummon*>::const_iterator itr = summonList.begin(); itr != summonList.end(); ++itr)
+ {
+ if (unit && e.action.creatureGroup.attackInvoker)
+ (*itr)->AI()->AttackStart(unit);
+ }
+
+ break;
+ }
default:
sLog->outError(LOG_FILTER_SQL, "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index f140afe1295..4929d965fb6 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -910,6 +910,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SET_GO_FLAG:
case SMART_ACTION_ADD_GO_FLAG:
case SMART_ACTION_REMOVE_GO_FLAG:
+ case SMART_ACTION_SUMMON_CREATURE_GROUP:
break;
default:
sLog->outError(LOG_FILTER_SQL, "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 5bac68f7dc1..7b184503e88 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -488,8 +488,9 @@ enum SMART_ACTION
SMART_ACTION_SET_GO_FLAG = 104, // Flags
SMART_ACTION_ADD_GO_FLAG = 105, // Flags
SMART_ACTION_REMOVE_GO_FLAG = 106, // Flags
+ SMART_ACTION_SUMMON_CREATURE_GROUP = 107, // Group, attackInvoker
- SMART_ACTION_END = 107
+ SMART_ACTION_END = 108
};
struct SmartAction
@@ -931,6 +932,12 @@ struct SmartAction
uint32 flag;
} goFlag;
+ struct
+ {
+ uint32 group;
+ uint32 attackInvoker;
+ } creatureGroup;
+
//! Note for any new future actions
//! All parameters must have type uint32