Skip to content

Commit

Permalink
Черты персонажа
Browse files Browse the repository at this point in the history
  • Loading branch information
FaDeOkno committed Aug 8, 2024
1 parent d65b910 commit bc4caba
Show file tree
Hide file tree
Showing 18 changed files with 564 additions and 100 deletions.
46 changes: 46 additions & 0 deletions Content.Client/ADT/Quirks/QuirksSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Content.Shared.ADT.Traits;
using Content.Client.Storage.Components;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Verbs;
using Content.Shared.Tools.Components;
using Content.Shared.Whitelist;
using Content.Shared.Lock;

namespace Content.Client.ADT.Traits;

public sealed class QuirksSystem : SharedQuirksSystem
{
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<EntityStorageComponent, GetVerbsEvent<AlternativeVerb>>(OnGetHideVerbs);

}

private void OnGetHideVerbs(EntityUid uid, EntityStorageComponent comp, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanAccess || !args.CanInteract)
return;

if (!HasComp<FastLockersComponent>(args.User))
return;
if (TryComp<WeldableComponent>(uid, out var weldable) && weldable.IsWelded)
return;
if (_whitelist.IsWhitelistFail(comp.Whitelist, args.User))
return;
if (TryComp<LockComponent>(uid, out var lockComponent) && lockComponent.Locked)
return;

AlternativeVerb verb = new()
{
Act = () => TryHide(args.User, uid),
Text = Loc.GetString("quirk-fast-locker-hide-verb"),
};
args.Verbs.Add(verb);

}

}
46 changes: 46 additions & 0 deletions Content.Server/ADT/Quirks/QuirksSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Content.Shared.ADT.Traits;
using Content.Server.Storage.Components;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Verbs;
using Content.Shared.Tools.Components;
using Content.Shared.Whitelist;
using Content.Shared.Lock;

namespace Content.Server.ADT.Traits;

public sealed class QuirksSystem : SharedQuirksSystem
{
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<EntityStorageComponent, GetVerbsEvent<AlternativeVerb>>(OnGetHideVerbs);

}

private void OnGetHideVerbs(EntityUid uid, EntityStorageComponent comp, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanAccess || !args.CanInteract)
return;

if (!HasComp<FastLockersComponent>(args.User))
return;
if (TryComp<WeldableComponent>(uid, out var weldable) && weldable.IsWelded)
return;

if (_whitelist.IsWhitelistFail(comp.Whitelist, args.User))
return;
if (TryComp<LockComponent>(uid, out var lockComponent) && lockComponent.Locked)
return;

AlternativeVerb verb = new()
{
Act = () => TryHide(args.User, uid),
Text = Loc.GetString("quirk-fast-locker-hide-verb"),
};
args.Verbs.Add(verb);

}

}
9 changes: 9 additions & 0 deletions Content.Shared/ADT/Quirks/Components/FastLockersComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Robust.Shared.GameStates;

namespace Content.Shared.ADT.Traits;

[RegisterComponent]
[NetworkedComponent]
public sealed partial class FastLockersComponent : Component
{
}
13 changes: 13 additions & 0 deletions Content.Shared/ADT/Quirks/Components/FreerunningComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.GameStates;

namespace Content.Shared.ADT.Traits;

[RegisterComponent]
[NetworkedComponent]
public sealed partial class FreerunningComponent : Component
{
[DataField]
public float Modifier = 0.6f;
}
13 changes: 13 additions & 0 deletions Content.Shared/ADT/Quirks/Components/HardThrowerComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.GameStates;

namespace Content.Shared.ADT.Traits;

[RegisterComponent]
[NetworkedComponent]
public sealed partial class HardThrowerComponent : Component
{
[DataField]
public float Modifier = 0.8f;
}
12 changes: 12 additions & 0 deletions Content.Shared/ADT/Quirks/Components/SoftWalkComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.GameStates;

namespace Content.Shared.ADT.Traits;

[RegisterComponent]
[NetworkedComponent]
public sealed partial class SoftWalkComponent : Component
{
public ProtoId<TagPrototype> Tag = "ShoesRequiredStepTriggerImmune";
}
12 changes: 12 additions & 0 deletions Content.Shared/ADT/Quirks/Components/SprinterComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.GameStates;

