Core/AI: added sOnDummyEffect() for all AIs

Core/SmartAI: added EVENT_DUMMY_EFFECT (66)

--HG--
branch : trunk
This commit is contained in:
Rat
2010-11-17 23:24:21 +01:00
parent 2e68705e22
commit 3de2f6af01
7 changed files with 41 additions and 7 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());

View File

@@ -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))

View File

@@ -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