From eed7b72b4ef304123d4f3198afdcb93658e2fd43 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Wed, 18 Apr 2018 15:04:18 +0300 Subject: [PATCH] Fixed player-controlled creatures being able to do damage to themselves and RepairTools causing damage to the user regardless of the user's skills. --- Barotrauma/BarotraumaShared/Source/Characters/Character.cs | 7 +++++-- .../Source/Items/Components/Holdable/RepairTool.cs | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 0c111ab7a..1495cc0ac 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -910,10 +910,13 @@ namespace Barotrauma Vector2 attackPos = attackLimb.SimPosition + Vector2.Normalize(cursorPosition - attackLimb.Position) * ConvertUnits.ToSimUnits(attackLimb.attack.Range); + List ignoredBodies = AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(); + ignoredBodies.Add(AnimController.Collider.FarseerBody); + var body = Submarine.PickBody( attackLimb.SimPosition, attackPos, - AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(), + ignoredBodies, Physics.CollisionCharacter | Physics.CollisionWall); IDamageable attackTarget = null; @@ -928,7 +931,7 @@ namespace Barotrauma body = Submarine.PickBody( attackLimb.SimPosition - ((Submarine)body.UserData).SimPosition, attackPos - ((Submarine)body.UserData).SimPosition, - AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(), + ignoredBodies, Physics.CollisionWall); if (body != null) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs index 01b71ea0e..fd16f253a 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs @@ -142,6 +142,7 @@ namespace Barotrauma.Items.Components if (Rand.Range(0.0f, 0.5f) > degreeOfSuccess) continue; ignoredBodies.Add(limb.body.FarseerBody); } + ignoredBodies.Add(character.AnimController.Collider.FarseerBody); IsActive = true; activeTimer = 0.1f;