Exemplo n.º 1
0
    public void LockChest(DPoint anyChestTileLocation) {
      ITile chestTile = TerrariaUtils.Tiles[anyChestTileLocation];
      if (!chestTile.active() || (chestTile.type != TileID.Containers && chestTile.type != TileID.Containers2))
        throw new ArgumentException("Tile is not a chest.", nameof(anyChestTileLocation));

      bool isLocked;
      ChestStyle chestStyle = this.GetChestStyle(chestTile, out isLocked);
      if (isLocked)
        throw new InvalidChestStyleException("Chest is already locked.", chestStyle);

      if (!this.IsChestStyleLockable(chestStyle))
        throw new InvalidChestStyleException("Chest has to be a lockable chest.", chestStyle);

      ObjectMeasureData measureData = this.MeasureObject(anyChestTileLocation);
      if (
        chestStyle == ChestStyle.JungleChest ||
        chestStyle == ChestStyle.CorruptionChest ||
        chestStyle == ChestStyle.CrimsonChest ||
        chestStyle == ChestStyle.HallowedChest ||
        chestStyle == ChestStyle.FrozenChest)
      {
        foreach (ITile tile in this.EnumerateObjectTiles(measureData))
          tile.frameX += 180;
      }
      else
      {
        foreach (ITile tile in this.EnumerateObjectTiles(measureData))
          tile.frameX += 36;
      }
      
      TSPlayer.All.SendTileSquare(anyChestTileLocation, 4);
    }
Exemplo n.º 2
0
 public int GetItemTypeFromChestStyle(ChestStyle chestStyle) {
   int itemType;
   if (!chestStyleItemTypeLookup.Value.TryGetValue(chestStyle, out itemType))
     throw new ArgumentException("ChestStyle");
   
   return itemType;
 }
        public virtual bool HandleChestPlace(TSPlayer player, DPoint location, ChestStyle chestStyle)
        {
            if (this.IsDisposed)
            return false;
              //if (chestIndex != -1 || !player.IsLoggedIn)
              //  return false;

              for (int x = 0; x < 2; x++) {
            DPoint tileBeneathLocation = location.OffsetEx(x, 1);
            if (
              TerrariaUtils.Tiles[tileBeneathLocation].active() && (
            TerrariaUtils.Tiles[tileBeneathLocation].type == (int)BlockType.ActiveStone ||
            TerrariaUtils.Tiles[tileBeneathLocation].type == (int)BlockType.IceRodBlock
              )
            ) {
              TSPlayer.All.SendData(PacketTypes.Tile, string.Empty, 0, location.X, location.Y);

              int itemType = (int)TerrariaUtils.Tiles.GetItemTypeFromChestType(chestStyle);
              Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 32, 32, itemType);

              player.SendErrorMessage("Chests can not be placed on active stone or ice blocks.");
              return true;
            }
              }

              return this.HandlePostTileEdit(player, TileEditType.PlaceTile, BlockType.Chest, location, (int)chestStyle);
        }
