if (!args.CanInteract || !args.CanAccess || component.HideFromExamine)
return;
- var getDamage = new MeleeHitEvent(new List<EntityUid>(), args.User, component.Damage);
+ var getDamage = new MeleeHitEvent(new List<EntityUid>(), args.User, uid, component.Damage);
getDamage.IsHit = false;
RaiseLocalEvent(uid, getDamage);
foreach (var (ent, comp) in toHit)
{
var oldDamage = comp.StaminaDamage;
- TakeStaminaDamage(ent, damage / toHit.Count, comp, source:args.User, with:ent);
+ TakeStaminaDamage(ent, damage / toHit.Count, comp, source:args.User, with:args.Weapon);
if (comp.StaminaDamage.Equals(oldDamage))
{
_popup.PopupEntity(Loc.GetString("stamina-resist"), ent, args.User);
/// </summary>
public readonly EntityUid User;
+ /// <summary>
+ /// The melee weapon used.
+ /// </summary>
+ public readonly EntityUid Weapon;
+
/// <summary>
/// Check if this is true before attempting to do something during a melee attack other than changing/adding bonus damage. <br/>
/// For example, do not spend charges unless <see cref="IsHit"/> equals true.
/// </remarks>
public bool IsHit = true;
- public MeleeHitEvent(List<EntityUid> hitEntities, EntityUid user, DamageSpecifier baseDamage)
+ public MeleeHitEvent(List<EntityUid> hitEntities, EntityUid user, EntityUid weapon, DamageSpecifier baseDamage)
{
HitEntities = hitEntities;
User = user;
+ Weapon = weapon;
BaseDamage = baseDamage;
}
}
// is when a melee weapon is examined. Misses are inferred from an
// empty HitEntities.
// TODO: This needs fixing
- var missEvent = new MeleeHitEvent(new List<EntityUid>(), user, damage);
+ var missEvent = new MeleeHitEvent(new List<EntityUid>(), user, meleeUid, damage);
RaiseLocalEvent(meleeUid, missEvent);
Audio.PlayPredicted(component.SwingSound, meleeUid, user);
return;
// Sawmill.Debug($"Melee damage is {damage.Total} out of {component.Damage.Total}");
// Raise event before doing damage so we can cancel damage if the event is handled
- var hitEvent = new MeleeHitEvent(new List<EntityUid> { ev.Target.Value }, user, damage);
+ var hitEvent = new MeleeHitEvent(new List<EntityUid> { ev.Target.Value }, user, meleeUid, damage);
RaiseLocalEvent(meleeUid, hitEvent);
if (hitEvent.Handled)
if (entities.Count == 0)
{
- var missEvent = new MeleeHitEvent(new List<EntityUid>(), user, damage);
+ var missEvent = new MeleeHitEvent(new List<EntityUid>(), user, meleeUid, damage);
RaiseLocalEvent(meleeUid, missEvent);
Audio.PlayPredicted(component.SwingSound, meleeUid, user);
// Sawmill.Debug($"Melee damage is {damage.Total} out of {component.Damage.Total}");
// Raise event before doing damage so we can cancel damage if the event is handled
- var hitEvent = new MeleeHitEvent(targets, user, damage);
+ var hitEvent = new MeleeHitEvent(targets, user, meleeUid, damage);
RaiseLocalEvent(meleeUid, hitEvent);
if (hitEvent.Handled)