/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="heading"></param> /// <param name="playfield"></param> /// <returns></returns> public bool TeleportProxy( AOCoord destination, Quaternion heading, int playfield, Identity pfinstance, int GS, int SG, Identity R, Identity dest) { PacketWriter writer = new PacketWriter(); // header starts writer.PushByte(0xDF); writer.PushByte(0xDF); writer.PushShort(10); writer.PushShort(1); writer.PushShort(0); writer.PushInt(3086); writer.PushInt(this.Character.Id); writer.PushInt(0x43197D22); writer.PushIdentity(50000, this.Character.Id); writer.PushByte(0); // Header ends writer.PushCoord(this.Character.RawCoord); writer.PushQuat(this.Character.RawHeading); writer.PushByte(97); writer.PushIdentity(pfinstance.Type, pfinstance.Instance); writer.PushInt(GS); writer.PushInt(SG); writer.PushIdentity(40016, playfield); // Dont know for sure if its correct to only transfer the playfield here writer.PushInt(0); writer.PushInt(0); writer.PushIdentity(dest.Type, dest.Instance); writer.PushInt(0); byte[] tpreply = writer.Finish(); this.Character.DoNotDoTimers = true; Despawn.DespawnPacket(this.Character.Id); this.SendCompressed(tpreply); this.Character.DoNotDoTimers = true; this.Character.Stats.LastConcretePlayfieldInstance.Value = this.Character.PlayField; this.Character.Stats.ExtenalDoorInstance.Value = SG; this.Character.StopMovement(); this.Character.RawCoord = destination; this.Character.RawHeading = heading; this.Character.PlayField = playfield; this.Character.Resource = 0x3c000; this.Character.Purge(); // Purge character information to DB before client reconnect IPAddress tempIP; if (IPAddress.TryParse(Config.Instance.CurrentConfig.ZoneIP, out tempIP) == false) { IPHostEntry zoneHost = Dns.GetHostEntry(Config.Instance.CurrentConfig.ZoneIP); foreach (IPAddress ip in zoneHost.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { tempIP = ip; break; } } } int zoneIP = IPAddress.HostToNetworkOrder(BitConverter.ToInt32(tempIP.GetAddressBytes(), 0)); short zonePort = Convert.ToInt16(Config.Instance.CurrentConfig.ZonePort); Thread.Sleep(1000); PacketWriter writer2 = new PacketWriter(); writer2.PushByte(0xDF); writer2.PushByte(0xDF); writer2.PushShort(1); writer2.PushShort(1); writer2.PushShort(0); writer2.PushInt(3086); writer2.PushInt(this.Character.Id); writer2.PushInt(60); writer2.PushInt(zoneIP); writer2.PushShort(zonePort); byte[] connect = writer2.Finish(); this.SendCompressed(connect); return(true); }