diff options
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 3 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 | 
5 files changed, 31 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 4a577f5a530..5e08149570d 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -42,6 +42,7 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c)      // spawn in run mode      me->SetWalk(false);      mRun = false; +    mEvadeDisabled = false;      mLastOOCPos = me->GetPosition(); @@ -415,6 +416,12 @@ void SmartAI::EnterEvadeMode(EvadeReason /*why*/)      if (!me->IsAlive() || me->IsInEvadeMode())          return; +    if (mEvadeDisabled) +    { +        GetScript()->ProcessEventsFor(SMART_EVENT_EVADE); +        return; +    } +      me->RemoveAurasOnEvade();      me->AddUnitState(UNIT_STATE_EVADE); @@ -693,6 +700,11 @@ void SmartAI::SetSwim(bool swim)      me->SetSwim(swim);  } +void SmartAI::SetEvadeDisabled(bool disable) +{ +    mEvadeDisabled = disable; +} +  void SmartAI::sGossipHello(Player* player)  {      GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player); diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index fe703bc2083..46363143c6f 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -172,6 +172,8 @@ class TC_GAME_API SmartAI : public CreatureAI          void SetSwim(bool swim = true); +        void SetEvadeDisabled(bool disable = true); +          void SetInvincibilityHpLevel(uint32 level) { mInvincibilityHpLevel = level; }          void sGossipHello(Player* player) override; @@ -217,6 +219,7 @@ class TC_GAME_API SmartAI : public CreatureAI          uint32 GetWPCount() const { return mWayPoints ? uint32(mWayPoints->size()) : 0; }          bool mCanRepeatPath;          bool mRun; +        bool mEvadeDisabled;          bool mCanAutoAttack;          bool mCanCombatMove;          bool mForcedPaused; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 9a3e864051a..13d0002e317 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2356,6 +2356,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u              delete targets;              break;          } +        case SMART_ACTION_DISABLE_EVADE: +        { +            if (!IsSmart()) +                break; + +            ENSURE_AI(SmartAI, me->AI())->SetEvadeDisabled(e.action.disableEvade.disable != 0); +            break; +        }          default:              TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());              break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index acb5022bb3f..adb47ece74e 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1244,6 +1244,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)          case SMART_ACTION_SUMMON_CREATURE_GROUP:          case SMART_ACTION_MOVE_OFFSET:          case SMART_ACTION_SET_CORPSE_DELAY: +        case SMART_ACTION_DISABLE_EVADE:              break;          default:              TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index ebebc761e0c..f52bc951d97 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -551,8 +551,9 @@ enum SMART_ACTION      SMART_ACTION_MOVE_OFFSET                        = 114,      SMART_ACTION_RANDOM_SOUND                       = 115,    // soundId1, soundId2, soundId3, soundId4, soundId5, onlySelf      SMART_ACTION_SET_CORPSE_DELAY                   = 116,    // timer +    SMART_ACTION_DISABLE_EVADE                      = 117,    // 0/1 (1 = disabled, 0 = enabled) -    SMART_ACTION_END                                = 117 +    SMART_ACTION_END                                = 118  };  struct SmartAction @@ -1041,6 +1042,11 @@ struct SmartAction              uint32 timer;          } corpseDelay; +        struct +        { +            uint32 disable; +        } disableEvade; +          //! Note for any new future actions          //! All parameters must have type uint32  | 
