public override void Execute(Data.Data data) { var player = Utils.GetPlayer(); if (player != null) { var id = new MyDefinitionId((MyObjectBuilderType)typeof(MyObjectBuilder_Warhead), "LargeWarhead"); var definitionBase = (MyWarheadDefinition)MyDefinitionManager.Static.GetCubeBlockDefinition(id); var pos = player.GetPosition() + Vector3.Up * 100; MatrixD world = MatrixD.CreateWorld(pos, Vector3.Forward, Vector3.Up); Vector3 color = Color.Red.ColorToHSV(); MyCubeBuilder.SpawnDynamicGrid(definitionBase, player.Character.Entity, world, color, MyStringHash.NullOrEmpty); } }
static void OnMessageSpawnGrid(ref SpawnGridMsg msg, MyNetworkClient sender) { if (Sync.IsServer) { var definition = Definitions.MyDefinitionManager.Static.GetCubeBlockDefinition(msg.Definition); MatrixD worldMatrix = MatrixD.CreateWorld(msg.Position, msg.Forward, msg.Up); MyCubeGrid grid = null; if (msg.Static) { grid = MyCubeBuilder.SpawnStaticGrid(definition, worldMatrix); } else { grid = MyCubeBuilder.SpawnDynamicGrid(definition, worldMatrix); } if (grid != null) { msg.Grid = grid.GetObjectBuilder() as MyObjectBuilder_CubeGrid; MySession.Static.SyncLayer.SendMessageToAll(ref msg); } if (grid != null && msg.Static) { MyCubeBuilder.AfterStaticGridSpawn(grid); } } else { System.Diagnostics.Debug.Assert(msg.Grid != null, "Client must obtain complete grid from server"); MyCubeGrid grid = MyEntities.CreateFromObjectBuilderAndAdd(msg.Grid) as MyCubeGrid; if (grid != null) { if (grid.IsStatic) { MyCubeBuilder.AfterStaticGridSpawn(grid); } } } }
public override void Execute(Data.Data data, Dictionary <string, object> parameters) { SessionHandler.EnqueueAction(() => { var player = Utils.GetPlayer(); if (player != null) { var id = new MyDefinitionId((MyObjectBuilderType)typeof(MyObjectBuilder_Warhead), "LargeWarhead"); var definitionBase = (MyWarheadDefinition)MyDefinitionManager.Static.GetCubeBlockDefinition(id); var inSpace = Utils.IsInSpace(player.GetPosition()); var up = player.Character.PositionComp.GetOrientation().Up; up.Normalize(); var pos = player.GetPosition() + up * GetEventValue(inSpace && SpaceDistance != null ? SpaceDistance: Distance, 100, parameters); MatrixD world = MatrixD.CreateWorld(pos, Vector3.Forward, Vector3.Up); Vector3 color = Color.Red.ColorToHSV(); var pirateFaction = MySession.Static.Factions.TryGetFactionByTag("SPRT"); MyCubeBuilder.SpawnDynamicGrid(definitionBase, player.Character, world, color, MyStringHash.NullOrEmpty, 0L, MyCubeBuilder.SpawnFlags.Default | MyCubeBuilder.SpawnFlags.SpawnAsMaster, Hostile ? pirateFaction.FounderId: player.Character.EntityId, entity => { var grid = (MyCubeGrid)entity; foreach (var warhead in grid.GetFatBlocks <MyWarhead>()) { warhead.IsArmed = true; warhead.DetonationTime = (float)GetEventValue(inSpace && SpaceCountdown != null ? SpaceCountdown: Countdown, 10, parameters); warhead.StartCountdown(); } var direction = player.GetPosition() - grid.PositionComp.GetPosition(); direction.Normalize(); grid.Physics.LinearVelocity += direction * GetEventValue(inSpace && SpaceSpeed != null ? SpaceSpeed: Speed, 5, parameters); }); } }); }
public override void Execute(Data.Data data, Dictionary <string, object> parameters) { SessionHandler.EnqueueAction(() => { var player = Utils.GetPlayer(); if (player != null) { var id = new MyDefinitionId((MyObjectBuilderType)typeof(MyObjectBuilder_RadioAntenna), "SmallBlockRadioAntenna"); var up = player.Character.PositionComp.GetOrientation().Up; up.Normalize(); var definitionBase = (MyRadioAntennaDefinition)MyDefinitionManager.Static.GetCubeBlockDefinition(id); var pos = player.GetPosition() + up * 50; var world = MatrixD.CreateWorld(pos, Vector3.Forward, Vector3.Up); var color = Color.Red.ColorToHSV(); var pirateFaction = MySession.Static.Factions.TryGetFactionByTag("SPRT"); MyCubeBuilder.SpawnDynamicGrid(definitionBase, player.Character, world, color, MyStringHash.NullOrEmpty, 0L, MyCubeBuilder.SpawnFlags.Default | MyCubeBuilder.SpawnFlags.SpawnAsMaster, pirateFaction.FounderId, entity => { var grid = (MyCubeGrid)entity; var pirateAntennas = MySession.Static.GetComponent <MyPirateAntennas>(); if (pirateAntennas != null) { var drones = Utils.IsInSpace(pos) ? Configuration.Plugin.Get(c => c.SpaceDrones): Configuration.Plugin.Get(c => c.PlanetDrones); var drone = (string.IsNullOrEmpty(Drone) ? drones[_random.Next(drones.Length)]: Drone) ?? "Vulture Drone"; MyDefinitionManager.Static.TryGetDefinition( new MyDefinitionId( (MyObjectBuilderType)typeof(MyObjectBuilder_SpawnGroupDefinition), drone), out MySpawnGroupDefinition spawnGroup); if (spawnGroup != null) { Vector3D?nullable = new Vector3D?(); for (int index = 0; index < 10; ++index) { world = entity.WorldMatrix; nullable = MyEntities.FindFreePlace( world.Translation + MyUtils.GetRandomVector3Normalized() * 1500, spawnGroup.SpawnRadius); if (nullable.HasValue) { break; } } foreach (var antenna in grid.GetFatBlocks <MyRadioAntenna>()) { _spawnDrone.Invoke(pirateAntennas, new object[] { antenna, pirateFaction.FounderId, nullable.Value, spawnGroup, new Vector3?(), new Vector3?() }); } var spawns = spawnGroup.Prefabs.Select(prefab => prefab.SubtypeId.ToSplitCase()) .GroupBy(s => s).Select(grouping => (grouping.Count() > 1 ? grouping.Count() + "x " : "") + grouping.Key) .Join(); var msg = "Spawned " + spawns; Utils.SendChat(msg); ActionNotification.SendActionMessage(msg, Color.Red, "ArcHudGPSNotification1"); } } grid.CubeBlocks.ToList().ForEach(block => grid.RemoveBlock(block)); }); } }); }