1
0

MagicSystem.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Content.Server.Chat.Systems;
  2. using Content.Server.GameTicking;
  3. using Content.Server.GameTicking.Rules.Components;
  4. using Content.Shared.Magic;
  5. using Content.Shared.Magic.Events;
  6. using Content.Shared.Mind;
  7. using Content.Shared.Tag;
  8. using Robust.Shared.Prototypes;
  9. namespace Content.Server.Magic;
  10. public sealed class MagicSystem : SharedMagicSystem
  11. {
  12. [Dependency] private readonly ChatSystem _chat = default!;
  13. [Dependency] private readonly GameTicker _gameTicker = default!;
  14. [Dependency] private readonly TagSystem _tag = default!;
  15. [Dependency] private readonly SharedMindSystem _mind = default!;
  16. public override void Initialize()
  17. {
  18. base.Initialize();
  19. SubscribeLocalEvent<SpeakSpellEvent>(OnSpellSpoken);
  20. }
  21. private void OnSpellSpoken(ref SpeakSpellEvent args)
  22. {
  23. _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false);
  24. }
  25. public override void OnVoidApplause(VoidApplauseSpellEvent ev)
  26. {
  27. base.OnVoidApplause(ev);
  28. _chat.TryEmoteWithChat(ev.Performer, ev.Emote);
  29. var perfXForm = Transform(ev.Performer);
  30. var targetXForm = Transform(ev.Target);
  31. Spawn(ev.Effect, perfXForm.Coordinates);
  32. Spawn(ev.Effect, targetXForm.Coordinates);
  33. }
  34. protected override void OnRandomGlobalSpawnSpell(RandomGlobalSpawnSpellEvent ev)
  35. {
  36. base.OnRandomGlobalSpawnSpell(ev);
  37. if (!ev.MakeSurvivorAntagonist)
  38. return;
  39. if (_mind.TryGetMind(ev.Performer, out var mind, out _) && !_tag.HasTag(mind, "InvalidForSurvivorAntag"))
  40. _tag.AddTag(mind, "InvalidForSurvivorAntag");
  41. EntProtoId survivorRule = "Survivor";
  42. if (!_gameTicker.IsGameRuleActive<SurvivorRuleComponent>())
  43. _gameTicker.StartGameRule(survivorRule);
  44. }
  45. }