コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
        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);
                    });
                }
            });
        }
コード例 #4
0
        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));
                    });
                }
            });
        }