private void ProcessHelloPacket(HelloPacket pkt) { db = new Database(); //Console.Out.WriteLine(pkt.GUID + ": " + pkt.Password); if ((account = db.Verify(pkt.GUID, pkt.Password)) == null) { Console.WriteLine(@"Account not verified."); account = Database.CreateGuestAccount(pkt.GUID); if (account == null) { Console.WriteLine(@"Account is null!"); SendPacket(new FailurePacket { Message = "Invalid account." }); Disconnect(); db.Dispose(); return; } } if ((ip = db.CheckIp(skt.RemoteEndPoint.ToString().Split(':')[0])) == null) { Console.WriteLine(@"Error checking IP"); SendPacket(new FailurePacket { Message = "Error with IP." }); Disconnect(); db.Dispose(); return; } Console.WriteLine(@"Client trying to connect!"); ConnectedBuild = pkt.BuildVersion; if (!RealmManager.TryConnect(this)) { if (CheckAccountInUse(account.AccountId) != false) { Console.WriteLine(@"Account in use: " + account.AccountId + @" " + account.Name); account = null; SendPacket(new FailurePacket { Message = "Account in use! Retrying..." }); Disconnect(); db.Dispose(); return; } account = null; SendPacket(new FailurePacket { Message = "Failed to connect." }); Disconnect(); Console.WriteLine(@"Failed to connect."); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(@"Client loading world"); Console.ForegroundColor = ConsoleColor.White; var world = RealmManager.GetWorld(pkt.GameId); if (world == null) { SendPacket(new FailurePacket { Message = "Invalid world." }); Disconnect(); Console.WriteLine(@"Invalid world"); } Console.ForegroundColor = ConsoleColor.Yellow; try { Console.WriteLine(@"Client joined world " + world.Id); } catch { Console.WriteLine(@"Error! World is null"); } Console.ForegroundColor = ConsoleColor.White; if (world.Id == -6) //Test World (world as Test).LoadJson(pkt.MapInfo); else if (world.IsLimbo) world = world.GetInstance(this); var seed = (uint) ((long) Environment.TickCount*pkt.GUID.GetHashCode())%uint.MaxValue; Random = new wRandom(seed); targetWorld = world.Id; if (!ConnectedBuildStartsWith(clientVer)) { SendPacket(new TextPacket { BubbleTime = 1, Stars = -1, Name = "", Text = "Your client is outdated. Visit http://forum.zerorealms.com to get the latest one!" }); Disconnect(); /*SendPacket(new TextBoxPacket { Button1 = "Okay", Message = "Your client is outdated, Click <font color=\"white\"><b><a href='http://forum.zerorealms.com'>Here</a></b></font> to get the latest one!", Title = "Outdated Client!", Type = "NewClient" });*/ } SendPacket(new MapInfoPacket { Width = world.Map.Width, Height = world.Map.Height, Name = world.Name, Seed = seed, Background = world.Background, AllowTeleport = world.AllowTeleport, ShowDisplays = world.ShowDisplays, Music = world.GetMusic(Random), ClientXML = world.ClientXML, ExtraXML = world.ExtraXML, SendMusic = ConnectedBuildStartsWith(clientVer) }); stage = ProtocalStage.Handshaked; } }
private void ProcessHelloPacket(HelloPacket pkt) { if (isGuest) Disconnect(); db = new Database(); // Console.Out.WriteLine(pkt.GUID + ": " + pkt.Password); // Console.Out.WriteLine(pkt.GUID + ": " + account.AccountId + @" " + account.Name); if ((account = db.Verify(pkt.GUID, pkt.Password)) == null) { Console.WriteLine(@"Account not verified."); account = Database.CreateGuestAccount(pkt.GUID); if (account == null) { Console.WriteLine(@"Account is null!"); SendPacket(new FailurePacket { Message = "Invalid account." }); Disconnect(); return; } } if ((ip = db.CheckIp(skt.RemoteEndPoint.ToString().Split(':')[0])) == null) { Console.WriteLine(@"Error checking IP"); SendPacket(new FailurePacket { Message = "Error with IP." }); Disconnect(); return; } Console.WriteLine(@"Client trying to connect!" + account.AccountId + @" " + account.Name); ConnectedBuild = pkt.BuildVersion; if (!RealmManager.TryConnect(this)) { if (CheckAccountInUse(account.AccountId) != false) { Console.WriteLine(@"Account in use: " + account.AccountId + @" " + account.Name); account = null; SendPacket(new FailurePacket { Message = "Account in use! Retrying..." }); Disconnect(); return; } account = null; SendPacket(new FailurePacket { Message = "Failed to connect." }); Disconnect(); Console.WriteLine(@"Failed to connect."); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(@"Client loading world"); Console.ForegroundColor = ConsoleColor.White; var world = RealmManager.GetWorld(pkt.GameId); if (world == null) { SendPacket(new FailurePacket { Message = "Invalid world, Restart your Client." }); Disconnect(); Console.WriteLine(@"Invalid world"); } Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(@"Client joined world " + world.Id); Console.ForegroundColor = ConsoleColor.White; if (world.Id == -6) //Test World (world as Test).LoadJson(pkt.MapInfo); else if (world.IsLimbo) world = world.GetInstance(this); var seed = (uint) ((long) Environment.TickCount*pkt.GUID.GetHashCode())%uint.MaxValue; Random = new wRandom(seed); targetWorld = world.Id; SendPacket(new MapInfoPacket { Width = world.Map.Width, Height = world.Map.Height, Name = world.Name, Seed = seed, Background = world.Background, AllowTeleport = world.AllowTeleport, ShowDisplays = world.ShowDisplays, ClientXML = world.ClientXML, ExtraXML = world.ExtraXML }); stage = ProtocalStage.Handshaked; } }