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

◆ AI_111_DryadsWard()

void Terraria.Projectile.AI_111_DryadsWard ( )
inlineprivate

Definition at line 33530 of file Projectile.cs.

33531 {
33532 if (!Main.npc[(int)ai[1]].active || Main.npc[(int)ai[1]].type != 20 || Main.npc[(int)ai[1]].ai[0] != 14f)
33533 {
33534 Kill();
33535 return;
33536 }
33537 ai[0] += 1f;
33538 rotation += (float)Math.PI / 300f;
33539 scale = ai[0] / 100f;
33540 if (scale > 1f)
33541 {
33542 scale = 1f;
33543 }
33544 alpha = (int)(255f * (1f - scale));
33545 float num = 300f;
33546 if (ai[0] >= 100f)
33547 {
33548 num = MathHelper.Lerp(300f, 600f, (ai[0] - 100f) / 200f);
33549 }
33550 if (num > 600f)
33551 {
33552 num = 600f;
33553 }
33554 if (ai[0] >= 500f)
33555 {
33556 alpha = (int)MathHelper.Lerp(0f, 255f, (ai[0] - 500f) / 100f);
33557 num = MathHelper.Lerp(600f, 1200f, (ai[0] - 500f) / 100f);
33558 rotation += (float)Math.PI / 300f;
33559 }
33560 int num2 = 163;
33561 if (ai[2] == 1f)
33562 {
33563 float num3 = (float)Math.Sin(ai[0] % 120f * ((float)Math.PI * 2f) / 120f) * 0.5f + 0.5f;
33564 if (Main.rand.NextFloat() < num3)
33565 {
33566 num2 = 70;
33567 }
33568 }
33569 if (Main.rand.Next(4) == 0)
33570 {
33571 float num4 = num;
33572 Vector2 vector = new Vector2(Main.rand.Next(-10, 11), Main.rand.Next(-10, 11));
33573 float num5 = Main.rand.Next(3, 9);
33574 vector.Normalize();
33575 int num6 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, num2, 0f, 0f, 100);
33576 Main.dust[num6].noGravity = true;
33577 Main.dust[num6].position = base.Center + vector * num4;
33578 if (Main.rand.Next(8) == 0)
33579 {
33580 Main.dust[num6].velocity = vector * (0f - num5) * 3f;
33581 Main.dust[num6].scale += 0.5f;
33582 }
33583 else
33584 {
33585 Main.dust[num6].velocity = vector * (0f - num5);
33586 }
33587 }
33588 if (Main.rand.Next(2) == 0)
33589 {
33590 Vector2 vector2 = new Vector2(Main.rand.Next(-10, 11), Main.rand.Next(-10, 11));
33591 float num7 = Main.rand.Next(3, 9);
33592 vector2.Normalize();
33593 int num8 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, num2, 0f, 0f, 100, default(Color), 1.5f);
33594 Main.dust[num8].noGravity = true;
33595 Main.dust[num8].position = base.Center + vector2 * 30f;
33596 if (Main.rand.Next(8) == 0)
33597 {
33598 Main.dust[num8].velocity = vector2 * (0f - num7) * 3f;
33599 Main.dust[num8].scale += 0.5f;
33600 }
33601 else
33602 {
33603 Main.dust[num8].velocity = vector2 * (0f - num7);
33604 }
33605 }
33606 if (ai[0] >= 30f && Main.netMode != 2)
33607 {
33608 Player player = Main.player[Main.myPlayer];
33609 if (player.active && !player.dead && Distance(player.Center) <= num && player.FindBuffIndex(165) == -1)
33610 {
33611 player.AddBuff(165, 120);
33612 }
33613 }
33614 if (ai[0] >= 30f && ai[0] % 10f == 0f && Main.netMode != 1)
33615 {
33616 for (int i = 0; i < 200; i++)
33617 {
33618 NPC nPC = Main.npc[i];
33619 if (nPC.type != 488 && nPC.active && Distance(nPC.Center) <= num)
33620 {
33621 if (nPC.townNPC && (nPC.FindBuffIndex(165) == -1 || nPC.buffTime[nPC.FindBuffIndex(165)] <= 20))
33622 {
33623 nPC.AddBuff(165, 120);
33624 }
33625 else if (!nPC.friendly && nPC.lifeMax > 5 && !nPC.dontTakeDamage && (nPC.FindBuffIndex(186) == -1 || nPC.buffTime[nPC.FindBuffIndex(186)] <= 20) && (nPC.dryadBane || Collision.CanHit(base.Center, 1, 1, nPC.position, nPC.width, nPC.height)))
33626 {
33627 nPC.AddBuff(186, 120);
33628 }
33629 }
33630 }
33631 }
33632 if (ai[0] >= 570f)
33633 {
33634 Kill();
33635 }
33636 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
static double Sin(double a)
const double PI
Definition Math.cs:16
float Distance(Vector2 Other)
Definition Entity.cs:187
Vector2 position
Definition Entity.cs:14

References Terraria.Entity.active, Terraria.Player.AddBuff(), Terraria.Collision.CanHit(), Terraria.Entity.Center, Terraria.Player.dead, Terraria.Main.dust, Terraria.Player.FindBuffIndex(), Microsoft.Xna.Framework.MathHelper.Lerp(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDust(), Terraria.Main.npc, System.Math.PI, Terraria.Main.player, Terraria.Main.rand, System.Math.Sin(), Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.