*Update event ai. By nofantasy.
--HG-- branch : trunk
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user