/// <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); } }
/// <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); } }
/// <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; }
/// <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; }