public void Disconnect(string type)
{
//We open with a try to catch bad exception errors
try
{
//Defined by the string type, we choose the action this case normal disconnection
if (type == "normal")
{
//Make sure the character is not null
if (Character != null)
{
//Update and set account online to 0
MsSQL.UpdateData("UPDATE users SET online='0' WHERE id='" + Player.AccountName + "'");
MsSQL.UpdateData("UPDATE character SET online='0' WHERE name='" + Character.Information.Name + "'");
//Remove client from client list
Systems.clients.Remove(this);
//Write information to the console
Console.WriteLine("Character: {1} Logged off [Online Players: {0}]", Systems.clients.Count, Character.Information.Name);
//If the character is in a party
if (Character.Network.Party != null)
{
//We call remove void for removing the party member
RemoveOnDisconnect(Character.Network.Party, this);
}
//If the character is in a guild
if (Character.Network.Guild != null)
{
//We call remove void to update guild with offline status etc.
RemoveMeFromGuildDisconnect(Character.Network.Guild, Character);
}
//If the character has an active transportation
if (this.Character.Transport.Right)
//Despawn the transport
this.Character.Transport.Horse.DeSpawnMe();
//If the character has an active grabpet
if (this.Character.Grabpet.Active)
//Despawn the grabpet
this.Character.Grabpet.Details.DeSpawnMe();
//If the character has an open excange window
if (this.Character.Network.Exchange.Window)
//Close the exchange window (for other player).
this.Exchange_Close();
//If the character is sitting while closing the client
if (Character.State.Sitting)
{
//Check if the sit down timer is running
if (SitDown_HPMP_RegenTimer != null)
{
//Stop sit down timer
StopSitDownTimer();
}
}
//If there is still an active attack timer
if (Timer.Attack != null)
//Close the timer
StopAttackTimer();
//If the player has an active buff
if (Character.Action.Buff.count > 0)
//Close the buff
BuffAllClose();
//Despawn our character
DeSpawnMe();
//If mp regeneration timer is not null
if (MPRegen != null)
//Stop regen timer
StopMPRegen();
//If hp regeneration timer is not null
if (HPRegen != null)
//Stop regen timer
StopHPRegen();
//Save (remove blue data)
//Load blue data
LoadBlues(Character);
//Get list of equipped items
List<Global.slotItem> EquipedItems = new List<Global.slotItem>();
//If slot is lower then 13 we add the item to the list
for (byte q = 0; q < 13; q++)
{
//Add the equipped items to the list
EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0));
}
//Load blues for each item
foreach (Global.slotItem sitem in EquipedItems)
{
//If the item has a blue valua that matches our database of blues
if (Data.ItemBlue.ContainsKey(sitem.dbID))
{
//Load blues for the item id
LoadBluesid(sitem.dbID);
//If the total amount of blues is not 0
if (Data.ItemBlue[sitem.dbID].totalblue != 0)
//Remove blue information
AddRemoveBlues(this, sitem, false);
}
}
//Save player current location
SavePlayerPosition();
//Save player information
SavePlayerInfo();
//Set ingame bool to false
Character.InGame = false;
//If player is not null
if (Player != null)
{
//Dispose of player
Player.Dispose();
}
//Stop ping timer
PingStop();
//Close client
client.Close();
}
}
//If our disconnection type is banning.
if (type == "ban")
{
//Make sure the character is not null
if (Character != null)
{
//Update and set account online to 0
MsSQL.UpdateData("UPDATE users SET online='0' WHERE id='" + Player.AccountName + "'");
MsSQL.UpdateData("UPDATE character SET online='0' WHERE name='" + Character.Information.Name + "'");
//Remove client from client list
Systems.clients.Remove(this);
//Write information to the console
Console.WriteLine("Character: {1} has been banned hack attempt [Online Players: {0}]", Systems.clients.Count, Character.Information.Name);
//If the character is in a party
if (Character.Network.Party != null)
{
//We call remove void for removing the party member
RemoveOnDisconnect(Character.Network.Party, this);
}
//If the character is in a guild
if (Character.Network.Guild != null)
{
//We call remove void to update guild with offline status etc.
}
//If the character has an active transportation
if (this.Character.Transport.Right)
//Despawn the transport
this.Character.Transport.Horse.DeSpawnMe();
//If the character has an active grabpet
if (this.Character.Grabpet.Active)
//Despawn the grabpet
this.Character.Grabpet.Details.DeSpawnMe();
//If the character has an open excange window
if (this.Character.Network.Exchange.Window)
//Close the exchange window (for other player).
this.Exchange_Close();
//If the character is sitting while closing the client
if (Character.State.Sitting)
{
//Check if the sit down timer is running
if (SitDown_HPMP_RegenTimer != null)
{
//Stop sit down timer
StopSitDownTimer();
}
}
//If there is still an active attack timer
if (Timer.Attack != null)
//Close the timer
StopAttackTimer();
//If the player has an active buff
if (Character.Action.Buff.count > 0)
//Close the buff
BuffAllClose();
//Despawn our character
DeSpawnMe();
//If mp regeneration timer is not null
if (MPRegen != null)
//Stop regen timer
StopMPRegen();
//If hp regeneration timer is not null
if (HPRegen != null)
//Stop regen timer
StopHPRegen();
//Save (remove blue data)
//Load blue data
LoadBlues(Character);
//Get list of equipped items
List<Global.slotItem> EquipedItems = new List<Global.slotItem>();
//If slot is lower then 13 we add the item to the list
for (byte q = 0; q < 13; q++)
{
//Add the equipped items to the list
EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0));
}
//Load blues for each item
foreach (Global.slotItem sitem in EquipedItems)
{
//If the item has a blue valua that matches our database of blues
if (Data.ItemBlue.ContainsKey(sitem.dbID))
{
//Load blues for the item id
LoadBluesid(sitem.dbID);
//If the total amount of blues is not 0
if (Data.ItemBlue[sitem.dbID].totalblue != 0)
//Remove blue information
AddRemoveBlues(this, sitem, false);
}
}
//Save player current location
SavePlayerPosition();
//Save player information
SavePlayerInfo();
//Set ingame bool to false
Character.InGame = false;
//If player is not null
if (Player != null)
{
//Dispose of player
Player.Dispose();
}
//Stop ping timer
PingStop();
//Close client
client.Close();
}
}
}
//When a error happens
catch (Exception ex)
{
//Write the exception error to the console
Console.WriteLine("Disconnect.cs error {0}", ex);
//Write info to the debug logger
Systems.Debugger.Write(ex);
}
}