Exemplo n.º 4
0
 public ItemType GetItemTypeFromChestType(ChestStyle chestStyle)
 {
     switch (chestStyle) {
     case ChestStyle.WoodenChest:
       return ItemType.Chest;
     case ChestStyle.GoldChest:
       return ItemType.GoldChest;
     case ChestStyle.ShadowChest:
       return ItemType.ShadowChest;
     case ChestStyle.Barrel:
       return ItemType.Barrel;
     case ChestStyle.EbonwoodChest:
       return ItemType.EbonwoodChest;
     case ChestStyle.RichMahoganyChest:
       return ItemType.RichMahoganyChest;
     case ChestStyle.PearlwoodChest:
       return ItemType.PearlwoodChest;
     case ChestStyle.IvyChest:
       return ItemType.IvyChest;
     case ChestStyle.IceChest:
       return ItemType.IceChest;
     case ChestStyle.LivingWoodChest:
       return ItemType.LivingWoodChest;
     case ChestStyle.SkywareChest:
       return ItemType.SkywareChest;
     case ChestStyle.ShadewoodChest:
       return ItemType.ShadewoodChest;
     case ChestStyle.WebCoveredChest:
       return ItemType.WebCoveredChest;
     case ChestStyle.LihzahrdChest:
       return ItemType.LihzahrdChest;
     case ChestStyle.WaterChest:
       return ItemType.WaterChest;
     case ChestStyle.JungleChest:
       return ItemType.JungleChest;
     case ChestStyle.CorruptionChest:
       return ItemType.CorruptionChest;
     case ChestStyle.CrimsonChest:
       return ItemType.CrimsonChest;
     case ChestStyle.HallowedChest:
       return ItemType.HallowedChest;
     case ChestStyle.FrozenChest:
       return ItemType.FrozenChest;
     case ChestStyle.DynastyChest:
       return ItemType.DynastyChest;
     case ChestStyle.HoneyChest:
       return ItemType.HoneyChest;
     case ChestStyle.SteampunkChest:
       return ItemType.SteampunkChest;
     case ChestStyle.PalmWoodChest:
       return ItemType.PalmWoodChest;
     case ChestStyle.MushroomChest:
       return ItemType.MushroomChest;
     case ChestStyle.BorealWoodChest:
       return ItemType.BorealWoodChest;
     case ChestStyle.SlimeChest:
       return ItemType.SlimeChest;
     case ChestStyle.GreenDungeonChest:
       return ItemType.GreenDungeonChest;
     case ChestStyle.PinkDungeonChest:
       return ItemType.PinkDungeonChest;
     case ChestStyle.BlueDungeonChest:
       return ItemType.BlueDungeonChest;
     case ChestStyle.BoneChest:
       return ItemType.BoneChest;
     case ChestStyle.CactusChest:
       return ItemType.CactusChest;
     case ChestStyle.FleshChest:
       return ItemType.FleshChest;
     case ChestStyle.ObsidianChest:
       return ItemType.ObsidianChest;
     case ChestStyle.PumpkinChest:
       return ItemType.PumpkinChest;
     case ChestStyle.SpookyChest:
       return ItemType.SpookyChest;
     case ChestStyle.GlassChest:
       return ItemType.GlassChest;
     case ChestStyle.MartianChest:
       return ItemType.MartianChest;
     case ChestStyle.MeteoriteChest:
       return ItemType.MeteoriteChest;
     case ChestStyle.GraniteChest:
       return ItemType.GraniteChest;
     case ChestStyle.MarbleChest:
       return ItemType.MarbleChest;
     default:
       throw new ArgumentException("ChestStyle");
       }
 }
Exemplo n.º 5
0
 public ChestPlaceEventArgs(TSPlayer player, DPoint chestLocation, ChestStyle chestStyle) : base(player, chestLocation)
 {
     this.ChestStyle = chestStyle;
 }
 protected InvalidChestStyleException(SerializationInfo info, StreamingContext context) : base(info, context)
 {
     this.ActualStyle = (ChestStyle)info.GetValue("InvalidChestTypeException_ActualType", typeof(ChestStyle));
 }
 public InvalidChestStyleException(ChestStyle actualStyle) : base("The chest type is invalid.")
 {
     this.ActualStyle = actualStyle;
 }
 public InvalidChestStyleException(string message, ChestStyle actualStyle = ChestStyle.None) : base(message, null)
 {
     this.ActualStyle = actualStyle;
 }
