Filled bucket will spill player when it is worn on their head (#6114)
This commit is contained in:
@@ -12,4 +12,11 @@ public class SpillableComponent : Component
|
|||||||
|
|
||||||
[DataField("solution")]
|
[DataField("solution")]
|
||||||
public string SolutionName = "puddle";
|
public string SolutionName = "puddle";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should this item be spilled when worn as clothing?
|
||||||
|
/// Doesn't count for pockets or hands.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("spillWorn")]
|
||||||
|
public bool SpillWorn = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ using System.Diagnostics.CodeAnalysis;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server.Administration.Logs;
|
using Content.Server.Administration.Logs;
|
||||||
using Content.Server.Chemistry.EntitySystems;
|
using Content.Server.Chemistry.EntitySystems;
|
||||||
|
using Content.Server.Clothing.Components;
|
||||||
using Content.Server.Coordinates.Helpers;
|
using Content.Server.Coordinates.Helpers;
|
||||||
using Content.Server.Fluids.Components;
|
using Content.Server.Fluids.Components;
|
||||||
using Content.Shared.Chemistry.Components;
|
using Content.Shared.Chemistry.Components;
|
||||||
using Content.Shared.Chemistry.Reagent;
|
using Content.Shared.Chemistry.Reagent;
|
||||||
using Content.Shared.Database;
|
using Content.Shared.Database;
|
||||||
using Content.Shared.FixedPoint;
|
using Content.Shared.FixedPoint;
|
||||||
|
using Content.Shared.Inventory.Events;
|
||||||
using Content.Shared.Throwing;
|
using Content.Shared.Throwing;
|
||||||
using Content.Shared.Verbs;
|
using Content.Shared.Verbs;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
@@ -35,6 +37,31 @@ public class SpillableSystem : EntitySystem
|
|||||||
base.Initialize();
|
base.Initialize();
|
||||||
SubscribeLocalEvent<SpillableComponent, LandEvent>(SpillOnLand);
|
SubscribeLocalEvent<SpillableComponent, LandEvent>(SpillOnLand);
|
||||||
SubscribeLocalEvent<SpillableComponent, GetOtherVerbsEvent>(AddSpillVerb);
|
SubscribeLocalEvent<SpillableComponent, GetOtherVerbsEvent>(AddSpillVerb);
|
||||||
|
SubscribeLocalEvent<SpillableComponent, GotEquippedEvent>(OnGotEquipped);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGotEquipped(EntityUid uid, SpillableComponent component, GotEquippedEvent args)
|
||||||
|
{
|
||||||
|
if (!component.SpillWorn)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!TryComp(uid, out ClothingComponent? clothing))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// check if entity was actually used as clothing
|
||||||
|
// not just taken in pockets or something
|
||||||
|
var isCorrectSlot = clothing.SlotFlags.HasFlag(args.SlotFlags);
|
||||||
|
if (!isCorrectSlot) return;
|
||||||
|
|
||||||
|
if (!_solutionContainerSystem.TryGetSolution(uid, component.SolutionName, out var solution))
|
||||||
|
return;
|
||||||
|
if (solution.TotalVolume == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// spill all solution on the player
|
||||||
|
var drainedSolution = _solutionContainerSystem.Drain(uid, solution, solution.DrainAvailable);
|
||||||
|
SpillAt(args.Equipee, drainedSolution, "PuddleSmear");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user