Пример #1
0
        public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
        {
            if (mEvadeDisabled)
            {
                GetScript().ProcessEventsFor(SmartEvents.Evade);
                return;
            }

            if (!IsAIControlled())
            {
                me.AttackStop();
                return;
            }

            if (!_EnterEvadeMode())
                return;

            me.AddUnitState(UnitState.Evade);

            GetScript().ProcessEventsFor(SmartEvents.Evade);//must be after aura clear so we can cast spells from db

            SetRun(mRun);

            if (HasEscortState(SmartEscortState.Escorting))
            {
                AddEscortState(SmartEscortState.Returning);
                ReturnToLastOOCPos();
            }
            else
            {
                Unit target = !mFollowGuid.IsEmpty() ? Global.ObjAccessor.GetUnit(me, mFollowGuid) : null;
                Unit owner = me.GetCharmerOrOwner();

                if (target)
                {
                    me.GetMotionMaster().MoveFollow(target, mFollowDist, mFollowAngle);
                    // evade is not cleared in MoveFollow, so we can't keep it
                    me.ClearUnitState(UnitState.Evade);
                }
                else if (owner)
                {
                    me.GetMotionMaster().MoveFollow(owner, SharedConst.PetFollowDist, SharedConst.PetFollowAngle);
                    me.ClearUnitState(UnitState.Evade);
                }
                else
                    me.GetMotionMaster().MoveTargetedHome();
            }

            if (!HasEscortState(SmartEscortState.Escorting)) //dont mess up escort movement after combat
                SetRun(mRun);
        }
Пример #2
0
        public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
        {
            _scheduler.CancelAll();
            summons.DespawnAll();

            Creature darnavan = ObjectAccessor.GetCreature(me, _darnavanGUID);

            if (darnavan != null)
            {
                darnavan.DespawnOrUnsummon();
            }

            _DespawnAtEvade();
        }
Пример #3
0
            // Do not reload Creature templates on evade mode enter - prevent visual lost
            public override void EnterEvadeMode(EvadeReason why)
            {
                if (me.IsInEvadeMode() || !me.IsAlive())
                {
                    return;
                }

                Unit owner = me.GetCharmerOrOwner();

                me.CombatStop(true);
                if (owner && !me.HasUnitState(UnitState.Follow))
                {
                    me.GetMotionMaster().Clear(false);
                    me.GetMotionMaster().MoveFollow(owner, SharedConst.PetFollowDist, me.GetFollowAngle(), MovementSlot.Active);
                }
            }
Пример #4
0
        public override void EnterEvadeMode(EvadeReason why)
        {
            if (!me.IsAlive())
            {
                me.GetMotionMaster().MoveIdle();
                me.CombatStop(true);
                EngagementOver();
                return;
            }

            Log.outDebug(LogFilter.Unit, "Guard entry: {0} enters evade mode.", me.GetEntry());

            me.RemoveAllAuras();
            me.CombatStop(true);
            EngagementOver();

            me.GetMotionMaster().MoveTargetedHome();
        }
Пример #5
0
        public override void EnterEvadeMode(EvadeReason why)
        {
            if (!me.IsAlive())
            {
                me.GetMotionMaster().MoveIdle();
                me.CombatStop(true);
                EngagementOver();
                return;
            }

            Log.outTrace(LogFilter.ScriptsAi, $"GuardAI::EnterEvadeMode: {me.GetGUID()} enters evade mode.");

            me.RemoveAllAuras();
            me.CombatStop(true);
            EngagementOver();

            me.GetMotionMaster().MoveTargetedHome();
        }
Пример #6
0
        public override void EnterEvadeMode(EvadeReason why)
        {
            TempSummon meSummon = me.ToTempSummon();

            if (meSummon)
            {
                Creature summoner = meSummon.GetSummonerCreatureBase();
                if (summoner)
                {
                    summoner.GetAI().DoAction(ActionIds.PetEvade);
                }
                else
                {
                    me.DespawnOrUnsummon();
                }
                return;
            }
            base.EnterEvadeMode(why);
        }