Exemplo n.º 9
0
        private void GenerateExtraLoot(GenerationProgress progress)
        {
            progress.Message = "Clicker Class: Generating Extra Loot";

            HashSet <ChestStyle> chestStyles = new HashSet <ChestStyle>
            {
                ChestStyle.Wooden, ChestStyle.Gold, ChestStyle.LockedGold, ChestStyle.RichMahogany,
                ChestStyle.Ivy, ChestStyle.LivingWood, ChestStyle.WebCovered, ChestStyle.Water,
                ChestStyle.Mushroom, ChestStyle.Granite, ChestStyle.Marble, ChestStyle.Lihzahrd,
                ChestStyle.LockedShadow
            };

            Dictionary <ChestStyle, List <Chest> > chestLists = new Dictionary <ChestStyle, List <Chest> >();

            for (int chestIndex = 0; chestIndex < Main.maxChests; chestIndex++)
            {
                Chest chest = Main.chest[chestIndex];
                if (chest == null || !WorldGen.InWorld(chest.x, chest.y, 42))                 // don't include chests generated outside the playable area of the map
                {
                    continue;
                }

                Tile tile = Main.tile[chest.x, chest.y];
                if (tile.type != TileID.Containers || chest.item == null)
                {
                    continue;
                }

                ChestStyle style = (ChestStyle)(tile.frameX / 36);
                if (chestStyles.Contains(style))
                {
                    if (style == ChestStyle.LockedGold && !Main.wallDungeon[tile.wall])                     // not actually a dungeon chest, maybe some mod added this
                    {
                        continue;
                    }

                    if (style == ChestStyle.Wooden && Main.wallDungeon[tile.wall])                     // wooden chests generated inside the dungeon always have golden keys
                    {
                        continue;
                    }

                    if (style == ChestStyle.Mushroom || style == ChestStyle.Granite || style == ChestStyle.Marble)                     // consider all these as gold chests, since that's what vanilla does
                    {
                        style = ChestStyle.Gold;
                    }

                    if (!chestLists.ContainsKey(style))
                    {
                        chestLists[style] = new List <Chest>();
                    }

                    chestLists[style].Add(chest);
                }
            }

            if (chestLists.ContainsKey(ChestStyle.Gold))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.Gold], new int[] { ModContent.ItemType <EnchantedLED>() });
            }

            if (chestLists.ContainsKey(ChestStyle.LockedGold))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.LockedGold], new int[] { ModContent.ItemType <SlickClicker>() });
            }

            if (chestLists.ContainsKey(ChestStyle.LockedShadow))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.LockedShadow], new int[] { ModContent.ItemType <UmbralClicker>() });
            }
        }
 public ChestPlaceEventArgs(TSPlayer player, DPoint chestLocation, ChestStyle chestStyle)
     : base(player, chestLocation)
 {
     this.ChestStyle = chestStyle;
 }
Exemplo n.º 11
0
 public ItemType GetItemTypeFromChestType(ChestStyle chestStyle)
 {
     switch (chestStyle) {
     case ChestStyle.WoodenChest:
       return ItemType.Chest;
     case ChestStyle.GoldChest:
       return ItemType.GoldChest;
     case ChestStyle.ShadowChest:
       return ItemType.ShadowChest;
     case ChestStyle.Barrel:
       return ItemType.Barrel;
     case ChestStyle.EbonwoodChest:
       return ItemType.EbonwoodChest;
     case ChestStyle.RichMahoganyChest:
       return ItemType.RichMahoganyChest;
     case ChestStyle.PearlwoodChest:
       return ItemType.PearlwoodChest;
     case ChestStyle.IvyChest:
       return ItemType.IvyChest;
     case ChestStyle.IceChest:
       return ItemType.IceChest;
     case ChestStyle.LivingWoodChest:
       return ItemType.LivingWoodChest;
     case ChestStyle.SkywareChest:
       return ItemType.SkywareChest;
     case ChestStyle.ShadewoodChest:
       return ItemType.ShadewoodChest;
     case ChestStyle.WebCoveredChest:
       return ItemType.WebCoveredChest;
     case ChestStyle.LihzahrdChest:
       return ItemType.LihzahrdChest;
     case ChestStyle.WaterChest:
       return ItemType.WaterChest;
     case ChestStyle.JungleChest:
       return ItemType.JungleChest;
     case ChestStyle.CorruptionChest:
       return ItemType.CorruptionChest;
     case ChestStyle.CrimsonChest:
       return ItemType.CrimsonChest;
     case ChestStyle.HallowedChest:
       return ItemType.HallowedChest;
     case ChestStyle.FrozenChest:
       return ItemType.FrozenChest;
     case ChestStyle.DynastyChest:
       return ItemType.DynastyChest;
     case ChestStyle.HoneyChest:
       return ItemType.HoneyChest;
     case ChestStyle.SteampunkChest:
       return ItemType.SteampunkChest;
     default:
       throw new ArgumentException("ChestStyle");
       }
 }
