Melee weapons can only hit one character per swing (makes stun batons & medical syringes less OP). Closes #814, closes #865
This commit is contained in:
@@ -41,6 +41,13 @@ namespace Barotrauma.Items.Components
|
|||||||
set { reload = Math.Max(0.0f, value); }
|
set { reload = Math.Max(0.0f, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serialize(false, false)]
|
||||||
|
public bool AllowHitMultiple
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
public MeleeWeapon(Item item, XElement element)
|
public MeleeWeapon(Item item, XElement element)
|
||||||
: base(item, element)
|
: base(item, element)
|
||||||
{
|
{
|
||||||
@@ -218,21 +225,43 @@ namespace Barotrauma.Items.Components
|
|||||||
targetLimb = (Limb)f2.Body.UserData;
|
targetLimb = (Limb)f2.Body.UserData;
|
||||||
if (targetLimb.IsSevered || targetLimb.character == null) return false;
|
if (targetLimb.IsSevered || targetLimb.character == null) return false;
|
||||||
targetCharacter = targetLimb.character;
|
targetCharacter = targetLimb.character;
|
||||||
|
if (targetCharacter == picker) return false;
|
||||||
if (hitTargets.Contains(targetCharacter)) return false;
|
if (AllowHitMultiple)
|
||||||
|
{
|
||||||
|
if (hitTargets.Contains(targetCharacter)) return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (hitTargets.Any(t => t is Character)) return false;
|
||||||
|
}
|
||||||
hitTargets.Add(targetCharacter);
|
hitTargets.Add(targetCharacter);
|
||||||
}
|
}
|
||||||
else if (f2.Body.UserData is Character)
|
else if (f2.Body.UserData is Character)
|
||||||
{
|
{
|
||||||
targetCharacter = (Character)f2.Body.UserData;
|
targetCharacter = (Character)f2.Body.UserData;
|
||||||
|
if (targetCharacter == picker) return false;
|
||||||
targetLimb = targetCharacter.AnimController.GetLimb(LimbType.Torso); //Otherwise armor can be bypassed in strange ways
|
targetLimb = targetCharacter.AnimController.GetLimb(LimbType.Torso); //Otherwise armor can be bypassed in strange ways
|
||||||
if (hitTargets.Contains(targetCharacter)) return false;
|
if (AllowHitMultiple)
|
||||||
|
{
|
||||||
|
if (hitTargets.Contains(targetCharacter)) return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (hitTargets.Any(t => t is Character)) return false;
|
||||||
|
}
|
||||||
hitTargets.Add(targetCharacter);
|
hitTargets.Add(targetCharacter);
|
||||||
}
|
}
|
||||||
else if (f2.Body.UserData is Structure)
|
else if (f2.Body.UserData is Structure)
|
||||||
{
|
{
|
||||||
targetStructure = (Structure)f2.Body.UserData;
|
targetStructure = (Structure)f2.Body.UserData;
|
||||||
if (hitTargets.Contains(targetStructure)) return false;
|
if (AllowHitMultiple)
|
||||||
|
{
|
||||||
|
if (hitTargets.Contains(targetStructure)) return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (hitTargets.Any(t => t is Structure)) return true;
|
||||||
|
}
|
||||||
hitTargets.Add(targetStructure);
|
hitTargets.Add(targetStructure);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -240,8 +269,6 @@ namespace Barotrauma.Items.Components
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (targetCharacter == picker) return false;
|
|
||||||
|
|
||||||
if (attack != null)
|
if (attack != null)
|
||||||
{
|
{
|
||||||
if (targetLimb != null)
|
if (targetLimb != null)
|
||||||
@@ -278,7 +305,7 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe??
|
if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe??
|
||||||
ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter != null ? targetCharacter : null);
|
ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter);
|
||||||
|
|
||||||
if (DeleteOnUse)
|
if (DeleteOnUse)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user