Fixesaaaaaaaaaaa (#360)

* some tweaks

* halt
This commit is contained in:
rhailrake
2023-09-04 16:34:38 +06:00
committed by Aviu00
parent 465dc54814
commit d82924ff03
26 changed files with 144 additions and 3 deletions

View File

@@ -750,7 +750,7 @@ public sealed partial class ChatSystem : SharedChatSystem
/// <summary>
/// Sends a chat message to the given players in range of the source entity.
/// </summary>
private void SendInVoiceRange(ChatChannel channel, string message, string wrappedMessage, EntityUid source, ChatTransmitRange range, NetUserId? author = null)
public void SendInVoiceRange(ChatChannel channel, string message, string wrappedMessage, EntityUid source, ChatTransmitRange range, NetUserId? author = null)
{
foreach (var (session, data) in GetRecipients(source, VoiceRange))
{

View File

@@ -0,0 +1,37 @@
using Robust.Shared.Audio;
namespace Content.Server.White.Halt;
[RegisterComponent]
public sealed partial class HaltComponent : Component
{
[DataField("color"), ViewVariables(VVAccess.ReadWrite)]
public string ChatColor { get; private set; } = Color.Red.ToHex();
[DataField("locale"), ViewVariables(VVAccess.ReadWrite)]
public string ChatLoc { get; private set; } = "chat-manager-entity-say-hailer-wrap-message";
[DataField("actionEntity")] public EntityUid? ActionEntity;
public readonly Dictionary<string, SoundSpecifier> PhraseToSoundMap = new()
{
["halt-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/halt.ogg"),
["bobby-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/bobby.ogg"),
["compliance-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/compliance.ogg"),
["justice-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/justice.ogg"),
["running-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/running.ogg"),
["dontmove-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/dontmove.ogg"),
["floor-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/floor.ogg"),
["robocop-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/robocop.ogg"),
["god-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/god.ogg"),
["freeze-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/freeze.ogg"),
["imperial-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/imperial.ogg"),
["bash-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/bash.ogg"),
["harry-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/harry.ogg"),
["asshole-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/asshole.ogg"),
["stfu-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/stfu.ogg"),
["shutup-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/shutup.ogg"),
["super-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/super.ogg"),
["dredd-phrase"] = new SoundPathSpecifier("/Audio/Voice/Complionator/dredd.ogg")
};
}

View File

@@ -0,0 +1,62 @@
using System.Linq;
using Content.Shared.Actions;
using Content.Server.Chat.Systems;
using Robust.Shared.Utility;
using Content.Shared.Chat;
using Content.Shared.White.Other;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server.White.Halt
{
public sealed class HaltSystem : EntitySystem
{
[Dependency] private readonly ChatSystem _chat = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HaltComponent, GetItemActionsEvent>(OnGetEquipped);
SubscribeLocalEvent<HaltComponent, HaltAction>(Act);
}
private void OnGetEquipped(EntityUid uid, HaltComponent component, GetItemActionsEvent args)
{
if (args.InHands)
return;
args.AddAction(ref component.ActionEntity, "Halt");
}
private void Act(EntityUid uid, HaltComponent component, HaltAction args)
{
if (args.Handled)
return;
if (!component.PhraseToSoundMap.Any())
return;
var randomIndex = _random.Next(component.PhraseToSoundMap.Count);
var selectedPhrase = component.PhraseToSoundMap.Keys.ElementAt(randomIndex);
var selectedSound = component.PhraseToSoundMap[selectedPhrase];
_audio.PlayPvs(selectedSound, uid);
var hMessage = Loc.GetString(selectedPhrase);
var wrappedMessage = Loc.GetString(
component.ChatLoc,
("entityName", args.Performer),
("hMessage", FormattedMessage.EscapeText(hMessage)),
("color", component.ChatColor)
);
_chat.SendInVoiceRange(ChatChannel.Local, hMessage, wrappedMessage, args.Performer, ChatTransmitRange.Normal);
args.Handled = true;
}
}
}

View File

@@ -24,8 +24,9 @@ public sealed class CritSystem : EntitySystem
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CritComponent, MeleeHitEvent>(HandleHit);
SubscribeLocalEvent<CritComponent, ExaminedEvent>(OnExamine);
SubscribeLocalEvent<CritComponent, MeleeHitEvent>(HandleHit);
}
private void OnExamine(EntityUid uid, CritComponent component, ExaminedEvent args)
@@ -33,7 +34,7 @@ public sealed class CritSystem : EntitySystem
if (component.IsBloodDagger)
{
args.PushMarkup(
"[color=red]Критическая жажда: Кинжал Жажды обладает смертоносной точностью. Его владелец имеет 20% шанс нанести критический урон, поражая врага в его самые уязвимые места.\n" +
"[color=red]Критическая жажда: Кинжал Жажды обладает смертоносной точностью. Его владелец имеет 25% шанс нанести критический урон, поражая врага в его самые уязвимые места.\n" +
"Кровавый абсорб: При каждом успешном критическом ударе, кинжал извлекает кровь из цели, восстанавливая здоровье владельцу пропорционально количеству высосанной крови.[/color]"
);
}

View File

@@ -0,0 +1,7 @@
using Content.Shared.Actions;
namespace Content.Shared.White.Other;
public sealed partial class HaltAction : InstantActionEvent
{
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,20 @@
chat-manager-entity-say-hailer-wrap-message = { $entityName } командует, "[font size=13][color={ $color }]{ $hMessage }[/color][/size]"
halt-phrase = СТОЯТЬ! СТОЯТЬ! СТОЯТЬ!
bobby-phrase = Стоять! Во имя Закона!
compliance-phrase = Сдаться в ваших интересах.
justice-phrase = Приготовьтесь к справедливости!
running-phrase = Бег только увеличит ваш срок.
dontmove-phrase = Не двигаться, уёбок!
floor-phrase = На пол, сука!
robocop-phrase = Мёртвый или живой ты пойдешь со мной.
god-phrase = Бог создал сегодня для жуликов, которых мы не могли поймать вчера.
freeze-phrase = Замри, подонок!
imperial-phrase = Стоять, преступная мразь!
bash-phrase = Остановись или я тебя ударю.
harry-phrase = Сделай мой день.
asshole-phrase = Хватит нарушать закон, гадина.
stfu-phrase = Вы имеете право завалить ебало.
shutup-phrase = Заткнись нахуй!
super-phrase = Сейчас ты познаешь гнев золотой сферы.
dredd-phrase = Я ЗАКОН!

View File

@@ -315,3 +315,16 @@
event: !type:ToggleEyesActionEvent
useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action
- type: entity
id: Halt
name: Halt!
description: Halt!
noSpawn: true
components:
- type: InstantAction
useDelay: 5
icon:
sprite: Objects/Weapons/Melee/stunbaton.rsi
state: stunbaton_off
event: !type:HaltAction

View File

@@ -36,6 +36,7 @@
Slash: 0.95
Piercing: 0.95
Heat: 0.95
- type: Halt
- type: entity
parent: ClothingMaskGas