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

◆ TileInteractionsUse()

void Terraria.Player.TileInteractionsUse ( int myX,
int myY )
inlineprivate

Definition at line 29919 of file Player.cs.

29920 {
29921 if (WiresUI.Open || ownedProjectileCounts[651] > 0)
29922 {
29923 return;
29924 }
29925 bool flag = releaseUseTile;
29927 {
29928 return;
29929 }
29930 bool flag2 = false;
29931 if (Main.tile[myX, myY].type == 212 && snowBallLauncherInteractionCooldown <= 0)
29932 {
29933 flag2 = true;
29936 int num = Main.tile[myX, myY].frameX / 18;
29937 int num2 = 0;
29938 while (num >= 3)
29939 {
29940 num2++;
29941 num -= 3;
29942 }
29943 num = myX - num;
29944 int num3;
29945 for (num3 = Main.tile[myX, myY].frameY / 18; num3 >= 3; num3 -= 3)
29946 {
29947 }
29948 num3 = myY - num3;
29949 float num4 = 12f + (float)Main.rand.Next(450) * 0.01f;
29950 float num5 = Main.rand.Next(85, 105);
29951 float num6 = Main.rand.Next(-35, 11);
29952 int type = 166;
29953 int damage = 35;
29954 float knockBack = 3.5f;
29955 Vector2 vector = new Vector2((num + 2) * 16 - 8, (num3 + 2) * 16 - 8 - 4);
29956 if (num2 == 0)
29957 {
29958 num5 *= -1f;
29959 vector.X -= 14f;
29960 vector.X -= 2f;
29961 }
29962 else
29963 {
29964 vector.X += 14f;
29965 }
29966 float num7 = num5;
29967 float num8 = num6;
29968 float num9 = (float)Math.Sqrt(num7 * num7 + num8 * num8);
29969 num9 = num4 / num9;
29970 num7 *= num9;
29971 num8 *= num9;
29972 int num10 = Projectile.NewProjectile(GetProjectileSource_TileInteraction(num, num3), vector.X, vector.Y, num7, num8, type, damage, knockBack, Main.myPlayer, -Main.rand.Next(0, 16));
29973 Main.projectile[num10].originatedFromActivableTile = true;
29974 }
29975 if (flag)
29976 {
29977 if (Main.tile[myX, myY].type == 132 || Main.tile[myX, myY].type == 136 || Main.tile[myX, myY].type == 144)
29978 {
29979 flag2 = true;
29980 Wiring.HitSwitch(myX, myY);
29981 NetMessage.SendData(59, -1, -1, null, myX, myY);
29982 }
29983 else if (Main.tile[myX, myY].type == 597)
29984 {
29985 flag2 = true;
29987 }
29988 else if (Main.tile[myX, myY].type == 441 || Main.tile[myX, myY].type == 468)
29989 {
29990 flag2 = true;
29991 int num11;
29992 for (num11 = Main.tile[myX, myY].frameX / 18; num11 > 1; num11 -= 2)
29993 {
29994 }
29995 num11 = myX - num11;
29996 int num12 = myY - Main.tile[myX, myY].frameY / 18;
29997 Animation.NewTemporaryAnimation(2, Main.tile[myX, myY].type, num11, num12);
29998 NetMessage.SendTemporaryAnimation(-1, 2, Main.tile[myX, myY].type, num11, num12);
29999 Wiring.HitSwitch(myX, myY);
30000 NetMessage.SendData(59, -1, -1, null, myX, myY);
30001 }
30002 else if (Main.tile[myX, myY].type == 139)
30003 {
30004 flag2 = true;
30005 SoundEngine.PlaySound(28, myX * 16, myY * 16, 0);
30006 WorldGen.SwitchMB(myX, myY);
30007 }
30008 else if (Main.tile[myX, myY].type == 215)
30009 {
30010 flag2 = true;
30011 SoundEngine.PlaySound(28, myX * 16, myY * 16, 0);
30012 int num13 = Main.tile[myX, myY].frameX % 54 / 18;
30013 int num14 = Main.tile[myX, myY].frameY % 36 / 18;
30014 int num15 = myX - num13;
30015 int num16 = myY - num14;
30016 int num17 = 36;
30017 if (Main.tile[num15, num16].frameY >= 36)
30018 {
30019 num17 = -36;
30020 }
30021 for (int i = num15; i < num15 + 3; i++)
30022 {
30023 for (int j = num16; j < num16 + 2; j++)
30024 {
30025 Main.tile[i, j].frameY = (short)(Main.tile[i, j].frameY + num17);
30026 }
30027 }
30028 NetMessage.SendTileSquare(-1, num15, num16, 3, 2);
30029 }
30030 else if (Main.tile[myX, myY].type == 207)
30031 {
30032 flag2 = true;
30033 SoundEngine.PlaySound(28, myX * 16, myY * 16, 0);
30034 WorldGen.SwitchFountain(myX, myY);
30035 }
30036 else if (Main.tile[myX, myY].type == 410 || Main.tile[myX, myY].type == 480 || Main.tile[myX, myY].type == 509 || Main.tile[myX, myY].type == 657 || Main.tile[myX, myY].type == 658)
30037 {
30038 flag2 = true;
30039 SoundEngine.PlaySound(28, myX * 16, myY * 16, 0);
30041 WorldGen.SwitchMonolith(myX, myY);
30042 }
30043 else if (Main.tile[myX, myY].type == 455)
30044 {
30045 flag2 = true;
30046 SoundEngine.PlaySound(28, myX * 16, myY * 16, 0);
30049 }
30050 else if (Main.tile[myX, myY].type == 216)
30051 {
30052 flag2 = true;
30053 WorldGen.LaunchRocket(myX, myY, fromWiring: false);
30054 }
30055 else if (Main.tile[myX, myY].type == 386 || Main.tile[myX, myY].type == 387)
30056 {
30057 flag2 = true;
30058 bool flag3 = Main.tile[myX, myY].type == 387;
30059 int num18 = WorldGen.ShiftTrapdoor(myX, myY, (float)(myY * 16) > base.Center.Y).ToInt();
30060 if (num18 == 0)
30061 {
30062 num18 = -WorldGen.ShiftTrapdoor(myX, myY, (float)(myY * 16) <= base.Center.Y).ToInt();
30063 }
30064 if (num18 != 0)
30065 {
30066 NetMessage.SendData(19, -1, -1, null, 2 + (!flag3).ToInt(), myX, myY, num18 * Math.Sign((float)(myY * 16) - base.Center.Y));
30067 }
30068 }
30069 else if (Main.tile[myX, myY].type == 388 || Main.tile[myX, myY].type == 389)
30070 {
30071 flag2 = true;
30072 bool flag4 = Main.tile[myX, myY].type == 389;
30073 if (WorldGen.ShiftTallGate(myX, myY, flag4))
30074 {
30075 NetMessage.SendData(19, -1, -1, null, 4 + flag4.ToInt(), myX, myY);
30076 }
30077 }
30078 else if (Main.tile[myX, myY].type == 15 || Main.tile[myX, myY].type == 497)
30079 {
30081 {
30082 flag2 = true;
30084 sitting.SitDown(this, myX, myY);
30085 }
30086 }
30087 else if (Main.tile[myX, myY].type == 89 || Main.tile[myX, myY].type == 102 || Main.tile[myX, myY].type == 487)
30088 {
30090 {
30091 flag2 = true;
30093 sitting.SitDown(this, myX, myY);
30094 }
30095 }
30096 else if (Main.tile[myX, myY].type == 335)
30097 {
30098 flag2 = true;
30099 WorldGen.LaunchRocketSmall(myX, myY, fromWiring: false);
30100 }
30101 else if (Main.tile[myX, myY].type == 411 && Main.tile[myX, myY].frameX < 36)
30102 {
30103 flag2 = true;
30104 Wiring.HitSwitch(myX, myY);
30105 NetMessage.SendData(59, -1, -1, null, myX, myY);
30106 }
30107 else if (Main.tile[myX, myY].type == 494)
30108 {
30109 flag2 = true;
30110 for (int k = 0; k < 1000; k++)
30111 {
30112 if (ProjectileID.Sets.IsAGolfBall[Main.projectile[k].type] && Main.projectile[k].owner == whoAmI)
30113 {
30114 Main.projectile[k].Kill();
30115 }
30116 }
30118 Projectile.NewProjectile(GetProjectileSource_TileInteraction(myX, myY), (float)(myX * 16) + 8.5f, myY * 16 + 6, 0f, 0f, projType, 0, 0f, whoAmI, 0f, -1f);
30119 }
30120 else if (Main.tile[myX, myY].type == 338)
30121 {
30122 flag2 = true;
30123 int num19 = myY;
30124 if (Main.tile[myX, num19].frameY == 18)
30125 {
30126 num19--;
30127 }
30128 bool flag5 = false;
30129 for (int l = 0; l < 1000; l++)
30130 {
30131 if (Main.projectile[l].active && Main.projectile[l].aiStyle == 73 && Main.projectile[l].ai[0] == (float)myX && Main.projectile[l].ai[1] == (float)num19)
30132 {
30133 flag5 = true;
30134 break;
30135 }
30136 }
30137 if (!flag5)
30138 {
30139 int num20 = Projectile.NewProjectile(GetProjectileSource_TileInteraction(myX, num19), myX * 16 + 8, num19 * 16 + 2, 0f, 0f, 419 + Main.rand.Next(4), 0, 0f, whoAmI, myX, num19);
30140 Main.projectile[num20].originatedFromActivableTile = true;
30141 }
30142 }
30143 else if (Main.tile[myX, myY].type == 33 || Main.tile[myX, myY].type == 49 || Main.tile[myX, myY].type == 372 || Main.tile[myX, myY].type == 174 || Main.tile[myX, myY].type == 646)
30144 {
30145 short num21 = 18;
30146 Tile tile = Main.tile[myX, myY];
30147 if (tile.frameX > 0)
30148 {
30149 num21 = -18;
30150 }
30151 tile.frameX += num21;
30152 NetMessage.SendTileSquare(-1, myX, myY);
30153 flag2 = true;
30155 }
30156 else if (Main.tile[myX, myY].type == 4 || Main.tile[myX, myY].type == 13 || (Main.tile[myX, myY].type == 50 && Main.tile[myX, myY].frameX == 90))
30157 {
30158 WorldGen.KillTile(myX, myY);
30159 if (Main.netMode == 1)
30160 {
30161 NetMessage.SendData(17, -1, -1, null, 0, myX, myY);
30162 }
30163 flag2 = true;
30165 }
30166 else if (Main.tile[myX, myY].type == 466)
30167 {
30168 flag2 = true;
30170 int num22 = myY;
30171 Tile tileSafely = Framing.GetTileSafely(myX, myY);
30172 if (tileSafely.frameY == 0)
30173 {
30174 num22 += 3;
30175 }
30176 if (tileSafely.frameY == 18)
30177 {
30178 num22 += 2;
30179 }
30180 if (tileSafely.frameY == 36)
30181 {
30182 num22++;
30183 }
30184 if (DD2Event.Ongoing)
30185 {
30187 }
30188 else
30189 {
30190 bool flag6 = !DD2Event.Ongoing && !NPC.AnyNPCs(548) && !Main.pumpkinMoon && !Main.snowMoon;
30191 if (flag6)
30192 {
30193 flag6 = HasItem(3828);
30194 }
30195 if (flag6)
30196 {
30198 if (!flag6)
30199 {
30201 }
30202 }
30203 if (flag6)
30204 {
30206 }
30207 if (flag6)
30208 {
30210 }
30211 }
30212 }
30213 else if (Main.tile[myX, myY].type == 334)
30214 {
30215 flag2 = true;
30217 {
30220 }
30221 else
30222 {
30223 int num23 = myX;
30224 int num24 = myY;
30225 if (Main.tile[myX, myY].frameY == 0)
30226 {
30227 num24++;
30228 }
30229 if (Main.tile[myX, myY].frameY == 36)
30230 {
30231 num24--;
30232 }
30233 int frameX = Main.tile[myX, num24].frameX;
30234 int num25 = Main.tile[myX, num24].frameX;
30235 int num26 = 0;
30236 while (num25 >= 5000)
30237 {
30238 num25 -= 5000;
30239 num26++;
30240 }
30241 if (num26 != 0)
30242 {
30243 num25 = (num26 - 1) * 18;
30244 }
30245 num25 %= 54;
30246 if (num25 == 18)
30247 {
30248 frameX = Main.tile[myX - 1, num24].frameX;
30249 num23--;
30250 }
30251 if (num25 == 36)
30252 {
30253 frameX = Main.tile[myX - 2, num24].frameX;
30254 num23 -= 2;
30255 }
30256 if (frameX >= 5000)
30257 {
30259 WorldGen.KillTile(myX, num24, fail: true);
30260 if (Main.netMode == 1)
30261 {
30262 NetMessage.SendData(17, -1, -1, null, 0, myX, num24, 1f);
30263 }
30264 }
30265 }
30266 }
30267 else if (Main.tile[myX, myY].type == 440)
30268 {
30269 flag2 = true;
30270 int num27 = Main.tile[myX, myY].frameX / 54;
30271 int num28 = Main.tile[myX, myY].frameY / 54;
30272 _ = Main.tile[myX, myY].frameX % 54 / 18;
30273 _ = Main.tile[myX, myY].frameY % 54 / 18;
30274 int num29 = -1;
30275 switch (num27)
30276 {
30277 case 0:
30278 num29 = 1526;
30279 break;
30280 case 1:
30281 num29 = 1524;
30282 break;
30283 case 2:
30284 num29 = 1525;
30285 break;
30286 case 3:
30287 num29 = 1523;
30288 break;
30289 case 4:
30290 num29 = 1522;
30291 break;
30292 case 5:
30293 num29 = 1527;
30294 break;
30295 case 6:
30296 num29 = 3643;
30297 break;
30298 }
30299 if (num29 != -1)
30300 {
30301 if (num28 == 0 && HasItem(num29) && selectedItem != 58)
30302 {
30304 if (Main.netMode != 1)
30305 {
30307 WorldGen.ToggleGemLock(myX, myY, on: true);
30308 }
30309 else
30310 {
30312 NetMessage.SendData(105, -1, -1, null, myX, myY, 1f);
30313 }
30314 }
30315 else if (num28 == 1)
30316 {
30318 if (Main.netMode != 1)
30319 {
30320 WorldGen.ToggleGemLock(myX, myY, on: false);
30321 }
30322 else
30323 {
30324 NetMessage.SendData(105, -1, -1, null, myX, myY);
30325 }
30326 }
30327 }
30328 }
30329 else if (Main.tile[myX, myY].type == 395)
30330 {
30331 flag2 = true;
30333 }
30334 else if (Main.tile[myX, myY].type == 520)
30335 {
30336 flag2 = true;
30338 }
30339 else if (Main.tile[myX, myY].type == 471)
30340 {
30341 flag2 = true;
30343 }
30344 else if (Main.tile[myX, myY].type == 470)
30345 {
30346 flag2 = true;
30348 }
30349 else if (Main.tile[myX, myY].type == 475)
30350 {
30351 flag2 = true;
30353 }
30354 else if (Main.tile[myX, myY].type == 125)
30355 {
30356 flag2 = true;
30357 AddBuff(29, 108000);
30359 }
30360 else if (Main.tile[myX, myY].type == 621)
30361 {
30362 flag2 = true;
30363 AddBuff(192, 7200);
30365 }
30366 else if (Main.tile[myX, myY].type == 464)
30367 {
30368 flag2 = true;
30369 AddBuff(348, 108000);
30371 }
30372 else if (Main.tile[myX, myY].type == 377)
30373 {
30374 flag2 = true;
30375 AddBuff(159, 108000);
30377 }
30378 else if (Main.tile[myX, myY].type == 354)
30379 {
30380 flag2 = true;
30381 AddBuff(150, 108000);
30383 }
30384 else if (Main.tile[myX, myY].type == 287)
30385 {
30386 flag2 = true;
30387 AddBuff(93, 108000);
30389 }
30390 else if (Main.tile[myX, myY].type == 356)
30391 {
30392 flag2 = true;
30393 if (!Main.fastForwardTimeToDawn && (Main.netMode == 1 || Main.sundialCooldown == 0))
30394 {
30395 Main.Sundialing();
30397 }
30398 }
30399 else if (Main.tile[myX, myY].type == 663)
30400 {
30401 flag2 = true;
30402 if (!Main.fastForwardTimeToDusk && (Main.netMode == 1 || Main.moondialCooldown == 0))
30403 {
30404 Main.Moondialing();
30406 }
30407 }
30408 else if (Main.tile[myX, myY].type == 79)
30409 {
30410 flag2 = true;
30411 int num30 = myX;
30412 int num31 = myY;
30413 num30 += Main.tile[myX, myY].frameX / 18 * -1;
30414 if (Main.tile[myX, myY].frameX >= 72)
30415 {
30416 num30 += 4;
30417 num30++;
30418 }
30419 else
30420 {
30421 num30 += 2;
30422 }
30423 int num32 = Main.tile[myX, myY].frameY / 18;
30424 int num33 = 0;
30425 while (num32 > 1)
30426 {
30427 num32 -= 2;
30428 num33++;
30429 }
30430 num31 -= num32;
30431 num31 += 2;
30433 {
30435 {
30436 flag2 = true;
30438 sleeping.StartSleeping(this, myX, myY);
30439 }
30440 }
30441 else
30442 {
30443 FindSpawn();
30444 if (SpawnX == num30 && SpawnY == num31)
30445 {
30446 RemoveSpawn();
30447 Main.NewText(Language.GetTextValue("Game.SpawnPointRemoved"), byte.MaxValue, 240, 20);
30448 }
30449 else if (CheckSpawn(num30, num31))
30450 {
30452 Main.NewText(Language.GetTextValue("Game.SpawnPointSet"), byte.MaxValue, 240, 20);
30453 }
30454 }
30455 }
30456 else if (Main.tileSign[Main.tile[myX, myY].type])
30457 {
30458 flag2 = true;
30459 bool flag7 = true;
30460 if (sign >= 0 && Sign.ReadSign(myX, myY, CreateIfMissing: false) == sign)
30461 {
30462 sign = -1;
30463 Main.npcChatText = "";
30464 Main.editSign = false;
30466 flag7 = false;
30467 }
30468 if (flag7)
30469 {
30470 if (Main.netMode == 0)
30471 {
30472 SetTalkNPC(-1);
30473 Main.npcChatCornerItem = 0;
30474 Main.playerInventory = false;
30475 Main.editSign = false;
30476 int num34 = Sign.ReadSign(myX, myY);
30477 if (num34 < 0)
30478 {
30479 return;
30480 }
30482 sign = num34;
30483 Main.npcChatText = Main.sign[num34].text;
30484 }
30485 else
30486 {
30487 int num35 = Main.tile[myX, myY].frameX / 18;
30488 int num36 = Main.tile[myX, myY].frameY / 18;
30489 while (num35 > 1)
30490 {
30491 num35 -= 2;
30492 }
30493 int num37 = myX - num35;
30494 int num38 = myY - num36;
30495 if (Main.tileSign[Main.tile[num37, num38].type])
30496 {
30497 NetMessage.SendData(46, -1, -1, null, num37, num38);
30498 }
30499 }
30500 }
30501 }
30502 else if (Main.tile[myX, myY].type == 104)
30503 {
30504 flag2 = true;
30505 string textValue = Language.GetTextValue("GameUI.TimeAtMorning");
30506 double num39 = Main.time;
30507 if (!Main.dayTime)
30508 {
30509 num39 += 54000.0;
30510 }
30511 num39 = num39 / 86400.0 * 24.0;
30512 double num40 = 7.5;
30513 num39 = num39 - num40 - 12.0;
30514 if (num39 < 0.0)
30515 {
30516 num39 += 24.0;
30517 }
30518 if (num39 >= 12.0)
30519 {
30520 textValue = Language.GetTextValue("GameUI.TimePastMorning");
30521 }
30522 int num41 = (int)num39;
30523 double num42 = (int)((num39 - (double)num41) * 60.0);
30524 string text = string.Concat(num42);
30525 if (num42 < 10.0)
30526 {
30527 text = "0" + text;
30528 }
30529 if (num41 > 12)
30530 {
30531 num41 -= 12;
30532 }
30533 if (num41 == 0)
30534 {
30535 num41 = 12;
30536 }
30537 Main.NewText(Language.GetTextValue("Game.Time", num41 + ":" + text + " " + textValue), byte.MaxValue, 240, 20);
30538 }
30539 else if (Main.tile[myX, myY].type == 237)
30540 {
30541 flag2 = true;
30542 bool flag8 = false;
30543 if (!NPC.AnyNPCs(245) && Main.hardMode && NPC.downedPlantBoss)
30544 {
30545 for (int m = 0; m < 58; m++)
30546 {
30547 if (inventory[m].type == 1293)
30548 {
30549 inventory[m].stack--;
30550 if (inventory[m].stack <= 0)
30551 {
30553 }
30554 flag8 = true;
30555 break;
30556 }
30557 }
30558 }
30559 if (flag8)
30560 {
30561 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
30562 if (Main.netMode != 1)
30563 {
30564 NPC.SpawnOnPlayer(whoAmI, 245);
30565 }
30566 else
30567 {
30568 NetMessage.SendData(61, -1, -1, null, whoAmI, 245f);
30569 }
30570 }
30571 }
30572 else if (Main.tile[myX, myY].type == 10)
30573 {
30574 flag2 = true;
30575 if (WorldGen.IsLockedDoor(myX, myY))
30576 {
30577 int num43 = 1141;
30578 bool flag9 = false;
30579 for (int n = 0; n < 58; n++)
30580 {
30581 if (inventory[n].type == num43 && inventory[n].stack > 0)
30582 {
30583 flag9 = true;
30584 inventory[n].stack--;
30585 if (inventory[n].stack <= 0)
30586 {
30587 inventory[n] = new Item();
30588 }
30589 WorldGen.UnlockDoor(myX, myY);
30590 if (Main.netMode == 1)
30591 {
30592 NetMessage.SendData(52, -1, -1, null, whoAmI, 2f, myX, myY);
30593 }
30594 }
30595 }
30596 if (!flag9 && useVoidBag())
30597 {
30598 for (int num44 = 0; num44 < 40; num44++)
30599 {
30600 if (bank4.item[num44].type == num43 && bank4.item[num44].stack > 0)
30601 {
30602 bank4.item[num44].stack--;
30603 if (bank4.item[num44].stack <= 0)
30604 {
30605 bank4.item[num44] = new Item();
30606 }
30607 WorldGen.UnlockDoor(myX, myY);
30608 if (Main.netMode == 1)
30609 {
30610 NetMessage.SendData(52, -1, -1, null, whoAmI, 2f, myX, myY);
30611 }
30612 }
30613 }
30614 }
30615 }
30616 else
30617 {
30618 WorldGen.OpenDoor(myX, myY, direction);
30619 if (Main.tile[myX, myY].type != 10)
30620 {
30621 NetMessage.SendData(19, -1, -1, null, 0, myX, myY, direction);
30622 }
30623 else
30624 {
30625 WorldGen.OpenDoor(myX, myY, -direction);
30626 if (Main.tile[myX, myY].type != 10)
30627 {
30628 NetMessage.SendData(19, -1, -1, null, 0, myX, myY, -direction);
30629 }
30630 }
30631 }
30632 }
30633 else if (Main.tile[myX, myY].type == 11)
30634 {
30635 flag2 = true;
30636 if (WorldGen.CloseDoor(myX, myY))
30637 {
30638 NetMessage.SendData(19, -1, -1, null, 1, myX, myY, direction);
30639 }
30640 }
30641 else if (Main.tile[myX, myY].type == 88)
30642 {
30643 flag2 = true;
30644 int num45 = Main.tile[myX, myY].frameX / 18;
30645 num45 %= 3;
30646 num45 = myX - num45;
30647 int num46 = myY - Main.tile[myX, myY].frameY / 18;
30648 if (Main.tile[myX, myY].frameY == 0)
30649 {
30650 Main.CancelClothesWindow(quiet: true);
30651 Main.mouseRightRelease = false;
30652 CloseSign();
30653 SetTalkNPC(-1);
30654 Main.npcChatCornerItem = 0;
30655 Main.npcChatText = "";
30656 if (Main.editChest)
30657 {
30659 Main.editChest = false;
30660 Main.npcChatText = string.Empty;
30661 }
30662 if (editedChestName)
30663 {
30664 NetMessage.SendData(33, -1, -1, NetworkText.FromLiteral(Main.chest[chest].name), chest, 1f);
30665 editedChestName = false;
30666 }
30667 if (Main.netMode == 1)
30668 {
30669 if (num45 == chestX && num46 == chestY && chest != -1)
30670 {
30671 chest = -1;
30672 Recipe.FindRecipes();
30674 }
30675 else
30676 {
30677 NetMessage.SendData(31, -1, -1, null, num45, num46);
30678 Main.stackSplit = 600;
30679 }
30680 }
30681 else
30682 {
30685 int num47 = Chest.FindChest(num45, num46);
30686 if (num47 != -1)
30687 {
30688 Main.stackSplit = 600;
30689 if (num47 == chest)
30690 {
30691 chest = -1;
30692 Recipe.FindRecipes();
30694 }
30695 else if (num47 != chest && chest == -1)
30696 {
30699 }
30700 else
30701 {
30704 }
30705 Recipe.FindRecipes();
30706 }
30707 }
30708 }
30709 else
30710 {
30711 Main.playerInventory = false;
30712 chest = -1;
30713 Recipe.FindRecipes();
30714 SetTalkNPC(-1);
30715 Main.npcChatCornerItem = 0;
30716 Main.npcChatText = "";
30717 Main.interactedDresserTopLeftX = num45;
30718 Main.interactedDresserTopLeftY = num46;
30719 Main.OpenClothesWindow();
30720 }
30721 }
30722 else if (Main.tile[myX, myY].type == 209)
30723 {
30724 flag2 = true;
30725 Tile tile2 = Main.tile[myX, myY];
30726 int num48 = tile2.frameX % 72 / 18;
30727 int num49 = tile2.frameY % 54 / 18;
30728 int num50 = myX - num48;
30729 int num51 = myY - num49;
30730 int num52 = tile2.frameY / 54;
30731 int num53 = tile2.frameX / 72;
30732 int num54 = -1;
30733 if (num48 == 1 || num48 == 2)
30734 {
30735 num54 = num49;
30736 }
30737 int num55 = 0;
30738 if (num48 == 3 || (num48 == 2 && num53 != 3 && num53 != 4))
30739 {
30740 num55 = -54;
30741 }
30742 if (num48 == 0 || (num48 == 1 && num53 != 3 && num53 != 4))
30743 {
30744 num55 = 54;
30745 }
30746 if (num52 >= 8 && num55 > 0)
30747 {
30748 num55 = 0;
30749 }
30750 if (num52 == 0 && num55 < 0)
30751 {
30752 num55 = 0;
30753 }
30754 bool flag10 = false;
30755 if (num55 != 0)
30756 {
30757 for (int num56 = num50; num56 < num50 + 4; num56++)
30758 {
30759 for (int num57 = num51; num57 < num51 + 3; num57++)
30760 {
30761 Main.tile[num56, num57].frameY = (short)(Main.tile[num56, num57].frameY + num55);
30762 }
30763 }
30764 flag10 = true;
30765 }
30766 if ((num53 == 3 || num53 == 4) && (num54 == 1 || num54 == 0))
30767 {
30768 num55 = ((num53 == 3) ? 72 : (-72));
30769 for (int num58 = num50; num58 < num50 + 4; num58++)
30770 {
30771 for (int num59 = num51; num59 < num51 + 3; num59++)
30772 {
30773 Main.tile[num58, num59].frameX = (short)(Main.tile[num58, num59].frameX + num55);
30774 }
30775 }
30776 flag10 = true;
30777 }
30778 if (flag10)
30779 {
30780 NetMessage.SendTileSquare(-1, num50, num51, 4, 3);
30781 }
30782 if (num54 != -1)
30783 {
30784 bool flag11 = false;
30785 if ((num53 == 3 || num53 == 4) && num54 == 2)
30786 {
30787 flag11 = true;
30788 }
30789 if (flag11)
30790 {
30791 WorldGen.ShootFromCannon(num50, num51, num52, num53 + 1, 0, 0f, whoAmI, fromWire: false);
30792 }
30793 }
30794 }
30795 else if (Main.tile[myX, myY].type == 510 || Main.tile[myX, myY].type == 511)
30796 {
30797 flag2 = true;
30798 Tile tile3 = Main.tile[myX, myY];
30799 int num60 = tile3.frameX % 36 / 18;
30800 int num61 = tile3.frameY % 36 / 18;
30801 int num62 = myX - num60;
30802 int num63 = myY - num61;
30803 int num64 = tile3.frameY / 36;
30804 _ = tile3.frameX / 36;
30805 int num65 = 0;
30806 if (num60 == 0)
30807 {
30808 num65 = -36;
30809 }
30810 if (num60 == 1)
30811 {
30812 num65 = 36;
30813 }
30814 if (num64 >= 7 && num65 > 0)
30815 {
30816 num65 = -252;
30817 }
30818 if (num64 == 0 && num65 < 0)
30819 {
30820 num65 = 252;
30821 }
30822 bool flag12 = false;
30823 if (num65 != 0)
30824 {
30825 for (int num66 = num62; num66 < num62 + 2; num66++)
30826 {
30827 for (int num67 = num63; num67 < num63 + 2; num67++)
30828 {
30829 Main.tile[num66, num67].frameY = (short)(Main.tile[num66, num67].frameY + num65);
30830 }
30831 }
30832 flag12 = true;
30833 }
30834 if (flag12)
30835 {
30836 NetMessage.SendTileSquare(-1, num62, num63, 2, 2);
30837 }
30838 }
30839 else if (TileID.Sets.BasicChest[Main.tile[myX, myY].type] || Main.tile[myX, myY].type == 29 || Main.tile[myX, myY].type == 97 || Main.tile[myX, myY].type == 463 || Main.tile[myX, myY].type == 491)
30840 {
30841 flag2 = true;
30842 Main.mouseRightRelease = false;
30843 int num68 = 0;
30844 int num69;
30845 for (num69 = Main.tile[myX, myY].frameX / 18; num69 > 1; num69 -= 2)
30846 {
30847 }
30848 num69 = myX - num69;
30849 int num70 = myY - Main.tile[myX, myY].frameY / 18;
30850 if (Main.tile[myX, myY].type == 29)
30851 {
30852 num68 = 1;
30853 }
30854 else if (Main.tile[myX, myY].type == 97)
30855 {
30856 num68 = 2;
30857 }
30858 else if (Main.tile[myX, myY].type == 463)
30859 {
30860 num68 = 3;
30861 num69 = ((Main.tile[myX, myY].frameX != 36) ? (num69 + 1) : (num69 - 1));
30862 num70 += 2;
30863 }
30864 else if (Main.tile[myX, myY].type == 491)
30865 {
30866 num68 = 4;
30867 num69 = ((Main.tile[myX, myY].frameX != 36) ? (num69 + 1) : (num69 - 1));
30868 num70 += 2;
30869 }
30870 CloseSign();
30871 SetTalkNPC(-1);
30872 Main.npcChatCornerItem = 0;
30873 Main.npcChatText = "";
30874 if (Main.editChest)
30875 {
30877 Main.editChest = false;
30878 Main.npcChatText = string.Empty;
30879 }
30880 if (editedChestName)
30881 {
30882 NetMessage.SendData(33, -1, -1, NetworkText.FromLiteral(Main.chest[chest].name), chest, 1f);
30883 editedChestName = false;
30884 }
30885 bool flag13 = Chest.IsLocked(Main.tile[num69, num70]);
30886 if (Main.netMode == 1 && num68 == 0 && !flag13)
30887 {
30888 if (num69 == chestX && num70 == chestY && chest != -1)
30889 {
30890 chest = -1;
30891 Recipe.FindRecipes();
30893 }
30894 else
30895 {
30896 if (WorldGen.IsChestRigged(num69, num70))
30897 {
30899 }
30900 NetMessage.SendData(31, -1, -1, null, num69, num70);
30901 Main.stackSplit = 600;
30902 }
30903 }
30904 else
30905 {
30906 int num71 = -1;
30907 switch (num68)
30908 {
30909 case 1:
30910 num71 = -2;
30911 break;
30912 case 2:
30913 num71 = -3;
30914 break;
30915 case 3:
30916 num71 = -4;
30917 break;
30918 case 4:
30919 if (disableVoidBag < 0)
30920 {
30921 num71 = -5;
30922 }
30923 break;
30924 default:
30925 {
30926 bool flag14 = false;
30927 if (Chest.IsLocked(num69, num70))
30928 {
30929 int type2 = Main.tile[num69, num70].type;
30930 int num72 = 327;
30931 switch (type2)
30932 {
30933 case 21:
30934 if (Main.tile[num69, num70].frameX >= 144 && Main.tile[num69, num70].frameX <= 178)
30935 {
30936 num72 = 329;
30937 }
30938 if (Main.tile[num69, num70].frameX >= 828 && Main.tile[num69, num70].frameX <= 1006)
30939 {
30940 int num74 = Main.tile[num69, num70].frameX / 18;
30941 int num75 = 0;
30942 while (num74 >= 2)
30943 {
30944 num74 -= 2;
30945 num75++;
30946 }
30947 num75 -= 23;
30948 num72 = 1533 + num75;
30949 }
30950 break;
30951 case 467:
30952 {
30953 int num73 = Main.tile[num69, num70].frameX / 36;
30954 if (num73 == 13)
30955 {
30956 num72 = 4714;
30957 }
30958 break;
30959 }
30960 }
30961 flag14 = true;
30962 bool flag15 = false;
30963 bool flag16 = num72 != 329;
30964 for (int num76 = 0; num76 < 58; num76++)
30965 {
30966 if (inventory[num76].type != num72 || inventory[num76].stack <= 0 || !Chest.Unlock(num69, num70))
30967 {
30968 continue;
30969 }
30970 flag15 = true;
30971 if (flag16)
30972 {
30974 if (inventory[num76].stack <= 0)
30975 {
30976 inventory[num76] = new Item();
30977 }
30978 }
30979 if (Main.netMode == 1)
30980 {
30981 NetMessage.SendData(52, -1, -1, null, whoAmI, 1f, num69, num70);
30982 }
30983 }
30984 if (!flag15 && useVoidBag())
30985 {
30986 for (int num77 = 0; num77 < 40; num77++)
30987 {
30988 if (bank4.item[num77].type != num72 || bank4.item[num77].stack <= 0 || !Chest.Unlock(num69, num70))
30989 {
30990 continue;
30991 }
30992 if (num72 != 329)
30993 {
30994 bank4.item[num77].stack--;
30995 if (bank4.item[num77].stack <= 0)
30996 {
30997 bank4.item[num77] = new Item();
30998 }
30999 }
31000 if (Main.netMode == 1)
31001 {
31002 NetMessage.SendData(52, -1, -1, null, whoAmI, 1f, num69, num70);
31003 }
31004 }
31005 }
31006 }
31007 if (!flag14)
31008 {
31009 num71 = Chest.FindChest(num69, num70);
31010 }
31011 break;
31012 }
31013 }
31014 if (num71 != -1)
31015 {
31016 Main.stackSplit = 600;
31017 bool num78 = WorldGen.IsChestRigged(num69, num70);
31018 if (num71 == chest)
31019 {
31020 chest = -1;
31022 }
31023 else if (num71 != chest && chest == -1)
31024 {
31027 if (Main.tile[num69, num70].frameX >= 36 && Main.tile[num69, num70].frameX < 72)
31028 {
31030 }
31031 }
31032 else
31033 {
31036 }
31037 if (num78)
31038 {
31039 Wiring.HitSwitch(myX, myY);
31040 NetMessage.SendData(59, -1, -1, null, myX, myY);
31042 }
31043 Recipe.FindRecipes();
31044 }
31045 }
31046 }
31047 else if (Main.tile[myX, myY].type == 314 && gravDir == 1f)
31048 {
31049 flag2 = true;
31050 bool flag17 = true;
31051 if (mount.Active)
31052 {
31053 if (mount.Cart)
31054 {
31055 flag17 = false;
31056 }
31057 else
31058 {
31059 mount.Dismount(this);
31060 }
31061 }
31062 if (flag17)
31063 {
31065 }
31066 }
31067 }
31068 if (flag2)
31069 {
31071 }
31072 }
static double Sqrt(double d)
static int Sign(decimal value)
Definition Math.cs:1202
static void PlaySound(int type, Vector2 position, int style=1)
Item[] item
Definition Chest.cs:41
Vector2 position
Definition Entity.cs:14
static void HandleSpecialEvent(Player player, int eventID)
static bool WouldFailSpawningHere(int x, int y)
Definition DD2Event.cs:571
static void SummonCrystal(int x, int y, int whoAsks)
Definition DD2Event.cs:540
static void RequestToSkipWaitTime(int x, int y)
Definition DD2Event.cs:1762
static void FailureMessage(int client)
Definition DD2Event.cs:583
static void OnPlayerInteraction(Player player, int clickX, int clickY)
static void OnPlayerInteraction(Player player, int clickX, int clickY)
static void OnPlayerInteraction(Player player, int clickX, int clickY)
Definition TEHatRack.cs:314
static void OnPlayerInteraction(Player player, int clickX, int clickY)
static void OnPlayerInteraction(Player player, int clickX, int clickY)
static readonly LegacySoundStyle Item37
Definition SoundID.cs:488
static readonly LegacySoundStyle Item4
Definition SoundID.cs:422
static readonly LegacySoundStyle Item2
Definition SoundID.cs:418
static readonly LegacySoundStyle Item11
Definition SoundID.cs:436
static readonly LegacySoundStyle Item149
Definition SoundID.cs:712
static bool[] BasicChest
Definition TileID.cs:223
int stack
Definition Item.cs:149
void SetDefaults(int Type=0)
Definition Item.cs:47332
static string GetTextValue(string key)
Definition Language.cs:15
static NetworkText FromLiteral(string text)
void Dismount(Player mountedPlayer)
Definition Mount.cs:5229
bool Active
Definition Mount.cs:345
void RemoveSpawn()
Definition Player.cs:51114
void SetTalkNPC(int npcIndex, bool fromNet=false)
Definition Player.cs:3725
PlayerSleepingHelper sleeping
Definition Player.cs:2465
void GetPreferredGolfBallToUse(out int projType)
Definition Player.cs:46878
TrackedProjectileReference voidLensChest
Definition Player.cs:2431
int _framesLeftEligibleForDeadmansChestDeathAchievement
Definition Player.cs:1045
void GamepadEnableGrappleCooldown()
Definition Player.cs:23162
PlayerSittingHelper sitting
Definition Player.cs:2463
bool releaseUseTile
Definition Player.cs:1415
bool ConsumeItem(int type, bool reverseOrder=false, bool includeVoidBag=false)
Definition Player.cs:8514
bool HasItem(int type)
Definition Player.cs:52305
int snowBallLauncherInteractionCooldown
Definition Player.cs:847
bool IsWithinSnappngRangeToTile(int x, int y, int distanceInPixels)
Definition Player.cs:16993
static bool CheckSpawn(int x, int y)
Definition Player.cs:51050
void ChangeSpawn(int x, int y)
Definition Player.cs:51138
void LaunchMinecartHook(int myX, int myY)
Definition Player.cs:31273
bool editedChestName
Definition Player.cs:1127
bool useVoidBag()
Definition Player.cs:22085
static bool IsHoveringOverABottomSideOfABed(int myX, int myY)
Definition Player.cs:31074
bool tileInteractAttempted
Definition Player.cs:1447
void OpenChest(int x, int y, int newChest)
Definition Player.cs:31241
void AddBuff(int type, int timeToAdd, bool quiet=true, bool foodHack=false)
Definition Player.cs:4441
void FindSpawn()
Definition Player.cs:51095
void PlaceWeapon(int x, int y)
Definition Player.cs:50556
void TryOpeningFullscreenMap()
Definition Player.cs:27420
void CloseSign()
Definition Player.cs:31262
bool ItemFitsWeaponRack(Item i)
Definition Player.cs:50537
int[] ownedProjectileCounts
Definition Player.cs:2545
Item[] inventory
Definition Player.cs:1257
bool tileInteractionHappened
Definition Player.cs:1445
IEntitySource GetProjectileSource_TileInteraction(int tileCoordsX, int tileCoordsY)
Definition Player.cs:9322
TrackedProjectileReference piggyBankProjTracker
Definition Player.cs:2429
void SitDown(Player player, int x, int y)
void StartSleeping(Player player, int x, int y)

