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"); }
private void AddSpillVerb(EntityUid uid, SpillableComponent component, GetVerbsEvent <Verb> args) { if (!args.CanAccess || !args.CanInteract) { return; } if (!_solutionContainerSystem.TryGetDrainableSolution(args.Target, out var solution)) { return; } if (solution.DrainAvailable == FixedPoint2.Zero) { return; } Verb verb = new(); verb.Text = Loc.GetString("spill-target-verb-get-data-text"); // TODO VERB ICONS spill icon? pouring out a glass/beaker? verb.Act = () => { var puddleSolution = _solutionContainerSystem.SplitSolution(args.Target, solution, solution.DrainAvailable); SpillAt(puddleSolution, Transform(args.Target).Coordinates, "PuddleSmear"); }; verb.Impact = LogImpact.Medium; // dangerous reagent reaction are logged separately. args.Verbs.Add(verb); }
private void AddSpillVerb(EntityUid uid, SpillableComponent component, GetOtherVerbsEvent args) { if (!args.CanAccess || !args.CanInteract) { return; } if (!_solutionContainerSystem.TryGetDrainableSolution(args.Target.Uid, out var solution)) { return; } if (solution.DrainAvailable == ReagentUnit.Zero) { return; } Verb verb = new(); verb.Text = Loc.GetString("spill-target-verb-get-data-text"); // TODO VERB ICONS spill icon? pouring out a glass/beaker? verb.Act = () => _solutionContainerSystem.SplitSolution(args.Target.Uid, solution, solution.DrainAvailable).SpillAt(args.Target.Transform.Coordinates, "PuddleSmear"); args.Verbs.Add(verb); }
private void OnSpikeOverflow(EntityUid uid, SpillableComponent component, SolutionSpikeOverflowEvent args) { if (!args.Handled) { SpillAt(args.Overflow, Transform(uid).Coordinates, "PuddleSmear"); } args.Handled = true; }
private void SpillOnLand(EntityUid uid, SpillableComponent component, LandEvent args) { if (!_solutionContainerSystem.TryGetSolution(uid, component.SolutionName, out var solution)) { return; } if (args.User != null) { _logSystem.Add(LogType.Landed, $"{ToPrettyString(uid):entity} spilled a solution {SolutionContainerSystem.ToPrettyString(solution):solution} on landing"); } var drainedSolution = _solutionContainerSystem.Drain(uid, solution, solution.DrainAvailable); SpillAt(drainedSolution, EntityManager.GetComponent <TransformComponent>(uid).Coordinates, "PuddleSmear"); }