Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CheckSign()

static void Terraria.WorldGen.CheckSign ( int x,
int y,
ushort type )
inlinestatic

Definition at line 34742 of file WorldGen.cs.

34743 {
34744 if (destroyObject)
34745 {
34746 return;
34747 }
34748 int num = x - 2;
34749 int num2 = x + 3;
34750 int num3 = y - 2;
34751 int num4 = y + 3;
34752 if (num < 0 || num2 > Main.maxTilesX || num3 < 0 || num4 > Main.maxTilesY)
34753 {
34754 return;
34755 }
34756 bool flag = false;
34757 for (int i = num; i < num2; i++)
34758 {
34759 for (int j = num3; j < num4; j++)
34760 {
34761 if (Main.tile[i, j] == null)
34762 {
34763 Main.tile[i, j] = new Tile();
34764 }
34765 }
34766 }
34767 int num5 = Main.tile[x, y].frameX / 18;
34768 int num6 = Main.tile[x, y].frameY / 18;
34769 num5 %= 2;
34770 num6 %= 2;
34771 int num7 = x - num5;
34772 int num8 = y - num6;
34773 int num9 = Main.tile[num7, num8].frameX / 18 / 2;
34774 int num10 = Main.tile[num7, num8].frameY / 18 / 2;
34775 int num11 = Main.tile[x, y].frameX / 18;
34776 int num12 = 0;
34777 while (num11 > 1)
34778 {
34779 num11 -= 2;
34780 num12++;
34781 }
34782 num = num7;
34783 num2 = num7 + 2;
34784 num3 = num8;
34785 num4 = num8 + 2;
34786 num5 = 0;
34787 for (int k = num; k < num2; k++)
34788 {
34789 num6 = 0;
34790 for (int l = num3; l < num4; l++)
34791 {
34792 if (!Main.tile[k, l].active() || Main.tile[k, l].type != type)
34793 {
34794 flag = true;
34795 break;
34796 }
34797 if (Main.tile[k, l].frameX / 18 != num5 + num9 * 2 || Main.tile[k, l].frameY / 18 != num6 + num10 * 2)
34798 {
34799 flag = true;
34800 break;
34801 }
34802 num6++;
34803 }
34804 num5++;
34805 }
34806 if (!flag)
34807 {
34808 if (type == 85)
34809 {
34811 {
34812 num9 = num12;
34813 }
34814 else
34815 {
34816 flag = true;
34817 }
34818 }
34819 else if (TopEdgeCanBeAttachedTo(num7, num8 + 2) && TopEdgeCanBeAttachedTo(num7 + 1, num8 + 2))
34820 {
34821 num9 = 0;
34822 }
34824 {
34825 num9 = 1;
34826 }
34828 {
34829 num9 = 2;
34830 }
34832 {
34833 num9 = 3;
34834 }
34835 else if (Main.tile[num7, num8].wall > 0 && Main.tile[num7 + 1, num8].wall > 0 && Main.tile[num7, num8 + 1].wall > 0 && Main.tile[num7 + 1, num8 + 1].wall > 0)
34836 {
34837 num9 = 4;
34838 }
34839 else
34840 {
34841 flag = true;
34842 }
34843 }
34844 if (flag)
34845 {
34846 if (type == 395)
34847 {
34848 int num13 = TEItemFrame.Find(num7, num8);
34849 if (num13 != -1 && ((TEItemFrame)TileEntity.ByID[num13]).item.stack > 0)
34850 {
34851 ((TEItemFrame)TileEntity.ByID[num13]).DropItem();
34852 if (Main.netMode != 2)
34853 {
34854 Main.LocalPlayer.InterruptItemUsageIfOverTile(395);
34855 }
34856 }
34857 }
34858 destroyObject = true;
34859 for (int m = num; m < num2; m++)
34860 {
34861 for (int n = num3; n < num4; n++)
34862 {
34863 if (Main.tile[m, n].type == type)
34864 {
34865 KillTile(m, n);
34866 }
34867 }
34868 }
34869 if (type != 395)
34870 {
34871 Sign.KillSign(num7, num8);
34872 }
34873 switch (type)
34874 {
34875 case 85:
34876 {
34877 int type2 = 321;
34878 if (num12 >= 6 && num12 <= 10)
34879 {
34880 type2 = 3229 + num12 - 6;
34881 }
34882 else if (num12 >= 1 && num12 <= 5)
34883 {
34884 type2 = 1173 + num12 - 1;
34885 }
34886 Item.NewItem(GetItemSource_FromTileBreak(x, y), x * 16, y * 16, 32, 32, type2);
34887 if (Main.netMode != 1 && genRand.Next(2) == 0 && NPC.CountNPCS(316) < 2)
34888 {
34889 int num14 = Player.FindClosest(new Vector2(x * 16, y * 16), 16, 16);
34890 if (Main.player[num14].ZoneGraveyard || !Main.dayTime || (double)y > Main.worldSurface)
34891 {
34892 NPC.SpawnOnPlayer(num14, 316);
34893 }
34894 }
34895 break;
34896 }
34897 case 395:
34898 Item.NewItem(GetItemSource_FromTileBreak(num7, num8), num7 * 16, num8 * 16, 32, 32, 3270);
34900 break;
34901 case 425:
34902 Item.NewItem(GetItemSource_FromTileBreak(num7, num8), num7 * 16, num8 * 16, 32, 32, 3617);
34903 break;
34904 case 573:
34905 Item.NewItem(GetItemSource_FromTileBreak(num7, num8), num7 * 16, num8 * 16, 32, 32, 4710);
34906 break;
34907 case 511:
34908 Item.NewItem(GetItemSource_FromTileBreak(num7, num8), num7 * 16, num8 * 16, 32, 32, 4320);
34909 break;
34910 case 510:
34911 Item.NewItem(GetItemSource_FromTileBreak(num7, num8), num7 * 16, num8 * 16, 32, 32, 4319);
34912 break;
34913 default:
34914 Item.NewItem(GetItemSource_FromTileBreak(x, y), x * 16, y * 16, 32, 32, 171);
34915 break;
34916 }
34917 destroyObject = false;
34918 return;
34919 }
34920 int num15 = 36 * num9;
34921 for (int num16 = 0; num16 < 2; num16++)
34922 {
34923 for (int num17 = 0; num17 < 2; num17++)
34924 {
34925 Main.tile[num7 + num16, num8 + num17].active(active: true);
34926 Main.tile[num7 + num16, num8 + num17].type = type;
34927 Main.tile[num7 + num16, num8 + num17].frameX = (short)(num15 + 18 * num16);
34928 Main.tile[num7 + num16, num8 + num17].frameY = (short)(18 * num17 + num10 * 36);
34929 }
34930 }
34931 }
static Dictionary< int, TileEntity > ByID
Definition TileEntity.cs:18
static bool destroyObject
Definition WorldGen.cs:1020
static bool BottomEdgeCanBeAttachedTo(int i, int j)
static bool TopEdgeCanBeAttachedTo(int i, int j)
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static bool RightEdgeCanBeAttachedTo(int i, int j)
static bool LeftEdgeCanBeAttachedTo(int i, int j)
static bool SolidTileAllowBottomSlope(int i, int j)
static IEntitySource GetItemSource_FromTileBreak(int x, int y)

References Terraria.DataStructures.TileEntity.ByID, Terraria.NPC.CountNPCS(), Terraria.Main.dayTime, Terraria.GameContent.Tile_Entities.TEItemFrame.Find(), Terraria.Player.FindClosest(), Terraria.GameContent.Tile_Entities.TEItemFrame.Kill(), Terraria.Sign.KillSign(), Terraria.Main.LocalPlayer, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.netMode, Terraria.Item.NewItem(), Terraria.Main.player, Terraria.NPC.SpawnOnPlayer(), Terraria.DataStructures.Tile, Terraria.Main.tile, System.type, and Terraria.Main.worldSurface.