/* * всегда смотрит на горизонт * наводится на цель */ private void findV3() { //Получаем и нормализуем вектор гравитации. Это наше направление "вниз" на планете. Vector3D GravityVector = cockpit.GetNaturalGravity(); Vector3D GravNorm = Vector3D.Normalize(GravityVector); //вектор на точку Vector3D T = Vector3D.Normalize(Target - cockpit.GetPosition()); //Рысканием прицеливаемся на точку Target. double tF = T.Dot(cockpit.WorldMatrix.Forward); double tL = T.Dot(cockpit.WorldMatrix.Left); float YawInput = -(float)Math.Atan2(tL, tF); // lcd.WriteText(YawInput.ToString()); //Получаем проекции вектора прицеливания на все три оси блока ДУ. double gF = GravNorm.Dot(cockpit.WorldMatrix.Forward); double gL = GravNorm.Dot(cockpit.WorldMatrix.Left); double gU = GravNorm.Dot(cockpit.WorldMatrix.Up); //Получаем сигналы по тангажу и крены операцией atan2 float RollInput = (float)Math.Atan2(gL, -gU); float PitchInput = -(float)Math.Atan2(gF, -gU); //для каждого гироскопа устанавливаем текущие значения по тангажу, крену, рысканию. setGyro(PitchInput, RollInput, YawInput); // это почти один и тот же вектор logEcho("G", GravNorm); logEcho("D", cockpit.WorldMatrix.Down); }
private void Align() { if (aligning) { targetDistance = (float)((cockpit.GetPosition() - Target).Length()) / 1000; if (targetDistance > 5) { foreach (var gyro in gyros) { gyro.GyroOverride = true; SetOrientation(gyro); } distancePercent = ((targetDistance - (float)5.1) / (MaxDistance - 5)) * 100; //Convert the desired distance to a percentage of the max distance, taking into account that 0% = 5km jumper.SetValueFloat("JumpDistance", distancePercent); numJumps = (int)Math.Ceiling(targetDistance / MaxDistance); targetInfo = "\n\nDestination: " + waypoints[selection].Name + "\n\nDistance: " + targetDistance + " KM" + "\nNumber of Jumps: " + numJumps + "\n\n-Coordinates-\n" + waypoints[selection].Coords.ToString().Split(' ')[0] + "\n" + waypoints[selection].Coords.ToString().Split(' ')[1] + "\n" + waypoints[selection].Coords.ToString().Split(' ')[2] + "\n"; float sum = 0; foreach (var gyro in gyros) { sum += Math.Abs(gyro.Yaw) + Math.Abs(gyro.Pitch) + Math.Abs(gyro.Roll); } if (sum < 0.005) { aligned = true; foreach (var gyro in gyros) { gyro.Yaw = 0; gyro.Roll = 0; gyro.Pitch = 0; } } } else { if (!aligned) { close = true; aligning = false; } else { aligned = false; } } } else { foreach (var item in gyros) { item.GyroOverride = false; item.GyroPower = gyropower; item.Roll = 0; } } }
public void Main(string argument, UpdateType updateSource) { if (updateSource == UpdateType.Update10) { if (makeWork) { CompensateHeight(); } else if (show) { Show(); } } else { if (argument == "Up") { IncreaseHeversHeight(); } else if (argument == "Down") { DecreaseHeversHeight(); } else if (argument == "Start") { dCenterHeight = (myCockpit.GetPosition() - centerOfPlanet).Length(); changedHoverHeight = hoverHeight = hovers[0].GetValueFloat("Hover_MinHeight"); foreach (IMyThrust thr in hovers) { thr.SetValueBool("Hover_AutoAltitude", true); } makeWork = true; } else if (argument == "Stop") { makeWork = false; } else if (argument == "Show") { show = !show; } //else if (argument == "StartHorizontal") //{ //} //else if (argument == "StopHorizontal") //{ //} } }
public void Main(string argument, UpdateType updateSource) { // скорость Vector3D currentPosition = cockpit.GetPosition(); double speed = ((currentPosition - position) * 60).Length(); position = currentPosition; stringBuilder.Clear(); stringBuilder.Append(string.Format("speed: {0:0.#}", speed)) .Append("\nposition: " + position.Length()) .Append("\n X: " + position.X) .Append("\n Y: " + position.Y) .Append("\n Z: " + position.Z); // высота над землей double elevation; cockpit.TryGetPlanetElevation(MyPlanetElevation.Surface, out elevation); stringBuilder.Append("\nelevation: ").Append(elevation); // единичный вектор вперёд var forward2 = cockpit.WorldMatrix.GetOrientation().Forward; var forward = cockpit.WorldMatrix.Forward; stringBuilder.Append("\nforvard: ").Append(forward.Length()) .Append("\n X: ").Append(forward.X) .Append("\n Y:").Append(forward.Y) .Append("\n Z:").Append(forward.Z); stringBuilder.Append("\n").Append(forward == forward2); // true lcd.WriteText(stringBuilder.ToString()); }
void UpdateTreadmill() { if (!IsControlled) { return; } MatrixD matrix = cockpit.WorldMatrix; matrix *= MatrixD.CreateFromAxisAngle(matrix.Right, MathHelper.ToRadians(5)); treadmillCounter += treadmillUVOffset; if (treadmillCounter > 1) { treadmillCounter = 0; } Vector2 offset = new Vector2(treadmillCounter, 0); MyTransparentGeometry.AddBillboardOriented( MyStringId.GetOrCompute("Treadmill"), Color.White.ToVector4(), cockpit.GetPosition() + (cockpit.WorldMatrix.Up * -0.948f) + (cockpit.WorldMatrix.Forward * -0.2f), matrix.Backward, matrix.Right, 0.6f, 0.25f, Vector2.Zero + offset); }
private void UpdateScanInfo() { ScanInfo.Clear(); if (!ScanResult.IsEmpty()) { ScanInfo.Append(ScanResult.Name); ScanInfo.Append(": "); ScanInfo.Append(ScanResult.Type.ToString()); ScanInfo.Append('\n'); ScanInfo.Append(ScanResult.Relationship.ToString()); ScanInfo.Append('\n'); ScanInfo.Append($"Distance: {(ScanResult.Position - Cockpit.GetPosition()).Length()}m\n"); ScanInfo.Append($"Speed: {ScanResult.Velocity.Length():F1}m/s\n"); ScanInfo.Append($"GPS:{ScanResult.Name}:{ScanResult.Position.X:F1}:{ScanResult.Position.Y:F1}:{ScanResult.Position.Z:F1}:\n"); } Right.WriteText(ScanInfo); }
//GPS:Large Grid:157759.727203728:231485.308988417:5714590.54597619: //GPS:Thorium Lake:-249471.93:-166022.37:11030192.43: public void Aim900(string GPSToAimAt) { var targetVector = new Vector3D(); if (TryParseVector3D(GPSToAimAt, out targetVector)) { _program.Echo($"{targetVector}"); } else { throw new Exception("Invalid GPS data"); } _turret900.SetTarget(targetVector); var cockpitVector = _cockpit.GetPosition(); _program.Echo($"{cockpitVector}"); }
public void Main(string argument, UpdateType updateSource) { subsystemManager.UpdateTime(); if (argument == "descend") { Mode = 1; lockMatrix = Drive.Controller.WorldMatrix; } else if (argument == "ascend") { Mode = 2; lockMatrix = Drive.Controller.WorldMatrix; } else if (argument == "stop") { Mode = 0; lockMatrix = MatrixD.Zero; Drive.Clear(); } else if (commandLine.TryParse(argument)) { subsystemManager.Command(commandLine.Argument(0), commandLine.Argument(1), commandLine.ArgumentCount > 2 ? commandLine.Argument(2) : null); } else { try { subsystemManager.Update(updateSource); runs++; if (runs % 5 == 0) { OutputBuilder.Clear(); OutputBuilder.Append($"STATUS: ").AppendLine(Mode == 0 ? "STOP" : (Mode == 1 ? "DESC" : "ASCE")); foreach (var screen in Displays) { screen.ContentType = ContentType.TEXT_AND_IMAGE; screen.WriteText(OutputBuilder.ToString()); } var destination = new Waypoint(); if (Mode == 0) { Drive.Clear(); } else if (Mode == 1) { destination.MaxSpeed = DescendSpeed; var gravdir = Cockpit.GetNaturalGravity(); if (gravdir == Vector3D.Zero) { gravdir.Normalize(); destination.Position = gravdir * 10 + Cockpit.GetPosition(); var flatForward = Cockpit.WorldMatrix.Forward - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, gravdir); flatForward.Normalize(); var flatLeft = Cockpit.WorldMatrix.Left - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, gravdir); flatLeft.Normalize(); destination.Direction = flatForward * TrigHelpers.FastCos(0.02 * RotateSpeed) + flatLeft * TrigHelpers.FastSin(0.02 * RotateSpeed); } else { destination.Position = lockMatrix.Down * 10 + Cockpit.GetPosition(); destination.DirectionUp = lockMatrix.Up; var flatForward = Cockpit.WorldMatrix.Forward - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, lockMatrix.Down); flatForward.Normalize(); var flatLeft = Cockpit.WorldMatrix.Left - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, lockMatrix.Down); flatLeft.Normalize(); destination.Direction = flatForward * TrigHelpers.FastCos(0.02 * RotateSpeed) + flatLeft * TrigHelpers.FastSin(0.02 * RotateSpeed); } } else if (Mode == 2) { destination.MaxSpeed = AscendSpeed; if (Drive.Controller == Cockpit) { var gravdir = Cockpit.GetNaturalGravity(); gravdir.Normalize(); destination.Position = -gravdir * 10 + Cockpit.GetPosition(); } else { destination.Position = lockMatrix.Down * 10 + Cockpit.GetPosition(); destination.Direction = lockMatrix.Forward; } } Drive.Move(destination.Position); Drive.Turn(destination.Direction); Drive.Spin(destination.DirectionUp); Drive.SetMaxSpeed(destination.MaxSpeed); } } catch (Exception e) { Me.GetSurface(0).WriteText(e.Message); Me.GetSurface(0).WriteText("\n", true); Me.GetSurface(0).WriteText(e.StackTrace); Me.GetSurface(0).WriteText("\n", true); Me.GetSurface(0).WriteText(e.ToString()); } var s = subsystemManager.GetStatus(); if (!string.IsNullOrEmpty(s)) { Echo(s); } else { Echo(((int)subsystemManager.OutputMode).ToString()); } } }
public void Update(MyDetectedEntityInfo target, Vector3D T, Vector3D PointerPos, Vector3D PointerDir) { if (!Launched) { foreach (IMyThrust thr in thrusters) { thr.Enabled = true; thr.ThrustOverridePercentage = 1; } Launched = true; } else { counter++; if (remcon.IsFunctional && (counter > VerticalDelay)) { double currentVelocity = remcon.GetShipVelocities().LinearVelocity.Length(); Vector3D targetvector = new Vector3D(); if (LASER_GUIDED) { targetvector = ((remcon.GetPosition() - PointerPos).Dot(PointerDir) + 700) * PointerDir + PointerPos - remcon.GetPosition(); } else { targetvector = FindInterceptVector(remcon.GetPosition(), currentVelocity * INTERCEPT_COURSE, T, target.Velocity); } Vector3D trgNorm = Vector3D.Normalize(targetvector); if ((target.Position - remcon.GetPosition()).Length() < WH_ARM_DIST) { if (currentVelocity - MyVelocity < -ACCEL_DET) { foreach (IMyWarhead wh in warheads) { wh.Detonate(); } } MyVelocity = currentVelocity; } Vector3D velNorm = Vector3D.Normalize(remcon.GetShipVelocities().LinearVelocity); Vector3D CorrectionVector = Math.Max(ReflectK * trgNorm.Dot(velNorm), 1) * trgNorm - velNorm; Vector3D G = remcon.GetNaturalGravity(); if (G.LengthSquared() == 0) { CorrectionVector = Math.Max(ReflectK * trgNorm.Dot(velNorm), 1) * trgNorm - velNorm; } else { if (JAVELIN) { //trgNorm = Vector3D.Normalize(Vector3D.Reflect(-G, trgNorm)); trgNorm = Vector3D.Normalize(G.Dot(trgNorm) * trgNorm * JAVELIN_CURVE - G); } CorrectionVector = Math.Max(ReflectK * trgNorm.Dot(velNorm), 1) * trgNorm - velNorm; double A = 0; foreach (IMyThrust thr in thrusters) { A += thr.MaxEffectiveThrust; } A /= remcon.CalculateShipMass().PhysicalMass; Vector3D CorrectionNorm = Vector3D.Normalize(CorrectionVector); //CorrectionVector = CorrectionNorm * A - G; Vector3D gr = Vector3D.Reject(remcon.GetNaturalGravity(), CorrectionNorm); CorrectionVector = CorrectionNorm * Math.Sqrt(A * A + gr.LengthSquared()) - gr; } Vector3D Axis = Vector3D.Normalize(CorrectionVector).Cross(remcon.WorldMatrix.Forward); if (Axis.LengthSquared() < 0.1) { Axis += remcon.WorldMatrix.Backward * ROLL; } Axis *= GyroMult; foreach (IMyGyro gyro in gyros) { gyro.Pitch = (float)Axis.Dot(gyro.WorldMatrix.Right); gyro.Yaw = (float)Axis.Dot(gyro.WorldMatrix.Up); gyro.Roll = (float)Axis.Dot(gyro.WorldMatrix.Backward); } } else { foreach (IMyGyro gyro in gyros) { gyro.Pitch = 0; gyro.Yaw = 0; gyro.Roll = 0; } } } }
void Main(string arg, UpdateType uType) { if (uType == UpdateType.Update1) { Tick++; /* if (radio.Listen()) * { * radar.correctedTargetLocation = radio.targetpos; * radar.Lock(); * (gts.GetBlockWithName("Cockpit") as IMyCockpit).GetSurface(0).WriteText("radio", false); * if (radar.Locked) * { * sound.Play(); * sound.Play(); * LASER_GUIDED = false; * } * }*/ radar.Update(); lcd.WriteText("LOCKED: " + radar.Locked, false); lcd.WriteText("\nTarget: " + radar.CurrentTarget.Name + ", tick: " + radar.LastLockTick, true); lcd.WriteText("\nDistance: " + Math.Round(radar.TargetDistance), true); lcd.WriteText("\nVelocity: " + Math.Round(radar.CurrentTarget.Velocity.Length()), true); if (radar.Locked) { arta.AimCannons(radar.correctedTargetLocation, radar.CurrentTarget.Velocity); } foreach (Torpedo t in Torpedos) { if (t.status == 2) { t.Update(radar.CurrentTarget, CENTER_SHOT ? radar.CurrentTarget.Position : radar.T, cockpit.GetPosition(), cockpit.WorldMatrix.Forward); } } if (WolfPack) { if ((Tick - WolfPackStart + 1) % WOLF_PACK_WELDING_TIME == 0) { CleanGarbage(); InitializeTorpedos(); } if ((radar.Locked) && ((Tick - WolfPackStart - 1) % WOLF_PACK_WELDING_TIME == 0)) { foreach (Torpedo t in Torpedos) { Echo("\nTry Launch: "); Echo("\nWPI: " + WolfPackIndex); if (t.status == 1) { WolfPackIndex--; t.Launch(WolfPackDelays[WolfPackIndex]); break; } } if (WolfPackIndex <= 0) { WolfPack = false; } } } Echo("Runtime: " + Runtime.LastRunTimeMs); } else { switch (arg) { case "Lock": radar.Lock(true, 20000); if (radar.Locked) { arta.AimPoint = radar.CurrentTarget.Position; sound.Play(); sound.Play(); LASER_GUIDED = false; Runtime.UpdateFrequency = UpdateFrequency.Update1; } else { lcd.WriteText("NO TARGET", false); Runtime.UpdateFrequency = UpdateFrequency.None; } break; case "RadioON": radio.TurnON(); Runtime.UpdateFrequency = UpdateFrequency.Update1; break; case "Laser": LASER_GUIDED = true; Runtime.UpdateFrequency = UpdateFrequency.Update1; break; case "CenterShot": CENTER_SHOT = !CENTER_SHOT; break; case "Init": CleanGarbage(); InitializeTorpedos(); break; case "SpotterCam": SpotterCam = gts.GetBlockWithName("SpotterCam") as IMyCameraBlock; if (SpotterCam != null) { SpotterCam.EnableRaycast = true; Echo("SpotterCam detected"); } break; case "Spot": if (SpotterCam != null) { Echo("Spotting"); MyDetectedEntityInfo spotterInfo = SpotterCam.Raycast(15000, 0, 0); if (!spotterInfo.IsEmpty()) { Echo("Target Spotted"); radar.correctedTargetLocation = spotterInfo.Position; radar.Lock(); if (radar.Locked) { Echo("Target Locked"); Runtime.UpdateFrequency = UpdateFrequency.Update1; sound.Play(); sound.Stop(); sound.Play(); sound.Stop(); LASER_GUIDED = false; } } } break; case "Stop": radar.StopLock(); Runtime.UpdateFrequency = UpdateFrequency.None; break; case "Launch": if ((radar.Locked) || (LASER_GUIDED)) { foreach (Torpedo t in Torpedos) { Echo("\nTry Launch: "); if (t.status == 1) { Echo("1 go"); t.Launch(); break; } } } else { Echo("No Target Lock"); } break; case "Test": Echo("\n Test:" + VerticalDelay(5000.0f, 1700.0f, 300)); break; case "CCT": Runtime.UpdateFrequency = UpdateFrequency.Update1; arta.tensor_calculation = true; arta.tensor_calc_step = 0; break; case "Pack": if (radar.Locked) { WolfPackDelays.Clear(); WolfPackDelays.Add(LAUNCH_DELAY); for (int x = 0; x < WOLF_PACK_COUNT - 1; x++) { WolfPackDelays.Add(VerticalDelay((float)radar.TargetDistance, (float)(WOLF_PACK_WELDING_TIME - WOLF_PACK_INTERVAL) * 1.666667f, WolfPackDelays[WolfPackDelays.Count - 1])); } WolfPack = true; WolfPackStart = Tick; WolfPackIndex = WOLF_PACK_COUNT; } break; default: break; } } }
public void GyroControl() { var vector = cockpit.GetNaturalGravity(); //var cockpitmatrix = Matrix.CreateFromDir(cockpit.WorldMatrix.Down); var cockpitmatrix = MatrixD.CreateWorld(cockpit.GetPosition(), cockpit.WorldMatrix.Forward, cockpit.WorldMatrix.Down); //cockpitmatrix.Forward = cockpitmatrix.Down; Vector3D direction = Vector3D.TransformNormal(vector, Matrix.Transpose(cockpitmatrix)); var diffangle = MathHelperD.ToDegrees(Math.Atan2(direction.Z, direction.Y)); if (diffangle < Math.Abs(oldAngle - diffangle)) { } float pitch = 0f; WriteText("Gyro diffangle: " + diffangle.ToString() + " -\n"); WriteText("Gyro pitch1: " + ((pitch1)).ToString() + " -\n"); WriteText("Gyro pitch60: " + ((pitch60)).ToString() + " -\n"); WriteText("Gyro pitch: " + ((float)(pitch1 * diffangle)).ToString() + " -\n"); if (diffangle > 5) { if (diffangle > 20) { pitch = (float)(0.8 * Math.PI); } else { pitch = (float)(pitch1 * 10); } foreach (var item in gyros) { var gyro = item as IMyGyro; gyro.CustomData = gyro.Pitch.ToString() + " ::::" + ((float)2 * Math.PI).ToString() + " cheack " + gyro.Pitch.Equals((float)(2 * Math.PI)); if (!gyro.Pitch.Equals(pitch)) { gyro.Pitch = pitch; } } } else if (diffangle < -5) { if (diffangle < -20) { pitch = (float)(-0.8 * Math.PI); } else { pitch = (float)(pitch1 * -10); } foreach (var item in gyros) { var gyro = item as IMyGyro; if (!gyro.Pitch.Equals(pitch)) { gyro.Pitch = pitch; } } } else { foreach (var item in gyros) { var gyro = item as IMyGyro; gyro.Pitch = (float)(pitch1 * diffangle); } } oldAngle = diffangle; //diffangle = MathHelperD.ToDegrees(Math.Atan2(direction.X, direction.Y)); //float roll = 0f; //if (diffangle > 5) //{ // if (diffangle > 5) // { // roll = (float)(1 * Math.PI); // } // foreach (var item in gyrorolls) // { // var gyro = item as IMyGyro; // gyro.CustomData = gyro.Roll.ToString() + " ::::" + ((float)2 * Math.PI).ToString() + " cheack " + gyro.Roll.Equals((float)(2 * Math.PI)); // if (!gyro.Roll.Equals(roll)) // { // gyro.Roll = roll; // } // } //} //else if (diffangle < -5) //{ // if (diffangle < -5) // { // roll = (float)(-1 * Math.PI); // } // foreach (var item in gyrorolls) // { // var gyro = item as IMyGyro; // if (!gyro.Roll.Equals(roll)) // { // gyro.Roll = roll; // } // } //} //else //{ // foreach (var item in gyrorolls) // { // var gyro = item as IMyGyro; // if (!gyro.Roll.Equals(0)) // { // gyro.Roll = 0; // } // } //} }
public Vector3D GetShipCoordinates(IMyTerminalBlock block) { MatrixD cockpitOrient = MatrixD.Invert(MatrixD.CreateFromDir(g2w.getForward(cockpit), g2w.getUp(cockpit))); return(Vector3D.TransformNormal(block.GetPosition() - cockpit.GetPosition(), cockpitOrient)); }
private void Message(byte[] obj) { if (!MyAPIGateway.Session.IsServer) { return; } try { ShowMessageInGameAndLog("Message", "start."); short messageType = BitConverter.ToInt16(obj, 0); long entityId = BitConverter.ToInt64(obj, 2); if (Entity.EntityId != entityId) { return; } if (messageType == MSG_CHANGEOWNERREQ) { m_block = (IMyAdvancedDoor)Entity; m_mycubegrid = m_block.CubeGrid as MyCubeGrid; long playerId = BitConverter.ToInt64(obj, 10); ShowMessageInGameAndLog("Message", "got message from " + playerId.ToString()); bool add = BitConverter.ToBoolean(obj, 18); string shipname = Encoding.ASCII.GetString(obj, 19, obj.Length - 19); //ShowMessageInGameAndLog("Message", " 1"); IMyPlayer player = GetPlayerById(playerId); List <IMySlimBlock> blocks = new List <IMySlimBlock>(); (m_mycubegrid as IMyCubeGrid).GetBlocks(blocks); if (blocks.Count < 40) { return; } Vector3 forvarddirection = new Vector3(0f, 0f, 0f); IMyCockpit FoundCockpit = null; IMyShipMergeBlock FoundMerge = null; IMyShipMergeBlock FoundBaseMergeBlock = null; IMyProjector FoundBaseProjector = null; IMyCargoContainer FoundCargoCont = null; IMyCargoContainer FoundBaseCargoCont = null; IMyCargoContainer FoundBaseCargoCont2 = null; IMyParachute FoundParachute = null; IMyParachute FoundParachute2 = null; IMyParachute FoundParachute3 = null; IMyParachute FoundParachute4 = null; ShowMessageInGameAndLog("Message", " blocks.Count: " + blocks.Count); foreach (IMySlimBlock blok in blocks) { if (blok.FatBlock == null) { continue; } ShowMessageInGameAndLog("Message", " Block: " + blok.FatBlock.Name + "display nametext: " + blok.FatBlock.DisplayNameText); if (blok.FatBlock.DisplayNameText == "MyMergeBlock") { FoundMerge = (IMyShipMergeBlock)blok.FatBlock; ShowMessageInGameAndLog("Message", " found MyMergeBlock"); continue; } if (blok.FatBlock.DisplayNameText == "MyParachute") { FoundParachute = (IMyParachute)blok.FatBlock; ShowMessageInGameAndLog("Message", " found FoundParachute"); continue; } if (blok.FatBlock.DisplayNameText == "MyParachute2") { FoundParachute2 = (IMyParachute)blok.FatBlock; ShowMessageInGameAndLog("Message", " found FoundParachute"); continue; } if (blok.FatBlock.DisplayNameText == "MyParachute3") { FoundParachute3 = (IMyParachute)blok.FatBlock; ShowMessageInGameAndLog("Message", " found FoundParachute3"); continue; } if (blok.FatBlock.DisplayNameText == "MyParachute4") { FoundParachute4 = (IMyParachute)blok.FatBlock; ShowMessageInGameAndLog("Message", " found FoundParachute4"); continue; } if (blok.FatBlock.DisplayNameText == "MyCockpit") { FoundCockpit = (IMyCockpit)blok.FatBlock; ShowMessageInGameAndLog("Message", " found MyCockpit"); continue; } if (blok.FatBlock.DisplayNameText == "BaseMergeBlock") { FoundBaseMergeBlock = (IMyShipMergeBlock)blok.FatBlock; ShowMessageInGameAndLog("Message", " found BaseMergeBlock"); continue; } if (blok.FatBlock.DisplayNameText == "BaseProjector") { FoundBaseProjector = (IMyProjector)blok.FatBlock; ShowMessageInGameAndLog("Message", " found BaseProjector"); continue; } if (blok.FatBlock.DisplayNameText == "MyCargo") { FoundCargoCont = (IMyCargoContainer)blok.FatBlock; ShowMessageInGameAndLog("Message", " found MyCargo"); continue; } } ShowMessageInGameAndLog("Message", " fFoundCockpit" + (FoundCockpit != null) + (FoundMerge != null) + (FoundCargoCont != null) + (m_block.CubeGrid.CustomName == shipname)); if (FoundCargoCont != null && FoundCockpit != null && FoundMerge != null && FoundParachute != null && FoundParachute2 != null && FoundParachute3 != null && FoundParachute4 != null && m_block.CubeGrid.CustomName == shipname) { (m_block as IMyAdvancedDoor).OpenDoor(); (m_block as IMyAdvancedDoor).CustomData = ""; // (m_block as IMyAdvancedDoor).CustomName = "Use me."; // (m_block as IMyAdvancedDoor).ShowOnHUD = true; forvarddirection = FoundMerge.WorldMatrix.Backward; //ShowMessageInGameAndLog("Message", " findedthrust vector"); List <IMySlimBlock> blocks2 = new List <IMySlimBlock>(); BoundingSphereD boundingSphere = new BoundingSphereD(FoundMerge.GetPosition(), 300); var entity = MyAPIGateway.Entities.GetEntitiesInSphere(ref boundingSphere); foreach (IMyEntity ent in entity) { if (ent.DisplayName != "GNR_Spawn") { continue; } (ent as IMyCubeGrid).GetBlocks(blocks2); foreach (IMySlimBlock blok in blocks2) { if (blok.FatBlock == null) { continue; } if (blok.FatBlock as IMyCargoContainer == null) { continue; } if (blok.FatBlock.DisplayNameText == "BaseCargo") { FoundBaseCargoCont = (IMyCargoContainer)blok.FatBlock; ShowMessageInGameAndLog("Message", " found BaseCargo"); continue; } if (blok.FatBlock.DisplayNameText == "BaseCargo2") { FoundBaseCargoCont2 = (IMyCargoContainer)blok.FatBlock; ShowMessageInGameAndLog("Message", " found BaseCargo2"); continue; } } } //res for welders start addtoContainer(FoundBaseCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "SteelPlate"), 752); addtoContainer(FoundBaseCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Construction"), 286); addtoContainer(FoundBaseCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "InteriorPlate"), 113); addtoContainer(FoundBaseCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "MetalGrid"), 8); addtoContainer(FoundBaseCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Computer"), 144); addtoContainer(FoundBaseCargoCont2, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "LargeTube"), 6); addtoContainer(FoundBaseCargoCont2, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Motor"), 31); addtoContainer(FoundBaseCargoCont2, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Display"), 15); addtoContainer(FoundBaseCargoCont2, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "SmallTube"), 84); addtoContainer(FoundBaseCargoCont2, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "PowerCell"), 120); //res for welders end ////Started resourses SerializableDefinitionId Item_Hatch = new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Canvas"); ShowMessageInGameAndLog("Message", " before add to conteiner"); addtoContainer2(FoundCargoCont, new MyObjectBuilder_AmmoMagazine { SubtypeName = "NATO_5p56x45mm", ProjectilesCount = 50 }, 2); addtoContainer2(FoundCargoCont, this.CreateGunContent("AutomaticRifleItem"), 1); addtoContainer2(FoundCargoCont, this.CreateGunContent("WelderItem"), 2); addtoContainer2(FoundCargoCont, this.CreateGunContent("AngleGrinderItem"), 1); addtoContainer2(FoundCargoCont, this.CreateGunContent("HandDrillItem"), 1); //00 addtoContainer2(FoundCargoCont, this.CreateGunContent("HydrogenBottle"), 1); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Ore), "Ice"), 1000); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "SteelPlate"), 1339); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Construction"), 150); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "InteriorPlate"), 240); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "MetalGrid"), 73); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "RadioCommunication"), 2); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Computer"), 25); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "LargeTube"), 35); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Motor"), 28); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Display"), 15); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "Medical"), 15); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "SmallTube"), 100); addtoContainer(FoundCargoCont, new SerializableDefinitionId(typeof(MyObjectBuilder_Component), "PowerCell"), 150); addtoContainer2(FoundCargoCont, new MyObjectBuilder_GasContainerObject { SubtypeName = "HydrogenBottle", GasLevel = 1 }, 1); addtoContainer2(FoundCargoCont, new MyObjectBuilder_GasContainerObject { SubtypeName = "HydrogenBottle", GasLevel = 1 }, 1); for (int g = 0; g <= 10; g++) { addtoParachute(FoundParachute, Item_Hatch, 1); addtoParachute(FoundParachute2, Item_Hatch, 1); addtoParachute(FoundParachute3, Item_Hatch, 1); addtoParachute(FoundParachute4, Item_Hatch, 1); } // //FoundBaseMergeBlock.CubeGrid.Physics.Deactivate(); ReplaceOwner(playerId); (FoundBaseMergeBlock as MyCubeBlock)?.ChangeOwner(144115188075855876, MyOwnershipShareModeEnum.None); //TODO: change it to nps ID (FoundBaseProjector as MyCubeBlock)?.ChangeOwner(144115188075855876, MyOwnershipShareModeEnum.None); // not working player.Character.SetPosition(FoundCockpit.GetPosition()); FoundCockpit.AttachPilot(player.Character); ShowMessageInGameAndLog("Message", " before impulse"); (m_mycubegrid as IMyEntity).Physics.LinearVelocity = forvarddirection * 25; var timer = new Timer(1000); timer.AutoReset = false; timer.Elapsed += (a, b) => MyAPIGateway.Utilities.InvokeOnGameThread(() => { ShowMessageInGameAndLog("Message", " timer"); FoundMerge.Enabled = false; FoundMerge.Physics.Deactivate(); var timer2 = new Timer(5000); timer2.AutoReset = false; timer2.Elapsed += (a1, b1) => MyAPIGateway.Utilities.InvokeOnGameThread(() => { // (m_mycubegrid as IMyEntity).Physics.Activate(); FoundMerge.Physics.Activate(); (m_mycubegrid as IMyEntity).Physics.LinearVelocity = (m_mycubegrid as IMyEntity).Physics.LinearVelocity + (forvarddirection * 200); ShowMessageInGameAndLog("Message", " timer2"); busy = false; Destuctscript(); }); timer2.Start(); }); timer.Start(); } ShowMessageInGameAndLog("Message", " end"); // NeedsUpdate = MyEntityUpdateEnum.NONE; //ShowMessageInGameAndLog("Message", "end."); //Destuctscript(); } } catch { ShowMessageInGameAndLog("Message", "EXEPTION! "); } }