Example #1
0
 public static void SendMoveToPacketToSingleClient <T>(IRealmClient client, Unit movingUnit, uint moveTime,
                                                       MonsterMoveFlags moveFlags, IEnumerable <T> waypoints) where T : IPathVertex
 {
     using (RealmPacketOut packet =
                MovementHandler.ConstructMultiWaypointMovePacket <T>(movingUnit, moveTime, moveFlags, waypoints))
         client.Send(packet, false);
 }
Example #2
0
        public static void SendEnterTransport(Unit unit)
        {
            ITransportInfo transportInfo = unit.TransportInfo;

            MovementHandler.SendMonsterMoveTransport(unit, transportInfo.Position - unit.Position,
                                                     unit.TransportPosition);
        }
Example #3
0
        public static void HandleMovement(IRealmClient client, RealmPacketIn packet)
        {
            Character activeCharacter = client.ActiveCharacter;
            Unit      mover           = activeCharacter.MoveControl.Mover as Unit;

            if (mover == null || !mover.UnitFlags.HasFlag((Enum)UnitFlags.PlayerControlled) ||
                mover.UnitFlags.HasFlag((Enum)UnitFlags.Influenced))
            {
                return;
            }
            mover.CancelEmote();
            EntityId id = packet.ReadPackedEntityId();

            if (packet.PacketId.RawId == 721U)
            {
                mover = client.ActiveCharacter.Map.GetObject(id) as Unit;
                if (mover == null)
                {
                    return;
                }
            }

            uint clientTime;

            if (!MovementHandler.ReadMovementInfo(packet, activeCharacter, mover, out clientTime))
            {
                return;
            }
            MovementHandler.BroadcastMovementInfo((PacketIn)packet, activeCharacter, mover, clientTime);
        }
Example #4
0
        /// <summary>Jumping while not moving when mounted</summary>
        public static void HandleMountSpecialAnim(IRealmClient client, RealmPacketIn packet)
        {
            Character activeCharacter = client.ActiveCharacter;

            if (!(activeCharacter.MoveControl.Mover is Unit) || !((Unit)activeCharacter.MoveControl.Mover).IsMounted)
            {
                return;
            }
            MovementHandler.SendMountSpecialAnim(client);
        }
Example #5
0
 public static void SendMoveToPacket <T>(Unit movingUnit, int speed, MonsterMoveFlags moveFlags,
                                         LinkedListNode <T> firstNode) where T : IPathVertex
 {
     if (!movingUnit.IsAreaActive)
     {
         return;
     }
     using (RealmPacketOut packet =
                MovementHandler.ConstructMultiWaypointMovePacket <T>(movingUnit, speed, moveFlags, firstNode))
         movingUnit.SendPacketToArea(packet, true, false, Locale.Any, new float?());
 }
Example #6
0
 public static void SendMoveToPacket <T>(Unit movingUnit, uint moveTime, MonsterMoveFlags moveFlags,
                                         IEnumerable <T> waypoints) where T : IPathVertex
 {
     if (!movingUnit.IsAreaActive)
     {
         return;
     }
     using (RealmPacketOut packet =
                MovementHandler.ConstructMultiWaypointMovePacket <T>(movingUnit, moveTime, moveFlags, waypoints))
         movingUnit.SendPacketToArea(packet, true, false, Locale.Any, new float?());
 }
