void SpaceInitialSpawn(SaveGame sg) { var sys = Game.GameData.GetSystem(System); Game.RequestWorld(sys, (world) => { World = world; rpcClient.SpawnPlayer(System, world.TotalTime, Position, Orientation); world.SpawnPlayer(this, Position, Orientation); msnRuntime?.EnteredSpace(); }); }
void Launch() { var b = game.GameData.GetBase(Base); var sys = game.GameData.GetSystem(b.System); game.RequestWorld(sys, (world) => { this.World = world; var obj = sys.Objects.FirstOrDefault((o) => { return(o.Dock != null && o.Dock.Kind == DockKinds.Base && o.Dock.Target.Equals(Base, StringComparison.OrdinalIgnoreCase)); }); System = b.System; Orientation = Quaternion.Identity; Position = Vector3.Zero; if (obj == null) { FLLog.Error("Base", "Can't find object in " + sys + " docking to " + b); } else { Position = obj.Position; Orientation = (obj.Rotation ?? Matrix4x4.Identity).ExtractRotation(); Position = Vector3.Transform(new Vector3(0, 0, 500), Orientation) + obj.Position; //TODO: This is bad } Client.SendPacket(new SpawnPlayerPacket() { System = System, Position = Position, Orientation = Orientation, Ship = Character.EncodeLoadout() }, PacketDeliveryMethod.ReliableOrdered); world.SpawnPlayer(this, Position, Orientation); msnRuntime?.EnteredSpace(); }); }