*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)
{ ProcessEvent(*i);
//Evade
case EVENT_T_EVADE:
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;
@@ -1302,9 +1356,19 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
case EVENT_T_TARGET_HP: case EVENT_T_TARGET_HP:
case EVENT_T_TARGET_CASTING: case EVENT_T_TARGET_CASTING:
case EVENT_T_FRIENDLY_HP: case EVENT_T_FRIENDLY_HP:
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;
} }
} }
@@ -1391,7 +1455,7 @@ void AddSC_mob_event()
{ {
Script *newscript; Script *newscript;
newscript = new Script; newscript = new Script;
newscript->Name="mob_eventai"; newscript->Name = "mob_eventai";
newscript->GetAI = &GetAI_Mob_EventAI; newscript->GetAI = &GetAI_Mob_EventAI;
newscript->RegisterSelf(); newscript->RegisterSelf();
} }
@@ -30,51 +30,52 @@ 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,
}; };
enum Action_Types 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
ACTION_T_RANDOM_YELL = 7, //UNUSED ACTION_T_RANDOM_YELL = 7, //UNUSED
ACTION_T_RANDOM_TEXTEMOTE = 8, //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_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_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_CAST = 11, //SpellId, Target, CastFlags
ACTION_T_SUMMON = 12, //CreatureID, Target, Duration in ms ACTION_T_SUMMON = 12, //CreatureID, Target, Duration in ms
ACTION_T_THREAT_SINGLE_PCT = 13, //Threat%, Target ACTION_T_THREAT_SINGLE_PCT = 13, //Threat%, Target
ACTION_T_THREAT_ALL_PCT = 14, //Threat% ACTION_T_THREAT_ALL_PCT = 14, //Threat%
ACTION_T_QUEST_EVENT = 15, //QuestID, Target ACTION_T_QUEST_EVENT = 15, //QuestID, Target
ACTION_T_CASTCREATUREGO = 16, //QuestID, SpellId, Target ACTION_T_CASTCREATUREGO = 16, //QuestID, SpellId, Target
ACTION_T_SET_UNIT_FIELD = 17, //Field_Number, Value, 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_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_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_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_COMBAT_MOVEMENT = 21, //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking)
ACTION_T_SET_PHASE = 22, //Phase ACTION_T_SET_PHASE = 22, //Phase
ACTION_T_INC_PHASE = 23, //Value (may be negative to decrement phase, should not be 0) ACTION_T_INC_PHASE = 23, //Value (may be negative to decrement phase, should not be 0)
ACTION_T_EVADE = 24, //No Params ACTION_T_EVADE = 24, //No Params
ACTION_T_FLEE = 25, //No Params ACTION_T_FLEE = 25, //No Params
ACTION_T_QUEST_EVENT_ALL = 26, //QuestID ACTION_T_QUEST_EVENT_ALL = 26, //QuestID
ACTION_T_CASTCREATUREGO_ALL = 27, //QuestId, SpellId ACTION_T_CASTCREATUREGO_ALL = 27, //QuestId, SpellId
ACTION_T_REMOVEAURASFROMSPELL = 28, //Target, Spellid ACTION_T_REMOVEAURASFROMSPELL = 28, //Target, Spellid
ACTION_T_RANGED_MOVEMENT = 29, //Distance, Angle ACTION_T_RANGED_MOVEMENT = 29, //Distance, Angle
ACTION_T_RANDOM_PHASE = 30, //PhaseId1, PhaseId2, PhaseId3 ACTION_T_RANDOM_PHASE = 30, //PhaseId1, PhaseId2, PhaseId3
ACTION_T_RANDOM_PHASE_RANGE = 31, //PhaseMin, PhaseMax ACTION_T_RANDOM_PHASE_RANGE = 31, //PhaseMin, PhaseMax
ACTION_T_SUMMON_ID = 32, //CreatureId, Target, SpawnId ACTION_T_SUMMON_ID = 32, //CreatureId, Target, SpawnId
ACTION_T_KILLED_MONSTER = 33, //CreatureId, Target ACTION_T_KILLED_MONSTER = 33, //CreatureId, Target
ACTION_T_SET_INST_DATA = 34, //Field, Data ACTION_T_SET_INST_DATA = 34, //Field, Data
ACTION_T_SET_INST_DATA64 = 35, //Field, Target ACTION_T_SET_INST_DATA64 = 35, //Field, Target
ACTION_T_UPDATE_TEMPLATE = 36, //Entry, Team ACTION_T_UPDATE_TEMPLATE = 36, //Entry, Team
ACTION_T_DIE = 37, //No Params ACTION_T_DIE = 37, //No Params
ACTION_T_ZONE_COMBAT_PULSE = 38, //No Params ACTION_T_ZONE_COMBAT_PULSE = 38, //No Params
ACTION_T_SET_ACTIVE = 101, //Apply ACTION_T_SET_ACTIVE = 101, //Apply
ACTION_T_SET_AGGRESSIVE = 102, //Apply ACTION_T_SET_AGGRESSIVE = 102, //Apply