aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp19
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h1
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 27efa4ec609..2a3bd046992 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1291,6 +1291,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ObjectGuid privateObjectOwner;
if (flags.HasFlag(SmartActionSummonCreatureFlags::PersonalSpawn))
privateObjectOwner = summoner->IsPrivateObject() ? summoner->GetPrivateObjectOwner() : summoner->GetGUID();
+ uint32 spawnsCount = std::max(e.action.summonCreature.count, 1u);
float x, y, z, o;
for (WorldObject* target : targets)
@@ -1300,17 +1301,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), privateObjectOwner))
- 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), privateObjectOwner))
+ 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), privateObjectOwner))
- 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), privateObjectOwner))
+ 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 b960afd8e4c..da9edeb6f22 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -727,6 +727,7 @@ struct SmartAction
uint32 duration;
uint32 attackInvoker;
uint32 flags; // SmartActionSummonCreatureFlags
+ uint32 count;
} summonCreature;
struct