diff options
| author | Nay <dnpd.dd@gmail.com> | 2012-06-17 21:50:01 +0100 | 
|---|---|---|
| committer | Nay <dnpd.dd@gmail.com> | 2012-06-17 21:50:01 +0100 | 
| commit | 8c16cc2260a6819083153d7b4ca707c0ba315caa (patch) | |
| tree | e671b115def5944064c8f70e520ee2dc2d65c81a | |
| parent | 5bcfd8303138226af83c6182d830a53b9ce9ba6e (diff) | |
Core/SAI: Implement SMART_EVENT_ACTION_DONE (72, DoAction)
Param1 is event id
This event is triggered on spellclick (id=1001), fall on ground (id=1002) and charge (id=1003)
Signed-off-by: Nay <dnpd.dd@gmail.com>
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 25 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 75 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 156 | 
4 files changed, 133 insertions, 129 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 98b5c0a6ba3..f8658dd8689 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -696,8 +696,9 @@ void SmartAI::OnCharmed(bool apply)      GetScript()->ProcessEventsFor(SMART_EVENT_CHARMED, NULL, 0, 0, apply);  } -void SmartAI::DoAction(const int32 /*param*/) +void SmartAI::DoAction(const int32 param)  { +    GetScript()->ProcessEventsFor(SMART_EVENT_ACTION_DONE, NULL, param);  }  uint32 SmartAI::GetData(uint32 /*id*/) @@ -825,28 +826,6 @@ void SmartAI::sOnGameEvent(bool start, uint16 eventId)      GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, NULL, eventId);  } -/* -SMART_EVENT_UPDATE_OOC -SMART_EVENT_SPELLHIT -SMART_EVENT_RANGE -SMART_EVENT_RESPAWN -SMART_EVENT_SUMMONED_UNIT -SMART_EVENT_ACCEPTED_QUEST -SMART_EVENT_REWARD_QUEST -SMART_EVENT_TARGET_BUFFED -SMART_EVENT_SUMMON_DESPAWNED -SMART_EVENT_AI_INIT -SMART_EVENT_DATA_SET -SMART_EVENT_TEXT_OVER -SMART_EVENT_TIMED_EVENT_TRIGGERED -SMART_EVENT_UPDATE -SMART_EVENT_LINK -SMART_EVENT_GOSSIP_SELECT -SMART_EVENT_JUST_CREATED -SMART_EVENT_GOSSIP_HELLO -SMART_EVENT_DEATH -*/ -  int SmartGameObjectAI::Permissible(const GameObject* g)  {      if (g->GetAIName() == "SmartGameObjectAI") diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 1b414029366..f564bce1e25 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2778,6 +2778,12 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui              ProcessAction(e, NULL, var0);              break;          } +        case SMART_EVENT_ACTION_DONE: +        { +            if (e.event.doAction.eventId != var0) +                return; +            ProcessAction(e, unit, var0); +        }          default:              sLog->outErrorDb("SmartScript::ProcessEvent: Unhandled Event type %u", e.GetEventType());              break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index bf84f39747a..b01aaf5434c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -475,63 +475,76 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)                  break;              }              case SMART_EVENT_TRANSPORT_ADDCREATURE: -                { -                    if (e.event.transportAddCreature.creature && !IsCreatureValid(e, e.event.transportAddCreature.creature)) -                        return false; -                    break; -                } +            { +                if (e.event.transportAddCreature.creature && !IsCreatureValid(e, e.event.transportAddCreature.creature)) +                    return false; +                break; +            }              case SMART_EVENT_MOVEMENTINFORM: +            { +                if (e.event.movementInform.type > NULL_MOTION_TYPE)                  { -                    if (e.event.movementInform.type > NULL_MOTION_TYPE) -                    { -                        sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses invalid Motion type %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.movementInform.type); -                        return false; -                    } -                    break; +                    sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses invalid Motion type %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.movementInform.type); +                    return false;                  } +                break; +            }              case SMART_EVENT_DATA_SET: -                { -                    if (!IsMinMaxValid(e, e.event.dataSet.cooldownMin, e.event.dataSet.cooldownMax)) -                        return false; -                    break; -                } +            { +                if (!IsMinMaxValid(e, e.event.dataSet.cooldownMin, e.event.dataSet.cooldownMax)) +                    return false; +                break; +            }              case SMART_EVENT_AREATRIGGER_ONTRIGGER: -                { -                    if (e.event.areatrigger.id && !IsAreaTriggerValid(e, e.event.areatrigger.id)) -                        return false; -                    break; -                } +            { +                if (e.event.areatrigger.id && !IsAreaTriggerValid(e, e.event.areatrigger.id)) +                    return false; +                break; +            }              case SMART_EVENT_TEXT_OVER:                  //if (e.event.textOver.textGroupID && !IsTextValid(e, e.event.textOver.textGroupID)) return false;// 0 is a valid text group!                  break;              case SMART_EVENT_LINK: +            { +                if (e.link && e.link == e.event_id)                  { -                    if (e.link && e.link == e.event_id) -                    { -                        sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u, Event %u, Link Event is linking self (infinite loop), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id); -                        return false; -                    } -                    break; +                    sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u, Event %u, Link Event is linking self (infinite loop), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id); +                    return false;                  } +                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_IS_BEHIND_TARGET: +            {                  if (!IsMinMaxValid(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax))                      return false;                  break; +            }              case SMART_EVENT_GAME_EVENT_START:              case SMART_EVENT_GAME_EVENT_END: +            { +                GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap(); +                if (e.event.gameEvent.gameEventId >= events.size() || !events[e.event.gameEvent.gameEventId].isValid()) +                    return false; +                break; +            } +            case SMART_EVENT_ACTION_DONE: +            { +                if (e.event.doAction.eventId < EventId::EVENT_SPELLCLICK || e.event.doAction.eventId > EventId::EVENT_CHARGE)                  { -                    GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap(); -                    if (e.event.gameEvent.gameEventId >= events.size() || !events[e.event.gameEvent.gameEventId].isValid()) -                        return false; -                    break; +                    sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses invalid event id %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.doAction.eventId); +                    return false;                  } +                break; +            }              case SMART_EVENT_GO_STATE_CHANGED:              case SMART_EVENT_GO_EVENT_INFORM:              case SMART_EVENT_TIMED_EVENT_TRIGGERED: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index b82d0724f53..2291c21bf71 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -82,81 +82,81 @@ const uint32 SmartPhaseMask[SMART_EVENT_PHASE_COUNT][2] =  enum SMART_EVENT  { -    SMART_EVENT_UPDATE_IC                = 0,       //1             // InitialMin, InitialMax, RepeatMin, RepeatMax -    SMART_EVENT_UPDATE_OOC               = 1,       //1             // InitialMin, InitialMax, RepeatMin, RepeatMax -    SMART_EVENT_HEALT_PCT                = 2,       //1             // HPMin%, HPMax%,  RepeatMin, RepeatMax -    SMART_EVENT_MANA_PCT                 = 3,       //1             // ManaMin%, ManaMax%, RepeatMin, RepeatMax -    SMART_EVENT_AGGRO                    = 4,       //1             // NONE -    SMART_EVENT_KILL                     = 5,       //1             // CooldownMin0, CooldownMax1, playerOnly2, else creature entry3 -    SMART_EVENT_DEATH                    = 6,       //1             // NONE -    SMART_EVENT_EVADE                    = 7,       //1             // NONE -    SMART_EVENT_SPELLHIT                 = 8,       //1             // SpellID, School, CooldownMin, CooldownMax -    SMART_EVENT_RANGE                    = 9,       //1             // MinDist, MaxDist, RepeatMin, RepeatMax -    SMART_EVENT_OOC_LOS                  = 10,      //1             // NoHostile, MaxRnage, CooldownMin, CooldownMax -    SMART_EVENT_RESPAWN                  = 11,      //1             // type, MapId, ZoneId -    SMART_EVENT_TARGET_HEALTH_PCT        = 12,      //1             // HPMin%, HPMax%, RepeatMin, RepeatMax -    SMART_EVENT_TARGET_CASTING           = 13,      //1             // RepeatMin, RepeatMax -    SMART_EVENT_FRIENDLY_HEALTH          = 14,      //1             // HPDeficit, Radius, RepeatMin, RepeatMax -    SMART_EVENT_FRIENDLY_IS_CC           = 15,      //1             // Radius, RepeatMin, RepeatMax -    SMART_EVENT_FRIENDLY_MISSING_BUFF    = 16,      //1             // SpellId, Radius, RepeatMin, RepeatMax -    SMART_EVENT_SUMMONED_UNIT            = 17,      //1             // CreatureId(0 all), CooldownMin, CooldownMax -    SMART_EVENT_TARGET_MANA_PCT          = 18,      //1             // ManaMin%, ManaMax%, RepeatMin, RepeatMax -    SMART_EVENT_ACCEPTED_QUEST           = 19,      //1             // QuestID(0any) -    SMART_EVENT_REWARD_QUEST             = 20,      //1             // QuestID(0any) -    SMART_EVENT_REACHED_HOME             = 21,      //1             // NONE -    SMART_EVENT_RECEIVE_EMOTE            = 22,      //1             // EmoteId, CooldownMin, CooldownMax, condition, val1, val2, val3 -    SMART_EVENT_HAS_AURA                 = 23,      //1             // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax -    SMART_EVENT_TARGET_BUFFED            = 24,      //1             // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax -    SMART_EVENT_RESET                    = 25,      //1             // Called after combat, when the creature respawn and spawn. - -    SMART_EVENT_IC_LOS                   = 26,      //1             // NoHostile, MaxRnage, CooldownMin, CooldownMax -    SMART_EVENT_PASSENGER_BOARDED        = 27,      //1             // CooldownMin, CooldownMax -    SMART_EVENT_PASSENGER_REMOVED        = 28,      //1             // CooldownMin, CooldownMax -    SMART_EVENT_CHARMED                  = 29,      //1             // NONE -    SMART_EVENT_CHARMED_TARGET           = 30,      //1             // NONE -    SMART_EVENT_SPELLHIT_TARGET          = 31,      //1             // SpellID, School, CooldownMin, CooldownMax -    SMART_EVENT_DAMAGED                  = 32,      //1             // MinDmg, MaxDmg, CooldownMin, CooldownMax -    SMART_EVENT_DAMAGED_TARGET           = 33,      //1             // MinDmg, MaxDmg, CooldownMin, CooldownMax -    SMART_EVENT_MOVEMENTINFORM           = 34,      //1             // MovementType(any), PointID -    SMART_EVENT_SUMMON_DESPAWNED         = 35,      //1             // Entry, CooldownMin, CooldownMax -    SMART_EVENT_CORPSE_REMOVED           = 36,      //1             // NONE -    SMART_EVENT_AI_INIT                  = 37,      //1             // NONE -    SMART_EVENT_DATA_SET                 = 38,      //1             // Id, Value, CooldownMin, CooldownMax -    SMART_EVENT_WAYPOINT_START           = 39,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_WAYPOINT_REACHED         = 40,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_TRANSPORT_ADDPLAYER      = 41,      //1             // NONE -    SMART_EVENT_TRANSPORT_ADDCREATURE    = 42,      //1             // Entry (0 any) -    SMART_EVENT_TRANSPORT_REMOVE_PLAYER  = 43,      //1             // NONE -    SMART_EVENT_TRANSPORT_RELOCATE       = 44,      //1             // PointId -    SMART_EVENT_INSTANCE_PLAYER_ENTER    = 45,      //1             // Team (0 any), CooldownMin, CooldownMax -    SMART_EVENT_AREATRIGGER_ONTRIGGER    = 46,      //1             // TriggerId(0 any) -    SMART_EVENT_QUEST_ACCEPTED           = 47,      //1             // none -    SMART_EVENT_QUEST_OBJ_COPLETETION    = 48,      //1             // none -    SMART_EVENT_QUEST_COMPLETION         = 49,      //1             // none -    SMART_EVENT_QUEST_REWARDED           = 50,      //1             // none -    SMART_EVENT_QUEST_FAIL               = 51,      //1             // none -    SMART_EVENT_TEXT_OVER                = 52,      //1             // GroupId from creature_text,  creature entry who talks (0 any) -    SMART_EVENT_RECEIVE_HEAL             = 53,      //1             // MinHeal, MaxHeal, CooldownMin, CooldownMax -    SMART_EVENT_JUST_SUMMONED            = 54,      //1             // none -    SMART_EVENT_WAYPOINT_PAUSED          = 55,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_WAYPOINT_RESUMED         = 56,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_WAYPOINT_STOPPED         = 57,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_WAYPOINT_ENDED           = 58,      //1             // PointId(0any), pathID(0any) -    SMART_EVENT_TIMED_EVENT_TRIGGERED    = 59,      //1             // id -    SMART_EVENT_UPDATE                   = 60,      //1             // InitialMin, InitialMax, RepeatMin, RepeatMax -    SMART_EVENT_LINK                     = 61,      //1             // INTERNAL USAGE, no params, used to link together multiple events, does not use any extra resources to iterate event lists needlessly -    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_COMPLETED         = 65,      //1             // none -    SMART_EVENT_DUMMY_EFFECT             = 66,      //1             // spellId, effectIndex -    SMART_EVENT_IS_BEHIND_TARGET         = 67,      //1             // cooldownMin, CooldownMax -    SMART_EVENT_GAME_EVENT_START         = 68,      //1             // game_event.Entry -    SMART_EVENT_GAME_EVENT_END           = 69,      //1             // game_event.Entry -    SMART_EVENT_GO_STATE_CHANGED         = 70,      //1             // go state -    SMART_EVENT_GO_EVENT_INFORM          = 71,      //1             // eventId - -    SMART_EVENT_END                      = 72, +    SMART_EVENT_UPDATE_IC                = 0,       // InitialMin, InitialMax, RepeatMin, RepeatMax +    SMART_EVENT_UPDATE_OOC               = 1,       // InitialMin, InitialMax, RepeatMin, RepeatMax +    SMART_EVENT_HEALT_PCT                = 2,       // HPMin%, HPMax%,  RepeatMin, RepeatMax +    SMART_EVENT_MANA_PCT                 = 3,       // ManaMin%, ManaMax%, RepeatMin, RepeatMax +    SMART_EVENT_AGGRO                    = 4,       // NONE +    SMART_EVENT_KILL                     = 5,       // CooldownMin0, CooldownMax1, playerOnly2, else creature entry3 +    SMART_EVENT_DEATH                    = 6,       // NONE +    SMART_EVENT_EVADE                    = 7,       // NONE +    SMART_EVENT_SPELLHIT                 = 8,       // SpellID, School, CooldownMin, CooldownMax +    SMART_EVENT_RANGE                    = 9,       // MinDist, MaxDist, RepeatMin, RepeatMax +    SMART_EVENT_OOC_LOS                  = 10,      // NoHostile, MaxRnage, CooldownMin, CooldownMax +    SMART_EVENT_RESPAWN                  = 11,      // type, MapId, ZoneId +    SMART_EVENT_TARGET_HEALTH_PCT        = 12,      // HPMin%, HPMax%, RepeatMin, RepeatMax +    SMART_EVENT_TARGET_CASTING           = 13,      // RepeatMin, RepeatMax +    SMART_EVENT_FRIENDLY_HEALTH          = 14,      // HPDeficit, Radius, RepeatMin, RepeatMax +    SMART_EVENT_FRIENDLY_IS_CC           = 15,      // Radius, RepeatMin, RepeatMax +    SMART_EVENT_FRIENDLY_MISSING_BUFF    = 16,      // SpellId, Radius, RepeatMin, RepeatMax +    SMART_EVENT_SUMMONED_UNIT            = 17,      // CreatureId(0 all), CooldownMin, CooldownMax +    SMART_EVENT_TARGET_MANA_PCT          = 18,      // ManaMin%, ManaMax%, RepeatMin, RepeatMax +    SMART_EVENT_ACCEPTED_QUEST           = 19,      // QuestID(0any) +    SMART_EVENT_REWARD_QUEST             = 20,      // QuestID(0any) +    SMART_EVENT_REACHED_HOME             = 21,      // NONE +    SMART_EVENT_RECEIVE_EMOTE            = 22,      // EmoteId, CooldownMin, CooldownMax, condition, val1, val2, val3 +    SMART_EVENT_HAS_AURA                 = 23,      // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax +    SMART_EVENT_TARGET_BUFFED            = 24,      // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax +    SMART_EVENT_RESET                    = 25,      // Called after combat, when the creature respawn and spawn. +    SMART_EVENT_IC_LOS                   = 26,      // NoHostile, MaxRnage, CooldownMin, CooldownMax +    SMART_EVENT_PASSENGER_BOARDED        = 27,      // CooldownMin, CooldownMax +    SMART_EVENT_PASSENGER_REMOVED        = 28,      // CooldownMin, CooldownMax +    SMART_EVENT_CHARMED                  = 29,      // NONE +    SMART_EVENT_CHARMED_TARGET           = 30,      // NONE +    SMART_EVENT_SPELLHIT_TARGET          = 31,      // SpellID, School, CooldownMin, CooldownMax +    SMART_EVENT_DAMAGED                  = 32,      // MinDmg, MaxDmg, CooldownMin, CooldownMax +    SMART_EVENT_DAMAGED_TARGET           = 33,      // MinDmg, MaxDmg, CooldownMin, CooldownMax +    SMART_EVENT_MOVEMENTINFORM           = 34,      // MovementType(any), PointID +    SMART_EVENT_SUMMON_DESPAWNED         = 35,      // Entry, CooldownMin, CooldownMax +    SMART_EVENT_CORPSE_REMOVED           = 36,      // NONE +    SMART_EVENT_AI_INIT                  = 37,      // NONE +    SMART_EVENT_DATA_SET                 = 38,      // Id, Value, CooldownMin, CooldownMax +    SMART_EVENT_WAYPOINT_START           = 39,      // PointId(0any), pathID(0any) +    SMART_EVENT_WAYPOINT_REACHED         = 40,      // PointId(0any), pathID(0any) +    SMART_EVENT_TRANSPORT_ADDPLAYER      = 41,      // NONE +    SMART_EVENT_TRANSPORT_ADDCREATURE    = 42,      // Entry (0 any) +    SMART_EVENT_TRANSPORT_REMOVE_PLAYER  = 43,      // NONE +    SMART_EVENT_TRANSPORT_RELOCATE       = 44,      // PointId +    SMART_EVENT_INSTANCE_PLAYER_ENTER    = 45,      // Team (0 any), CooldownMin, CooldownMax +    SMART_EVENT_AREATRIGGER_ONTRIGGER    = 46,      // TriggerId(0 any) +    SMART_EVENT_QUEST_ACCEPTED           = 47,      // none +    SMART_EVENT_QUEST_OBJ_COPLETETION    = 48,      // none +    SMART_EVENT_QUEST_COMPLETION         = 49,      // none +    SMART_EVENT_QUEST_REWARDED           = 50,      // none +    SMART_EVENT_QUEST_FAIL               = 51,      // none +    SMART_EVENT_TEXT_OVER                = 52,      // GroupId from creature_text,  creature entry who talks (0 any) +    SMART_EVENT_RECEIVE_HEAL             = 53,      // MinHeal, MaxHeal, CooldownMin, CooldownMax +    SMART_EVENT_JUST_SUMMONED            = 54,      // none +    SMART_EVENT_WAYPOINT_PAUSED          = 55,      // PointId(0any), pathID(0any) +    SMART_EVENT_WAYPOINT_RESUMED         = 56,      // PointId(0any), pathID(0any) +    SMART_EVENT_WAYPOINT_STOPPED         = 57,      // PointId(0any), pathID(0any) +    SMART_EVENT_WAYPOINT_ENDED           = 58,      // PointId(0any), pathID(0any) +    SMART_EVENT_TIMED_EVENT_TRIGGERED    = 59,      // id +    SMART_EVENT_UPDATE                   = 60,      // InitialMin, InitialMax, RepeatMin, RepeatMax +    SMART_EVENT_LINK                     = 61,      // INTERNAL USAGE, no params, used to link together multiple events, does not use any extra resources to iterate event lists needlessly +    SMART_EVENT_GOSSIP_SELECT            = 62,      // menuID, actionID +    SMART_EVENT_JUST_CREATED             = 63,      // none +    SMART_EVENT_GOSSIP_HELLO             = 64,      // none +    SMART_EVENT_FOLLOW_COMPLETED         = 65,      // none +    SMART_EVENT_DUMMY_EFFECT             = 66,      // spellId, effectIndex +    SMART_EVENT_IS_BEHIND_TARGET         = 67,      // cooldownMin, CooldownMax +    SMART_EVENT_GAME_EVENT_START         = 68,      // game_event.Entry +    SMART_EVENT_GAME_EVENT_END           = 69,      // game_event.Entry +    SMART_EVENT_GO_STATE_CHANGED         = 70,      // go state +    SMART_EVENT_GO_EVENT_INFORM          = 71,      // eventId +    SMART_EVENT_ACTION_DONE              = 72,      // eventId (SharedDefines.EventId) + +    SMART_EVENT_END                      = 73,  };  struct SmartEvent @@ -356,6 +356,11 @@ struct SmartEvent              uint32 eventId;          } eventInform; +        struct  +        { +            uint32 eventId; +        } doAction; +                  struct          {              uint32 param1; @@ -1173,6 +1178,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] =      {SMART_EVENT_GAME_EVENT_END,            SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },      {SMART_EVENT_GO_STATE_CHANGED,          SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },      {SMART_EVENT_GO_EVENT_INFORM,           SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, +    {SMART_EVENT_ACTION_DONE,                 SMART_SCRIPT_TYPE_MASK_CREATURE },  };  enum SmartEventFlags  | 
