using Filter; using Filter.Database.Account; using Filter.Database.Character; using Filter.Database.GameFilter; using Filter.Networking.Instances; using Filter.Networking.Manager; using Filter.Utilities; using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Filter.Handlers.Manager { internal class Manager4Handle { public Manager4Handle() { } [ManagerPacketHandler(Manager4TypeClient.SelectCharacter)] public static void HandleSelectCharacter(ManagerClient ClientSocket, Packet ClientPacket) { byte num; if (ClientSocket.IsConnected != 0) { return; } if (ClientSocket.Account == null) { ClientSocket.Disconnect(); return; } if (!ClientPacket.ReadByte(out num)) { ClientSocket.Disconnect(); return; } if (num >= 5) { ClientSocket.Disconnect(); return; } ManagerClient clientSocket = ClientSocket; tCharacter _tCharacter = ( from nUserNo in Program.CharacterData.tCharacters where nUserNo.nUserNo == ClientSocket.Account.nEMID select nUserNo into nSlotNo where (int)nSlotNo.nSlotNo == (int)num select nSlotNo into bDeleted where (int)bDeleted.bDeleted == 0 select bDeleted).FirstOrDefault(); tCharacter _tCharacter1 = _tCharacter; clientSocket.Character = _tCharacter; if (_tCharacter1 == null) { ClientSocket.Disconnect(); return; } if (( from nCharNo in Program.GameFilterData.CharacterBans where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault() != null) { ClientSocket.Disconnect(); return; } LocationUpdate locationUpdate = ( from nCharNo in Program.GameFilterData.LocationUpdates where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); EXPClear eXPClear = ( from nCharNo in Program.GameFilterData.EXPClears where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); Jail jail = ( from nCharNo in Program.GameFilterData.Jails where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); Admin admin = ( from nCharNo in Program.GameFilterData.Admins where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); if (locationUpdate != null && jail == null) { tCharacter item = ( from nCharNo in Program.CharacterData.tCharacters where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); item.sLoginZone = Program.ConfigValues["Default_MapIndex"]; item.nLoginZoneX = Convert.ToInt32(Program.ConfigValues["Default_X"]); item.nLoginZoneY = Convert.ToInt32(Program.ConfigValues["Default_Y"]); Program.CharacterData.tCharacters.Attach(item); DbEntityEntry dbEntityEntry = Program.CharacterData.Entry(item); dbEntityEntry.Property((tCharacter Propery) => Propery.sLoginZone).IsModified = true; dbEntityEntry.Property((tCharacter Propery) => Propery.nLoginZoneX).IsModified = true; dbEntityEntry.Property((tCharacter Propery) => Propery.nLoginZoneY).IsModified = true; Program.CharacterData.SaveChanges(); ClientSocket.ReloadCharacter(); Program.GameFilterData.LocationUpdates.Remove(( from nCharNo in Program.GameFilterData.LocationUpdates where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault()); Program.GameFilterData.SaveChanges(); } if (eXPClear != null) { tCharacter _tCharacter2 = ( from nCharNo in Program.CharacterData.tCharacters where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); _tCharacter2.nExp = (long)0; Program.CharacterData.tCharacters.Attach(_tCharacter2); DbEntityEntry dbEntityEntry1 = Program.CharacterData.Entry(_tCharacter2); dbEntityEntry1.Property((tCharacter Propery) => Propery.nExp).IsModified = true; Program.CharacterData.SaveChanges(); ClientSocket.ReloadCharacter(); Program.GameFilterData.EXPClears.Remove(( from nCharNo in Program.GameFilterData.EXPClears where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault()); Program.GameFilterData.SaveChanges(); } if (jail != null && jail.OutTime > DateTime.Now) { tCharacter item1 = ( from nCharNo in Program.CharacterData.tCharacters where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); item1.sLoginZone = Program.ConfigValues["Prison_MapIndex"]; item1.nLoginZoneX = Convert.ToInt32(Program.ConfigValues["Prison_X"]); item1.nLoginZoneY = Convert.ToInt32(Program.ConfigValues["Prison_Y"]); TimeSpan span = Program.GetSpan(jail.OutTime); if (!Injection.IsInt16(Convert.ToString(span.Hours * 60 + span.Minutes))) { item1.nPrisonMin = 32767; } else { item1.nPrisonMin = Convert.ToInt16(span.Hours * 60 + span.Minutes); } Program.CharacterData.tCharacters.Attach(item1); DbEntityEntry dbEntityEntry2 = Program.CharacterData.Entry(item1); dbEntityEntry2.Property((tCharacter Propery) => Propery.sLoginZone).IsModified = true; dbEntityEntry2.Property((tCharacter Propery) => Propery.nLoginZoneX).IsModified = true; dbEntityEntry2.Property((tCharacter Propery) => Propery.nLoginZoneY).IsModified = true; dbEntityEntry2.Property((tCharacter Propery) => Propery.nPrisonMin).IsModified = true; Program.CharacterData.SaveChanges(); ClientSocket.ReloadCharacter(); } else if (jail != null && jail.OutTime < DateTime.Now) { tCharacter num1 = ( from nCharNo in Program.CharacterData.tCharacters where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault(); num1.sLoginZone = Program.ConfigValues["Default_MapIndex"]; num1.nLoginZoneX = Convert.ToInt32(Program.ConfigValues["Default_X"]); num1.nLoginZoneY = Convert.ToInt32(Program.ConfigValues["Default_Y"]); num1.nPrisonMin = 0; Program.CharacterData.tCharacters.Attach(num1); DbEntityEntry dbEntityEntry3 = Program.CharacterData.Entry(num1); dbEntityEntry3.Property((tCharacter Propery) => Propery.sLoginZone).IsModified = true; dbEntityEntry3.Property((tCharacter Propery) => Propery.nLoginZoneX).IsModified = true; dbEntityEntry3.Property((tCharacter Propery) => Propery.nLoginZoneY).IsModified = true; Program.CharacterData.SaveChanges(); ClientSocket.ReloadCharacter(); Program.GameFilterData.Jails.Remove(( from nCharNo in Program.GameFilterData.Jails where nCharNo.nCharNo == ClientSocket.Character.nCharNo select nCharNo).FirstOrDefault()); Program.GameFilterData.SaveChanges(); } if (ClientSocket.Character.nAdminLevel >= Convert.ToInt32(Program.ConfigValues["Connection_AdminLevel"]) && admin == null) { ClientSocket.Disconnect(); return; } ClientSocket.SentMessages = false; ClientSocket.Server.SendPacket(ClientPacket); } } }