base.Initialize();
SubscribeLocalEvent<AbsorbentComponent, ComponentInit>(OnAbsorbentInit);
SubscribeLocalEvent<AbsorbentComponent, AfterInteractEvent>(OnAfterInteract);
+ SubscribeLocalEvent<AbsorbentComponent, SolutionChangedEvent>(OnAbsorbentSolutionChange);
SubscribeLocalEvent<AbsorbentComponent, DoAfterEvent<AbsorbantData>>(OnDoAfter);
}
var doAfterEventArgs = new DoAfterEventArgs(user, drink.ForceDrink ? drink.ForceFeedDelay : drink.Delay,
target: target, used: item)
{
- RaiseOnTarget = drink.ForceDrink,
- RaiseOnUser = !drink.ForceDrink,
+ RaiseOnTarget = user != target,
+ RaiseOnUser = false,
BreakOnUserMove = drink.ForceDrink,
BreakOnDamage = true,
BreakOnStun = true,
return;
}
- if (args.Handled || args.Cancelled || component.Deleted)
+ if (args.Handled || component.Deleted)
return;
if (!TryComp<BodyComponent>(args.Args.Target, out var body))
return;
+ component.Drinking = false;
+
var transferAmount = FixedPoint2.Min(component.TransferAmount, args.AdditionalData.DrinkSolution.Volume);
var drained = _solutionContainerSystem.Drain(uid, args.AdditionalData.DrinkSolution, transferAmount);
- //var forceDrink = args.Args.Target.Value != args.Args.User;
-
if (!_bodySystem.TryGetBodyOrganComponents<StomachComponent>(args.Args.Target.Value, out var stomachs, body))
{
_popupSystem.PopupEntity(component.ForceDrink ? Loc.GetString("drink-component-try-use-drink-cannot-drink-other") : Loc.GetString("drink-component-try-use-drink-had-enough"), args.Args.Target.Value, args.Args.User);
//TODO: Grab the stomach UIDs somehow without using Owner
_stomachSystem.TryTransferSolution(firstStomach.Value.Comp.Owner, drained, firstStomach.Value.Comp);
- component.Drinking = false;
component.ForceDrink = false;
args.Handled = true;
}
var doAfterEventArgs = new DoAfterEventArgs(user, foodComp.ForceFeed ? foodComp.ForceFeedDelay : foodComp.Delay, target: target, used: food)
{
RaiseOnTarget = foodComp.ForceFeed,
- RaiseOnUser = !foodComp.ForceFeed,
+ RaiseOnUser = false, //causes a crash if mice eat if true
BreakOnUserMove = foodComp.ForceFeed,
BreakOnDamage = true,
BreakOnStun = true,
return;
}
- if (args.Cancelled || args.Handled || component.Deleted || args.Args.Target == null)
+ if (args.Handled || component.Deleted || args.Args.Target == null)
return;
if (!TryComp<BodyComponent>(args.Args.Target.Value, out var body))
// log successful force feed
_adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(uid):user} forced {ToPrettyString(args.Args.User):target} to eat {ToPrettyString(uid):food}");
+ component.ForceFeed = false;
}
else
{