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

◆ AI_111_DD2LightningBug()

void Terraria.NPC.AI_111_DD2LightningBug ( )
inlineprivate

Definition at line 58563 of file NPC.cs.

58564 {
58565 //IL_02f6: Unknown result type (might be due to invalid IL or missing references)
58566 bool flag = true;
58567 float num = 7f;
58568 float num2 = 60f;
58569 float num3 = 60f;
58570 float num4 = 1f;
58571 float num5 = 0.96f;
58572 int num6 = 30;
58573 int num7 = 20;
58574 float num8 = 200f;
58575 int num9 = 40;
58576 int num10 = 438;
58577 float num11 = 10f;
58578 float num12 = 100f;
58579 bool flag2 = false;
58580 float num13 = 0.05f;
58581 Vector2 center = base.Center;
58584 bool flag3 = false;
58585 int num14 = type;
58586 if (num14 == 578)
58587 {
58588 num = 4f;
58589 num2 = 20f;
58590 num3 = 20f;
58591 flag3 = true;
58592 flag2 = true;
58593 num13 = 0.1f;
58594 num10 = 682;
58595 num9 = 50;
58596 num11 = 10f;
58597 num12 = 50f;
58598 num6 = 5;
58599 num7 = 30;
58600 center += new Vector2(-spriteDirection * 20, 10f);
58602 if (Main.rand.Next(15) == 0)
58603 {
58605 if (direction == -1)
58606 {
58607 vector.X += width / 2;
58608 }
58609 Dust dust = Dust.NewDustDirect(vector, width / 2, height, 272);
58610 dust.scale = 0.65f;
58611 dust.velocity.Y -= 0.8f;
58612 if (dust.velocity.X * (float)direction > 0f)
58613 {
58614 dust.velocity.X *= -1f;
58615 }
58616 if (dust.velocity.Y > 0f)
58617 {
58618 dust.velocity *= -0.5f;
58619 }
58620 }
58621 if (Main.rand.Next(80) == 0)
58622 {
58623 Vector2 vector2 = (Main.rand.NextFloat() * ((float)Math.PI * 2f)).ToRotationVector2();
58624 Dust dust2 = Dust.NewDustPerfect(base.Center, 272, vector2);
58625 dust2.velocity *= 1.1f;
58626 dust2.noGravity = true;
58627 dust2.customData = this;
58628 Dust dust3 = Dust.NewDustPerfect(base.Center, 272, vector2);
58629 dust3.velocity *= 1.5f;
58630 dust3.noGravity = true;
58631 dust3.customData = this;
58632 }
58634 }
58635 if (flag3)
58636 {
58637 if (localAI[1] == 0f)
58638 {
58639 alpha = 255;
58640 }
58641 if (localAI[1] == 30f)
58642 {
58644 }
58645 if (localAI[1] < 60f)
58646 {
58647 localAI[1] += 1f;
58648 alpha -= 5;
58649 if (alpha < 0)
58650 {
58651 alpha = 0;
58652 }
58653 int num15 = (int)localAI[1] / 10;
58654 float num16 = base.Size.Length() / 2f;
58655 num16 /= 20f;
58656 int maxValue = 5;
58657 if (type == 576 || type == 577)
58658 {
58659 maxValue = 1;
58660 }
58661 for (int i = 0; i < num15; i++)
58662 {
58663 if (Main.rand.Next(maxValue) == 0)
58664 {
58665 Dust dust4 = Dust.NewDustDirect(position, width, height, 27, velocity.X * 1f, 0f, 100);
58666 dust4.scale = 0.55f;
58667 dust4.fadeIn = 0.7f;
58668 dust4.velocity *= 0.1f * num16;
58669 dust4.velocity += velocity;
58670 }
58671 }
58672 }
58673 }
58674 if (flag2)
58675 {
58676 for (int j = 0; j < 200; j++)
58677 {
58678 if (j != whoAmI && Main.npc[j].active && Main.npc[j].type == type && Math.Abs(position.X - Main.npc[j].position.X) + Math.Abs(position.Y - Main.npc[j].position.Y) < (float)width)
58679 {
58680 if (position.X < Main.npc[j].position.X)
58681 {
58682 velocity.X -= num13;
58683 }
58684 else
58685 {
58686 velocity.X += num13;
58687 }
58688 if (position.Y < Main.npc[j].position.Y)
58689 {
58690 velocity.Y -= num13;
58691 }
58692 else
58693 {
58694 velocity.Y += num13;
58695 }
58696 }
58697 }
58698 }
58699 rotation = Math.Abs(velocity.X) * (float)direction * 0.1f;
58702 Vector2 vector4 = targetData.Center - vector3;
58703 Vector2 vector5 = vector4.SafeNormalize(Vector2.UnitY) * num;
58704 bool flag4 = Collision.CanHit(base.Center, 1, 1, targetData.Center, 1, 1);
58705 if (localAI[0] < 0f)
58706 {
58707 localAI[0] += 1f;
58708 }
58709 if (!flag)
58710 {
58711 velocity = (velocity * (num2 - 1f) + vector5) / num2;
58712 EncourageDespawn(10);
58713 }
58714 else if (vector4.Length() > num8 || !flag4)
58715 {
58716 velocity = (velocity * (num3 - 1f) + vector5) / num3;
58717 }
58718 else if (vector4.Y < num12)
58719 {
58720 velocity.Y -= 0.03f;
58721 }
58722 else if (localAI[0] >= 0f)
58723 {
58724 velocity *= num5;
58725 if (velocity.Length() < num4 && Main.netMode != 1)
58726 {
58727 localAI[0] += 1f;
58728 if (localAI[0] >= (float)num6)
58729 {
58730 localAI[0] = -num7;
58731 direction = (spriteDirection = ((vector5.X > 0f) ? 1 : (-1)));
58732 vector5 = vector4 + Utils.RandomVector2(Main.rand, -25f, 25f);
58733 vector5.X *= 1f + (float)Main.rand.Next(-20, 21) * 0.005f;
58734 vector5.Y *= 1f + (float)Main.rand.Next(-20, 21) * 0.005f;
58735 vector5 = vector5.SafeNormalize(Vector2.UnitY) * num11;
58736 vector5.X *= 1f + (float)Main.rand.Next(-20, 21) * (1f / 160f);
58737 vector5.Y *= 1f + (float)Main.rand.Next(-20, 21) * (1f / 160f);
58738 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector3, vector5, num10, num9, 0f, Main.myPlayer);
58739 }
58740 }
58741 }
58742 if (!flag)
58743 {
58744 return;
58745 }
58746 bool flag5 = false;
58747 if (targetData.Center.Y < base.Center.Y)
58748 {
58749 flag5 = true;
58750 }
58751 if (!flag5)
58752 {
58753 Point point = base.Center.ToTileCoordinates();
58754 if (WorldGen.InWorld(point.X, point.Y, 2))
58755 {
58756 Tile tile = Main.tile[point.X, point.Y];
58757 if (tile != null && tile.active() && WorldGen.SolidTile(tile))
58758 {
58759 flag5 = true;
58760 }
58761 }
58762 }
58763 if (flag5)
58764 {
58765 velocity.Y -= 0.2f;
58766 if (velocity.Y < -10f)
58767 {
58768 velocity.Y = -10f;
58769 }
58770 }
58771 }
static double Abs(double value)
const double PI
Definition Math.cs:16
static SlotId PlayTrackedSound(SoundStyle style, Vector2 position)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static readonly LegacySoundStyle DD2_EtherianPortalSpawnEnemy
Definition SoundID.cs:922
Vector2 netOffset
Definition NPC.cs:103
float[] localAI
Definition NPC.cs:449
int spriteDirection
Definition NPC.cs:517
void EncourageDespawn(int despawnTime)
Definition NPC.cs:1390
NPCAimedTarget GetTargetData(bool ignorePlayerTankPets=true)
Definition NPC.cs:864
int type
Definition NPC.cs:445
int alpha
Definition NPC.cs:489
float rotation
Definition NPC.cs:501
IEntitySource GetSpawnSource_ForProjectile()
Definition NPC.cs:87526
static void TargetClosestOldOnesInvasion(NPC searcher, bool faceTarget=true, Vector2? checkPosition=null)
Definition NPCUtils.cs:261

