void OnArrived(Creature owner) { if (_path == null || _path.nodes.Empty()) { return; } Cypher.Assert(_currentNode < _path.nodes.Count, $"WaypointMovementGenerator.OnArrived: tried to reference a node id ({_currentNode}) which is not included in path ({_path.id})"); WaypointNode waypoint = _path.nodes.ElementAt((int)_currentNode); if (waypoint.delay != 0) { owner.ClearUnitState(UnitState.RoamingMove); _nextMoveTime.Reset((int)waypoint.delay); } if (waypoint.eventId != 0 && RandomHelper.URand(0, 99) < waypoint.eventChance) { Log.outDebug(LogFilter.MapsScript, $"Creature movement start script {waypoint.eventId} at point {_currentNode} for {owner.GetGUID()}."); owner.ClearUnitState(UnitState.RoamingMove); owner.GetMap().ScriptsStart(ScriptsType.Waypoint, waypoint.eventId, owner, null); } // inform AI CreatureAI ai = owner.GetAI(); if (ai != null) { ai.MovementInform(MovementGeneratorType.Waypoint, (uint)_currentNode); ai.WaypointReached(waypoint.id, _path.id); } owner.UpdateCurrentWaypointInfo(waypoint.id, _path.id); }