public class NetPackageTeleportTo : NetPackage { private int playerID; public Vector3 position; public NetPackageTeleportTo Setup(int _playerID, Vector3 _position) { this.playerID = _playerID; this.position = _position; return this; } public override void read(PooledBinaryReader _br) { this.playerID = _br.ReadInt32(); this.position = StreamUtils.ReadVector3(_br); } public override void write(PooledBinaryWriter _bw) { base.write(_bw); _bw.Write(this.playerID); StreamUtils.Write(_bw, this.position); } public override int GetLength() { return 6; } public override void ProcessPackage(World _world, GameManager _callbacks) { //Log.Out("NetPackageTeleporTo-ProcessPackage START"); if (_world == null) { //Log.Out("NetPackageTeleporTo-ProcessPackage 1"); return; } Entity myEntity = _world.GetEntity(this.playerID); if (myEntity is EntityPlayer) { if (SingletonMonoBehaviour.Instance.IsServer) { float height1 = GameManager.Instance.World.GetHeight((int)position.x, (int)position.z); float height2 = GameManager.Instance.World.GetHeight((int)position.x, (int)position.z); float height = ((height1 + height2) / 2f) + 1.5f; //Log.Out("NetPackageTeleporTo-ProcessPackage height1: " + height1); //Log.Out("NetPackageTeleporTo-ProcessPackage height2: " + height2); //Log.Out("NetPackageTeleporTo-ProcessPackage height: " + height); if (height <= position.y) { SingletonMonoBehaviour.Instance.SendPackage(NetPackageManager.GetPackage().Setup(playerID, position), false, playerID); } else { SingletonMonoBehaviour.Instance.SendPackage(NetPackageManager.GetPackage().Setup(playerID, new Vector3(position.x, height, position.x)), false, playerID); } } else { //Log.Out("NetPackageTeleporTo-ProcessPackage position: " + position); myEntity.SetPosition(position); } } } }