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); }
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); }
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"); } }
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; }
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; }
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"); } }
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; } }
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; }
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>() }); } }