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