diff options
author | Manuel Carrasco <manue.l@live.com.ar> | 2011-04-14 00:30:32 -0300 |
---|---|---|
committer | Manuel Carrasco <manue.l@live.com.ar> | 2011-04-14 00:30:32 -0300 |
commit | 4796848b8330497a0c244e17a6acbb652c1ffb80 (patch) | |
tree | e2082571ecc3583a4406e7f9ed4513cb9ff5dc9e /src | |
parent | c9fb6011743fe2cf95c96c6a88c887f94ce3184a (diff) |
Core/SAI: Implemented SMART_EVENT_IS_BEHIND_TARGET, it is triggered when the creature is behind its current target.
Signed-off-by: Manuel Carrasco <manue.l@live.com.ar>
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 18 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 12 |
3 files changed, 30 insertions, 4 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 48517c60a9b..2ab7c9fc11e 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2231,8 +2231,6 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui { if (!me || !me->getVictim()) return; - if (!me) - return; uint32 count = me->getVictim()->GetAuraCount(e.event.aura.spell); if (count < e.event.aura.count) return; @@ -2263,6 +2261,21 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui case SMART_EVENT_FOLLOW_COMPLETED: ProcessAction(e, unit, var0, var1, bvar, spell, gob); break; + case SMART_EVENT_IS_BEHIND_TARGET: + { + if (!me) + return; + + if (Unit* victim = me->getVictim()) + { + if (!victim->HasInArc(static_cast<float>(M_PI), me)) + { + ProcessAction(e, victim); + RecalcTimer(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax); + } + } + break; + } case SMART_EVENT_RECEIVE_EMOTE: if (e.event.emote.emote == var0) { @@ -2531,6 +2544,7 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff) case SMART_EVENT_FRIENDLY_MISSING_BUFF: case SMART_EVENT_HAS_AURA: case SMART_EVENT_TARGET_BUFFED: + case SMART_EVENT_IS_BEHIND_TARGET: { ProcessEvent(e); if (e.GetScriptType() == SMART_SCRIPT_TYPE_TIMED_ACTIONLIST) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 58e3dde547e..ac0f5d1a2be 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -450,6 +450,10 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e) if (!IsSpellValid(e, e.event.dummy.spell)) return false; if (e.event.dummy.effIndex > EFFECT_2) return false; break; + case SMART_EVENT_IS_BEHIND_TARGET: + if (!IsMinMaxValid(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax)) + return false; + break; case SMART_EVENT_TIMED_EVENT_TRIGGERED: case SMART_EVENT_INSTANCE_PLAYER_ENTER: case SMART_EVENT_TRANSPORT_RELOCATE: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 7095acb8c30..37aa5588125 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -151,8 +151,9 @@ enum SMART_EVENT SMART_EVENT_GOSSIP_HELLO = 64, //1 // none SMART_EVENT_FOLLOW_COMPLETED = 65, //1 // none SMART_EVENT_DUMMY_EFFECT = 66, //1 // spellId, effectIndex + SMART_EVENT_IS_BEHIND_TARGET = 67, //1 // cooldownMin, CooldownMax - SMART_EVENT_END = 67, + SMART_EVENT_END = 68, }; struct SmartEvent @@ -333,6 +334,12 @@ struct SmartEvent struct { + uint32 cooldownMin; + uint32 cooldownMax; + } behindTarget; + + struct + { uint32 param1; uint32 param2; uint32 param3; @@ -1094,8 +1101,9 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_GOSSIP_SELECT, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_JUST_CREATED, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_GOSSIP_HELLO, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, - {SMART_EVENT_FOLLOW_COMPLETED, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_FOLLOW_COMPLETED, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_DUMMY_EFFECT, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_IS_BEHIND_TARGET, SMART_SCRIPT_TYPE_MASK_CREATURE } }; |