Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ TorchAttack()

void Terraria.Player.TorchAttack ( )
inlineprivate

Definition at line 17493 of file Player.cs.

17494 {
17495 if (whoAmI != Main.myPlayer)
17496 {
17497 return;
17498 }
17499 if ((double)position.Y < Main.worldSurface * 16.0)
17500 {
17502 return;
17503 }
17504 AddBuff(80, 2);
17505 torchFunTimer++;
17506 if (torchFunTimer <= 20)
17507 {
17508 return;
17509 }
17510 torchFunTimer = 0;
17511 int num = 0;
17512 int num2 = 100;
17513 int value = (int)base.Center.X / 16 - num2;
17514 int value2 = (int)base.Center.X / 16 + num2;
17515 int value3 = (int)base.Center.Y / 16 - num2;
17516 int value4 = (int)base.Center.Y / 16 + num2;
17517 int num3 = Utils.Clamp(value, 10, Main.maxTilesX - 10);
17518 value2 = Utils.Clamp(value2, 10, Main.maxTilesX - 10);
17519 value3 = Utils.Clamp(value3, 10, Main.maxTilesY - 10);
17520 value4 = Utils.Clamp(value4, 10, Main.maxTilesY - 10);
17521 for (int i = num3; i <= value2; i++)
17522 {
17523 for (int j = value3; j <= value4; j++)
17524 {
17525 Tile tile = Main.tile[i, j];
17526 if (tile != null && (tile.active() & (tile.type == 4)) && tile.frameX < 66)
17527 {
17528 _torchAttackPosX[num] = i;
17529 _torchAttackPosY[num] = j;
17530 num++;
17531 if (num >= _torchAttackPosX.Length)
17532 {
17533 break;
17534 }
17535 }
17536 }
17537 if (num >= _torchAttackPosX.Length)
17538 {
17539 break;
17540 }
17541 }
17542 if (num == 0 || numberOfTorchAttacksMade >= maxTorchAttacks)
17543 {
17545 happyFunTorchTime = false;
17546 if (Main.netMode == 1)
17547 {
17548 NetMessage.SendData(4, -1, -1, null, whoAmI);
17549 }
17550 if (numberOfTorchAttacksMade >= 95)
17551 {
17552 int number = Item.NewItem(new EntitySource_ByItemSourceId(this, 6), (int)position.X, (int)position.Y, width, height, 5043);
17553 if (Main.netMode == 1)
17554 {
17555 NetMessage.SendData(21, -1, -1, null, number, 1f);
17556 }
17557 }
17558 }
17559 else
17560 {
17561 if (num <= 0)
17562 {
17563 return;
17564 }
17565 int num4 = Main.rand.Next(num);
17566 int num5 = _torchAttackPosX[num4];
17567 int num6 = _torchAttackPosY[num4];
17568 if (Main.tile[num5, num6].type == 4 && Main.tile[num5, num6].frameX < 66)
17569 {
17570 float num7 = 8f;
17571 int num8 = 20;
17572 if (num8 < 10)
17573 {
17574 num8 = 10;
17575 }
17576 int num9 = (int)MathHelper.Clamp(Main.tile[num5, num6].frameY / 22, 0f, TorchID.Count - 1);
17577 num9 = TorchID.Dust[num9];
17578 Main.tile[num5, num6].frameX += 66;
17582 NetMessage.SendTileSquare(-1, num5, num6);
17583 Vector2 vector = new Vector2(num5 * 16 + 8, num6 * 16);
17584 Vector2 vector2 = base.Center - vector;
17585 float num10 = vector2.Length();
17586 vector2.Normalize();
17587 vector2 *= num7;
17588 int num11 = Projectile.NewProjectile(GetProjectileSource_Misc(10), vector, vector2, 949, num8, 1f, whoAmI, num9, num10);
17589 Main.projectile[num11].ai[0] = num9;
17590 Main.projectile[num11].ai[1] = num10;
17591 Main.projectile[num11].netUpdate = true;
17593 {
17594 torchFunTimer = -180;
17595 }
17596 }
17597 }
17598 }
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
Vector2 position
Definition Entity.cs:14
static readonly short Count
Definition TorchID.cs:132
static int[] Dust
Definition TorchID.cs:75
int[] unlitTorchY
Definition Player.cs:2637
static int[] _torchAttackPosX
Definition Player.cs:2639
static int[] _torchAttackPosY
Definition Player.cs:2641
int[] unlitTorchX
Definition Player.cs:2635
bool happyFunTorchTime
Definition Player.cs:2625
void RelightTorches()
Definition Player.cs:17478
void EndOngoingTorchGodEvent()
Definition Player.cs:17399
IEntitySource GetProjectileSource_Misc(int projectileSourceId)
Definition Player.cs:9317
int numberOfTorchAttacksMade
Definition Player.cs:2631
void AddBuff(int type, int timeToAdd, bool quiet=true, bool foodHack=false)
Definition Player.cs:4441
static int maxTorchAttacks
Definition Player.cs:2633

References Terraria.Tile.active(), Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.ID.TorchID.Count, Terraria.ID.TorchID.Dust, Terraria.Tile.frameX, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Item.NewItem(), Terraria.Projectile.NewProjectile(), Terraria.Main.projectile, Terraria.Main.rand, Terraria.NetMessage.SendData(), Terraria.NetMessage.SendTileSquare(), Terraria.Main.tile, Terraria.Tile.type, System.value, and Terraria.Main.worldSurface.