mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
Core/AI: added sOnDummyEffect() for all AIs
Core/SmartAI: added EVENT_DUMMY_EFFECT (66) --HG-- branch : trunk
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
@@ -324,6 +325,12 @@ struct SmartEvent
|
||||
uint32 action;
|
||||
} gossip;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 spell;
|
||||
uint32 effIndex;
|
||||
} dummy;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 param1;
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user