Create Generic DamageOnInteract/Attacked Comps/Systems (#30244)
* Everything but the submodule * stuff I forgot * heat * missed lights * behonky * LocId * I guess it was a skill issue? * predicted audio * It works with lights now * Borg equality * Gorilla gauntlet grants protection from anomaly returned damage when attacking it * woops, there we go * NONE * Use DamageModifierSets, remove Behonker damage * Reviews dealt with --------- Co-authored-by: plykiya <plykiya@protonmail.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Clothing.Components;
|
||||
using Content.Server.DeviceLinking.Events;
|
||||
using Content.Server.DeviceLinking.Systems;
|
||||
using Content.Server.DeviceNetwork;
|
||||
@@ -24,6 +23,8 @@ using Robust.Shared.Containers;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Content.Shared.Damage.Systems;
|
||||
using Content.Shared.Damage.Components;
|
||||
|
||||
namespace Content.Server.Light.EntitySystems
|
||||
{
|
||||
@@ -33,11 +34,8 @@ namespace Content.Server.Light.EntitySystems
|
||||
public sealed class PoweredLightSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
|
||||
[Dependency] private readonly SharedAmbientSoundSystem _ambientSystem = default!;
|
||||
[Dependency] private readonly LightBulbSystem _bulbSystem = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly IAdminLogManager _adminLogger= default!;
|
||||
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
||||
[Dependency] private readonly DeviceLinkSystem _signalSystem = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
|
||||
@@ -45,7 +43,7 @@ namespace Content.Server.Light.EntitySystems
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly PointLightSystem _pointLight = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
[Dependency] private readonly DamageOnInteractSystem _damageOnInteractSystem = default!;
|
||||
|
||||
private static readonly TimeSpan ThunkDelay = TimeSpan.FromSeconds(2);
|
||||
public const string LightBulbContainer = "light_bulb";
|
||||
@@ -106,40 +104,7 @@ namespace Content.Server.Light.EntitySystems
|
||||
if (bulbUid == null)
|
||||
return;
|
||||
|
||||
// check if it's possible to apply burn damage to user
|
||||
var userUid = args.User;
|
||||
if (EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb))
|
||||
{
|
||||
// get users heat resistance
|
||||
var res = int.MinValue;
|
||||
if (_inventory.TryGetSlotEntity(userUid, "gloves", out var slotEntity) &&
|
||||
TryComp<GloveHeatResistanceComponent>(slotEntity, out var gloves))
|
||||
{
|
||||
res = gloves.HeatResistance;
|
||||
}
|
||||
|
||||
// check heat resistance against user
|
||||
var burnedHand = light.CurrentLit && res < lightBulb.BurningTemperature;
|
||||
if (burnedHand)
|
||||
{
|
||||
var damage = _damageableSystem.TryChangeDamage(userUid, light.Damage, origin: userUid);
|
||||
|
||||
// If damage is null then the entity could not take heat damage so they did not get burned.
|
||||
if (damage != null)
|
||||
{
|
||||
|
||||
var burnMsg = Loc.GetString("powered-light-component-burn-hand");
|
||||
_popupSystem.PopupEntity(burnMsg, uid, userUid);
|
||||
_adminLogger.Add(LogType.Damaged, $"{ToPrettyString(args.User):user} burned their hand on {ToPrettyString(args.Target):target} and received {damage.GetTotal():damage} damage");
|
||||
_audio.PlayEntity(light.BurnHandSound, Filter.Pvs(uid), uid, true);
|
||||
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//removing a broken/burned bulb, so allow instant removal
|
||||
if(TryComp<LightBulbComponent>(bulbUid.Value, out var bulb) && bulb.State != LightBulbState.Normal)
|
||||
{
|
||||
@@ -435,6 +400,10 @@ namespace Content.Server.Light.EntitySystems
|
||||
if (softness != null)
|
||||
_pointLight.SetSoftness(uid, (float) softness, pointLight);
|
||||
}
|
||||
|
||||
// light bulbs burn your hands!
|
||||
if (TryComp<DamageOnInteractComponent>(uid, out var damageOnInteractComp))
|
||||
_damageOnInteractSystem.SetIsDamageActiveTo((uid, damageOnInteractComp), value);
|
||||
}
|
||||
|
||||
public void ToggleLight(EntityUid uid, PoweredLightComponent? light = null)
|
||||
|
||||
Reference in New Issue
Block a user