aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp8
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp9
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp6
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h17
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp6
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