Code:
static void AppendConnect(Connect appendConnect, Client.GameState client)
{
if (client.LoggedIn == true)
{
client.Disconnect();
return;
}
if (client.JustCreated)
{
string Message = "NEW_ROLE";
if (client.Account.EntityID != 0)
Message = "ANSWER_OK";
if (client.Account.State == Database.AccountTable.AccountState.Banned)
Message = "You are banned.";
if (client.Account.State == Database.AccountTable.AccountState.NotActivated)
{
Message = "You cannot login until your account is activated.";
}
if (Message == "ANSWER_OK")
{
if (ServerBase.Kernel.GamePool.ContainsKey(client.Account.EntityID))
{
Client.GameState aClient = null;
ServerBase.Kernel.GamePool.TryGetValue(client.Account.EntityID, out aClient);
if (aClient != null)
{
aClient.DoSetOffline = false;
aClient.Disconnect();
}
else
ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
aClient.Disconnect();
}
client.JustCreated = false;
DoLogin(client);
return;
}
client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
}
Database.AccountTable Account = null;
if (ServerBase.Kernel.AwaitingPool.ContainsKey(appendConnect.Identifier))
{
ServerBase.Kernel.AwaitingPool.TryGetValue(appendConnect.Identifier, out Account);
ServerBase.Kernel.AwaitingPool.Remove(appendConnect.Identifier);
if (Account != null)
{
client.Account = Account;
string Message = "NEW_ROLE";
if (client.Account.EntityID != 0)
Message = "ANSWER_OK";
if (Account.State == Database.AccountTable.AccountState.Banned)
Message = "You are banned.";
if (Account.State == Database.AccountTable.AccountState.NotActivated)
{
Message = "You cannot login until your account is activated.";
}
if (Message == "ANSWER_OK")
{
if (ServerBase.Kernel.GamePool.ContainsKey(client.Account.EntityID))
{
Client.GameState aClient = null;
// ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
ServerBase.Kernel.GamePool.TryGetValue(client.Account.EntityID, out aClient);
if (aClient != null)
{
aClient.DoSetOffline = false;
aClient.Disconnect();
}
else
ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
}
if (ServerBase.Kernel.GamePool.ContainsKey(client.Account.EntityID))
{
Client.GameState aClient = null;
ServerBase.Kernel.GamePool.TryGetValue(client.Account.EntityID, out aClient);
if (aClient != null)
{
aClient.DoSetOffline = false;
aClient.Disconnect();
}
else
ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
aClient.Disconnect();
// Client.GameState d = ServerBase.Kernel.GamePool[client.Account.EntityID];
// ServerBase.Kernel.GamePool.Remove(d.Account.EntityID);
// d.Disconnect();
//Message = "Your account logged in";
// DoLogin(d);
//return;
}
if (ServerBase.Kernel.GamePool.ContainsKey(client.Account.EntityID))
{
Client.GameState aClient = null;
ServerBase.Kernel.GamePool.TryGetValue(client.Account.EntityID, out aClient);
if (aClient != null)
{
aClient.DoSetOffline = false;
aClient.Disconnect();
}
else
ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
ServerBase.Kernel.GamePool.Remove(client.Account.EntityID);
client.Send(new Message("Account was in use! Relogin now.", "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
return;
}
DoLogin(client);
client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
}
else
{
string Messages = "NEW_ROLE";
client.Send(new Message(Messages, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
}
}
}
}
static void DoLogin(object _client)
{
Client.GameState client = _client as Client.GameState;
client.ReadyToPlay();
if (ServerBase.Kernel.GamePool.ContainsKey(client.Account.EntityID))
{
Client.GameState d = ServerBase.Kernel.GamePool[client.Account.EntityID];
ServerBase.Kernel.GamePool.Remove(d.Account.EntityID);
d.Disconnect();
}
Database.EntityTable.LoadEntity(client);
string Message = "ANSWER_OK";
if (client.Entity == null || client.Entity.Name == null)
{
Message = "There is something wrong. You may not login.";
client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
return;
}
if (ServerBase.Kernel.GamePool.Count == Program.PlayerCap && client.Entity.VIPLevel == 0)
{
Message = "Player limit exceeded. (Online players: " + ServerBase.Kernel.GamePool + "/" + Program.PlayerCap + ")";
client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
return;
}
client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.Dialog));
client.Logger = new Logger(client.Entity.Name);
ServerBase.Kernel.GamePool.Add(client.Entity.UID, client);
if (!ServerBase.Kernel.WasInGamePool.ContainsKey(client.Account.EntityID))
ServerBase.Kernel.WasInGamePool.Add(client.Entity.UID, client);
Database.EntityTable.UpdateOnlineStatus(client, true);
client.Send(new GamePackets.CharacterInfo(client));
string IP = client.Socket.RemoteEndPoint.ToString().Split(':')[0].ToString();
client.Account.IP = IP;
client.Account.Save();
if (!client.LoggedIn)
Console.WriteLine(client.Entity.Name + " has logged on. {" + client.Account.IP + "}");
client.LoggedIn = true;
client.Action = 2;
}






