diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 19 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 1 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 06d381eff8a..98ada247fb0 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1266,6 +1266,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; bool personalSpawn = flags.HasFlag(SmartActionSummonCreatureFlags::PersonalSpawn); + uint32 spawnsCount = std::max(e.action.summonCreature.count, 1u); float x, y, z, o; for (WorldObject* target : targets) @@ -1275,17 +1276,23 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u y += e.target.y; z += e.target.z; o += e.target.o; - if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, x, y, z, o, (TempSummonType)e.action.summonCreature.type, Milliseconds(e.action.summonCreature.duration), personalSpawn)) - if (e.action.summonCreature.attackInvoker) - summon->AI()->AttackStart(target->ToUnit()); + for (uint32 counter = 0; counter < spawnsCount; counter++) + { + if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, x, y, z, o, (TempSummonType)e.action.summonCreature.type, Milliseconds(e.action.summonCreature.duration), personalSpawn)) + if (e.action.summonCreature.attackInvoker) + summon->AI()->AttackStart(target->ToUnit()); + } } if (e.GetTargetType() != SMART_TARGET_POSITION) break; - if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, e.target.x, e.target.y, e.target.z, e.target.o, (TempSummonType)e.action.summonCreature.type, Milliseconds(e.action.summonCreature.duration), personalSpawn)) - if (unit && e.action.summonCreature.attackInvoker) - summon->AI()->AttackStart(unit); + for (uint32 counter = 0; counter < spawnsCount; counter++) + { + if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, e.target.x, e.target.y, e.target.z, e.target.o, (TempSummonType)e.action.summonCreature.type, Milliseconds(e.action.summonCreature.duration), personalSpawn)) + if (unit && e.action.summonCreature.attackInvoker) + summon->AI()->AttackStart(unit); + } break; } case SMART_ACTION_SUMMON_GO: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 08626e9c1c6..284dbbff321 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -710,6 +710,7 @@ struct SmartAction uint32 duration; uint32 attackInvoker; uint32 flags; // SmartActionSummonCreatureFlags + uint32 count; } summonCreature; struct |