StartIonStormedSystem.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Content.Shared.Silicons.Laws.Components;
  2. using Content.Shared.Administration.Logs;
  3. using Content.Shared.Database;
  4. namespace Content.Server.Silicons.Laws;
  5. /// <summary>
  6. /// This handles running the ion storm event a on specific entity when that entity is spawned in.
  7. /// </summary>
  8. public sealed class StartIonStormedSystem : EntitySystem
  9. {
  10. [Dependency] private readonly IonStormSystem _ionStorm = default!;
  11. [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
  12. [Dependency] private readonly SiliconLawSystem _siliconLaw = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<StartIonStormedComponent, MapInitEvent>(OnMapInit);
  17. }
  18. private void OnMapInit(Entity<StartIonStormedComponent> ent, ref MapInitEvent args)
  19. {
  20. if (!TryComp<SiliconLawBoundComponent>(ent.Owner, out var lawBound))
  21. return;
  22. if (!TryComp<IonStormTargetComponent>(ent.Owner, out var target))
  23. return;
  24. for (int currentIonStorm = 0; currentIonStorm < ent.Comp.IonStormAmount; currentIonStorm++)
  25. {
  26. _ionStorm.IonStormTarget((ent.Owner, lawBound, target), false);
  27. }
  28. var laws = _siliconLaw.GetLaws(ent.Owner, lawBound);
  29. _adminLogger.Add(LogType.Mind, LogImpact.High, $"{ToPrettyString(ent.Owner):silicon} spawned with ion stormed laws: {laws.LoggingString()}");
  30. }
  31. }