namespace Content.Shared.ADT.Traits;

[RegisterComponent]
[NetworkedComponent]
public sealed partial class SprinterComponent : Component
{
public float Modifier = 1.1f;
}
101 changes: 101 additions & 0 deletions Content.Shared/ADT/Quirks/EntitySystems/SharedQuirksSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Content.Shared.Climbing.Events;
using Robust.Shared.Network;
using Content.Shared.Throwing;
using Content.Shared.Verbs;
using Content.Shared.Tools.Components;
using Content.Shared.Storage.Components;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Popups;
using Content.Shared.Tag;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems;

namespace Content.Shared.ADT.Traits;

public abstract class SharedQuirksSystem : EntitySystem
{
[Dependency] private readonly SharedEntityStorageSystem _storage = default!;
[Dependency] protected readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly INetManager _netMan = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly TagSystem _tag = default!;

public override void Initialize()
{
//SubscribeLocalEvent<SharedEntityStorageComponent, GetVerbsEvent<AlternativeVerb>>(OnGetHideVerbs);

SubscribeLocalEvent<SoftWalkComponent, MapInitEvent>(OnSoftWalkMapInit);

SubscribeLocalEvent<FreerunningComponent, CheckClimbSpeedModifiersEvent>(OnFreerunningClimbTimeModify);

SubscribeLocalEvent<SprinterComponent, MapInitEvent>(OnSprinterMapInit);
SubscribeLocalEvent<SprinterComponent, RefreshMovementSpeedModifiersEvent>(OnRefreshMovespeed);

SubscribeLocalEvent<HardThrowerComponent, CheckThrowRangeModifiersEvent>(OnThrowerRangeModify);
}

//private void OnGetHideVerbs(EntityUid uid, SharedEntityStorageComponent comp, GetVerbsEvent<AlternativeVerb> args)
//{
// if (!args.CanAccess || !args.CanInteract)
// return;

// if (!HasComp<FastLockersComponent>(args.User))
// return;
// if (TryComp<WeldableComponent>(uid, out var weldable) && weldable.IsWelded)
// return;
// if (!comp.ItemCanStoreMobs)
// return;

// AlternativeVerb verb = new()
// {
// Act = () => TryHide(args.User, uid),
// Text = Loc.GetString("quirk-fast-locker-hide-verb"),
// };
// args.Verbs.Add(verb);

//}

public void TryHide(EntityUid uid, EntityUid closet)
{
if (_storage.Insert(uid, closet))
_popup.PopupClient(Loc.GetString("quirk-fast-locker-hide-success"), uid);
else
_popup.PopupCursor(Loc.GetString("quirk-fast-locker-hide-fail"), uid);
}

private void OnSoftWalkMapInit(EntityUid uid, SoftWalkComponent comp, MapInitEvent args)
{
if (_tag.HasTag(uid, comp.Tag))
RemComp<SoftWalkComponent>(uid);
else
_tag.AddTag(uid, comp.Tag);
}

private void OnFreerunningClimbTimeModify(EntityUid uid, FreerunningComponent comp, ref CheckClimbSpeedModifiersEvent args)
{
if (args.User == args.Climber)
args.Time *= comp.Modifier;
}

private void OnSprinterMapInit(EntityUid uid, SprinterComponent comp, MapInitEvent args)
{
if (!TryComp<MovementSpeedModifierComponent>(uid, out var move))
return;
_movementSpeed.RefreshMovementSpeedModifiers(uid, move);
}
private void OnRefreshMovespeed(EntityUid uid, SprinterComponent component, RefreshMovementSpeedModifiersEvent args)
{
args.ModifySpeed(1f, component.Modifier);
}

private void OnThrowerRangeModify(EntityUid uid, HardThrowerComponent component, ref CheckThrowRangeModifiersEvent args)
{
args.SpeedMod = component.Modifier;
args.VectorMod = component.Modifier;
}

}
6 changes: 6 additions & 0 deletions Content.Shared/Climbing/Events/CheckClimbSpeedModifiers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Content.Shared.Climbing.Events;

