From 3e441699c95d172cebea33b1436207958aacf61a Mon Sep 17 00:00:00 2001 From: FyloZ Date: Mon, 13 Jul 2020 11:29:12 -0400 Subject: [PATCH] Fixed The Body not ricocheting projectiles. --- Content/Items/Accessories/Trinity/Body.cs | 74 +++++++++++++++-------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/Content/Items/Accessories/Trinity/Body.cs b/Content/Items/Accessories/Trinity/Body.cs index cf64c9e..d2ce481 100644 --- a/Content/Items/Accessories/Trinity/Body.cs +++ b/Content/Items/Accessories/Trinity/Body.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using Decimation.Lib.Util; using Microsoft.Xna.Framework; using Terraria; @@ -54,38 +53,61 @@ namespace Decimation.Content.Items.Accessories.Trinity private bool Ricochet(Projectile projectile, Player target, bool isPlayer, ref int damage) { - if (!Main.expertMode || !Main.rand.NextBool(10) || - !target.GetModPlayer().HasEquippedAccessory(ModContent.ItemType())) return false; - - Entity newTarget = null; - float lastDistance = float.MaxValue; - for (int i = 0; i < (isPlayer ? Main.player.Length : Main.npc.Length); i++) + if (Main.expertMode && Main.rand.NextBool(10) && + target.GetModPlayer().HasEquippedAccessory(ModContent.ItemType())) { - Entity entity = isPlayer ? (Entity) Main.player[i] : Main.npc[i]; - if (entity != null && entity.active && target.CanHit(newTarget)) + Entity newTarget = null; + float lastDistance = float.MaxValue; + if (isPlayer) { - float distance = projectile.Distance(entity.Center); - if (distance < 1000f && distance < lastDistance) + for (int i = 0; i < Main.player.Length; i++) { - lastDistance = distance; - newTarget = entity; + Player player = Main.player[i]; + if (player != null && player.active && !player.dead && player.whoAmI != target.whoAmI) + { + float distance = projectile.Distance(player.Center); + if (distance < 1000f && distance < lastDistance) + { + lastDistance = distance; + newTarget = player; + } + } } } + else + { + for (int i = 0; i < Main.npc.Length; i++) + { + NPC npc = Main.npc[i]; + if (npc != null && npc.active && !npc.friendly) + { + float distance = projectile.Distance(npc.Center); + if (distance < 1000f && distance < lastDistance) + { + lastDistance = distance; + newTarget = npc; + } + } + } + } + + if (newTarget == null) return false; + Main.NewText(newTarget.position); + + float speed = projectile.velocity.Length(); + Vector2 velocity = newTarget.Center - projectile.Center; + velocity.Normalize(); + velocity *= speed; + + projectile.velocity = velocity; + projectile.damage = (int) (projectile.damage * 1.5f); + + damage = 0; + + return true; } - if (newTarget == null) return false; - - float speed = projectile.velocity.Length(); - Vector2 velocity = newTarget.Center - projectile.Center; - velocity.Normalize(); - velocity *= speed; - - projectile.velocity = velocity; - projectile.damage = (int) (projectile.damage * 1.5f); - - damage = 0; - - return true; + return false; } } } \ No newline at end of file