*Update event ai. By nofantasy.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-03-13 14:21:15 -06:00
parent 17e0c43d20
commit 5e4986ad3a
2 changed files with 115 additions and 50 deletions
@@ -23,6 +23,7 @@ EndScriptData */
#include "precompiled.h" #include "precompiled.h"
#include "mob_event_ai.h" #include "mob_event_ai.h"
#include "ObjectMgr.h"
#define EVENT_UPDATE_TIME 500 #define EVENT_UPDATE_TIME 500
#define SPELL_RUN_AWAY 8225 #define SPELL_RUN_AWAY 8225
@@ -454,6 +455,10 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
} }
} }
break; break;
case EVENT_T_REACHED_HOME:
{
}
break;
default: default:
if (EAI_ErrorLevel > 0) if (EAI_ErrorLevel > 0)
error_db_log("SD2: Creature %u using Event %u has invalid Event Type(%u), missing from ProcessEvent() Switch.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); error_db_log("SD2: Creature %u using Event %u has invalid Event Type(%u), missing from ProcessEvent() Switch.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type);
@@ -577,6 +582,43 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
} }
} }
break; break;
case ACTION_T_SET_FACTION:
{
if (param1)
m_creature->setFaction(param1);
else
{
if (CreatureInfo const* ci = GetCreatureTemplateStore(m_creature->GetEntry()))
{
//if no id provided, assume reset and then use default
if (m_creature->getFaction() != ci->faction_A)
m_creature->setFaction(ci->faction_A);
}
}
}
break;
case ACTION_T_MORPH_TO_ENTRY_OR_MODEL:
{
if (param1 || param2)
{
//set model based on entry from creature_template
if (param1)
{
if (CreatureInfo const* ci = GetCreatureTemplateStore(param1))
{
//use default display
if (ci->DisplayID_A)
m_creature->SetDisplayId(ci->DisplayID_A);
}
}
//if no param1, then use value from param2 (modelId)
else
m_creature->SetDisplayId(param2);
}
else
m_creature->DeMorph();
}
break;
case ACTION_T_SOUND: case ACTION_T_SOUND:
DoPlaySoundToSet(m_creature, param1); DoPlaySoundToSet(m_creature, param1);
break; break;
@@ -720,6 +762,9 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
{ {
Unit* target = GetTargetByType(param3, pActionInvoker); Unit* target = GetTargetByType(param3, pActionInvoker);
if (param1 < OBJECT_END || param1 >= UNIT_END)
return;
if (target) if (target)
target->SetUInt32Value(param1, param2); target->SetUInt32Value(param1, param2);
} }
@@ -1004,7 +1049,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
EventUpdateTime = EVENT_UPDATE_TIME; EventUpdateTime = EVENT_UPDATE_TIME;
EventDiff = 0; EventDiff = 0;
//Handle Evade events and reset all events to enabled //Reset all events to enabled
for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i)
{ {
switch ((*i).Event.event_type) switch ((*i).Event.event_type)
@@ -1033,6 +1078,20 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
} }
} }
//when creature reach home after EnterEvadeMode
void JustReachedHome()
{
m_creature->LoadCreaturesAddon();
for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i)
{
if ((*i).Event.event_type == EVENT_T_REACHED_HOME)
ProcessEvent(*i);
}
Reset();
}
void EnterEvadeMode() void EnterEvadeMode()
{ {
ScriptedAI::EnterEvadeMode(); ScriptedAI::EnterEvadeMode();
@@ -1042,13 +1101,8 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
//Handle Evade events //Handle Evade events
for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i)
{ {
switch ((*i).Event.event_type) if ((*i).Event.event_type == EVENT_T_EVADE)
{
//Evade
case EVENT_T_EVADE:
ProcessEvent(*i); ProcessEvent(*i);
break;
}
} }
} }
@@ -1290,9 +1344,9 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
else (*i).Time = 0; else (*i).Time = 0;
} }
//Events that are updated every EVENT_UPDATE_TIME
switch ((*i).Event.event_type) switch ((*i).Event.event_type)
{ {
//Events that are updated every EVENT_UPDATE_TIME
case EVENT_T_TIMER_OOC: case EVENT_T_TIMER_OOC:
ProcessEvent(*i); ProcessEvent(*i);
break; break;
@@ -1305,6 +1359,16 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
if (Combat) if (Combat)
ProcessEvent(*i); ProcessEvent(*i);
break; break;
case EVENT_T_RANGE:
if (Combat)
{
if (m_creature->IsWithinDistInMap(m_creature->getVictim(),(float)(*i).Event.event_param2))
{
if (m_creature->GetDistance(m_creature->getVictim()) >= (float)(*i).Event.event_param1)
ProcessEvent(*i);
}
}
break;
} }
} }
@@ -30,6 +30,7 @@ enum Event_Types
EVENT_T_TARGET_MANA = 18, //ManaMax%, ManaMin%, RepeatMin, RepeatMax EVENT_T_TARGET_MANA = 18, //ManaMax%, ManaMin%, RepeatMin, RepeatMax
EVENT_T_QUEST_ACCEPT = 19, //QuestID EVENT_T_QUEST_ACCEPT = 19, //QuestID
EVENT_T_QUEST_COMPLETE = 20, // EVENT_T_QUEST_COMPLETE = 20, //
EVENT_T_REACHED_HOME = 21, //NONE
EVENT_T_END, EVENT_T_END,
}; };
@@ -38,8 +39,8 @@ enum Action_Types
{ {
ACTION_T_NONE = 0, //No action ACTION_T_NONE = 0, //No action
ACTION_T_TEXT = 1, //-TextId1, optionally -TextId2, optionally -TextId3(if -TextId2 exist). If more than just -TextId1 is defined, randomize. Negative values. ACTION_T_TEXT = 1, //-TextId1, optionally -TextId2, optionally -TextId3(if -TextId2 exist). If more than just -TextId1 is defined, randomize. Negative values.
ACTION_T_YELL = 2, //UNUSED ACTION_T_SET_FACTION = 2, //FactionId (or 0 for default)
ACTION_T_TEXTEMOTE = 3, //UNUSED ACTION_T_MORPH_TO_ENTRY_OR_MODEL = 3, //Creature_template entry(param1) OR ModelId (param2) (or 0 for both to demorph)
ACTION_T_SOUND = 4, //SoundId ACTION_T_SOUND = 4, //SoundId
ACTION_T_EMOTE = 5, //EmoteId ACTION_T_EMOTE = 5, //EmoteId
ACTION_T_RANDOM_SAY = 6, //UNUSED ACTION_T_RANDOM_SAY = 6, //UNUSED