Пример #1
0
        /// <summary>
        /// Handling the EnterMap action from GeneralDataPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="General">The GeneralDataPacket.</param>
        public static void Handle(Entities.GameClient client, GeneralDataPacket General)
        {
            if (!Core.Kernel.Clients.Contains(client.EntityUID))
            {
                client.NetworkClient.Disconnect("Not added in clients.");
                return;
            }

            ushort            SendMap  = client.Map.InheritanceMap;
            GeneralDataPacket mapEnter = new GeneralDataPacket(Enums.DataAction.EnterMap)
            {
                Id        = SendMap,
                Data1     = SendMap,
                Data3Low  = client.X,
                Data3High = client.Y
            };

            client.Send(mapEnter);
            using (var mapinfo = new Packets.MapInfoPacket())
            {
                mapinfo.MapID = SendMap;
                mapinfo.DocID = SendMap;                 // not entire sure what docid is, will figure this out later!
                foreach (Enums.MapTypeFlags flag in client.Map.Flags.Values)
                {
                    mapinfo.AddFlag(flag);
                }

                mapinfo.Finish();
                client.Send(mapinfo);
            }
        }
Пример #2
0
        /// <summary>
        /// Handling the EnterMap action from GeneralDataPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="General">The GeneralDataPacket.</param>
        public static void Handle(Entities.GameClient client, GeneralDataPacket General)
        {
            if (!Core.Kernel.Clients.Contains(client.EntityUID))
            {
                client.NetworkClient.Disconnect("Not added in clients.");
                return;
            }

            ushort SendMap = client.Map.InheritanceMap;
            GeneralDataPacket mapEnter = new GeneralDataPacket(Enums.DataAction.EnterMap)
            {
                Id = SendMap,
                Data1 = SendMap,
                Data3Low = client.X,
                Data3High = client.Y
            };
            client.Send(mapEnter);
            using (var mapinfo = new Packets.MapInfoPacket())
            {
                mapinfo.MapID = SendMap;
                mapinfo.DocID = SendMap; // not entire sure what docid is, will figure this out later!
                foreach (Enums.MapTypeFlags flag in client.Map.Flags.Values)
                    mapinfo.AddFlag(flag);

                mapinfo.Finish();
                client.Send(mapinfo);
            }
        }
Пример #3
0
        /// <summary>
        /// Teleports the client without changing map.
        /// </summary>
        /// <param name="map">The map to teleport to.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        /// <returns>Returns true if the client was teleported.</returns>
        public bool Teleport2(ushort x, ushort y, bool isdynamic = false)
        {
            AttackPacket = null;

            ushort SendMap = Map.InheritanceMap;
            Send(new Packets.GeneralDataPacket()
                 {
                 	Id = EntityUID,
                 	Data1 =SendMap,
                 	Data2 = 0,
                 	Timestamp = ProjectX_V3_Lib.Time.SystemTime.Now,
                 	Action = Enums.DataAction.Teleport,
                 	Data3Low = x,
                 	Data3High = y,
                 	Data4 = 0,
                 	Data5 = 0,
                 });
            Send(new Packets.GeneralDataPacket()
                 {
                 	Id = EntityUID,
                 	Data1 = SendMap,
                 	Data2 = 0,
                 	Timestamp = ProjectX_V3_Lib.Time.SystemTime.Now,
                 	Action = Enums.DataAction.ChangeMap,
                 	Data3Low = x,
                 	Data3High = y,
                 	Data4 = 0,
                 	Data5 = 0,
                 });

            using (var mapinfo = new Packets.MapInfoPacket())
            {
                mapinfo.MapID = SendMap;
                mapinfo.DocID = SendMap;
                foreach (Enums.MapTypeFlags flag in Map.Flags.Values)
                    mapinfo.AddFlag(flag);

                mapinfo.Finish();
                this.Send(mapinfo);
            }

            X = x;
            Y = y;

            if (!isdynamic)
            {
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerX", X);
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerY", Y);
            }
            return true;
        }
Пример #4
0
        /// <summary>
        /// Teleports the client to a specific place.
        /// </summary>
        /// <param name="map">The map to teleport to.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        /// <returns>Returns true if the client was teleported.</returns>
        public bool Teleport(Maps.Map map, ushort x, ushort y, bool isdynamic = false)
        {
            if (!Core.Kernel.Maps.Contains(map.MapID) && !isdynamic)
                return false;

            Maps.Map lMap = Map;
            if (!lMap.LeaveMap(this))
                return false;

            if (DynamicMap != null)
            {
                LeaveDynamicMap(false);
            }
            DynamicMap = null;

            ushort lastmap = lMap.MapID;

            if (!map.EnterMap(this))
                return false;

            if (isdynamic)
                DynamicMap = (Maps.DynamicMap)map;

            AttackPacket = null;

            RemoveFlag1(Enums.Effect1.Riding);

            ushort SendMap = map.InheritanceMap;
            Send(new Packets.GeneralDataPacket()
                 {
                 	Id = EntityUID,
                 	Data1 =SendMap,
                 	Data2 = 0,
                 	Timestamp = ProjectX_V3_Lib.Time.SystemTime.Now,
                 	Action = Enums.DataAction.Teleport,
                 	Data3Low = x,
                 	Data3High = y,
                 	Data4 = 0,
                 	Data5 = 0,
                 });
            Send(new Packets.GeneralDataPacket()
                 {
                 	Id = EntityUID,
                 	Data1 = SendMap,
                 	Data2 = 0,
                 	Timestamp = ProjectX_V3_Lib.Time.SystemTime.Now,
                 	Action = Enums.DataAction.ChangeMap,
                 	Data3Low = x,
                 	Data3High = y,
                 	Data4 = 0,
                 	Data5 = 0,
                 });

            using (var mapinfo = new Packets.MapInfoPacket())
            {
                mapinfo.MapID = SendMap;
                mapinfo.DocID = SendMap;
                foreach (Enums.MapTypeFlags flag in map.Flags.Values)
                    mapinfo.AddFlag(flag);

                mapinfo.Finish();
                this.Send(mapinfo);
            }

            if (lMap.MapType != Enums.MapType.Tournament)
            {
                LastMapID = lastmap;
                LastMapX = X;
                LastMapY = Y;
            }
            X = x;
            Y = y;
            if (lMap.MapType != Enums.MapType.Tournament)
            {
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerLastMapID", lastmap);
            }
            if (!isdynamic && Map.MapType != Enums.MapType.Tournament)
            {
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerMapID", Map.MapID);
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerX", X);
                Database.CharacterDatabase.UpdateCharacter(this, "PlayerY", Y);
            }
            #region Clear
            using (var clear = Packets.Message.MessageCore.ClearScore())
            {
                this.Send(clear);
            }
            #endregion
            return true;
        }