*Update event ai. By nofantasy.
--HG-- branch : trunk
This commit is contained in:
@@ -23,6 +23,7 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "mob_event_ai.h"
|
||||
#include "ObjectMgr.h"
|
||||
|
||||
#define EVENT_UPDATE_TIME 500
|
||||
#define SPELL_RUN_AWAY 8225
|
||||
@@ -454,6 +455,10 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EVENT_T_REACHED_HOME:
|
||||
{
|
||||
}
|
||||
break;
|
||||
default:
|
||||
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);
|
||||
@@ -577,6 +582,43 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
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:
|
||||
DoPlaySoundToSet(m_creature, param1);
|
||||
break;
|
||||
@@ -720,6 +762,9 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
{
|
||||
Unit* target = GetTargetByType(param3, pActionInvoker);
|
||||
|
||||
if (param1 < OBJECT_END || param1 >= UNIT_END)
|
||||
return;
|
||||
|
||||
if (target)
|
||||
target->SetUInt32Value(param1, param2);
|
||||
}
|
||||
@@ -1004,7 +1049,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
EventUpdateTime = EVENT_UPDATE_TIME;
|
||||
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)
|
||||
{
|
||||
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()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
@@ -1042,13 +1101,8 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
//Handle Evade events
|
||||
for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i)
|
||||
{
|
||||
switch ((*i).Event.event_type)
|
||||
{
|
||||
//Evade
|
||||
case EVENT_T_EVADE:
|
||||
ProcessEvent(*i);
|
||||
break;
|
||||
}
|
||||
if ((*i).Event.event_type == EVENT_T_EVADE)
|
||||
ProcessEvent(*i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1290,9 +1344,9 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
else (*i).Time = 0;
|
||||
}
|
||||
|
||||
//Events that are updated every EVENT_UPDATE_TIME
|
||||
switch ((*i).Event.event_type)
|
||||
{
|
||||
//Events that are updated every EVENT_UPDATE_TIME
|
||||
case EVENT_T_TIMER_OOC:
|
||||
ProcessEvent(*i);
|
||||
break;
|
||||
@@ -1302,9 +1356,19 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
case EVENT_T_TARGET_HP:
|
||||
case EVENT_T_TARGET_CASTING:
|
||||
case EVENT_T_FRIENDLY_HP:
|
||||
if( Combat )
|
||||
if (Combat)
|
||||
ProcessEvent(*i);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1391,7 +1455,7 @@ void AddSC_mob_event()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_eventai";
|
||||
newscript->Name = "mob_eventai";
|
||||
newscript->GetAI = &GetAI_Mob_EventAI;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -30,51 +30,52 @@ enum Event_Types
|
||||
EVENT_T_TARGET_MANA = 18, //ManaMax%, ManaMin%, RepeatMin, RepeatMax
|
||||
EVENT_T_QUEST_ACCEPT = 19, //QuestID
|
||||
EVENT_T_QUEST_COMPLETE = 20, //
|
||||
EVENT_T_REACHED_HOME = 21, //NONE
|
||||
|
||||
EVENT_T_END,
|
||||
};
|
||||
|
||||
enum Action_Types
|
||||
{
|
||||
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_YELL = 2, //UNUSED
|
||||
ACTION_T_TEXTEMOTE = 3, //UNUSED
|
||||
ACTION_T_SOUND = 4, //SoundId
|
||||
ACTION_T_EMOTE = 5, //EmoteId
|
||||
ACTION_T_RANDOM_SAY = 6, //UNUSED
|
||||
ACTION_T_RANDOM_YELL = 7, //UNUSED
|
||||
ACTION_T_RANDOM_TEXTEMOTE = 8, //UNUSED
|
||||
ACTION_T_RANDOM_SOUND = 9, //SoundId1, SoundId2, SoundId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_RANDOM_EMOTE = 10, //EmoteId1, EmoteId2, EmoteId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_CAST = 11, //SpellId, Target, CastFlags
|
||||
ACTION_T_SUMMON = 12, //CreatureID, Target, Duration in ms
|
||||
ACTION_T_THREAT_SINGLE_PCT = 13, //Threat%, Target
|
||||
ACTION_T_THREAT_ALL_PCT = 14, //Threat%
|
||||
ACTION_T_QUEST_EVENT = 15, //QuestID, Target
|
||||
ACTION_T_CASTCREATUREGO = 16, //QuestID, SpellId, Target
|
||||
ACTION_T_SET_UNIT_FIELD = 17, //Field_Number, Value, Target
|
||||
ACTION_T_SET_UNIT_FLAG = 18, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_REMOVE_UNIT_FLAG = 19, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_AUTO_ATTACK = 20, //AllowAttackState (0 = stop attack, anything else means continue attacking)
|
||||
ACTION_T_COMBAT_MOVEMENT = 21, //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking)
|
||||
ACTION_T_SET_PHASE = 22, //Phase
|
||||
ACTION_T_INC_PHASE = 23, //Value (may be negative to decrement phase, should not be 0)
|
||||
ACTION_T_EVADE = 24, //No Params
|
||||
ACTION_T_FLEE = 25, //No Params
|
||||
ACTION_T_QUEST_EVENT_ALL = 26, //QuestID
|
||||
ACTION_T_CASTCREATUREGO_ALL = 27, //QuestId, SpellId
|
||||
ACTION_T_REMOVEAURASFROMSPELL = 28, //Target, Spellid
|
||||
ACTION_T_RANGED_MOVEMENT = 29, //Distance, Angle
|
||||
ACTION_T_RANDOM_PHASE = 30, //PhaseId1, PhaseId2, PhaseId3
|
||||
ACTION_T_RANDOM_PHASE_RANGE = 31, //PhaseMin, PhaseMax
|
||||
ACTION_T_SUMMON_ID = 32, //CreatureId, Target, SpawnId
|
||||
ACTION_T_KILLED_MONSTER = 33, //CreatureId, Target
|
||||
ACTION_T_SET_INST_DATA = 34, //Field, Data
|
||||
ACTION_T_SET_INST_DATA64 = 35, //Field, Target
|
||||
ACTION_T_UPDATE_TEMPLATE = 36, //Entry, Team
|
||||
ACTION_T_DIE = 37, //No Params
|
||||
ACTION_T_ZONE_COMBAT_PULSE = 38, //No Params
|
||||
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_SET_FACTION = 2, //FactionId (or 0 for default)
|
||||
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_EMOTE = 5, //EmoteId
|
||||
ACTION_T_RANDOM_SAY = 6, //UNUSED
|
||||
ACTION_T_RANDOM_YELL = 7, //UNUSED
|
||||
ACTION_T_RANDOM_TEXTEMOTE = 8, //UNUSED
|
||||
ACTION_T_RANDOM_SOUND = 9, //SoundId1, SoundId2, SoundId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_RANDOM_EMOTE = 10, //EmoteId1, EmoteId2, EmoteId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_CAST = 11, //SpellId, Target, CastFlags
|
||||
ACTION_T_SUMMON = 12, //CreatureID, Target, Duration in ms
|
||||
ACTION_T_THREAT_SINGLE_PCT = 13, //Threat%, Target
|
||||
ACTION_T_THREAT_ALL_PCT = 14, //Threat%
|
||||
ACTION_T_QUEST_EVENT = 15, //QuestID, Target
|
||||
ACTION_T_CASTCREATUREGO = 16, //QuestID, SpellId, Target
|
||||
ACTION_T_SET_UNIT_FIELD = 17, //Field_Number, Value, Target
|
||||
ACTION_T_SET_UNIT_FLAG = 18, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_REMOVE_UNIT_FLAG = 19, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_AUTO_ATTACK = 20, //AllowAttackState (0 = stop attack, anything else means continue attacking)
|
||||
ACTION_T_COMBAT_MOVEMENT = 21, //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking)
|
||||
ACTION_T_SET_PHASE = 22, //Phase
|
||||
ACTION_T_INC_PHASE = 23, //Value (may be negative to decrement phase, should not be 0)
|
||||
ACTION_T_EVADE = 24, //No Params
|
||||
ACTION_T_FLEE = 25, //No Params
|
||||
ACTION_T_QUEST_EVENT_ALL = 26, //QuestID
|
||||
ACTION_T_CASTCREATUREGO_ALL = 27, //QuestId, SpellId
|
||||
ACTION_T_REMOVEAURASFROMSPELL = 28, //Target, Spellid
|
||||
ACTION_T_RANGED_MOVEMENT = 29, //Distance, Angle
|
||||
ACTION_T_RANDOM_PHASE = 30, //PhaseId1, PhaseId2, PhaseId3
|
||||
ACTION_T_RANDOM_PHASE_RANGE = 31, //PhaseMin, PhaseMax
|
||||
ACTION_T_SUMMON_ID = 32, //CreatureId, Target, SpawnId
|
||||
ACTION_T_KILLED_MONSTER = 33, //CreatureId, Target
|
||||
ACTION_T_SET_INST_DATA = 34, //Field, Data
|
||||
ACTION_T_SET_INST_DATA64 = 35, //Field, Target
|
||||
ACTION_T_UPDATE_TEMPLATE = 36, //Entry, Team
|
||||
ACTION_T_DIE = 37, //No Params
|
||||
ACTION_T_ZONE_COMBAT_PULSE = 38, //No Params
|
||||
|
||||
ACTION_T_SET_ACTIVE = 101, //Apply
|
||||
ACTION_T_SET_AGGRESSIVE = 102, //Apply
|
||||
|
||||
Reference in New Issue
Block a user