public override void MovementInform(MovementGeneratorType type, uint id) { if (type == MovementGeneratorType.Point && id == 0) { _events.ScheduleEvent(Events.SayWarden1, TimeSpan.FromSeconds(1)); } }
public override void OnMovementGeneratorFinalized(MovementGeneratorType type) { if (type == MovementGeneratorType.TimedFleeing) { EnterEvadeMode(EvadeReason.Other); } }
public override void AttackStart(Unit who) { // dont allow charmed npcs to act on their own if (me.HasFlag(UnitFields.Flags, UnitFlags.PlayerControlled)) { if (who && mCanAutoAttack) { me.Attack(who, true); } return; } if (who && me.Attack(who, me.IsWithinMeleeRange(who))) { if (mCanCombatMove) { SetRun(mRun); MovementGeneratorType type = me.GetMotionMaster().GetMotionSlotType(MovementSlot.Active); if (type == MovementGeneratorType.Waypoint || type == MovementGeneratorType.Point) { me.StopMoving(); } me.GetMotionMaster().MoveChase(who); } } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type == MovementGeneratorType.Point && id == ActionIds.PackWalk) { _doFacing = true; } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type == MovementGeneratorType.Point) { _nextMovement = (MovementIds)(id + 1); } }
public override void MovementInform(MovementGeneratorType type, uint id) { // Receives notification when pet reaches stay or follow owner switch (type) { case MovementGeneratorType.Point: { // Pet is returning to where stay was clicked. data should be // pet's GUIDLow since we set that as the waypoint ID if (id == me.GetGUID().GetCounter() && me.GetCharmInfo().IsReturning()) { ClearCharmInfoFlags(); me.GetCharmInfo().SetIsAtStay(true); me.GetMotionMaster().Clear(); me.GetMotionMaster().MoveIdle(); } break; } case MovementGeneratorType.Follow: { // If data is owner's GUIDLow then we've reached follow point, // otherwise we're probably chasing a creature if (me.GetCharmerOrOwner() && me.GetCharmInfo() != null && id == me.GetCharmerOrOwner().GetGUID().GetCounter() && me.GetCharmInfo().IsReturning()) { ClearCharmInfoFlags(); me.GetCharmInfo().SetIsFollowing(true); } break; } default: break; } }
public override void MovementInform(MovementGeneratorType moveType, uint data) { if (moveType == MovementGeneratorType.Follow && data == _summonerGuid.GetCounter()) { me.CastSpell((Unit)null, Spells.DarkOffering, false); me.DespawnOrUnsummon(1000); } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (id == EventId.Jump) { me.RemoveAurasDueToSpell(SpellIds.AssassinVisual); DoZoneInCombat(); } }
/// <summary> /// Initializes a new instance of the MovementGenerator class. /// </summary> /// <param name="unit">The owner of the generator instance.</param> public MovementGenerator(Unit unit) { this.mover = unit; generatorType = MovementGeneratorType.None; this.mover.LocationChanged += OnLocationChanged; this.mover.Relocated += mover_Relocated; }
public override void MovementInform(MovementGeneratorType type, uint pointId) { if (type == MovementGeneratorType.Point && pointId == Misc.PointLanding) { me.Dismount(); me.RemoveFlag(UnitFields.Flags, UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc); DoCastAOE(SpellIds.InvaderTaunt); } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point || id != DeprogrammingData.POINT_DESPAWN) { return; } me.DespawnOrUnsummon(); }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point || id != Misc.PointTargetBonestormPlayer) { return; } // lock movement me.GetMotionMaster().MoveIdle(); }
public override void MovementInform(MovementGeneratorType MovementType, uint Data) { if ((MovementType == MovementGeneratorType.Point && Data == EventId.SmartEscortLastOCCPoint) || MovementType == MovementGeneratorType.Follow) me.ClearUnitState(UnitState.Evade); GetScript().ProcessEventsFor(SmartEvents.Movementinform, null, (uint)MovementType, Data); if (MovementType != MovementGeneratorType.Point || !HasEscortState(SmartEscortState.Escorting)) return; MovepointReached(Data); }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point || id != Misc.PointKrickIntro) { return; } Talk(TextIds.SayKrickOutro1); _phase = KrickPhase.Outro; _events.Reset(); _events.ScheduleEvent(Events.Outro1, 1000); }
public override void MovementInform(MovementGeneratorType uiType, uint uiPointId) { if (uiType != MovementGeneratorType.Point) { return; } if (uiPointId == 1) { me.SetFacingTo(4.714f); } }
public override void MovementInform(MovementGeneratorType type, uint id) { switch (id) { case 1: me.HandleEmoteCommand(Emote.StateWorkChopwood); break; case 2: DoCast(me, SpellBuffSleep); break; } }
public GenericMovementGenerator(MoveSplineInit splineInit, MovementGeneratorType type, uint id, uint arrivalSpellId = 0, ObjectGuid arrivalSpellTargetGuid = default) { _splineInit = splineInit; _type = type; _pointId = id; _duration = new(); _arrivalSpellId = arrivalSpellId; _arrivalSpellTargetGuid = arrivalSpellTargetGuid; Mode = MovementGeneratorMode.Default; Priority = MovementGeneratorPriority.Normal; Flags = MovementGeneratorFlags.InitializationPending; BaseUnitState = UnitState.Roaming; }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Follow) { return; } if (instance.GetGuidData(DataType.Bronjahm).GetCounter() != id) { return; } me.CastSpell((Unit)null, SpellIds.ConsumeSoul, true); me.DespawnOrUnsummon(); }
public static IMovementGenerator SelectMovementAI(Creature creature) { MovementGeneratorType type = MovementGeneratorType.Idle; if (creature.GetPlayerMovingMe() == null) { type = creature.GetDefaultMovementType(); } return(type switch { MovementGeneratorType.Random => new RandomMovementGenerator(), MovementGeneratorType.Waypoint => new WaypointMovementGenerator(), MovementGeneratorType.Idle => new IdleMovementGenerator(), _ => null, });
public override void MovementInform(MovementGeneratorType moveType, uint pointId) { if (moveType != MovementGeneratorType.Point || !HasEscortState(EscortState.Escorting)) { return; } //Combat start position reached, continue waypoint movement if (pointId == EscortPointIds.LastPoint) { Log.outDebug(LogFilter.Scripts, "EscortAI has returned to original position before combat"); me.SetWalk(!m_bIsRunning); RemoveEscortState(EscortState.Returning); if (m_uiWPWaitTimer == 0) { m_uiWPWaitTimer = 1; } } else if (pointId == EscortPointIds.Home) { Log.outDebug(LogFilter.Scripts, "EscortAI has returned to original home location and will continue from beginning of waypoint list."); CurrentWPIndex = 0; m_uiWPWaitTimer = 1; } else { var currentWp = WaypointList[CurrentWPIndex]; //Make sure that we are still on the right waypoint if (currentWp.Id != pointId) { Log.outError(LogFilter.Misc, $"TSCR ERROR: EscortAI reached waypoint out of order {pointId}, expected {currentWp.Id}, creature entry {me.GetEntry()}"); return; } Log.outDebug(LogFilter.Scripts, $"EscortAI Waypoint {currentWp.Id} reached"); //Call WP function WaypointReached(currentWp.Id); m_uiWPWaitTimer = currentWp.WaitTimeMs + 1; ++CurrentWPIndex; } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point && type != MovementGeneratorType.Effect) { return; } switch (id) { case 0: if (_stage != 0) { if (me.GetDistance2d(MiscData.ToCCommonLoc[1].GetPositionX(), MiscData.ToCCommonLoc[1].GetPositionY()) < 6.0f) { // Middle of the room _stage = 1; } else { // Landed from Hop backwards (start trample) if (Global.ObjAccessor.GetPlayer(me, _trampleTargetGUID)) { _stage = 4; } else { _stage = 6; } } } break; case 1: // Finish trample _movementFinish = true; break; case 2: instance.DoUseDoorOrButton(instance.GetGuidData(GameObjectIds.MainGateDoor)); me.RemoveFlag(UnitFields.Flags, UnitFlags.NonAttackable | UnitFlags.NotSelectable); me.SetReactState(ReactStates.Aggressive); me.SetInCombatWithZone(); break; default: break; } }
public static MovementGenerator SelectMovementGenerator(Unit unit) { MovementGeneratorType type = unit.GetDefaultMovementType(); Creature creature = unit.ToCreature(); if (creature != null && creature.GetPlayerMovingMe() == null) { type = creature.GetDefaultMovementType(); } return(type switch { MovementGeneratorType.Random => new RandomMovementGenerator(), MovementGeneratorType.Waypoint => new WaypointMovementGenerator(), MovementGeneratorType.Idle => new IdleMovementGenerator(), _ => null, });
public override void MovementInform(MovementGeneratorType moveType, uint pointId) { if (moveType != MovementGeneratorType.Point || !HasEscortState(eEscortState.Escorting)) { return; } //Combat start position reached, continue waypoint movement if (pointId == 0xFFFFFF) { Log.outDebug(LogFilter.Scripts, "EscortAI has returned to original position before combat"); me.SetWalk(!m_bIsRunning); RemoveEscortState(eEscortState.Returning); if (m_uiWPWaitTimer == 0) { m_uiWPWaitTimer = 1; } } else if (pointId == 0xFFFFFE) { Log.outDebug(LogFilter.Scripts, "EscortAI has returned to original home location and will continue from beginning of waypoint list."); WPIndex = 0; m_uiWPWaitTimer = 1; } else { //Make sure that we are still on the right waypoint if (GetCurrentWaypoint().id != pointId) { Log.outDebug(LogFilter.Server, "TSCR ERROR: EscortAI reached waypoint out of order {0}, expected {1}, creature entry {2}", pointId, GetCurrentWaypoint().id, me.GetEntry()); return; } Log.outDebug(LogFilter.Scripts, "EscortAI Waypoint {0} reached", GetCurrentWaypoint().id); //Call WP function WaypointReached(GetCurrentWaypoint().id); m_uiWPWaitTimer = GetCurrentWaypoint().WaitTimeMs + 1; ++WPIndex; } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point) { return; } SetCombatMovement(true); AttackStart(me.GetVictim()); if (_step < Misc.hadronoxStep.Length - 1) { return; } DoCastAOE(SpellIds.WebFrontDoors); DoCastAOE(SpellIds.WebSideDoors); _doorsWebbed = true; DoZoneInCombat(); }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point || id != 0) { return; } me.SetDisplayId(EyeOfAcherus.EyeSmallDisplayId); me.CastSpell(me, EyeOfAcherus.SpellEyeFlight, true); me.Say(EyeOfAcherus.SayEyeUnderControl, Language.Universal); if (me.GetCharmer() && me.GetCharmer().IsTypeId(TypeId.Player)) { me.GetCharmer().ToPlayer().SetClientControl(me, true); } }
public override void MovementInform(MovementGeneratorType moveType, uint Id) { // no action allowed if there is no escort if (!HasEscortState(EscortState.Escorting)) { return; } //Combat start position reached, continue waypoint movement if (moveType == MovementGeneratorType.Point) { if (_pauseTimer == 0) { _pauseTimer = 2000; } if (Id == EscortPointIds.LastPoint) { Log.outDebug(LogFilter.Scripts, "EscortAI.MovementInform has returned to original position before combat"); me.SetWalk(!_running); RemoveEscortState(EscortState.Returning); } else if (Id == EscortPointIds.Home) { Log.outDebug(LogFilter.Scripts, "EscortAI.MovementInform: returned to home location and restarting waypoint path"); _started = false; } } else if (moveType == MovementGeneratorType.Waypoint) { Cypher.Assert(Id < _path.nodes.Count, $"EscortAI.MovementInform: referenced movement id ({Id}) points to non-existing node in loaded path"); WaypointNode waypoint = _path.nodes[(int)Id]; Log.outDebug(LogFilter.Scripts, $"EscortAI.MovementInform: waypoint node {waypoint.id} reached"); // last point if (Id == _path.nodes.Count - 1) { _started = false; _ended = true; _pauseTimer = 1000; } } }
public override void MovementInform(MovementGeneratorType movementType, uint pointId) { if (movementType == MovementGeneratorType.Waypoint && pointId == 2) { me.SetSheath(SheathState.Melee); me.RemoveAllAuras(); Player owner = me.GetCharmerOrOwner().ToPlayer(); if (owner) { owner.RemoveAura(SpellIds.EyeFlightBoost); for (UnitMoveType i = 0; i < UnitMoveType.Max; ++i) { me.SetSpeedRate(i, owner.GetSpeedRate(i)); } Talk(TextIds.TalkControl, owner); } me.SetDisableGravity(false); DoCast(me, SpellIds.EyeFlight); } if (movementType == MovementGeneratorType.Point && pointId == 1) { me.SetDisableGravity(true); me.SetControlled(true, UnitState.Root); _scheduler.Schedule(System.TimeSpan.FromSeconds(5), task => { DoCast(me, SpellIds.EyeFlightBoost); me.SetControlled(false, UnitState.Root); Player owner = me.GetCharmerOrOwner().ToPlayer(); if (owner) { for (UnitMoveType i = 0; i < UnitMoveType.Max; ++i) { me.SetSpeedRate(i, owner.GetSpeedRate(i)); } Talk(TextIds.TalkMoveStart, owner); } me.GetMotionMaster().MovePath(me.GetEntry() * 100, false); }); } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point) return; if (id == 1) { Creature colossus = instance.GetCreature(GDDataTypes.DrakkariColossus); if (colossus) { colossus.GetAI().DoAction(Misc.ActionUnfreezeColossus); if (colossus.GetAI().GetData(Misc.DataIntroDone) == 0) colossus.GetAI().SetData(Misc.DataIntroDone, 1); colossus.SetInCombatWithZone(); me.DespawnOrUnsummon(); } } }
public override void MovementInform(MovementGeneratorType movementType, uint id) { if (movementType == MovementGeneratorType.Point && id == EventId.SmartEscortLastOCCPoint) { me.ClearUnitState(UnitState.Evade); } GetScript().ProcessEventsFor(SmartEvents.Movementinform, null, (uint)movementType, id); if (!HasEscortState(SmartEscortState.Escorting)) { return; } if (movementType != MovementGeneratorType.Point && id == EventId.SmartEscortLastOCCPoint) { _OOCReached = true; } }
public override void MovementInform(MovementGeneratorType type, uint id) { ObjectGuid guid = _instance.GetGuidData(BossIds.Xt002); if (type == MovementGeneratorType.Follow && id == guid.GetCounter()) { Creature xt002 = ObjectAccessor.GetCreature(me, guid); if (xt002) { if (me.IsWithinMeleeRange(xt002)) { DoCast(xt002, SpellIds.ScrapbotRideVehicle); // Unapply vehicle aura again xt002.RemoveAurasDueToSpell(SpellIds.ScrapbotRideVehicle); me.DespawnOrUnsummon(); } } } }
public override void MovementInform(MovementGeneratorType type, uint id) { if (type != MovementGeneratorType.Point) { return; } switch (id) { case 0: instance.DoUseDoorOrButton(instance.GetGuidData(GameObjectIds.MainGateDoor)); me.RemoveFlag(UnitFields.Flags, UnitFlags.NonAttackable | UnitFlags.NotSelectable); me.SetReactState(ReactStates.Aggressive); me.SetInCombatWithZone(); break; default: break; } }