References System.Math.Abs(), Terraria.Tile.active(), Terraria.NPC.alpha, Terraria.Collision.CanHit(), Terraria.ID.SoundID.DD2_EtherianPortalSpawnEnemy, Terraria.Entity.direction, Terraria.NPC.EncourageDespawn(), Terraria.NPC.GetSpawnSource_ForProjectile(), Terraria.NPC.GetTargetData(), Terraria.Entity.height, Terraria.WorldGen.InWorld(), Microsoft.Xna.Framework.Vector2.Length(), Terraria.NPC.localAI, Terraria.Main.myPlayer, Terraria.NPC.netOffset, Terraria.Dust.NewDustDirect(), Terraria.Dust.NewDustPerfect(), Terraria.Projectile.NewProjectile(), Terraria.Main.npc, System.Math.PI, Terraria.Audio.SoundEngine.PlayTrackedSound(), Terraria.Entity.position, Terraria.Main.rand, Terraria.Utils.RandomVector2(), Terraria.NPC.rotation, Terraria.WorldGen.SolidTile(), Terraria.NPC.spriteDirection, Terraria.Utilities.NPCUtils.TargetClosestOldOnesInvasion(), Terraria.Main.tile, Terraria.NPC.type, Microsoft.Xna.Framework.Vector2.UnitY, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Dust.velocity, Terraria.Entity.velocity, Terraria.Entity.whoAmI, Terraria.Entity.width, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Point.Y, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.NPC.AI().