using System.Linq; using Content.Server.Destructible; using Content.Server.Destructible.Thresholds.Triggers; using Content.Server.GameTicking.Rules.Components; using Content.Server._White.AspectsSystem.Aspects.Components; using Content.Server._White.AspectsSystem.Base; using Content.Server._White.Other; using Content.Server.GameTicking.Components; using Content.Shared.Damage; namespace Content.Server._White.AspectsSystem.Aspects; public sealed class WeakWallsAspect : AspectSystem { [Dependency] private readonly DamageableSystem _damageable = default!; private const float DamageMultiplier = 0.15f; protected override void Started(EntityUid uid, WeakWallsAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); var query = EntityQueryEnumerator(); while (query.MoveNext(out var ent, out _)) { if (!TryComp(ent, out var destructible) || !TryComp(ent, out var damageable)) continue; _damageable.SetDamageModifierSetId(ent, null, damageable); var trigger = (DamageTrigger?) destructible.Thresholds .LastOrDefault(threshold => threshold.Trigger is DamageTrigger)?.Trigger; if (trigger == null) continue; trigger.Damage = (int) (trigger.Damage * DamageMultiplier); } } }