mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-16 21:17:39 +03:00
* 1 * Squashed commit of the following: commit 182403875c6b7348a6ae33aca959aefa7f2dad8e Author: Kutosss <162154227+Kutosss@users.noreply.github.com> Date: Mon Oct 27 16:14:41 2025 +0300 Бабайки (#3) * Джейсон Джейсон Звуки и спрайты Способность на отрубание головы Способность к воскрешению Тематическое лого * саунд для пениса * блядопеннивайз * шарики * Update jason_gear.yml * слендерчлен * Update SlendermanShadowWalkSystem.cs * трапики * Friday31 (#6) * Джейсон Джейсон Звуки и спрайты Способность на отрубание головы Способность к воскрешению Тематическое лого * саунд для пениса * блядопеннивайз * шарики * Update jason_gear.yml * слендерчлен * Update SlendermanShadowWalkSystem.cs * трапики * крестик * 3 * Friday31 (#7) * Джейсон Джейсон Звуки и спрайты Способность на отрубание головы Способность к воскрешению Тематическое лого * саунд для пениса * блядопеннивайз * шарики * Update jason_gear.yml * слендерчлен * Update SlendermanShadowWalkSystem.cs * трапики * крестик * костюм * Apply suggestions from code review * 5 * 6 --------- Co-authored-by: Kutosss <162154227+Kutosss@users.noreply.github.com>
103 lines
3.4 KiB
C#
103 lines
3.4 KiB
C#
using Content.Server.Body.Systems;
|
|
using Content.Server.Chat.Systems;
|
|
using Content.Shared._Friday31.Slenderman;
|
|
using Content.Shared._Shitmed.Body.Events;
|
|
using Content.Shared.Actions;
|
|
using Content.Shared.Body.Components;
|
|
using Content.Shared.Body.Part;
|
|
using Robust.Server.GameObjects;
|
|
using Robust.Shared.Audio;
|
|
using Robust.Shared.Audio.Systems;
|
|
using Robust.Shared.Player;
|
|
using Robust.Shared.Log;
|
|
using Robust.Shared.Random;
|
|
|
|
namespace Content.Server._Friday31.Slenderman;
|
|
|
|
public sealed class SlendermanDismemberAbilitySystem : EntitySystem
|
|
{
|
|
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
|
[Dependency] private readonly BodySystem _body = default!;
|
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
|
[Dependency] private readonly ChatSystem _chat = default!;
|
|
[Dependency] private readonly IRobustRandom _random = default!;
|
|
|
|
private ISawmill _sawmill = default!;
|
|
|
|
private static readonly string[] FleshSounds = new[]
|
|
{
|
|
"/Audio/Weapons/Xeno/alien_claw_flesh1.ogg",
|
|
"/Audio/Weapons/Xeno/alien_claw_flesh2.ogg",
|
|
"/Audio/Weapons/Xeno/alien_claw_flesh3.ogg"
|
|
};
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
_sawmill = Logger.GetSawmill("slenderman.dismember");
|
|
SubscribeLocalEvent<SlendermanDismemberAbilityComponent, MapInitEvent>(OnMapInit);
|
|
SubscribeLocalEvent<SlendermanDismemberAbilityComponent, SlendermanDismemberActionEvent>(OnDismember);
|
|
}
|
|
|
|
private void OnMapInit(EntityUid uid, SlendermanDismemberAbilityComponent component, MapInitEvent args)
|
|
{
|
|
_actions.AddAction(uid, ref component.ActionEntity, component.Action);
|
|
}
|
|
|
|
private void OnDismember(EntityUid uid, SlendermanDismemberAbilityComponent component, SlendermanDismemberActionEvent args)
|
|
{
|
|
if (args.Handled)
|
|
return;
|
|
|
|
var target = args.Target;
|
|
|
|
if (!TryComp<BodyComponent>(target, out var body))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var partsToRemove = new List<EntityUid>();
|
|
foreach (var (partId, part) in _body.GetBodyChildren(target, body))
|
|
{
|
|
if (part.PartType is BodyPartType.Arm or BodyPartType.Hand or BodyPartType.Leg or BodyPartType.Foot or BodyPartType.Head)
|
|
{
|
|
partsToRemove.Add(partId);
|
|
}
|
|
}
|
|
|
|
if (partsToRemove.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_chat.TryEmoteWithChat(target, "Scream");
|
|
if (TryComp<ActorComponent>(target, out var actor))
|
|
{
|
|
var screamerEvent = new SlendermanScreamerEvent(component.ScreamerDuration);
|
|
RaiseNetworkEvent(screamerEvent, actor.PlayerSession);
|
|
_sawmill.Info($"Sent screamer event to player {actor.PlayerSession.Name} with duration {component.ScreamerDuration}");
|
|
}
|
|
else
|
|
{
|
|
_sawmill.Warning($"Target {target} has no ActorComponent, screamer not sent!");
|
|
}
|
|
|
|
if (args.DismemberSound != null)
|
|
{
|
|
_audio.PlayPvs(args.DismemberSound, uid, AudioParams.Default.WithMaxDistance(args.SoundRange));
|
|
}
|
|
|
|
var fleshSound = _random.Pick(FleshSounds);
|
|
_audio.PlayPvs(fleshSound, target);
|
|
|
|
foreach (var part in partsToRemove)
|
|
{
|
|
var ev = new AmputateAttemptEvent(part);
|
|
RaiseLocalEvent(part, ref ev);
|
|
}
|
|
|
|
args.Handled = true;
|
|
}
|
|
}
|