Exemplo n.º 12
0
    public ChestKind GuessChestKind(DPoint anyChestTileLocation) {
      ITile chestTile = TerrariaUtils.Tiles[anyChestTileLocation];
      if (!chestTile.active())
        throw new ArgumentException("The tile on the given location is not active.");

      bool isLocked;
      ChestStyle chestStyle = this.GetChestStyle(chestTile, out isLocked);
      switch (chestStyle) {
        case ChestStyle.GoldChest:
          if (
            chestTile.wall >= WallID.BlueDungeonUnsafe && chestTile.wall <= WallID.PinkDungeonUnsafe ||
            chestTile.wall >= WallID.BlueDungeonSlabUnsafe && chestTile.wall <= WallID.GreenDungeonTileUnsafe
          )
            return ChestKind.DungeonChest;

          if (chestStyle == ChestStyle.GoldChest && chestTile.wall == WallID.SandstoneBrick){
            if (anyChestTileLocation.Y < Main.worldSurface - 250 || anyChestTileLocation.Y > Main.worldSurface + 50)
              return ChestKind.Unknown;
            else
              return ChestKind.PyramidChest;
          }
          
          return ChestKind.Unknown;

        case ChestStyle.WaterChest:
          if (chestTile.liquid < 255 || chestTile.lava())
            return ChestKind.Unknown;
          if (anyChestTileLocation.X > 250 && anyChestTileLocation.X < Main.maxTilesX - 250)
            return ChestKind.Unknown;
          if (anyChestTileLocation.Y < Main.worldSurface - 200 || anyChestTileLocation.Y > Main.worldSurface + 50)
            return ChestKind.Unknown;

          return ChestKind.OceanChest;

        case ChestStyle.FrozenChest:
        case ChestStyle.HallowedChest:
        case ChestStyle.JungleChest:
        case ChestStyle.CrimsonChest:
        case ChestStyle.CorruptionChest:
          if (isLocked) {
            if (
              chestTile.wall >= WallID.BlueDungeonUnsafe && chestTile.wall <= WallID.PinkDungeonUnsafe ||
              chestTile.wall >= WallID.BlueDungeonSlabUnsafe && chestTile.wall <= WallID.GreenDungeonTileUnsafe
            )
              return ChestKind.HardmodeDungeonChest;
          }
          
          return ChestKind.Unknown;

        case ChestStyle.ShadowChest:
          if (!isLocked)
            return ChestKind.Unknown;
          
          if (anyChestTileLocation.Y < Main.maxTilesY * (1.0 - 0.143))
            return ChestKind.Unknown;

          return ChestKind.HellShadowChest;

        //case ChestStyle.WoodenChest:
        //  if (chestTile.wall >= (int)WallType.DungeonBlueBrickWall && chestTile.wall <= (int)WallType.DungeonPinkBrickWall)
        //    return ChestKind.DungeonChest;

        //  return ChestKind.Unknown;

        case ChestStyle.SkywareChest:
          if (anyChestTileLocation.Y < Main.worldSurface)
            return ChestKind.SkyIslandChest;

          return ChestKind.Unknown;
        default:
          return ChestKind.Unknown;
      }
    }
Exemplo n.º 13
0
 public bool IsChestStyleLockable(ChestStyle chestKind) {
   return lockableChestStyles.Value.Contains(chestKind);
 }
 public InvalidChestStyleException(ChestStyle actualStyle)
     : base("The chest type is invalid.")
 {
     this.ActualStyle = actualStyle;
 }
 public InvalidChestStyleException(string message, ChestStyle actualStyle = ChestStyle.None)
     : base(message, null)
 {
     this.ActualStyle = actualStyle;
 }