References Terraria.NPC.AnyNPCs(), Terraria.ID.TileID.Sets.BasicChest, Terraria.Main.CancelClothesWindow(), Terraria.Main.chest, Terraria.WorldGen.CloseDoor(), Terraria.Main.dayTime, Terraria.NPC.downedPlantBoss, Terraria.Main.editChest, Terraria.GameContent.Events.DD2Event.FailureMessage(), Terraria.Main.fastForwardTimeToDawn, Terraria.Main.fastForwardTimeToDusk, Terraria.Chest.FindChest(), Terraria.Recipe.FindRecipes(), Terraria.Tile.frameX, Terraria.Localization.NetworkText.FromLiteral(), Terraria.Localization.Language.GetTextValue(), Terraria.Framing.GetTileSafely(), Terraria.GameContent.Achievements.AchievementsHelper.HandleSpecialEvent(), Terraria.Wiring.HitSwitch(), Terraria.ID.ProjectileID.Sets.IsAGolfBall, Terraria.WorldGen.IsChestRigged(), Terraria.Chest.IsLocked(), Terraria.WorldGen.IsLockedDoor(), Terraria.Chest.item, Terraria.ID.SoundID.Item11, Terraria.ID.SoundID.Item149, Terraria.ID.SoundID.Item2, Terraria.ID.SoundID.Item37, Terraria.ID.SoundID.Item4, Terraria.WorldGen.KillTile(), Terraria.WorldGen.LaunchRocket(), Terraria.WorldGen.LaunchRocketSmall(), Terraria.Main.moondialCooldown, Terraria.Main.Moondialing(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Projectile.NewProjectile(), Terraria.Animation.NewTemporaryAnimation(), Terraria.Main.NewText(), Terraria.GameContent.Events.DD2Event.Ongoing, Terraria.GameContent.Tile_Entities.TEDisplayDoll.OnPlayerInteraction(), Terraria.GameContent.Tile_Entities.TEFoodPlatter.OnPlayerInteraction(), Terraria.GameContent.Tile_Entities.TEHatRack.OnPlayerInteraction(), Terraria.GameContent.Tile_Entities.TEItemFrame.OnPlayerInteraction(), Terraria.GameContent.Tile_Entities.TEWeaponsRack.OnPlayerInteraction(), Terraria.GameContent.UI.WiresUI.Open, Terraria.Main.OpenClothesWindow(), Terraria.WorldGen.OpenDoor(), Terraria.Audio.SoundEngine.PlaySound(), Terraria.Main.projectile, Terraria.Main.rand, Terraria.Sign.ReadSign(), Terraria.GameContent.Events.DD2Event.RequestToSkipWaitTime(), Terraria.NetMessage.SendData(), Terraria.NetMessage.SendTemporaryAnimation(), Terraria.NetMessage.SendTileSquare(), Terraria.Item.SetDefaults(), Terraria.WorldGen.ShiftTallGate(), Terraria.WorldGen.ShiftTrapdoor(), Terraria.WorldGen.ShootFromCannon(), System.Math.Sign(), Terraria.Main.sign, Terraria.Main.snowMoon, Terraria.NPC.SpawnOnPlayer(), System.Math.Sqrt(), Terraria.Item.stack, Terraria.GameContent.Events.DD2Event.SummonCrystal(), Terraria.Main.sundialCooldown, Terraria.Main.Sundialing(), Terraria.WorldGen.SwitchFountain(), Terraria.WorldGen.SwitchMB(), Terraria.WorldGen.SwitchMonolith(), System.text, Terraria.Main.tile, Terraria.Main.tileSign, Terraria.Main.time, Terraria.WorldGen.ToggleGemLock(), Terraria.GameContent.Events.BirthdayParty.ToggleManualParty(), System.type, Terraria.Item.type, Terraria.Chest.Unlock(), Terraria.WorldGen.UnlockDoor(), and Terraria.GameContent.Events.DD2Event.WouldFailSpawningHere().