void Teleport_Start()
{
try
{
lock (this)
{
//Checks before we continue
if (Character.Action.PickUping) return;
//Timer checks
StopTimers();
//Open the packet reader
PacketReader Reader = new PacketReader(PacketInformation.buffer);
//Teleport id
int teleportidinfo = Reader.Int32();
//Number
byte number = Reader.Byte();
//Teleport selected
int teleportselect = Reader.Int32();
Reader.Close();
//Find price information
int price = Data.TeleportPrice.Find(pc => (pc.ID == number)).price;
//If the user has less gold then it costs
if (this.Character.Information.Gold < price)
{
//Send error message
this.client.Send(Packet.IngameMessages(SERVER_TELEPORTSTART, IngameMessages.UIIT_MSG_INTERACTION_FAIL_NOT_ENOUGH_MONEY));
return;
}
//If the user level is lower then the required level
if (Data.TeleportPrice.Find(dd => (dd.ID == teleportselect)).level > 0 && Character.Information.Level < Data.TeleportPrice.Find(dd => (dd.ID == teleportselect)).level)
{
client.Send(Packet.IngameMessages(SERVER_TELEPORTSTART, IngameMessages.UIIT_MSG_INTERACTION_FAIL_OUT_OF_REQUIRED_LEVEL_FOR_TELEPORT));
return;
}
//If the user is currently with job transport (TODO).
//Update players gold
this.Character.Information.Gold -= price;
//Update players gold in database
SaveGold();
//Close buffs
BuffAllClose();
//Send teleport packet #1
this.client.Send(Packet.TeleportStart());
//Set state
this.Character.InGame = false;
//Update location
Teleport_UpdateXYZ(Convert.ToByte(teleportselect));
//Despawn objects
ObjectDeSpawnCheck();
//Despawn player to other players
DeSpawnMe();
//Required
client.Send(Packet.TeleportStart2());
//Send loading screen image
this.client.Send(Packet.TeleportImage(Data.PointBase[Convert.ToByte(teleportselect)].xSec, Data.PointBase[Convert.ToByte(teleportselect)].ySec));
//Set bool
this.Character.Teleport = true;
}
}
catch (Exception ex)
{
Console.WriteLine("Teleport select error {0}", ex);
Systems.Debugger.Write(ex);
}
}