Welding tweaks (#27959)

This commit is contained in:
Verm
2024-06-02 22:28:53 -05:00
committed by GitHub
parent 509e3aedf7
commit 31eb3ed62c
33 changed files with 139 additions and 141 deletions

View File

@@ -1,6 +1,7 @@
using Content.Shared.Configurable; using Content.Shared.Configurable;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Tools.Systems;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Player; using Robust.Shared.Player;
@@ -11,6 +12,7 @@ namespace Content.Server.Configurable;
public sealed class ConfigurationSystem : EntitySystem public sealed class ConfigurationSystem : EntitySystem
{ {
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -28,7 +30,7 @@ public sealed class ConfigurationSystem : EntitySystem
if (args.Handled) if (args.Handled)
return; return;
if (!TryComp(args.Used, out ToolComponent? tool) || !tool.Qualities.Contains(component.QualityNeeded)) if (!_toolSystem.HasQuality(args.Used, component.QualityNeeded))
return; return;
args.Handled = _uiSystem.TryOpenUi(uid, ConfigurationUiKey.Key, args.User); args.Handled = _uiSystem.TryOpenUi(uid, ConfigurationUiKey.Key, args.User);
@@ -68,7 +70,7 @@ public sealed class ConfigurationSystem : EntitySystem
private void OnInsert(EntityUid uid, ConfigurationComponent component, ContainerIsInsertingAttemptEvent args) private void OnInsert(EntityUid uid, ConfigurationComponent component, ContainerIsInsertingAttemptEvent args)
{ {
if (!TryComp(args.EntityUid, out ToolComponent? tool) || !tool.Qualities.Contains(component.QualityNeeded)) if (!_toolSystem.HasQuality(args.EntityUid, component.QualityNeeded))
return; return;
args.Cancel(); args.Cancel();

View File

@@ -1,22 +1,19 @@
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Tools; using Content.Shared.Tools;
using Robust.Shared.Utility; using Robust.Shared.Prototypes;
namespace Content.Server.Damage.Components namespace Content.Server.Damage.Components;
[RegisterComponent]
public sealed partial class DamageOnToolInteractComponent : Component
{ {
[RegisterComponent] [DataField]
public sealed partial class DamageOnToolInteractComponent : Component public ProtoId<ToolQualityPrototype> Tools { get; private set; }
{
[DataField("tools")]
public PrototypeFlags<ToolQualityPrototype> Tools { get; private set; } = new ();
// TODO: Remove this snowflake stuff, make damage per-tool quality perhaps? // TODO: Remove this snowflake stuff, make damage per-tool quality perhaps?
[DataField("weldingDamage")] [DataField]
[ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier? WeldingDamage { get; private set; }
public DamageSpecifier? WeldingDamage { get; private set; }
[DataField("defaultDamage")] [DataField]
[ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier? DefaultDamage { get; private set; }
public DamageSpecifier? DefaultDamage { get; private set; }
}
} }

View File

@@ -4,6 +4,7 @@ using Content.Shared.Damage;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Tools.Systems;
using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent; using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent;
namespace Content.Server.Damage.Systems namespace Content.Server.Damage.Systems
@@ -12,6 +13,7 @@ namespace Content.Server.Damage.Systems
{ {
[Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -42,8 +44,7 @@ namespace Content.Server.Damage.Systems
args.Handled = true; args.Handled = true;
} }
else if (component.DefaultDamage is {} damage else if (component.DefaultDamage is {} damage
&& EntityManager.TryGetComponent(args.Used, out ToolComponent? tool) && _toolSystem.HasQuality(args.Used, component.Tools))
&& tool.Qualities.ContainsAny(component.Tools))
{ {
var dmg = _damageableSystem.TryChangeDamage(args.Target, damage, origin: args.User); var dmg = _damageableSystem.TryChangeDamage(args.Target, damage, origin: args.User);

View File

@@ -2,6 +2,7 @@
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Tag; using Content.Shared.Tag;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Tools.Systems;
using Robust.Server.Containers; using Robust.Server.Containers;
using Robust.Shared.Containers; using Robust.Shared.Containers;
@@ -15,6 +16,7 @@ public sealed class MechAssemblySystem : EntitySystem
{ {
[Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly ContainerSystem _container = default!;
[Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override void Initialize() public override void Initialize()
@@ -30,7 +32,7 @@ public sealed class MechAssemblySystem : EntitySystem
private void OnInteractUsing(EntityUid uid, MechAssemblyComponent component, InteractUsingEvent args) private void OnInteractUsing(EntityUid uid, MechAssemblyComponent component, InteractUsingEvent args)
{ {
if (TryComp<ToolComponent>(args.Used, out var toolComp) && toolComp.Qualities.Contains(component.QualityNeeded)) if (_toolSystem.HasQuality(args.Used, component.QualityNeeded))
{ {
foreach (var tag in component.RequiredParts.Keys) foreach (var tag in component.RequiredParts.Keys)
{ {

View File

@@ -17,6 +17,7 @@ using Content.Shared.Tools.Components;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Content.Shared.Wires; using Content.Shared.Wires;
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Shared.Tools.Systems;
using Robust.Server.Containers; using Robust.Server.Containers;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Containers; using Robust.Shared.Containers;
@@ -35,6 +36,7 @@ public sealed partial class MechSystem : SharedMechSystem
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly UserInterfaceSystem _ui = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override void Initialize() public override void Initialize()
@@ -87,7 +89,7 @@ public sealed partial class MechSystem : SharedMechSystem
return; return;
} }
if (TryComp<ToolComponent>(args.Used, out var tool) && tool.Qualities.Contains("Prying") && component.BatterySlot.ContainedEntity != null) if (_toolSystem.HasQuality(args.Used, "Prying") && component.BatterySlot.ContainedEntity != null)
{ {
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.BatteryRemovalDelay, var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.BatteryRemovalDelay,
new RemoveBatteryEvent(), uid, target: uid, used: args.Target) new RemoveBatteryEvent(), uid, target: uid, used: args.Target)

View File

@@ -7,7 +7,7 @@ using Content.Shared.Containers.ItemSlots;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.PneumaticCannon; using Content.Shared.PneumaticCannon;
using Content.Shared.StatusEffect; using Content.Shared.StatusEffect;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Systems;
using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events; using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Weapons.Ranged.Systems; using Content.Shared.Weapons.Ranged.Systems;
@@ -22,6 +22,7 @@ public sealed class PneumaticCannonSystem : SharedPneumaticCannonSystem
[Dependency] private readonly GunSystem _gun = default!; [Dependency] private readonly GunSystem _gun = default!;
[Dependency] private readonly StunSystem _stun = default!; [Dependency] private readonly StunSystem _stun = default!;
[Dependency] private readonly ItemSlotsSystem _slots = default!; [Dependency] private readonly ItemSlotsSystem _slots = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -38,10 +39,7 @@ public sealed class PneumaticCannonSystem : SharedPneumaticCannonSystem
if (args.Handled) if (args.Handled)
return; return;
if (!TryComp<ToolComponent>(args.Used, out var tool)) if (!_toolSystem.HasQuality(args.Used, component.ToolModifyPower))
return;
if (!tool.Qualities.Contains(component.ToolModifyPower))
return; return;
var val = (int) component.Power; var val = (int) component.Power;

View File

@@ -2,8 +2,7 @@ using Content.Shared.Interaction;
using Content.Shared.Light; using Content.Shared.Light;
using Content.Shared.Light.Components; using Content.Shared.Light.Components;
using Content.Shared.Toggleable; using Content.Shared.Toggleable;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Systems;
using Content.Shared.Item;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Weapons.Melee.EnergySword; namespace Content.Server.Weapons.Melee.EnergySword;
@@ -13,6 +12,7 @@ public sealed class EnergySwordSystem : EntitySystem
[Dependency] private readonly SharedRgbLightControllerSystem _rgbSystem = default!; [Dependency] private readonly SharedRgbLightControllerSystem _rgbSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -38,7 +38,7 @@ public sealed class EnergySwordSystem : EntitySystem
if (args.Handled) if (args.Handled)
return; return;
if (!TryComp(args.Used, out ToolComponent? tool) || !tool.Qualities.ContainsAny("Pulsing")) if (!_toolSystem.HasQuality(args.Used, "Pulsing"))
return; return;
args.Handled = true; args.Handled = true;

View File

@@ -3,12 +3,14 @@ using Content.Server.Power.Events;
using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Tools.Systems;
namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
public sealed class ArtifactElectricityTriggerSystem : EntitySystem public sealed class ArtifactElectricityTriggerSystem : EntitySystem
{ {
[Dependency] private readonly ArtifactSystem _artifactSystem = default!; [Dependency] private readonly ArtifactSystem _artifactSystem = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -42,7 +44,7 @@ public sealed class ArtifactElectricityTriggerSystem : EntitySystem
if (args.Handled) if (args.Handled)
return; return;
if (!TryComp(args.Used, out ToolComponent? tool) || !tool.Qualities.ContainsAny("Pulsing")) if (!_toolSystem.HasQuality(args.Used, "Pulsing"))
return; return;
args.Handled = _artifactSystem.TryActivateArtifact(uid, args.User); args.Handled = _artifactSystem.TryActivateArtifact(uid, args.User);

View File

@@ -79,7 +79,7 @@ public sealed partial class AnchorableSystem : EntitySystem
return; return;
// If the used entity doesn't have a tool, return early. // If the used entity doesn't have a tool, return early.
if (!TryComp(args.Used, out ToolComponent? usedTool) || !usedTool.Qualities.Contains(anchorable.Tool)) if (!TryComp(args.Used, out ToolComponent? usedTool) || !_tool.HasQuality(args.Used, anchorable.Tool, usedTool))
return; return;
args.Handled = true; args.Handled = true;

View File

@@ -6,10 +6,8 @@ using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Radio.Components; using Content.Shared.Radio.Components;
using Content.Shared.Tools;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Wires; using Content.Shared.Wires;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Network; using Robust.Shared.Network;
@@ -106,7 +104,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem
TryInsertKey(uid, component, args); TryInsertKey(uid, component, args);
} }
else if (TryComp<ToolComponent>(args.Used, out var tool) else if (TryComp<ToolComponent>(args.Used, out var tool)
&& tool.Qualities.Contains(component.KeysExtractionMethod) && _tool.HasQuality(args.Used, component.KeysExtractionMethod, tool)
&& component.KeyContainer.ContainedEntities.Count > 0) // dont block deconstruction && component.KeyContainer.ContainedEntities.Count > 0) // dont block deconstruction
{ {
args.Handled = true; args.Handled = true;

View File

@@ -1,52 +1,43 @@
using Content.Shared.Tools.Systems;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Utility; using Robust.Shared.Utility;
namespace Content.Shared.Tools.Components namespace Content.Shared.Tools.Components;
[RegisterComponent, NetworkedComponent]
[Access(typeof(SharedToolSystem))]
public sealed partial class ToolComponent : Component
{ {
[RegisterComponent, NetworkedComponent] // TODO move tool system to shared, and make it a friend. [DataField]
public sealed partial class ToolComponent : Component public PrototypeFlags<ToolQualityPrototype> Qualities = [];
{
[DataField("qualities")]
public PrototypeFlags<ToolQualityPrototype> Qualities { get; set; } = new();
/// <summary>
/// For tool interactions that have a delay before action this will modify the rate, time to wait is divided by this value
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField("speed")]
public float SpeedModifier { get; set; } = 1;
[DataField("useSound")]
public SoundSpecifier? UseSound { get; set; }
}
/// <summary> /// <summary>
/// Attempt event called *before* any do afters to see if the tool usage should succeed or not. /// For tool interactions that have a delay before action this will modify the rate, time to wait is divided by this value
/// Raised on both the tool and then target.
/// </summary> /// </summary>
public sealed class ToolUseAttemptEvent : CancellableEntityEventArgs [DataField]
{ public float SpeedModifier = 1;
public EntityUid User { get; }
public ToolUseAttemptEvent(EntityUid user) [DataField]
{ public SoundSpecifier? UseSound;
User = user; }
}
} /// <summary>
/// Attempt event called *before* any do afters to see if the tool usage should succeed or not.
/// <summary> /// Raised on both the tool and then target.
/// Event raised on the user of a tool to see if they can actually use it. /// </summary>
/// </summary> public sealed class ToolUseAttemptEvent(EntityUid user, float fuel) : CancellableEntityEventArgs
[ByRefEvent] {
public struct ToolUserAttemptUseEvent public EntityUid User { get; } = user;
{ public float Fuel = fuel;
public EntityUid? Target; }
public bool Cancelled = false;
/// <summary>
public ToolUserAttemptUseEvent(EntityUid? target) /// Event raised on the user of a tool to see if they can actually use it.
{ /// </summary>
Target = target; [ByRefEvent]
} public struct ToolUserAttemptUseEvent(EntityUid? target)
} {
public EntityUid? Target = target;
public bool Cancelled = false;
} }

View File

@@ -1,15 +1,16 @@
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Tools; using Robust.Shared.GameStates;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Content.Shared.Tools.Systems;
namespace Content.Server.Construction.Components; namespace Content.Shared.Tools.Components;
/// <summary> /// <summary>
/// Used for something that can be refined by welder. /// Used for something that can be refined by welder.
/// For example, glass shard can be refined to glass sheet. /// For example, glass shard can be refined to glass sheet.
/// </summary> /// </summary>
[RegisterComponent, Access(typeof(RefiningSystem))] [RegisterComponent, NetworkedComponent, Access(typeof(ToolRefinablSystem))]
public sealed partial class WelderRefinableComponent : Component public sealed partial class ToolRefinableComponent : Component
{ {
/// <summary> /// <summary>
/// The items created when the item is refined. /// The items created when the item is refined.
@@ -27,7 +28,7 @@ public sealed partial class WelderRefinableComponent : Component
/// The amount of fuel it takes to refine a given item. /// The amount of fuel it takes to refine a given item.
/// </summary> /// </summary>
[DataField] [DataField]
public float RefineFuel; public float RefineFuel = 3f;
/// <summary> /// <summary>
/// The tool type needed in order to refine this item. /// The tool type needed in order to refine this item.

View File

@@ -16,8 +16,15 @@ public abstract partial class SharedToolSystem
{ {
SubscribeLocalEvent<WelderComponent, ExaminedEvent>(OnWelderExamine); SubscribeLocalEvent<WelderComponent, ExaminedEvent>(OnWelderExamine);
SubscribeLocalEvent<WelderComponent, AfterInteractEvent>(OnWelderAfterInteract); SubscribeLocalEvent<WelderComponent, AfterInteractEvent>(OnWelderAfterInteract);
SubscribeLocalEvent<WelderComponent, DoAfterAttemptEvent<ToolDoAfterEvent>>(OnWelderToolUseAttempt);
SubscribeLocalEvent<WelderComponent, ToolUseAttemptEvent>((uid, comp, ev) => {
CanCancelWelderUse((uid, comp), ev.User, ev.Fuel, ev);
});
SubscribeLocalEvent<WelderComponent, DoAfterAttemptEvent<ToolDoAfterEvent>>((uid, comp, ev) => {
CanCancelWelderUse((uid, comp), ev.Event.User, ev.Event.Fuel, ev);
});
SubscribeLocalEvent<WelderComponent, ToolDoAfterEvent>(OnWelderDoAfter); SubscribeLocalEvent<WelderComponent, ToolDoAfterEvent>(OnWelderDoAfter);
SubscribeLocalEvent<WelderComponent, ItemToggledEvent>(OnToggle); SubscribeLocalEvent<WelderComponent, ItemToggledEvent>(OnToggle);
SubscribeLocalEvent<WelderComponent, ItemToggleActivateAttemptEvent>(OnActivateAttempt); SubscribeLocalEvent<WelderComponent, ItemToggleActivateAttemptEvent>(OnActivateAttempt);
} }
@@ -120,23 +127,20 @@ public abstract partial class SharedToolSystem
} }
} }
private void OnWelderToolUseAttempt(Entity<WelderComponent> entity, ref DoAfterAttemptEvent<ToolDoAfterEvent> args) private void CanCancelWelderUse(Entity<WelderComponent> entity, EntityUid user, float requiredFuel, CancellableEntityEventArgs ev)
{ {
var user = args.DoAfter.Args.User;
if (!ItemToggle.IsActivated(entity.Owner)) if (!ItemToggle.IsActivated(entity.Owner))
{ {
_popup.PopupClient(Loc.GetString("welder-component-welder-not-lit-message"), entity, user); _popup.PopupClient(Loc.GetString("welder-component-welder-not-lit-message"), entity, user);
args.Cancel(); ev.Cancel();
return;
} }
var (fuel, _) = GetWelderFuelAndCapacity(entity); var (currentFuel, _) = GetWelderFuelAndCapacity(entity);
if (args.Event.Fuel > fuel) if (requiredFuel > currentFuel)
{ {
_popup.PopupClient(Loc.GetString("welder-component-cannot-weld-message"), entity, user); _popup.PopupClient(Loc.GetString("welder-component-cannot-weld-message"), entity, user);
args.Cancel(); ev.Cancel();
} }
} }

View File

@@ -217,7 +217,7 @@ public abstract partial class SharedToolSystem : EntitySystem
return false; return false;
// check if the tool allows being used // check if the tool allows being used
var beforeAttempt = new ToolUseAttemptEvent(user); var beforeAttempt = new ToolUseAttemptEvent(user, fuel);
RaiseLocalEvent(tool, beforeAttempt); RaiseLocalEvent(tool, beforeAttempt);
if (beforeAttempt.Cancelled) if (beforeAttempt.Cancelled)
return false; return false;
@@ -296,4 +296,3 @@ public abstract partial class SharedToolSystem : EntitySystem
public sealed partial class CableCuttingFinishedEvent : SimpleDoAfterEvent; public sealed partial class CableCuttingFinishedEvent : SimpleDoAfterEvent;
#endregion #endregion

View File

@@ -1,25 +1,26 @@
using Content.Server.Construction.Components;
using Content.Shared.Construction; using Content.Shared.Construction;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Tools.Systems; using Content.Shared.Tools.Components;
using Robust.Shared.Network;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Construction; namespace Content.Shared.Tools.Systems;
public sealed class RefiningSystem : EntitySystem public sealed class ToolRefinablSystem : EntitySystem
{ {
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!; [Dependency] private readonly SharedToolSystem _toolSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<WelderRefinableComponent, InteractUsingEvent>(OnInteractUsing); SubscribeLocalEvent<ToolRefinableComponent, InteractUsingEvent>(OnInteractUsing);
SubscribeLocalEvent<WelderRefinableComponent, WelderRefineDoAfterEvent>(OnDoAfter); SubscribeLocalEvent<ToolRefinableComponent, WelderRefineDoAfterEvent>(OnDoAfter);
} }
private void OnInteractUsing(EntityUid uid, WelderRefinableComponent component, InteractUsingEvent args) private void OnInteractUsing(EntityUid uid, ToolRefinableComponent component, InteractUsingEvent args)
{ {
if (args.Handled) if (args.Handled)
return; return;
@@ -34,11 +35,14 @@ public sealed class RefiningSystem : EntitySystem
fuel: component.RefineFuel); fuel: component.RefineFuel);
} }
private void OnDoAfter(EntityUid uid, WelderRefinableComponent component, WelderRefineDoAfterEvent args) private void OnDoAfter(EntityUid uid, ToolRefinableComponent component, WelderRefineDoAfterEvent args)
{ {
if (args.Cancelled) if (args.Cancelled)
return; return;
if (_net.IsClient)
return;
var xform = Transform(uid); var xform = Transform(uid);
var spawns = EntitySpawnCollection.GetSpawns(component.RefineResult, _random); var spawns = EntitySpawnCollection.GetSpawns(component.RefineResult, _random);
foreach (var spawn in spawns) foreach (var spawn in spawns)

View File

@@ -2255,7 +2255,7 @@
- DoorBumpOpener - DoorBumpOpener
- FootstepSound - FootstepSound
- type: Tool # Open door from xeno.yml. - type: Tool # Open door from xeno.yml.
speed: 1.5 speedModifier: 1.5
qualities: qualities:
- Prying - Prying
useSound: useSound:

View File

@@ -22,7 +22,7 @@
NavSmash: !type:Bool NavSmash: !type:Bool
true true
- type: Tool - type: Tool
speed: 1.5 speedModifier: 1.5
qualities: qualities:
- Prying - Prying
- type: Prying - type: Prying

View File

@@ -80,7 +80,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Rolling - Rolling
speed: 0.75 # not as good as a rolling pin but does the job speedModifier: 0.75 # not as good as a rolling pin but does the job
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:
Glass: 100 Glass: 100

View File

@@ -56,7 +56,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Rolling - Rolling
speed: 0.25 # its small so takes longer to roll the entire dough flat speedModifier: 0.25 # its small so takes longer to roll the entire dough flat
- type: SpaceGarbage - type: SpaceGarbage
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink

View File

@@ -85,7 +85,7 @@
components: components:
- type: Sprite - type: Sprite
color: "#bbeeff" color: "#bbeeff"
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- type: DamageUserOnTrigger - type: DamageUserOnTrigger
@@ -120,7 +120,7 @@
damage: damage:
types: types:
Slash: 4.5 Slash: 4.5
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: PartRodMetal1 - id: PartRodMetal1
@@ -156,7 +156,7 @@
damage: damage:
types: types:
Slash: 5.5 Slash: 5.5
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: SheetPlasma1 - id: SheetPlasma1
@@ -195,7 +195,7 @@
types: types:
Slash: 4.5 Slash: 4.5
Radiation: 2 Radiation: 2
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: SheetUranium1 - id: SheetUranium1
@@ -230,7 +230,7 @@
components: components:
- type: Sprite - type: Sprite
color: "#e0aa36" color: "#e0aa36"
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: SheetBrass1 - id: SheetBrass1

View File

@@ -26,6 +26,6 @@
materialComposition: materialComposition:
Glass: 50 Glass: 50
- type: SpaceGarbage - type: SpaceGarbage
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1

View File

@@ -46,7 +46,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Rolling - Rolling
speed: 0.5 # its very big, akward to use speedModifier: 0.5 # its very big, akward to use
- type: Appearance - type: Appearance
- type: GenericVisualizer - type: GenericVisualizer
visuals: visuals:

View File

@@ -66,7 +66,7 @@
materialComposition: materialComposition:
Glass: 25 Glass: 25
- type: SpaceGarbage - type: SpaceGarbage
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
@@ -273,7 +273,7 @@
- type: Construction - type: Construction
graph: CyanLight graph: CyanLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalCyan - id: ShardCrystalCyan
@@ -293,7 +293,7 @@
- type: Construction - type: Construction
graph: BlueLight graph: BlueLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalBlue - id: ShardCrystalBlue
@@ -313,7 +313,7 @@
- type: Construction - type: Construction
graph: PinkLight graph: PinkLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalPink - id: ShardCrystalPink
@@ -333,7 +333,7 @@
- type: Construction - type: Construction
graph: OrangeLight graph: OrangeLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalOrange - id: ShardCrystalOrange
@@ -353,7 +353,7 @@
- type: Construction - type: Construction
graph: RedLight graph: RedLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalRed - id: ShardCrystalRed
@@ -373,7 +373,7 @@
- type: Construction - type: Construction
graph: GreenLight graph: GreenLight
node: icon node: icon
- type: WelderRefinable - type: ToolRefinable
refineResult: refineResult:
- id: SheetGlass1 - id: SheetGlass1
- id: ShardCrystalGreen - id: ShardCrystalGreen

View File

@@ -178,7 +178,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Sawing - Sawing
speed: 1.0 speedModifier: 1.0
# No melee for regular saw because have you ever seen someone use a band saw as a weapon? It's dumb. # No melee for regular saw because have you ever seen someone use a band saw as a weapon? It's dumb.
- type: entity - type: entity
@@ -200,7 +200,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Sawing - Sawing
speed: 0.5 speedModifier: 0.5
- type: entity - type: entity
name: circular saw name: circular saw
@@ -222,7 +222,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Sawing - Sawing
speed: 1.5 speedModifier: 1.5
- type: entity - type: entity
name: advanced circular saw name: advanced circular saw
@@ -245,4 +245,4 @@
- type: Tool - type: Tool
qualities: qualities:
- Sawing - Sawing
speed: 2.0 speedModifier: 2.0

View File

@@ -21,7 +21,7 @@
- Cutting - Cutting
useSound: useSound:
path: /Audio/Items/wirecutter.ogg path: /Audio/Items/wirecutter.ogg
speed: 0.05 speedModifier: 0.05
- type: Item - type: Item
sprite: Objects/Tools/Cowtools/haycutters.rsi sprite: Objects/Tools/Cowtools/haycutters.rsi
@@ -46,7 +46,7 @@
- Screwing - Screwing
useSound: useSound:
collection: Screwdriver collection: Screwdriver
speed: 0.05 speedModifier: 0.05
- type: entity - type: entity
name: wronch name: wronch
@@ -69,7 +69,7 @@
- Anchoring - Anchoring
useSound: useSound:
path: /Audio/Items/ratchet.ogg path: /Audio/Items/ratchet.ogg
speed: 0.05 speedModifier: 0.05
- type: entity - type: entity
name: cowbar name: cowbar
@@ -93,7 +93,7 @@
- Prying - Prying
useSound: useSound:
path: /Audio/Items/crowbar.ogg path: /Audio/Items/crowbar.ogg
speed: 0.05 speedModifier: 0.05
- type: ToolTileCompatible - type: ToolTileCompatible
- type: Prying - type: Prying
@@ -127,7 +127,7 @@
size: Small size: Small
sprite: Objects/Tools/Cowtools/cowelder.rsi sprite: Objects/Tools/Cowtools/cowelder.rsi
- type: Tool - type: Tool
speed: 0.05 speedModifier: 0.05
- type: entity - type: entity
name: milkalyzer name: milkalyzer

View File

@@ -51,7 +51,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Rolling - Rolling
speed: 0.6 # fairly unwieldly but nice round surface speedModifier: 0.6 # fairly unwieldly but nice round surface
- type: entity - type: entity
parent: GasTankRoundBase parent: GasTankRoundBase

View File

@@ -21,7 +21,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Prying - Prying
speed: 1.5 speedModifier: 1.5
useSound: /Audio/Items/jaws_pry.ogg useSound: /Audio/Items/jaws_pry.ogg
- type: Prying - type: Prying
pryPowered: true pryPowered: true
@@ -69,7 +69,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Prying - Prying
speed: 3.0 speedModifier: 3.0
- type: MultipleTool - type: MultipleTool
entries: entries:
- behavior: Prying - behavior: Prying

View File

@@ -304,7 +304,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Screwing - Screwing
speed: 1.5 speedModifier: 1.5
useSound: /Audio/Items/drill_use.ogg useSound: /Audio/Items/drill_use.ogg
- type: MultipleTool - type: MultipleTool
statusShowBehavior: true statusShowBehavior: true
@@ -479,7 +479,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Screwing - Screwing
speed: 1.2 # Kept for future adjustments. Currently 1.2x for balance speedModifier: 1.2 # Kept for future adjustments. Currently 1.2x for balance
useSound: /Audio/Items/drill_use.ogg useSound: /Audio/Items/drill_use.ogg
- type: ToolTileCompatible - type: ToolTileCompatible
- type: MultipleTool - type: MultipleTool

View File

@@ -139,7 +139,7 @@
Quantity: 250 Quantity: 250
maxVol: 250 maxVol: 250
- type: Tool - type: Tool
speed: 1.3 speedModifier: 1.3
- type: entity - type: entity
name: experimental welding tool name: experimental welding tool
@@ -190,7 +190,7 @@
Quantity: 50 Quantity: 50
maxVol: 50 maxVol: 50
- type: Tool - type: Tool
speed: 0.7 speedModifier: 0.7
- type: PointLight - type: PointLight
enabled: false enabled: false
radius: 1.0 radius: 1.0

View File

@@ -26,7 +26,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Rolling - Rolling
speed: 0.75 # a bit unwieldly but does the job speedModifier: 0.75 # a bit unwieldly but does the job
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
slots: slots:

View File

@@ -25,8 +25,7 @@
- type: ReagentTank - type: ReagentTank
tankType: Fuel tankType: Fuel
- type: DamageOnToolInteract - type: DamageOnToolInteract
tools: tools: Welding
- Welding
weldingDamage: weldingDamage:
types: types:
Heat: 10 Heat: 10
@@ -217,4 +216,3 @@
fillBaseName: watertank-2- fillBaseName: watertank-2-
- type: ExaminableSolution - type: ExaminableSolution
solution: tank solution: tank

View File

@@ -82,8 +82,7 @@
- type: ReagentTank - type: ReagentTank
tankType: Fuel tankType: Fuel
- type: DamageOnToolInteract - type: DamageOnToolInteract
tools: tools: Welding
- Welding
weldingDamage: weldingDamage:
types: types:
Heat: 20 Heat: 20

View File

@@ -220,7 +220,7 @@
- type: Tool - type: Tool
qualities: qualities:
- Screwing - Screwing
speed: 2 # Very powerful multitool to balance out the desire to sell or scrap for points speedModifier: 2 # Very powerful multitool to balance out the desire to sell or scrap for points
useSound: /Audio/Items/drill_use.ogg useSound: /Audio/Items/drill_use.ogg
- type: Tag - type: Tag
tags: tags: