From e14b6cb948a6d9b40379dd93ff72e04c2dce6315 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Sun, 11 Aug 2024 10:55:01 +0000 Subject: [PATCH] Cult spells update (#607) * - add: CultSystem.BloodSpells. * - add: Cleanup. --- .../UI/ApocalypseRuneEui/ApocalypseRuneEui.cs | 1 - .../ApocalypseRuneEui/ApocalypseRuneMenu.cs | 2 +- .../CultBloodSpellsEui/CultBloodSpellsEui.cs | 57 +++++++++++++++++ .../CultBloodSpellsEui/CultBloodSpellsMenu.cs | 60 ++++++++++++++++++ .../ConstructionSystem.Interactions.cs | 6 +- .../_White/Cult/GameRule/CultRuleSystem.cs | 5 +- .../Items/Components/CultStunHandComponent.cs | 5 +- .../Cult/Items/Systems/MagicHandSystem.cs | 15 +++-- ...stem.Verb.cs => CultSystem.BloodSpells.cs} | 40 ++---------- .../Cult/Runes/Systems/CultSystem.Rune.cs | 2 +- .../_White/Cult/UI/CultBloodSpellsEui.cs | 53 ++++++++++++++++ .../_White/Cult/UI/OpenBloodSpellsUi.cs | 21 ++++++ Content.Shared/Alert/AlertType.cs | 1 + .../Steps/ConstructionGraphStep.cs | 3 +- .../_White/Cult/UI/BloodSpellMessage.cs | 22 +++++++ Resources/Locale/ru-RU/_white/cult/gui.ftl | 11 ++++ Resources/Locale/ru-RU/_white/cult/preset.ftl | 5 +- .../ru-RU/_white/cult/runes-entities.ftl | 2 - Resources/Locale/ru-RU/_white/cult/spells.ftl | 2 + Resources/Locale/ru-RU/_white/cult/verb.ftl | 9 --- Resources/Locale/ru-RU/_white/white-shit.ftl | 3 + Resources/Prototypes/Alerts/alerts.yml | 11 ++++ .../_White/Actions/cult_actions.yml | 6 +- .../_White/Construction/Cult/graphs.yml | 15 ++++- .../Cult/actions_cult.rsi/blood_spells.png | Bin 0 -> 883 bytes .../White/Cult/actions_cult.rsi/meta.json | 5 +- 26 files changed, 290 insertions(+), 72 deletions(-) create mode 100644 Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsEui.cs create mode 100644 Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsMenu.cs rename Content.Server/_White/Cult/Runes/Systems/{CultSystem.Verb.cs => CultSystem.BloodSpells.cs} (64%) create mode 100644 Content.Server/_White/Cult/UI/CultBloodSpellsEui.cs create mode 100644 Content.Server/_White/Cult/UI/OpenBloodSpellsUi.cs create mode 100644 Content.Shared/_White/Cult/UI/BloodSpellMessage.cs delete mode 100644 Resources/Locale/ru-RU/_white/cult/runes-entities.ftl create mode 100644 Resources/Locale/ru-RU/_white/cult/spells.ftl delete mode 100644 Resources/Locale/ru-RU/_white/cult/verb.ftl create mode 100644 Resources/Textures/White/Cult/actions_cult.rsi/blood_spells.png diff --git a/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneEui.cs b/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneEui.cs index 81f10759bb..c1bb785210 100644 --- a/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneEui.cs +++ b/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneEui.cs @@ -1,5 +1,4 @@ using Content.Client.Eui; -using Content.Client.Ghost.UI; using Content.Shared._White.Cult.UI; using JetBrains.Annotations; using Robust.Client.Graphics; diff --git a/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneMenu.cs b/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneMenu.cs index 57ad078780..9b26960861 100644 --- a/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneMenu.cs +++ b/Content.Client/_White/Cult/UI/ApocalypseRuneEui/ApocalypseRuneMenu.cs @@ -4,7 +4,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using static Robust.Client.UserInterface.Controls.BoxContainer; -namespace Content.Client.Ghost.UI; +namespace Content.Client._White.Cult.UI.ApocalypseRuneEui; public sealed class ApocalypseRuneMenu : DefaultWindow { diff --git a/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsEui.cs b/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsEui.cs new file mode 100644 index 0000000000..f1c49e9261 --- /dev/null +++ b/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsEui.cs @@ -0,0 +1,57 @@ +using Content.Client.Eui; +using Content.Shared._White.Cult.UI; +using JetBrains.Annotations; +using Robust.Client.Graphics; + +namespace Content.Client._White.Cult.UI.CultBloodSpellsEui; + +[UsedImplicitly] +public sealed class CultBloodSpellsEui : BaseEui +{ + private readonly CultBloodSpellsMenu _menu; + private bool _messageSent; + + public CultBloodSpellsEui() + { + _menu = new CultBloodSpellsMenu(); + + _menu.OnClose += () => + { + if (_messageSent) + return; + SendMessage(new BloodSpellMessage(BloodSpellMessageState.Cancel)); + _messageSent = true; + }; + + _menu.RemoveButton.OnPressed += _ => + { + Send(BloodSpellMessageState.Remove); + }; + + _menu.CreateButton.OnPressed += _ => + { + Send(BloodSpellMessageState.Create); + }; + } + + private void Send(BloodSpellMessageState state) + { + SendMessage(new BloodSpellMessage(state)); + _messageSent = true; + _menu.Close(); + } + + public override void Opened() + { + IoCManager.Resolve().RequestWindowAttention(); + _menu.OpenCentered(); + } + + public override void Closed() + { + base.Closed(); + + _menu.Close(); + } + +} diff --git a/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsMenu.cs b/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsMenu.cs new file mode 100644 index 0000000000..351f72fd87 --- /dev/null +++ b/Content.Client/_White/Cult/UI/CultBloodSpellsEui/CultBloodSpellsMenu.cs @@ -0,0 +1,60 @@ +using System.Numerics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using static Robust.Client.UserInterface.Controls.BoxContainer; + +namespace Content.Client._White.Cult.UI.CultBloodSpellsEui; + +public sealed class CultBloodSpellsMenu : DefaultWindow +{ + public readonly Button RemoveButton; + public readonly Button CreateButton; + + public CultBloodSpellsMenu() + { + Title = Loc.GetString("blood-spells-title"); + + Contents.AddChild(new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + Children = + { + new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + Children = + { + (new Label() + { + Text = Loc.GetString("blood-spells-text") + }), + new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + Align = AlignMode.Center, + Children = + { + (CreateButton = new Button + { + Text = Loc.GetString("blood-spells-create-button"), + }), + + (new Control() + { + MinSize = new Vector2(20, 0) + }), + + (RemoveButton = new Button + { + Text = Loc.GetString("blood-spells-remove-button"), + }) + } + }, + } + }, + } + }); + } +} + diff --git a/Content.Server/Construction/ConstructionSystem.Interactions.cs b/Content.Server/Construction/ConstructionSystem.Interactions.cs index ed3c8602f3..e84f4dec07 100644 --- a/Content.Server/Construction/ConstructionSystem.Interactions.cs +++ b/Content.Server/Construction/ConstructionSystem.Interactions.cs @@ -29,6 +29,7 @@ namespace Content.Server.Construction public sealed partial class ConstructionSystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; // WD #if EXCEPTION_TOLERANCE [Dependency] private readonly IRuntimeLog _runtimeLog = default!; #endif @@ -95,9 +96,6 @@ namespace Content.Server.Construction if (!Resolve(uid, ref construction)) return HandleResult.False; - if (TryComp(uid, out StackComponent? stack) && stack.Count > 1) // WD - return HandleResult.False; - // Let's make extra sure this is zero... construction.StepIndex = 0; @@ -209,7 +207,7 @@ namespace Content.Server.Construction // We can only perform the rest of our logic if it returns true. var handle = HandleInteraction(uid, ev, step, validation, out user, construction); - if (step.CultistOnly && !(HasComp(user) || HasComp(user))) // WD + if (user != null && step.UserWhitelist?.IsValid(user.Value, _entityManager) is false) // WD return HandleResult.False; if (handle is not HandleResult.True) diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index 5ba8bb2e3c..a9dd84fb8a 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -28,6 +28,7 @@ using Content.Shared._White.Antag; using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Systems; using Content.Shared._White.Mood; +using Content.Shared.Alert; using Content.Shared.Cloning; using Content.Shared.Mind; using Content.Shared.NPC.Systems; @@ -55,6 +56,7 @@ public sealed class CultRuleSystem : GameRuleSystem [Dependency] private readonly BloodSpearSystem _bloodSpear = default!; [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly AlertsSystem _alertsSystem = default!; private const int PlayerPerCultist = 10; private int _minStartingCultists; @@ -95,7 +97,6 @@ public sealed class CultRuleSystem : GameRuleSystem private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) { args.Append(Loc.GetString("cult-role-briefing-short")); - args.Append(Loc.GetString("cult-role-briefing-hint")); } private void OnStartAttempt(RoundStartAttemptEvent ev) @@ -166,6 +167,7 @@ public sealed class CultRuleSystem : GameRuleSystem private void OnCultistComponentInit(EntityUid uid, CultistComponent component, ComponentInit args) { RaiseLocalEvent(uid, new MoodEffectEvent("CultFocused")); + _alertsSystem.ShowAlert(uid, AlertType.BloodSpells); var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) @@ -213,6 +215,7 @@ public sealed class CultRuleSystem : GameRuleSystem RemoveAllCultistItems(uid); RemoveCultistAppearance(uid); RaiseLocalEvent(uid, new MoodRemoveEffectEvent("CultFocused")); + _alertsSystem.ClearAlert(uid, AlertType.BloodSpells); } _bloodSpear.DetachSpearFromUser((uid, component)); diff --git a/Content.Server/_White/Cult/Items/Components/CultStunHandComponent.cs b/Content.Server/_White/Cult/Items/Components/CultStunHandComponent.cs index 26ad1ed723..9619b71ff5 100644 --- a/Content.Server/_White/Cult/Items/Components/CultStunHandComponent.cs +++ b/Content.Server/_White/Cult/Items/Components/CultStunHandComponent.cs @@ -6,12 +6,9 @@ public sealed partial class CultStunHandComponent : BaseMagicHandComponent [DataField] public TimeSpan Duration = TimeSpan.FromSeconds(16); - [DataField] - public TimeSpan HaloDuration = TimeSpan.FromSeconds(1.5); - [DataField] public TimeSpan MuteDuration = TimeSpan.FromSeconds(12); [DataField] - public TimeSpan HaloMuteDuration = TimeSpan.FromSeconds(1); + public float PentagramDurationMultiplier = 0.1f; } diff --git a/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs b/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs index fbb615d9e2..717447b615 100644 --- a/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs +++ b/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs @@ -245,11 +245,18 @@ public sealed class MagicHandSystem : EntitySystem return; } - var halo = HasComp(args.User); + var stunDuration = comp.Duration; + var muteDuration = comp.MuteDuration; - _statusEffects.TryAddStatusEffect(target, "Muted", halo ? comp.HaloMuteDuration : comp.MuteDuration, true, - "Muted", status); - _stun.TryParalyze(target, halo ? comp.HaloDuration : comp.Duration, true, status); + if (HasComp(args.User)) + { + var multiplier = comp.PentagramDurationMultiplier; + stunDuration *= multiplier; + muteDuration *= multiplier; + } + + _statusEffects.TryAddStatusEffect(target, "Muted", muteDuration, true, "Muted", status); + _stun.TryParalyze(target, stunDuration, true, status); } private void Popup(string msg, EntityUid user, PopupType type = PopupType.Small) diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Verb.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.BloodSpells.cs similarity index 64% rename from Content.Server/_White/Cult/Runes/Systems/CultSystem.Verb.cs rename to Content.Server/_White/Cult/Runes/Systems/CultSystem.BloodSpells.cs index 0633eb0457..6472842f55 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Verb.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.BloodSpells.cs @@ -3,16 +3,14 @@ using Content.Server.Body.Components; using Content.Shared._White.Cult; using Content.Shared._White.Cult.Components; using Content.Shared.DoAfter; -using Content.Shared.Verbs; using Robust.Shared.Player; namespace Content.Server._White.Cult.Runes.Systems; public sealed partial class CultSystem { - public void InitializeVerb() + public void InitializeSpells() { - SubscribeLocalEvent>(OnGetVerbs); SubscribeLocalEvent(OnCultistEmpowerSelected); SubscribeLocalEvent(OnCultistEmpowerRemove); SubscribeLocalEvent(OnSpellCreated); @@ -57,7 +55,7 @@ public sealed partial class CultSystem if (comp.SelectedEmpowers.Count >= 2) { - _popupSystem.PopupEntity(Loc.GetString("verb-spell-create-too-much"), ent, ent); + _popupSystem.PopupEntity(Loc.GetString("blood-spell-create-too-much"), ent, ent); return; } @@ -71,42 +69,16 @@ public sealed partial class CultSystem }); } - private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) + public void CreateSpell(Entity ent, ICommonSession session) { - if (ent.Owner != args.User || !TryComp(args.User, out var actor)) - return; - - var createSpellVerb = new Verb - { - Text = Loc.GetString("verb-spell-create-text"), - Message = Loc.GetString("verb-spell-create-message"), - Category = VerbCategory.Cult, - Act = () => - { - _ui.TryOpen(ent, CultEmpowerUiKey.Key, actor.PlayerSession); - } - }; - - var removeSpellVerb = new Verb - { - Text = Loc.GetString("verb-spell-remove-text"), - Message = Loc.GetString("verb-spell-remove-message"), - Category = VerbCategory.Cult, - Act = () => - { - RemoveSpell(ent, actor.PlayerSession); - } - }; - - args.Verbs.Add(createSpellVerb); - args.Verbs.Add(removeSpellVerb); + _ui.TryOpen(ent, CultEmpowerUiKey.Key, session); } - private void RemoveSpell(Entity ent, ICommonSession session) + public void RemoveSpell(Entity ent, ICommonSession session) { if (ent.Comp.SelectedEmpowers.Count == 0) { - _popupSystem.PopupEntity(Loc.GetString("verb-spell-remove-no-spells"), ent, ent); + _popupSystem.PopupEntity(Loc.GetString("blood-spell-remove-no-spells"), ent, ent); return; } diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs index c066b74872..8c84ea3381 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs @@ -127,7 +127,7 @@ public sealed partial class CultSystem : EntitySystem InitializeBarrierSystem(); InitializeConstructsAbilities(); InitializeActions(); - InitializeVerb(); + InitializeSpells(); } private float _timeToDraw; diff --git a/Content.Server/_White/Cult/UI/CultBloodSpellsEui.cs b/Content.Server/_White/Cult/UI/CultBloodSpellsEui.cs new file mode 100644 index 0000000000..deac9583bb --- /dev/null +++ b/Content.Server/_White/Cult/UI/CultBloodSpellsEui.cs @@ -0,0 +1,53 @@ +using Content.Server.EUI; +using Content.Server.Popups; +using Content.Server._White.Cult.Runes.Comps; +using Content.Server._White.Cult.Runes.Systems; +using Content.Shared._White.Cult.Components; +using Content.Shared.Eui; +using Content.Shared.Popups; +using Content.Shared._White.Cult.UI; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; +using Robust.Shared.Player; +using Robust.Shared.Timing; + +namespace Content.Server._White.Cult.UI; + +public sealed class CultBloodSpellsEui : BaseEui +{ + private readonly IEntityManager _entityManager; + private readonly CultSystem _cult; + + private readonly EntityUid _performer; + + public CultBloodSpellsEui(EntityUid performer, IEntityManager entityManager) + { + _entityManager = entityManager; + _cult = _entityManager.System(); + _performer = performer; + } + + public override void HandleMessage(EuiMessageBase msg) + { + base.HandleMessage(msg); + + if (msg is not BloodSpellMessage cast || cast.State == BloodSpellMessageState.Cancel) + { + Close(); + return; + } + + if (!_entityManager.TryGetComponent(_performer, out CultistComponent? cultist)) + { + Close(); + return; + } + + if (cast.State == BloodSpellMessageState.Create) + _cult.CreateSpell((_performer, cultist), Player); + else if (cast.State == BloodSpellMessageState.Remove) + _cult.RemoveSpell((_performer, cultist), Player); + + Close(); + } +} diff --git a/Content.Server/_White/Cult/UI/OpenBloodSpellsUi.cs b/Content.Server/_White/Cult/UI/OpenBloodSpellsUi.cs new file mode 100644 index 0000000000..78a11658cf --- /dev/null +++ b/Content.Server/_White/Cult/UI/OpenBloodSpellsUi.cs @@ -0,0 +1,21 @@ +using Content.Server.EUI; +using Content.Shared.Alert; +using JetBrains.Annotations; +using Robust.Shared.Player; + +namespace Content.Server._White.Cult.UI; + +[UsedImplicitly, DataDefinition] +public sealed partial class OpenBloodSpellsUi : IAlertClick +{ + public void AlertClicked(EntityUid player) + { + var euiManager = IoCManager.Resolve(); + var entManager = IoCManager.Resolve(); + + if (!entManager.TryGetComponent(player, out ActorComponent? actor)) + return; + + euiManager.OpenEui(new CultBloodSpellsEui(player, entManager), actor.PlayerSession); + } +} diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs index bd362e9038..92aff2ddd5 100644 --- a/Content.Shared/Alert/AlertType.cs +++ b/Content.Shared/Alert/AlertType.cs @@ -39,6 +39,7 @@ namespace Content.Shared.Alert VeryVeryGood, MoodDead, CultBuffed, + BloodSpells, Knockdown, RecentlyBlocked, //WD end diff --git a/Content.Shared/Construction/Steps/ConstructionGraphStep.cs b/Content.Shared/Construction/Steps/ConstructionGraphStep.cs index f2b6a6767d..0c8471e438 100644 --- a/Content.Shared/Construction/Steps/ConstructionGraphStep.cs +++ b/Content.Shared/Construction/Steps/ConstructionGraphStep.cs @@ -1,4 +1,5 @@ using Content.Shared.Examine; +using Content.Shared.Whitelist; namespace Content.Shared.Construction.Steps { @@ -11,7 +12,7 @@ namespace Content.Shared.Construction.Steps [DataField("doAfter")] public float DoAfter { get; private set; } [DataField] - public bool CultistOnly { get; private set; } // WD + public EntityWhitelist? UserWhitelist { get; private set; } // WD public IReadOnlyList Completed => _completed; diff --git a/Content.Shared/_White/Cult/UI/BloodSpellMessage.cs b/Content.Shared/_White/Cult/UI/BloodSpellMessage.cs new file mode 100644 index 0000000000..4b2121588c --- /dev/null +++ b/Content.Shared/_White/Cult/UI/BloodSpellMessage.cs @@ -0,0 +1,22 @@ +using Content.Shared.Eui; +using Robust.Shared.Serialization; + +namespace Content.Shared._White.Cult.UI; + +public enum BloodSpellMessageState : byte +{ + Create, + Remove, + Cancel +} + +[Serializable, NetSerializable] +public sealed class BloodSpellMessage : EuiMessageBase +{ + public readonly BloodSpellMessageState State; + + public BloodSpellMessage(BloodSpellMessageState state) + { + State = state; + } +} diff --git a/Resources/Locale/ru-RU/_white/cult/gui.ftl b/Resources/Locale/ru-RU/_white/cult/gui.ftl index 92bd1fa53e..5de75a0b9c 100644 --- a/Resources/Locale/ru-RU/_white/cult/gui.ftl +++ b/Resources/Locale/ru-RU/_white/cult/gui.ftl @@ -2,3 +2,14 @@ apocalypse-rune-title = Вы готовы к финальной битве? apocalypse-rune-text = Это последний шаг к вызову Нар'Си; это долгий, болезненный ритуал, и экипаж будет предупрежден о вашем присутствии. apocalypse-rune-accept-button = Жизнь за Нар'Си! apocalypse-rune-deny-button = Нет + +blood-spells-title = Кровавые заклинания +blood-spells-text = Заклинания крови - важнейший козырь в рукаве культиста. + Вы можете создать до двух заклинаний без руны могущества. + С помощью руны могущества можно создать до пяти заклинаний. + Каждое созданное заклинание отнимает у вас большое количество крови; + расход крови и время создания заклинаний уменьшается под воздействием усиления культа. + Заклинания, созданные на руне могущества не требуют крови и создаются мгновенно. + Удаление заклинаний не отнимает кровь и происходит мгновенно. +blood-spells-create-button = Создать заклинание +blood-spells-remove-button = Удалить заклинание diff --git a/Resources/Locale/ru-RU/_white/cult/preset.ftl b/Resources/Locale/ru-RU/_white/cult/preset.ftl index d697a4cc3e..fefaaf6495 100644 --- a/Resources/Locale/ru-RU/_white/cult/preset.ftl +++ b/Resources/Locale/ru-RU/_white/cult/preset.ftl @@ -1,4 +1,4 @@ -cult-title = Культ +cult-title = Культ cult-description = Страх — самое древнее и сильное из человеческих чувств, а самый древний и самый сильный страх — страх неведомого cult-role-greeting = Вы - член культа! @@ -12,7 +12,6 @@ cult-condition-failure = Экипаж уничтожил культ cult-condition-draw = Ничейный исход cult-role-briefing-short = Используйте '^' для связи с другими членами культа. -cult-role-briefing-hint = Нажмите правой кнопкой мыши по своему персонажу и выберите меню 'Культ' для действий, связанных с культом. cultists-list-start = Культистами были: -cultists-list-name = - [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) \ No newline at end of file +cultists-list-name = - [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) diff --git a/Resources/Locale/ru-RU/_white/cult/runes-entities.ftl b/Resources/Locale/ru-RU/_white/cult/runes-entities.ftl deleted file mode 100644 index c65238fb38..0000000000 --- a/Resources/Locale/ru-RU/_white/cult/runes-entities.ftl +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Resources/Locale/ru-RU/_white/cult/spells.ftl b/Resources/Locale/ru-RU/_white/cult/spells.ftl new file mode 100644 index 0000000000..82a2953fd4 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/cult/spells.ftl @@ -0,0 +1,2 @@ +blood-spell-remove-no-spells = Заклинания крови отсутствуют. +blood-spell-create-too-much = Начертите руну могущества, чтобы создать больше двух заклинаний крови. diff --git a/Resources/Locale/ru-RU/_white/cult/verb.ftl b/Resources/Locale/ru-RU/_white/cult/verb.ftl deleted file mode 100644 index cb1f9c275b..0000000000 --- a/Resources/Locale/ru-RU/_white/cult/verb.ftl +++ /dev/null @@ -1,9 +0,0 @@ -verb-categories-cult = Культ - -verb-spell-create-text = Создать заклинание крови -verb-spell-create-message = Вы можете создать два заклинания крови без руны могущества. -verb-spell-create-too-much = Начертите руну могущества, чтобы создать больше двух заклинаний крови. - -verb-spell-remove-text = Удалить заклинание крови -verb-spell-remove-message = Убрать любое из созданных заклинаний крови. -verb-spell-remove-no-spells = Заклинания крови отсутствуют. diff --git a/Resources/Locale/ru-RU/_white/white-shit.ftl b/Resources/Locale/ru-RU/_white/white-shit.ftl index c3787be86d..d57b3e4e5a 100644 --- a/Resources/Locale/ru-RU/_white/white-shit.ftl +++ b/Resources/Locale/ru-RU/_white/white-shit.ftl @@ -22,6 +22,9 @@ carry-start = { $carrier } пытается взять вас на руки! alerts-knockdown-name = Лежу alerts-knockdown-desc = Не могу встать. +alerts-blood-spells-name = Заклинания крови +alerts-blood-spells-desc = Нажмите, чтобы создать или удалить заклинания крови. + melee-block-event-blocked = заблокировал! alerts-blocked-name = Атака заблокирована alerts-blocked-desc = Невозможно блокировать некоторое время. diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index d9b6d780fd..836ff90d96 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -5,6 +5,7 @@ id: BaseAlertOrder order: - category: Health + - alertType: BloodSpells - alertType: Bleeding - category: Mood # WD edit - category: Stamina @@ -518,3 +519,13 @@ state: offer_item name: alerts-offer-name description: alerts-offer-desc + +# WD-EDIT +- type: alert + id: BloodSpells + onClick: !type:OpenBloodSpellsUi {} + icons: + - sprite: /Textures/White/Cult/actions_cult.rsi + state: blood_spells + name: alerts-blood-spells-name + description: alerts-blood-spells-desc diff --git a/Resources/Prototypes/_White/Actions/cult_actions.yml b/Resources/Prototypes/_White/Actions/cult_actions.yml index 415007c8eb..e32ad8a6e5 100644 --- a/Resources/Prototypes/_White/Actions/cult_actions.yml +++ b/Resources/Prototypes/_White/Actions/cult_actions.yml @@ -7,8 +7,8 @@ - type: EntityTargetAction canTargetSelf: false icon: - sprite: /Textures/Objects/Materials/Sheets/metal.rsi - state: steel + sprite: /Textures/White/Cult/actions_cult.rsi + state: transmute event: !type:CultTwistedConstructionActionEvent speech: "Ethra p'ni dedol!" itemIconStyle: BigAction @@ -168,4 +168,4 @@ state: gone revealIcon: sprite: /Textures/White/Cult/actions_cult.rsi - state: telerune + state: back diff --git a/Resources/Prototypes/_White/Construction/Cult/graphs.yml b/Resources/Prototypes/_White/Construction/Cult/graphs.yml index 418dd85338..3b3fe35cf0 100644 --- a/Resources/Prototypes/_White/Construction/Cult/graphs.yml +++ b/Resources/Prototypes/_White/Construction/Cult/graphs.yml @@ -25,7 +25,10 @@ - !type:EntityAnchored steps: - tool: Dagger - cultistOnly: true + userWhitelist: + components: + - Cultist + - Ghost - to: wall completed: - !type:SnapToGrid @@ -46,7 +49,10 @@ amount: 1 steps: - tool: Dagger - cultistOnly: true + userWhitelist: + components: + - Cultist + - Ghost - type: constructionGraph id: AirlockGlassCult @@ -75,7 +81,10 @@ - !type:EntityAnchored steps: - tool: Dagger - cultistOnly: true + userWhitelist: + components: + - Cultist + - Ghost - type: constructionGraph id: CultPylon diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/blood_spells.png b/Resources/Textures/White/Cult/actions_cult.rsi/blood_spells.png new file mode 100644 index 0000000000000000000000000000000000000000..351357825631216cfa4ede5248e81cdb2fd27efc GIT binary patch literal 883 zcmV-(1C0EMP)@xS}6gc76OS#t>M5$OeBUxLL{0P zPu`T^h5x~z2?_C}cMmomG$tPKDg+D{qJabmL{gO&S_-U`w%hV^YnSJ~b+;*XxAa#e zF-+3V>)YwfXXeekwiG8U|1UtB(@B~Rcno_z%s&Tcu-S;^kU>~qcC2kt0c=JiIZFsG zq6EhBa;&WTq)N;#E^1bxC;)boiBN6P>(SBOg-9%h5EsRHqX9v2zteGrOt`(MTMDj->&0`} z8XLjI1@Pk7%`UCv6g(#YN0k*dwRPawb)2iU;pN~{G&!AkKQe~7B~Q+Qa{{neT1iLG zZRxD*?HBOj^(zQxba?l16bqi^yn|;1Z~>%2UiTjg(wNaspP!nN_Qq!yFe)~jC}dQ8 zqqbc@agJaN(qu_8)ZBt=LPA=z;V{BJFTRQ0zqssU>@sM#sO@#%^#6BhxeR zvcV%xx?~7{hD_;mhYG|IfPkEZU3N&rGHX|X75(nPXf@4-LjK(BR(DnjC$Dj4se6# zF(BIZX=JIEy-Ne?2mlqWGYlo-__P&8RMgiEW%yiC0c>w0TcK0p)_9f#pe54kU^dDz ztf=S3SGi6{II#+99etdr*(U+Ao#VSPE_t5WKqyD6Ro$F_j+KDQlmz4e6iP`V^%ixc zeXn4EbPy$&QV}JflC^T5X!$AlKVe^