Exemplo n.º 16
0
        private void GenerateExtraLoot(GenerationProgress progress, GameConfiguration configuration)
        {
            progress.Message = "Clicker Class: Generating Extra Loot";

            HashSet <ChestStyle> chestStyles = new HashSet <ChestStyle>
            {
                ChestStyle.Wooden, ChestStyle.Gold, ChestStyle.LockedGold, ChestStyle.RichMahogany,
                ChestStyle.Ivy, ChestStyle.LivingWood, ChestStyle.WebCovered, ChestStyle.Water,
                ChestStyle.Mushroom, ChestStyle.Granite, ChestStyle.Marble, ChestStyle.Lihzahrd,
                ChestStyle.LockedShadow, ChestStyle.Skyware, ChestStyle.Ice, ChestStyle.DeadMans
            };

            Dictionary <ChestStyle, List <Chest> > chestLists = new Dictionary <ChestStyle, List <Chest> >();

            for (int chestIndex = 0; chestIndex < Main.maxChests; chestIndex++)
            {
                Chest chest = Main.chest[chestIndex];
                if (chest == null || !WorldGen.InWorld(chest.x, chest.y, 42))                 // don't include chests generated outside the playable area of the map
                {
                    continue;
                }

                Tile tile = Main.tile[chest.x, chest.y];
                if (chest.item == null || (tile.TileType != TileID.Containers && tile.TileType != TileID.Containers2))
                {
                    continue;
                }

                int chestStyleOffset = 0;
                if (tile.TileType == TileID.Containers2)
                {
                    chestStyleOffset = (int)ChestStyle.Containers2Offset;
                }
                int styleNum = tile.TileFrameX / 36 + chestStyleOffset;

                ChestStyle style = (ChestStyle)styleNum;
                if (chestStyles.Contains(style))
                {
                    if (style == ChestStyle.LockedGold && !Main.wallDungeon[tile.WallType])                     // not actually a dungeon chest, maybe some mod added this
                    {
                        continue;
                    }

                    if (style == ChestStyle.Wooden && Main.wallDungeon[tile.WallType])                     // wooden chests generated inside the dungeon always have golden keys
                    {
                        continue;
                    }

                    //Mushroom is not recongized as gold here for the sake of the 'Mycelium Clicker'
                    if (style == ChestStyle.Granite || style == ChestStyle.Marble)                     // consider all these as gold chests, since that's what vanilla does
                    {
                        style = ChestStyle.Gold;
                    }

                    if (!chestLists.ContainsKey(style))
                    {
                        chestLists[style] = new List <Chest>();
                    }

                    chestLists[style].Add(chest);
                }
            }

            if (chestLists.ContainsKey(ChestStyle.Gold))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.Gold], new int[] { ModContent.ItemType <EnchantedLED>() });
            }

            if (chestLists.ContainsKey(ChestStyle.DeadMans))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.DeadMans], new int[] { ModContent.ItemType <FaultyClicker>() });
            }

            if (chestLists.ContainsKey(ChestStyle.Skyware))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.Skyware], new int[] { ModContent.ItemType <StarryClicker>() });
            }

            if (chestLists.ContainsKey(ChestStyle.Ice))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.Ice], new int[] { ModContent.ItemType <IcePack>() });
            }

            if (chestLists.ContainsKey(ChestStyle.Mushroom))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.Mushroom], new int[] { ModContent.ItemType <MyceliumClicker>() });
            }

            if (chestLists.ContainsKey(ChestStyle.LockedGold))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.LockedGold], new int[] { ModContent.ItemType <SlickClicker>() });
            }

            if (chestLists.ContainsKey(ChestStyle.LockedShadow))
            {
                ReplaceRareItemsInChests(chestLists[ChestStyle.LockedShadow], new int[] { ModContent.ItemType <UmbralClicker>() });
            }
        }