public override void Update(Player player, ref int buffIndex) { ProjectPlayer modPlayer = player.GetModPlayer <ProjectPlayer>(mod); if (player.ownedProjectileCounts[mod.ProjectileType("magno_minion")] > 0) { modPlayer.magnoMinion = true; } if (!modPlayer.magnoMinion) { player.DelBuff(buffIndex); buffIndex--; } else { player.buffTime[buffIndex] = 18000; } }
public override void AI() { Player player = Main.player[projectile.owner]; ProjectPlayer modPlayer = player.GetModPlayer <ProjectPlayer>(mod); ticks++; projectile.damage = 0; if (player.dead || !player.HasBuff(mod.BuffType("magno_summon"))) { modPlayer.magnoMinion = false; } if (modPlayer.magnoMinion) { projectile.timeLeft = 2; } orbitPosition = player.position + new Vector2(0f, -64f); Angle = (float)Math.Atan2(orbitPosition.Y - projectile.position.Y, orbitPosition.X - projectile.position.X); if (!target) { if (Vector2.Distance(orbitPosition - projectile.position, Vector2.Zero) > 32f) { projectile.position += Distance(null, Angle, 4f); } else if (Vector2.Distance(orbitPosition - projectile.position, Vector2.Zero) > 128f) { projectile.position += Distance(null, Angle, 16f); } } foreach (NPC n in Main.npc) { if (n.active && !n.friendly && !n.dontTakeDamage && n.target == player.whoAmI) { npcCenter = new Vector2(n.position.X + n.width / 2, n.position.Y + n.height / 2); if ((n.life <= 0 || !targeted || npcTarget != n.whoAmI) && Vector2.Distance(npcCenter - projectile.position, Vector2.Zero) < 384f) { oldNpcTarget = npcTarget; npcTarget = n.whoAmI; targeted = true; } } else { projectile.spriteDirection = player.direction * -1; } } if (targeted) { NPC n = Main.npc[npcTarget]; npcCenter = new Vector2(n.position.X + n.width / 2, n.position.Y + n.height / 2); npcAngle = (float)Math.Atan2(npcCenter.Y - projectile.position.Y, npcCenter.X - projectile.position.X); projectile.rotation = npcAngle; if (Vector2.Distance(npcCenter - projectile.position, Vector2.Zero) < 384f) { if (!projectile.Hitbox.Intersects(n.Hitbox)) { projectile.position += Distance(null, npcAngle, 16f); } else { projectile.position = n.position + new Vector2(n.width / 2, n.height / 2); if (ticks % 120 == 0) { for (float k = 0; k < MathHelper.ToRadians(360); k += 0.017f * 9) { int Proj1 = Projectile.NewProjectile(projectile.position + new Vector2(projectile.width / 2, projectile.height / 2), Distance(null, k, 16f), mod.ProjectileType("dust_diffusion"), (int)(12 * player.minionDamage), 4f, projectile.owner, Distance(null, k, 16f).X, Distance(null, k, 16f).Y); if (Main.netMode == 1) { NetMessage.SendData(27, -1, -1, null, Proj1); } } Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/IceBeamChargeShot"), projectile.position); } } target = true; } else { target = false; } if (!n.active || npcTarget != n.whoAmI) { target = false; targeted = false; } } }