Prayers Again (#10960)
* prayer system * verbs * localize * Praying changes * praying + cleanup * Revert "praying + cleanup" This reverts commit e8ee90f9f0be9a2eeb4d660359f0913c9e82aba3. * Prayers (actually) * forgot to remove this * slight fixes * veritius reviews * I did it * less HD images Co-authored-by: Just-a-Unity-Dev <just-a-unity-dev@users.noreply.github.com>
This commit is contained in:
17
Content.Client/Prayer/PrayerSystem.cs
Normal file
17
Content.Client/Prayer/PrayerSystem.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Prayer;
|
||||
|
||||
namespace Content.Client.Prayer;
|
||||
/// <summary>
|
||||
/// System to handle subtle messages and praying
|
||||
/// </summary>
|
||||
public sealed class PrayerSystem : SharedPrayerSystem
|
||||
{
|
||||
protected override void OnPrayerTextMessage(PrayerTextMessage message, EntitySessionEventArgs eventArgs)
|
||||
{
|
||||
var bwoinkMessage = new SharedBwoinkSystem.BwoinkTextMessage(eventArgs.SenderSession.UserId,
|
||||
eventArgs.SenderSession.UserId, message.Text);
|
||||
|
||||
RaiseNetworkEvent(bwoinkMessage);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ using Content.Server.Ghost.Roles;
|
||||
using Content.Server.Mind.Commands;
|
||||
using Content.Server.Mind.Components;
|
||||
using Content.Server.Players;
|
||||
using Content.Server.Prayer;
|
||||
using Content.Server.Xenoarchaeology.XenoArtifacts;
|
||||
using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
|
||||
using Content.Shared.Administration;
|
||||
@@ -45,6 +46,7 @@ namespace Content.Server.Administration.Systems
|
||||
[Dependency] private readonly GhostRoleSystem _ghostRoleSystem = default!;
|
||||
[Dependency] private readonly ArtifactSystem _artifactSystem = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||
[Dependency] private readonly PrayerSystem _prayerSystem = default!;
|
||||
|
||||
private readonly Dictionary<IPlayerSession, EditSolutionsEui> _openSolutionUis = new();
|
||||
|
||||
@@ -80,6 +82,21 @@ namespace Content.Server.Administration.Systems
|
||||
verb.Impact = LogImpact.Low;
|
||||
args.Verbs.Add(verb);
|
||||
|
||||
// Subtle Messages
|
||||
Verb prayerVerb = new();
|
||||
prayerVerb.Text = Loc.GetString("prayer-verbs-subtle-message");
|
||||
prayerVerb.Category = VerbCategory.Admin;
|
||||
prayerVerb.IconTexture = "/Textures/Interface/pray.svg.png";
|
||||
prayerVerb.Act = () =>
|
||||
{
|
||||
_quickDialog.OpenDialog(player, "Subtle Message", "Message", "Popup Message", (string message, string popupMessage) =>
|
||||
{
|
||||
_prayerSystem.SendSubtleMessage(targetActor.PlayerSession, message, popupMessage == "" ? Loc.GetString("prayer-popup-subtle-default") : popupMessage);
|
||||
});
|
||||
};
|
||||
prayerVerb.Impact = LogImpact.Low;
|
||||
args.Verbs.Add(prayerVerb);
|
||||
|
||||
// Freeze
|
||||
var frozen = HasComp<AdminFrozenComponent>(args.Target);
|
||||
args.Verbs.Add(new Verb
|
||||
|
||||
17
Content.Server/Prayer/PrayableComponent.cs
Normal file
17
Content.Server/Prayer/PrayableComponent.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace Content.Server.Prayer
|
||||
{
|
||||
/// <summary>
|
||||
/// Allows an entity to be prayed on in the context menu
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed class PrayableComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// If bible users are only allowed to use this prayable entity
|
||||
/// </summary>
|
||||
[DataField("bibleUserOnly")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public bool BibleUserOnly;
|
||||
}
|
||||
}
|
||||
|
||||
95
Content.Server/Prayer/PrayerSystem.cs
Normal file
95
Content.Server/Prayer/PrayerSystem.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using Content.Server.Administration;
|
||||
using Content.Server.Bible.Components;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Shared.Player;
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.Prayer;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Server.GameObjects;
|
||||
|
||||
namespace Content.Server.Prayer;
|
||||
/// <summary>
|
||||
/// System to handle subtle messages and praying
|
||||
/// </summary>
|
||||
public sealed class PrayerSystem : SharedPrayerSystem
|
||||
{
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
||||
[Dependency] private readonly QuickDialogSystem _quickDialog = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<PrayableComponent, GetVerbsEvent<ActivationVerb>>(AddPrayVerb);
|
||||
}
|
||||
|
||||
private void AddPrayVerb(EntityUid uid, PrayableComponent comp, GetVerbsEvent<ActivationVerb> args)
|
||||
{
|
||||
// if it doesn't have an actor and we can't reach it then don't add the verb
|
||||
if (!EntityManager.TryGetComponent<ActorComponent?>(args.User, out var actor))
|
||||
return;
|
||||
|
||||
if (!args.CanAccess)
|
||||
return;
|
||||
|
||||
ActivationVerb prayerVerb = new();
|
||||
prayerVerb.Text = Loc.GetString("prayer-verbs-pray");
|
||||
prayerVerb.IconTexture = "/Textures/Interface/pray.svg.png";
|
||||
prayerVerb.Act = () =>
|
||||
{
|
||||
if (comp.BibleUserOnly && !EntityManager.TryGetComponent<BibleUserComponent>(args.User, out var bibleUser))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("prayer-popup-notify-locked"), uid, Filter.Empty().AddPlayer(actor.PlayerSession), PopupType.Large);
|
||||
return;
|
||||
}
|
||||
|
||||
_quickDialog.OpenDialog(actor.PlayerSession, "Pray", "Message", (string message) =>
|
||||
{
|
||||
Pray(actor.PlayerSession, message);
|
||||
});
|
||||
};
|
||||
prayerVerb.Impact = LogImpact.Low;
|
||||
args.Verbs.Add(prayerVerb);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Subtly messages a player by giving them a popup and a chat message.
|
||||
/// </summary>
|
||||
/// <param name="target">The IPlayerSession that you want to send the message to</param>
|
||||
/// <param name="messageString">The main message sent to the player via the chatbox</param>
|
||||
/// <param name="popupMessage">The popup to notify the player, also prepended to the messageString</param>
|
||||
public void SendSubtleMessage(IPlayerSession target, string messageString, string popupMessage)
|
||||
{
|
||||
if (target.AttachedEntity == null)
|
||||
return;
|
||||
|
||||
_popupSystem.PopupEntity(popupMessage, target.AttachedEntity.Value, Filter.Empty().AddPlayer(target), PopupType.Large);
|
||||
_chatManager.ChatMessageToOne(ChatChannel.Local, messageString, popupMessage + " \"{0}\"", EntityUid.Invalid, false, target.ConnectedClient);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends a message to the admin channel with a message and username
|
||||
/// </summary>
|
||||
/// <param name="sender">The IPlayerSession who sent the original message</param>
|
||||
/// <param name="message">Message to be sent to the admin chat</param>
|
||||
/// <remarks>
|
||||
/// You may be wondering, "Why the admin chat, specifically? Nobody even reads it!"
|
||||
/// Exactly.
|
||||
/// </remarks>
|
||||
public void Pray(IPlayerSession sender, string message)
|
||||
{
|
||||
if (sender.AttachedEntity == null)
|
||||
return;
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("prayer-popup-notify-sent"), sender.AttachedEntity.Value, Filter.Empty().AddPlayer(sender), PopupType.Medium);
|
||||
|
||||
var networkMessage = new PrayerTextMessage(Loc.GetString("prayer-chat-notify", ("message", message)));
|
||||
|
||||
RaiseNetworkEvent(networkMessage, Filter.Empty().AddPlayer(sender));
|
||||
}
|
||||
}
|
||||
30
Content.Shared/Prayer/SharedPrayerSystem.cs
Normal file
30
Content.Shared/Prayer/SharedPrayerSystem.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Prayer;
|
||||
|
||||
/// <summary>
|
||||
/// Shared system for handling Prayers
|
||||
/// </summary>
|
||||
public abstract class SharedPrayerSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeNetworkEvent<PrayerTextMessage>(OnPrayerTextMessage);
|
||||
}
|
||||
|
||||
protected virtual void OnPrayerTextMessage(PrayerTextMessage message, EntitySessionEventArgs eventArgs)
|
||||
{
|
||||
// Specific side code in target.
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class PrayerTextMessage : EntityEventArgs
|
||||
{
|
||||
public string Text { get; }
|
||||
|
||||
public PrayerTextMessage(string text)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
7
Resources/Locale/en-US/prayers/prayers.ftl
Normal file
7
Resources/Locale/en-US/prayers/prayers.ftl
Normal file
@@ -0,0 +1,7 @@
|
||||
prayer-verbs-subtle-message = Subtle Message
|
||||
prayer-verbs-pray = Pray
|
||||
prayer-chat-notify = PRAYER: {$message}
|
||||
|
||||
prayer-popup-subtle-default = You hear a voice in your head...
|
||||
prayer-popup-notify-sent = Your message has been sent to the gods...
|
||||
prayer-popup-notify-locked = You don't feel worthy enough...
|
||||
@@ -18,6 +18,8 @@
|
||||
damageOnUntrainedUse: ## What a non-chaplain takes when attempting to heal someone
|
||||
groups:
|
||||
Burn: 10
|
||||
- type: Prayable
|
||||
bibleUserOnly: true
|
||||
- type: Summonable
|
||||
specialItem: SpawnPointGhostRemilia
|
||||
- type: ItemCooldown
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- type: Anchorable
|
||||
- type: Transform
|
||||
noRot: true
|
||||
- type: Prayable
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
damageModifierSet: Metallic
|
||||
|
||||
7
Resources/Textures/Interface/pray.svg
Normal file
7
Resources/Textures/Interface/pray.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg width="64" height="64" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#fff" id="svg_1" height="63" width="12" y="2" x="25.625" stroke-width="0" fill="#ffffff"/>
|
||||
<rect stroke="#fff" id="svg_2" height="11" width="38.5" y="16.64773" x="12.49999" stroke-width="0" fill="#ffffff"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 345 B |
BIN
Resources/Textures/Interface/pray.svg.png
Normal file
BIN
Resources/Textures/Interface/pray.svg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 212 B |
2
Resources/Textures/Interface/pray.svg.png.yml
Normal file
2
Resources/Textures/Interface/pray.svg.png.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
sample:
|
||||
filter: true
|
||||
Reference in New Issue
Block a user