Example #7
0
        //[PacketHandler(RealmServerOpCode.CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE)]
        public static void HandleChangeSeatsOnControlledVehicle(IRealmClient client, RealmPacketIn packet)
        {
            var guid       = packet.ReadPackedEntityId();
            var oldVehicle = client.ActiveCharacter.Map.GetObject(guid) as Vehicle;

            if (oldVehicle == null)
            {
                return;
            }
            uint clientTime;

            MovementHandler.ReadMovementInfo(packet, client.ActiveCharacter, oldVehicle, out clientTime);

            var newVehicleGuid = packet.ReadPackedEntityId();
            var newVehicle     = client.ActiveCharacter.Map.GetObject(newVehicleGuid) as Vehicle;

            if (newVehicle == null)
            {
                return;
            }

            var passenger = client.ActiveCharacter;
            var oldSeat   = passenger.m_vehicleSeat;

            //shouldnt need this, but fall back just in case
            if (oldSeat == null)
            {
                oldVehicle.FindSeatOccupiedBy(passenger);
            }

            //uh oh!
            if (oldSeat == null)
            {
                return;
            }

            var seatId  = packet.ReadByte();
            var newSeat = newVehicle.Seats[seatId];

            //something went wrong
            if (newSeat == null)
            {
                return;
            }

            //cheater?!
            if (newSeat.Passenger != null)
            {
                return;
            }

            oldSeat.ClearSeat();
            newSeat.Enter(passenger);
        }
Example #8
0
        public static void HandleMoveNotActiveMover(IRealmClient client, RealmPacketIn packet)
        {
            Character activeCharacter = client.ActiveCharacter;
            EntityId  id    = packet.ReadPackedEntityId();
            Unit      mover = client.ActiveCharacter.Map.GetObject(id) as Unit;

            if (mover == null)
            {
                return;
            }
            mover.CancelEmote();
            uint clientTime;

            if (!MovementHandler.ReadMovementInfo(packet, activeCharacter, mover, out clientTime))
            {
                return;
            }
            MovementHandler.BroadcastMovementInfo((PacketIn)packet, activeCharacter, mover, clientTime);
        }
Example #9
0
        private static void BroadcastMovementInfo(PacketIn packet, Character chr, Unit mover, uint clientTime)
        {
            ICollection <IRealmClient> nearbyClients = chr.GetNearbyClients <Character>(false);

            if (nearbyClients.Count <= 0)
            {
                return;
            }
            using (RealmPacketOut pak = new RealmPacketOut(packet.PacketId))
            {
                int num = mover.EntityId.WritePacked((BinaryWriter)pak);
                packet.Position = packet.HeaderSize + num;
                pak.Write(packet.ReadBytes(packet.RemainingLength));
                foreach (IRealmClient client in (IEnumerable <IRealmClient>)nearbyClients)
                {
                    MovementHandler.SendMovementPacket(client, pak, 10 + num, clientTime);
                }
            }
        }
Example #10
0
        public static void HandleChangeSeatsOnControlledVehicle(IRealmClient client, RealmPacketIn packet)
        {
            EntityId id1      = packet.ReadPackedEntityId();
            Vehicle  vehicle1 = client.ActiveCharacter.Map.GetObject(id1) as Vehicle;

            if (vehicle1 == null)
            {
                return;
            }
            uint clientTime;

            MovementHandler.ReadMovementInfo(packet, client.ActiveCharacter, (Unit)vehicle1, out clientTime);
            EntityId id2      = packet.ReadPackedEntityId();
            Vehicle  vehicle2 = client.ActiveCharacter.Map.GetObject(id2) as Vehicle;

            if (vehicle2 == null)
            {
                return;
            }
            Character   activeCharacter = client.ActiveCharacter;
            VehicleSeat vehicleSeat     = activeCharacter.m_vehicleSeat;

            if (vehicleSeat == null)
            {
                vehicle1.FindSeatOccupiedBy((Unit)activeCharacter);
            }
            if (vehicleSeat == null)
            {
                return;
            }
            byte        num  = packet.ReadByte();
            VehicleSeat seat = vehicle2.Seats[(int)num];

            if (seat == null || seat.Passenger != null)
            {
                return;
            }
            vehicleSeat.ClearSeat();
            seat.Enter((Unit)activeCharacter);
        }
Example #11
0
 //[PacketHandler(RealmServerOpCode.CMSG_DISMISS_CONTROLLED_VEHICLE)]
 public static void HandleDismissControlledVehicle(IRealmClient client, RealmPacketIn packet)
 {
     client.ActiveCharacter.Vehicle.ClearAllSeats(true);
     MovementHandler.HandleMovement(client, packet);
 }