Пример #7
0
        public override void EnterEvadeMode(EvadeReason why)
        {
            if (!me.IsAlive())
            {
                me.GetMotionMaster().MoveIdle();
                me.CombatStop(true);
                me.DeleteThreatList();
                return;
            }

            Log.outDebug(LogFilter.Unit, "Guard entry: {0} enters evade mode.", me.GetEntry());

            me.RemoveAllAuras();
            me.DeleteThreatList();
            me.CombatStop(true);

            // Remove ChaseMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead
            if (me.GetMotionMaster().GetCurrentMovementGeneratorType() == MovementGeneratorType.Chase)
            {
                me.GetMotionMaster().MoveTargetedHome();
            }
        }
Пример #8
0
        public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
        {
            me.RemoveAllAuras();
            me.GetThreatManager().ClearAllThreat();
            me.CombatStop(true);
            me.SetLootRecipient(null);

            if (HasEscortState(EscortState.Escorting))
            {
                AddEscortState(EscortState.Returning);
                ReturnToLastPoint();
                Log.outDebug(LogFilter.Scripts, "EscortAI.EnterEvadeMode has left combat and is now returning to last point");
            }
            else
            {
                me.GetMotionMaster().MoveTargetedHome();
                if (_hasImmuneToNPCFlags)
                {
                    me.AddUnitFlag(UnitFlags.ImmuneToNpc);
                }
                Reset();
            }
        }
Пример #9
0
        public override void EnterEvadeMode(EvadeReason why)
        {
            List <Creature> triggers = new List <Creature>();

            me.GetCreatureListWithEntryInGrid(triggers, CreatureIds.WorldtriggerLarge);
            foreach (Creature trigger in triggers)
            {
                if (trigger.HasAura(SpellIds.SummonChampionPeriodic) || trigger.HasAura(SpellIds.WebFrontDoors) || trigger.HasAura(SpellIds.WebSideDoors))
                {
                    _DespawnAtEvade(25, trigger);
                }
            }
            _DespawnAtEvade(25);
            summons.DespawnAll();
            foreach (ObjectGuid gNerubian in _anubar)
            {
                Creature nerubian = ObjectAccessor.GetCreature(me, gNerubian);
                if (nerubian)
                {
                    nerubian.DespawnOrUnsummon();
                }
            }
        }
Пример #10
0
        public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
        {
            me.RemoveAllAuras();
            me.CombatStop(true);
            me.SetLootRecipient(null);

            EngagementOver();

            if (HasEscortState(EscortState.Escorting))
            {
                AddEscortState(EscortState.Returning);
                ReturnToLastPoint();
                Log.outDebug(LogFilter.ScriptsAi, $"EscortAI.EnterEvadeMode has left combat and is now returning to last point {me.GetGUID()}");
            }
            else
            {
                me.GetMotionMaster().MoveTargetedHome();
                if (_hasImmuneToNPCFlags)
                {
                    me.SetImmuneToNPC(true);
                }
                Reset();
            }
        }
Пример #11
0
        public bool _EnterEvadeMode(EvadeReason why = EvadeReason.Other)
        {
            if (!me.IsAlive())
            {
                return(false);
            }

            me.RemoveAurasOnEvade();

            // sometimes bosses stuck in combat?
            me.DeleteThreatList();
            me.CombatStop(true);
            me.SetLootRecipient(null);
            me.ResetPlayerDamageReq();
            me.SetLastDamagedTime(0);
            me.SetCannotReachTarget(false);

            if (me.IsInEvadeMode())
            {
                return(false);
            }

            return(true);
        }
Пример #12
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     me.DespawnOrUnsummon();
 }
Пример #13
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     me.CombatStop(true);
 }
Пример #14
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     base.EnterEvadeMode(why);
     ResetTimer = 2000;
 }
Пример #15
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     instance.DoUseDoorOrButton(instance.GetGuidData(GameObjectIds.MainGateDoor));
     base.EnterEvadeMode(why);
 }
Пример #16
0
 public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
 {
     base._DespawnAtEvade(10);
 }
Пример #17
0
 public override void EnterEvadeMode(EvadeReason why)
 {
 }
Пример #18
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     summons.DespawnAll();
     _DespawnAtEvade();
 }
Пример #19
0
 public override void EnterEvadeMode(EvadeReason why)
 {
     me.GetMotionMaster().Clear();
     base.EnterEvadeMode(why);
 }