diff options
-rwxr-xr-x | src/server/game/AI/CoreAI/UnitAI.h | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 8 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 9 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 17 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 6 |
7 files changed, 41 insertions, 7 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index dfdce670dd3..c1914168627 100755 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -219,6 +219,7 @@ class UnitAI virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) {} virtual void sQuestComplete(Player* /*player*/, Quest const* /*quest*/) {} virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) {} + virtual void sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex) {} }; class PlayerAI : public UnitAI diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 64251a8fa0d..db3f11991de 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -367,7 +367,7 @@ void SmartAI::UpdateAI(const uint32 diff) me->StopMoving(); me->GetMotionMaster()->MoveIdle(); StartDespawn(); - GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COPMLETE); + GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED); return; } mFollowArrivedTimer = 1000; @@ -744,6 +744,12 @@ void SmartAI::sQuestReward(Player* player, Quest const* quest, uint32 opt) { GetScript()->ProcessEventsFor(SMART_EVENT_REWARD_QUEST, player, quest->GetQuestId(), opt); } + +void SmartAI::sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex) +{ + GetScript()->ProcessEventsFor(SMART_EVENT_DUMMY_EFFECT,caster,spellId,(uint32)effIndex); +} + void SmartAI::SetCombatMove(bool on) { if (mCanCombatMove == on) diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index ca07cada882..b664ded1ddd 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -181,6 +181,7 @@ class SmartAI : public CreatureAI //void sQuestSelect(Player* player, Quest const* quest); //void sQuestComplete(Player* player, Quest const* quest); void sQuestReward(Player* player, Quest const* quest, uint32 opt); + void sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex); uint32 mEscortQuestID; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 575fa069f7c..d8477eb7d92 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1664,7 +1664,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder &e, Unit* unit, uint32 var0, ui case SMART_EVENT_RESET: case SMART_EVENT_JUST_CREATED: case SMART_EVENT_GOSSIP_HELLO: - case SMART_EVENT_FOLLOW_COPMLETE: + case SMART_EVENT_FOLLOW_COMPLETED: ProcessAction(e, unit, var0, var1, bvar, spell, gob); break; case SMART_EVENT_RECEIVE_EMOTE: @@ -1858,6 +1858,13 @@ void SmartScript::ProcessEvent(SmartScriptHolder &e, Unit* unit, uint32 var0, ui ProcessAction(e, unit, var0, var1); break; } + case SMART_EVENT_DUMMY_EFFECT: + { + if (e.event.dummy.spell != var0 || e.event.dummy.effIndex != var1) + return; + ProcessAction(e, unit, var0, var1); + break; + } default: sLog.outErrorDb("SmartScript::ProcessEvent: Unhandled Event type %u", e.GetEventType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 836d0f074aa..996dafe13c0 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -449,6 +449,10 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e) } break; } + case SMART_EVENT_DUMMY_EFFECT: + if (!IsSpellValid(e, e.event.dummy.spell)) return false; + if (e.event.dummy.effIndex > EFFECT_2) return false; + break; case SMART_EVENT_TIMED_EVENT_TRIGGERED: case SMART_EVENT_INSTANCE_PLAYER_ENTER: case SMART_EVENT_TRANSPORT_RELOCATE: @@ -479,7 +483,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e) case SMART_EVENT_GOSSIP_SELECT: case SMART_EVENT_GOSSIP_HELLO: case SMART_EVENT_JUST_CREATED: - case SMART_EVENT_FOLLOW_COPMLETE: + case SMART_EVENT_FOLLOW_COMPLETED: break; default: sLog.outErrorDb("SmartAIMgr: Not handled event_type(%u), Entry %d SourceType %u Event %u Action %u, skipped.", e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 98f7f73483a..b9fb02c42c6 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -149,9 +149,10 @@ enum SMART_EVENT SMART_EVENT_GOSSIP_SELECT = 62, //1 // menuID, actionID SMART_EVENT_JUST_CREATED = 63, //1 // none SMART_EVENT_GOSSIP_HELLO = 64, //1 // none - SMART_EVENT_FOLLOW_COPMLETE = 65, //1 // none + SMART_EVENT_FOLLOW_COMPLETED = 65, //1 // none + SMART_EVENT_DUMMY_EFFECT = 66, //1 // spellId, effectIndex - SMART_EVENT_END = 66, + SMART_EVENT_END = 67, }; struct SmartEvent @@ -326,6 +327,12 @@ struct SmartEvent struct { + uint32 spell; + uint32 effIndex; + } dummy; + + struct + { uint32 param1; uint32 param2; uint32 param3; @@ -1059,6 +1066,8 @@ 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_DUMMY_EFFECT, SMART_SCRIPT_TYPE_MASK_CREATURE }, }; @@ -1262,7 +1271,7 @@ class SmartAIMgr } return true; } - inline bool IsConditionValid(SmartScriptHolder e, int32 t, int32 v1, int32 v2, int32 v3) + /*inline bool IsConditionValid(SmartScriptHolder e, int32 t, int32 v1, int32 v2, int32 v3) { bool error = false; if (t > 0 && v1 >= 0 && v2 >= 0 && v3 >= 0) @@ -1281,7 +1290,7 @@ class SmartAIMgr return false; } return true; - } + }*/ inline bool IsEmoteValid(SmartScriptHolder e, uint32 entry) { if (!sEmotesTextStore.LookupEntry(entry)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index c8d3411306a..7f971a3f46e 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2390,7 +2390,13 @@ void AuraEffect::TriggerSpell(Unit * target, Unit * caster) const sLog.outDebug("AuraEffect::TriggerSpell: Spell %u Trigger %u",GetId(), triggeredSpellInfo->Id); } else if (target->GetTypeId() != TYPEID_UNIT || !sScriptMgr.OnDummyEffect(caster, GetId(), SpellEffIndex(GetEffIndex()), triggerTarget->ToCreature())) + { + if (Creature* c = triggerTarget->ToCreature()) + { + c->AI()->sOnDummyEffect(caster, GetId(), SpellEffIndex(GetEffIndex())); + } sLog.outError("AuraEffect::TriggerSpell: Spell %u has value 0 in EffectTriggered[%d] and is therefor not handled. Define as custom case?",GetId(),GetEffIndex()); + } } void AuraEffect::TriggerSpellWithValue(Unit * target, Unit * caster) const |