diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-08-10 23:18:04 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-08-10 23:18:04 +0200 |
| commit | 0df3cb5bcc8097070b1f215032d3914d6a577f01 (patch) | |
| tree | d4d3ec8f10231a1801d082489ba9d1ec36dc6ea1 /src | |
| parent | e5b8b1e99a4e7361be862ae6e1f29189907167e4 (diff) | |
AI/SmartScripts: Replace SMART_ACTION_INVOKER_CAST with SMART_ACTION_SELF_CAST in action 85. SMART_ACTION_INVOKER_CAST moves to 134.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 5 |
3 files changed, 38 insertions, 3 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 2e8d2f72563..f9f37dee920 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -587,6 +587,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); @@ -596,7 +629,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 3028c101fc3..03003852664 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1190,6 +1190,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 fa2e59f8941..57ed0df9fd3 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -532,7 +532,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 @@ -581,8 +581,9 @@ 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 + SMART_ACTION_INVOKER_CAST = 134, // spellID, castFlags - SMART_ACTION_END = 134 + SMART_ACTION_END = 135 }; struct SmartAction |
