--- /dev/null
+using Content.Server.Temperature.Systems;
+using Content.Server.Temperature.Components;
+using Content.Shared.Temperature;
+
+namespace Content.Server.Temperature.Components;
+
+/// <summary>
+/// Put this component on a projectile that you would like to change the temperature on whatever it hits.
+/// </summary>
+[RegisterComponent, Access(typeof(TemperatureSystem))]
+public sealed partial class ChangeTemperatureOnCollideComponent : Component
+{
+ /// <summary>
+ /// The amount it changes the target's temperature by. In Joules.
+ /// </summary>
+ [DataField]
+ public float Heat = 0f;
+
+ /// <summary>
+ /// If this heat change ignores heat resistance or not.
+ /// </summary>
+ [DataField]
+ public bool IgnoreHeatResistance = true;
+}
\ No newline at end of file
using Content.Shared.Temperature;
using Robust.Shared.Physics.Components;
using Robust.Shared.Prototypes;
+using Robust.Shared.Physics.Events;
+using Content.Shared.Projectiles;
namespace Content.Server.Temperature.Systems;
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
+ [Dependency] private readonly TemperatureSystem _temperature = default!;
/// <summary>
/// All the components that will have their damage updated at the end of the tick.
SubscribeLocalEvent<InternalTemperatureComponent, MapInitEvent>(OnInit);
+ SubscribeLocalEvent<ChangeTemperatureOnCollideComponent, ProjectileHitEvent>(ChangeTemperatureOnCollide);
+
// Allows overriding thresholds based on the parent's thresholds.
SubscribeLocalEvent<TemperatureComponent, EntParentChangedMessage>(OnParentChange);
SubscribeLocalEvent<ContainerTemperatureDamageThresholdsComponent, ComponentStartup>(
args.Args.TemperatureDelta *= ev.Coefficient;
}
+ private void ChangeTemperatureOnCollide(Entity<ChangeTemperatureOnCollideComponent> ent, ref ProjectileHitEvent args)
+ {
+ _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature
+ }
+
private void OnParentChange(EntityUid uid, TemperatureComponent component,
ref EntParentChangedMessage args)
{
mask:
- Opaque
fly-by: *flybyfixture
- - type: StaminaDamageOnCollide
- damage: 40
- type: Projectile
# soundHit: Waiting on serv3
impactEffect: BulletImpactEffectDisabler
damage:
types:
- Cold: 10
+ Cold: 0
- type: TimedDespawn
lifetime: 3
+ - type: ChangeTemperatureOnCollide
+ heat: -50000
- type: entity
name: magmawing watcher bolt
impactEffect: BulletImpactEffectOrangeDisabler
damage:
types:
- Heat: 10
+ Heat: 0
+ - type: ChangeTemperatureOnCollide
+ heat: 50000
- type: entity
id: BulletKinetic