aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-08-10 23:18:04 +0200
committerShauren <shauren.trinity@gmail.com>2021-10-17 22:07:54 +0200
commit0aee79dfb8027e8b35472f5f61eb4f318528c951 (patch)
tree7b814581391972786a1e97b1085f67b605afbf85 /src
parentcc3b9c2e2174035ca8af1db8905fc3caf44fbf41 (diff)
AI/SmartScripts: Replace SMART_ACTION_INVOKER_CAST with SMART_ACTION_SELF_CAST in action 85. SMART_ACTION_INVOKER_CAST moves to 134.
(cherry picked from commit 0df3cb5bcc8097070b1f215032d3914d6a577f01)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp35
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
3 files changed, 37 insertions, 3 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index efe13db12f1..ec639b906e4 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -614,6 +614,39 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
break;
}
+ case SMART_ACTION_SELF_CAST:
+ {
+ if (targets.empty())
+ break;
+
+ if (e.action.cast.targetsLimit)
+ Trinity::Containers::RandomResize(targets, e.action.cast.targetsLimit);
+
+ TriggerCastFlags triggerFlags = TRIGGERED_NONE;
+ if (e.action.cast.castFlags & SMARTCAST_TRIGGERED)
+ {
+ if (e.action.cast.triggerFlags)
+ triggerFlags = TriggerCastFlags(e.action.cast.triggerFlags);
+ else
+ triggerFlags = TRIGGERED_FULL_MASK;
+ }
+
+ for (WorldObject* target : targets)
+ {
+ Unit* uTarget = target->ToUnit();
+ if (!uTarget)
+ continue;
+
+ if (!(e.action.cast.castFlags & SMARTCAST_AURA_NOT_PRESENT) || !uTarget->HasAura(e.action.cast.spell))
+ {
+ if (e.action.cast.castFlags & SMARTCAST_INTERRUPT_PREVIOUS)
+ uTarget->InterruptNonMeleeSpells(false);
+
+ uTarget->CastSpell(uTarget, e.action.cast.spell, triggerFlags);
+ }
+ }
+ break;
+ }
case SMART_ACTION_INVOKER_CAST:
{
Unit* tempLastInvoker = GetLastInvoker(unit);
@@ -623,7 +656,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (targets.empty())
break;
- if (e.action.cast.targetsLimit > 0 && targets.size() > e.action.cast.targetsLimit)
+ if (e.action.cast.targetsLimit)
Trinity::Containers::RandomResize(targets, e.action.cast.targetsLimit);
for (WorldObject* target : targets)
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 3f612510cfa..eed53952898 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1290,6 +1290,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
// return false;
}
// no break
+ case SMART_ACTION_SELF_CAST:
case SMART_ACTION_ADD_AURA:
if (!IsSpellValid(e, e.action.cast.spell))
return false;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 0e1fe59b06e..49e14a34207 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -548,7 +548,7 @@ enum SMART_ACTION
SMART_ACTION_ADD_NPC_FLAG = 82, // Flags
SMART_ACTION_REMOVE_NPC_FLAG = 83, // Flags
SMART_ACTION_SIMPLE_TALK = 84, // groupID, can be used to make players say groupID, Text_over event is not triggered, whisper can not be used (Target units will say the text)
- SMART_ACTION_INVOKER_CAST = 85, // spellID, castFlags, if avaliable, last used invoker will cast spellId with castFlags on targets
+ SMART_ACTION_SELF_CAST = 85, // spellID, castFlags
SMART_ACTION_CROSS_CAST = 86, // spellID, castFlags, CasterTargetType, CasterTarget param1, CasterTarget param2, CasterTarget param3, ( + the origonal target fields as Destination target), CasterTargets will cast spellID on all Targets (use with caution if targeting multiple * multiple units)
SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST = 87, // script9 ids 1-9
SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST = 88, // script9 id min, max
@@ -597,7 +597,7 @@ enum SMART_ACTION
SMART_ACTION_SPAWN_SPAWNGROUP = 131, // Group ID, min secs, max secs, spawnflags
SMART_ACTION_DESPAWN_SPAWNGROUP = 132, // Group ID, min secs, max secs, spawnflags
SMART_ACTION_RESPAWN_BY_SPAWNID = 133, // spawnType, spawnId
- // 134 : 3.3.5 reserved
+ SMART_ACTION_INVOKER_CAST = 134, // spellID, castFlags
SMART_ACTION_PLAY_CINEMATIC = 135, // reserved for future uses
SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction
SMART_ACTION_PLAY_SPELL_VISUAL_KIT = 137, // spellVisualKitId, kitType (unknown values, copypaste from packet dumps), duration