[ByRefEvent]
public record struct CheckClimbSpeedModifiersEvent(EntityUid User, EntityUid Climber, EntityUid Climbable, float Time)
{
}
5 changes: 4 additions & 1 deletion Content.Shared/Climbing/Systems/ClimbSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,11 @@ public bool TryClimb(
RaiseLocalEvent(climbable, ref ev);
if (ev.Cancelled)
return false;
var speedEv = new CheckClimbSpeedModifiersEvent(user, entityToMove, climbable, comp.ClimbDelay);
RaiseLocalEvent(entityToMove, ref speedEv);
var delay = speedEv.Time;

var args = new DoAfterArgs(EntityManager, user, comp.ClimbDelay, new ClimbDoAfterEvent(),
var args = new DoAfterArgs(EntityManager, user, delay, new ClimbDoAfterEvent(),
entityToMove,
target: climbable,
used: entityToMove)
Expand Down
9 changes: 9 additions & 0 deletions Content.Shared/Throwing/CheckThrowRangeModifiersEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Numerics;

namespace Content.Shared.Throwing;

/// <summary>
/// Raised on thrown entity.
/// </summary>
[ByRefEvent]
public record struct CheckThrowRangeModifiersEvent(EntityUid? User, float VectorMod = 1f, float SpeedMod = 1f);
5 changes: 5 additions & 0 deletions Content.Shared/Throwing/ThrowingSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@ public void TryThrow(EntityUid uid,
// If someone changes how tile friction works at some point, this will have to be adjusted.
var throwSpeed = compensateFriction ? direction.Length() / (flyTime + 1 / tileFriction) : baseThrowSpeed;
var impulseVector = direction.Normalized() * throwSpeed * physics.Mass;
var modifiersEv = new CheckThrowRangeModifiersEvent(user);
RaiseLocalEvent(user ?? EntityUid.Invalid, ref modifiersEv);
throwSpeed *= modifiersEv.SpeedMod;
impulseVector *= modifiersEv.VectorMod;

_physics.ApplyLinearImpulse(uid, impulseVector, body: physics);

if (comp.LandTime == null || comp.LandTime <= TimeSpan.Zero)
Expand Down
1 change: 1 addition & 0 deletions Resources/Locale/ru-RU/ADT/traits/categories.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
trait-category-quirks = Особенности
14 changes: 14 additions & 0 deletions Resources/Locale/ru-RU/ADT/traits/positive.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
trait-soft-walk-name = Осторожный шаг
trait-soft-walk-desc = Вы достаточно осторожны, чтобы не наступать на опасные точки даже без обуви.
trait-freerunning-name = Паркурщик
trait-freerunning-desc = Вы гораздо быстрее забираетесь на столы.
trait-sprinter-name = Спринтер
trait-sprinter-desc = Вы бегаете чуть быстрее остальных представителей своего вида.
trait-fast-lockers-name = Ловкий
trait-fast-lockers-desc = Вы можете моментально и максимально незаметно забраться внутрь шкафа, или ящика.
trait-hard-thrower-name = Сильный бросок
trait-hard-thrower-desc = Вы бросаетесь вещами сильнее остальных.
4 changes: 4 additions & 0 deletions Resources/Prototypes/ADT/Traits/categories.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- type: traitCategory
id: Quirks
name: trait-category-quirks
maxTraitPoints: 0
32 changes: 16 additions & 16 deletions Resources/Prototypes/ADT/Traits/disabilities.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
- type: trait
id: ADTHemophilia
name: trait-hemophilia-name
description: trait-hemophilia-desc
category: Disabilities
components:
- type: Hemophilia
modifier: 0.01
# - type: trait
# id: ADTHemophilia
# name: trait-hemophilia-name
# description: trait-hemophilia-desc
# category: Disabilities
# components:
# - type: Hemophilia
# modifier: 0.01

# Simple Station
# # Simple Station

- type: trait
id: ColorBlindnessMonochrome
name: trait-monochromacy-name
description: trait-monochromacy-description
category: Disabilities
components:
- type: Monochromacy
# - type: trait
# id: ColorBlindnessMonochrome
# name: trait-monochromacy-name
# description: trait-monochromacy-description
# category: Disabilities
# components:
# - type: Monochromacy
Loading

0 comments on commit bc4caba

Please sign in to comment.