IsComponentWiredByPort() public static méthode

public static IsComponentWiredByPort ( Terraria.Plugins.Common.ObjectMeasureData measureData ) : bool
measureData Terraria.Plugins.Common.ObjectMeasureData
Résultat bool
Exemple #1
0
        public bool HandleTileEdit(TSPlayer player, TileEditType editType, int blockType, DPoint location, int objectStyle)
        {
            switch (editType)
            {
            case TileEditType.PlaceTile: {
                switch (blockType)
                {
                case AdvancedCircuits.BlockType_WirelessTransmitter:
                    if (
                        AdvancedCircuits.IsComponentWiredByPort(location, new DPoint(1, 1)) &&
                        !this.Metadata.WirelessTransmitters.ContainsKey(location)
                        )
                    {
                        this.Metadata.WirelessTransmitters.Add(location, player.Name);
                    }

                    break;
                }

                break;
            }

            case TileEditType.PlaceWire:
            case TileEditType.PlaceWireBlue:
            case TileEditType.PlaceWireGreen: {
                // Check if we just wired an unregistered component's port.
                foreach (DPoint adjacentTileLocation in AdvancedCircuits.EnumerateComponentPortLocations(location, new DPoint(1, 1)))
                {
                    ITile tile = TerrariaUtils.Tiles[adjacentTileLocation];
                    if (tile.active() && tile.type == AdvancedCircuits.BlockType_WirelessTransmitter)
                    {
                        if (!this.Metadata.WirelessTransmitters.ContainsKey(adjacentTileLocation))
                        {
                            this.Metadata.WirelessTransmitters.Add(adjacentTileLocation, player.Name);
                        }
                    }
                }

                break;
            }

            case TileEditType.TileKill:
            case TileEditType.TileKillNoItem: {
                if (!TerrariaUtils.Tiles[location].active())
                {
                    break;
                }

                switch (TerrariaUtils.Tiles[location].type)
                {
                case TileID.Timers: {
                    if (this.Metadata.ActiveTimers.ContainsKey(location))
                    {
                        this.Metadata.ActiveTimers.Remove(location);
                    }

                    break;
                }

                case TileID.GrandfatherClocks: {
                    ObjectMeasureData measureData = TerrariaUtils.Tiles.MeasureObject(location);
                    if (this.Metadata.Clocks.ContainsKey(measureData.OriginTileLocation))
                    {
                        this.Metadata.Clocks.Remove(measureData.OriginTileLocation);
                    }

                    break;
                }

                case AdvancedCircuits.BlockType_Swapper: {
                    if (this.Metadata.Swappers.ContainsKey(location))
                    {
                        this.Metadata.Swappers.Remove(location);
                    }

                    break;
                }

                case AdvancedCircuits.BlockType_ANDGate:
                case AdvancedCircuits.BlockType_ORGate:
                case AdvancedCircuits.BlockType_XORGate: {
                    if (this.Metadata.GateStates.ContainsKey(location))
                    {
                        this.Metadata.GateStates.Remove(location);
                    }

                    break;
                }

                case AdvancedCircuits.BlockType_BlockActivator: {
                    if (this.Metadata.BlockActivators.ContainsKey(location))
                    {
                        this.Metadata.BlockActivators.Remove(location);
                    }

                    break;
                }

                case AdvancedCircuits.BlockType_WirelessTransmitter: {
                    if (this.Metadata.WirelessTransmitters.ContainsKey(location))
                    {
                        this.Metadata.WirelessTransmitters.Remove(location);
                    }

                    break;
                }
                }

                break;
            }
            }

            return(false);
        }
        private bool CheckTilePermission(TSPlayer player, DPoint location, int blockType, int objectStyle, PaintColor paint, bool dropItem = false)
        {
            switch (blockType)
            {
            case TileID.Statues: {
                DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 2);
                if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 3)))
                {
                    break;
                }
                StatueStyle  statueStyle = TerrariaUtils.Tiles.GetStatueStyle(objectStyle);
                StatueConfig statueConfig;
                if (!this.Config.StatueConfigs.TryGetValue(statueStyle, out statueConfig) || statueConfig == null)
                {
                    break;
                }

                if (!player.Group.HasPermission(statueConfig.WirePermission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        int itemTypeToDrop;
                        itemTypeToDrop = TerrariaUtils.Tiles.GetItemTypeFromStatueStyle(statueStyle);

                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, itemTypeToDrop);
                    }

                    this.TellNoStatueWiringPermission(player, statueStyle);
                    return(false);
                }

                break;
            }

            case TileID.Traps: {
                ITile destTile = TerrariaUtils.Tiles[location];
                if (!destTile.HasWire())
                {
                    break;
                }
                TrapConfig trapConfig;
                TrapStyle  trapStyle = TerrariaUtils.Tiles.GetTrapStyle(destTile.frameY / 18);

                TrapConfigKey configKey = new TrapConfigKey(trapStyle, paint);
                if (!this.Config.TrapConfigs.TryGetValue(configKey, out trapConfig))
                {
                    break;
                }

                if (!player.Group.HasPermission(trapConfig.WirePermission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        int itemTypeToDrop = TerrariaUtils.Tiles.GetItemTypeFromTrapStyle(trapStyle);
                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, itemTypeToDrop);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }

            case TileID.Boulder: {
                DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1);
                if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 2)))
                {
                    break;
                }

                if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireBoulder_Permission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, ItemID.Boulder);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }

            case TileID.Signs: {
                if (!TerrariaUtils.Tiles.IsObjectWired(location, new DPoint(2, 2)))
                {
                    break;
                }

                if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireSign_Permission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, ItemID.Sign);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }

            case TileID.InletPump:
            case TileID.OutletPump: {
                DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1);
                if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 2)))
                {
                    break;
                }
                PumpConfig pumpConfig;
                if (!this.Config.PumpConfigs.TryGetValue(paint, out pumpConfig))
                {
                    break;
                }
                if (string.IsNullOrEmpty(pumpConfig.WirePermission))
                {
                    break;
                }

                if (!player.Group.HasPermission(pumpConfig.WirePermission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        int itemTypeToDrop = ItemID.OutletPump;
                        if (blockType == ItemID.InletPump)
                        {
                            itemTypeToDrop = ItemID.InletPump;
                        }

                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, itemTypeToDrop);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }

            case AdvancedCircuits.BlockType_WirelessTransmitter: {
                if (!AdvancedCircuits.IsComponentWiredByPort(location, new DPoint(1, 1)))
                {
                    break;
                }
                WirelessTransmitterConfig transmitterConfig;
                if (!this.Config.WirelessTransmitterConfigs.TryGetValue(paint, out transmitterConfig))
                {
                    break;
                }

                if (!player.Group.HasPermission(transmitterConfig.WirePermission))
                {
                    player.SendTileSquareEx(location, 1);

                    if (dropItem)
                    {
                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, ItemID.AdamantiteOre);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }

            case ItemID.Teleporter: {
                DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1);
                if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(3, 1)))
                {
                    break;
                }

                if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireTeleporter_Permission))
                {
                    player.SendTileSquareEx(location, 10);

                    if (dropItem)
                    {
                        Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, ItemID.Teleporter);
                    }

                    this.TellMissingComponentWiringPermission(player, blockType);
                    return(false);
                }

                break;
            }
            }

            return(true);
        }
Exemple #3
0
 public static bool IsComponentWiredByPort(ObjectMeasureData measureData)
 {
     return(AdvancedCircuits.IsComponentWiredByPort(measureData.OriginTileLocation, measureData.Size));
 }