This commit is contained in:
Valtos
2024-09-19 14:24:28 +03:00
61 changed files with 666 additions and 381 deletions

View File

@@ -25,7 +25,7 @@
Для записей в списке изменений есть 4 значка: add, remove, tweak, fix. Думаю, вы сможете разобраться с остальным.
Вы можете поставить свое имя после символа :cl:, чтобы изменить имя, которое будет отображаться в журнале изменений (в противном случае будет использоваться ваше имя пользователя GitHub)
Например: ":cl: DVOniksWyvern".
Например: ":cl: Amongus".
Как правило, в журналы изменений следует помещать только то, что действительно важно игрокам. Вещи вроде "Рефактор системы X, но изменений вы не увидите" - не должны быть в журнале изменений, эти изменения обычные игроки не смогут заметить.

View File

@@ -1,6 +1,5 @@
using Content.Server._White.Accent.Bloodloss;
using Content.Server.Body.Components;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Server.Chemistry.ReactionEffects;
using Content.Server.Fluids.EntitySystems;
using Content.Server.Forensics;
@@ -13,7 +12,6 @@ using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reaction;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Drunk;
using Content.Shared.FixedPoint;
using Content.Shared.Mobs;
@@ -23,7 +21,6 @@ using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Systems;
using Content.Shared.Popups;
using Content.Shared.Rejuvenate;
using Content.Shared.Speech.EntitySystems;
using Robust.Server.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -42,8 +39,7 @@ public sealed class BloodstreamSystem : EntitySystem
[Dependency] private readonly PuddleSystem _puddleSystem = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly SharedDrunkSystem _drunkSystem = default!;
[Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!;
[Dependency] private readonly SharedStutteringSystem _stutteringSystem = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
[Dependency] private readonly AlertsSystem _alertsSystem = default!;
[Dependency] private readonly ForensicsSystem _forensicsSystem = default!;
[Dependency] private readonly MovementSpeedModifierSystem _speed = default!; // WD
@@ -188,12 +184,23 @@ public sealed class BloodstreamSystem : EntitySystem
private void OnComponentInit(Entity<BloodstreamComponent> entity, ref ComponentInit args)
{
var chemicalSolution = _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.ChemicalSolutionName);
var bloodSolution = _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.BloodSolutionName);
var tempSolution = _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.BloodTemporarySolutionName);
_solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.ChemicalSolutionName, out var chemicalSolution);
_solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.BloodSolutionName, out var bloodSolution);
_solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.BloodTemporarySolutionName, out var tempSolution);
if (chemicalSolution == null)
return;
chemicalSolution.MaxVolume = entity.Comp.ChemicalMaxVolume;
if (bloodSolution == null)
return;
bloodSolution.MaxVolume = entity.Comp.BloodMaxVolume;
if (tempSolution == null)
return;
tempSolution.MaxVolume = entity.Comp.BleedPuddleThreshold * 4; // give some leeway, for chemstream as well
// Fill blood solution with BLOOD
@@ -203,12 +210,10 @@ public sealed class BloodstreamSystem : EntitySystem
private void OnDamageChanged(Entity<BloodstreamComponent> ent, ref DamageChangedEvent args)
{
if (args.DamageDelta is null || !args.DamageIncreased)
{
return;
}
// TODO probably cache this or something. humans get hurt a lot
if (!_prototypeManager.TryIndex<DamageModifierSetPrototype>(ent.Comp.DamageBleedModifiers, out var modifiers))
if (!_prototypeManager.TryIndex(ent.Comp.DamageBleedModifiers, out var modifiers))
return;
var bloodloss = DamageSpecifier.ApplyModifierSet(args.DamageDelta, modifiers);
@@ -222,11 +227,12 @@ public sealed class BloodstreamSystem : EntitySystem
var totalFloat = total.Float();
TryModifyBleedAmount(ent, totalFloat, ent);
/// <summary>
/// Critical hit. Causes target to lose blood, using the bleed rate modifier of the weapon, currently divided by 5
/// The crit chance is currently the bleed rate modifier divided by 25.
/// Higher damage weapons have a higher chance to crit!
/// </summary>
/*
Critical hit. Causes target to lose blood, using the bleed rate modifier of the weapon, currently divided by 5
The crit chance is currently the bleed rate modifier divided by 25.
Higher damage weapons have a higher chance to crit!
*/
var prob = Math.Clamp(totalFloat / 25, 0, 1);
if (totalFloat > 0 && _robustRandom.Prob(prob))
{
@@ -413,7 +419,7 @@ public sealed class BloodstreamSystem : EntitySystem
if (HasComp<BloodLustComponent>(uid)) // WD
{
if (component.BleedAmount == 0f)
if (component.BleedAmount == 0)
RemComp<BloodLustComponent>(uid);
_speed.RefreshMovementSpeedModifiers(uid);

View File

@@ -4,6 +4,7 @@ using Content.Server.Chat.Systems;
using Content.Server.Explosion.EntitySystems;
using Content.Server.Pinpointer;
using Content.Server.Popups;
using Content.Server.RoundEnd;
using Content.Server.Station.Systems;
using Content.Shared.Audio;
using Content.Shared.Containers.ItemSlots;
@@ -43,6 +44,7 @@ public sealed class NukeSystem : EntitySystem
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly AppearanceSystem _appearance = default!;
[Dependency] private readonly RoundEndSystem _roundEndSystem = default!;
/// <summary>
/// Used to calculate when the nuke song should start playing for maximum kino with the nuke sfx
@@ -568,6 +570,8 @@ public sealed class NukeSystem : EntitySystem
_sound.StopStationEventMusic(uid, StationEventMusicType.Nuke);
Del(uid);
_roundEndSystem.EndRound(TimeSpan.FromSeconds(30)); //Giedi EDIT
}
/// <summary>

View File

@@ -10,6 +10,12 @@ public sealed class FrontalLispSystem : EntitySystem
private static readonly Regex RegexLowerTh = new(@"[t]+[s]+|[s]+[c]+(?=[iey]+)|[c]+(?=[iey]+)|[p][s]+|([s]+[t]+|[t]+)(?=[i]+[o]+[u]*[n]*)|[c]+[h]+(?=[i]*[e]*)|[z]+|[s]+|[x]+(?=[e]+)");
private static readonly Regex RegexUpperEcks = new(@"[E]+[Xx]+[Cc]*|[X]+");
private static readonly Regex RegexLowerEcks = new(@"[e]+[x]+[c]*|[x]+");
// WD start
private static readonly Regex RegexUpperS = new(@"С");
private static readonly Regex RegexLowerS = new(@"с");
private static readonly Regex RegexUpperZ = new(@"З");
private static readonly Regex RegexLowerZ = new(@"з");
// WD end
// @formatter:on
public override void Initialize()
@@ -29,6 +35,13 @@ public sealed class FrontalLispSystem : EntitySystem
message = RegexUpperEcks.Replace(message, "EKTH");
message = RegexLowerEcks.Replace(message, "ekth");
// WD start
message = RegexUpperS.Replace(message, "Ш");
message = RegexLowerS.Replace(message, "ш");
message = RegexUpperZ.Replace(message, "Ж");
message = RegexLowerZ.Replace(message, "ж");
// WD end
args.Message = message;
}
}

View File

@@ -234,6 +234,8 @@ public sealed class IonStormRule : StationEventSystem<IonStormRuleComponent>
if (plural) feeling = feelingPlural;
var subjects = RobustRandom.Prob(0.5f) ? objectsThreats : Loc.GetString("ion-storm-people"); // WD ahead of wizden upstream
// message logic!!!
return RobustRandom.Next(0, 36) switch
{
@@ -265,7 +267,7 @@ public sealed class IonStormRule : StationEventSystem<IonStormRuleComponent>
26 => Loc.GetString("ion-storm-law-crew-must-go", ("who", crewAll), ("area", area)),
27 => Loc.GetString("ion-storm-law-crew-only-1", ("who", crew1), ("part", part)),
28 => Loc.GetString("ion-storm-law-crew-only-2", ("who", crew1), ("other", crew2), ("part", part)),
29 => Loc.GetString("ion-storm-law-crew-only-subjects", ("adjective", adjective), ("subjects", RobustRandom.Prob(0.5f) ? objectsThreats : "PEOPLE"), ("part", part)),
29 => Loc.GetString("ion-storm-law-crew-only-subjects", ("adjective", adjective), ("subjects", subjects), ("part", part)), // WD ahead of wizden upstream
30 => Loc.GetString("ion-storm-law-crew-must-do", ("must", must), ("part", part)),
31 => Loc.GetString("ion-storm-law-crew-must-have", ("adjective", adjective), ("objects", objects), ("part", part)),
32 => Loc.GetString("ion-storm-law-crew-must-eat", ("who", who), ("adjective", adjective), ("food", food), ("part", part)),

View File

@@ -7,7 +7,7 @@ namespace Content.Server.VoiceMask;
public sealed partial class VoiceMaskerComponent : Component
{
[ViewVariables(VVAccess.ReadWrite), DataField]
public string LastSetName = "Unknown";
public string LastSetName = "Неизвестный"; // WD translate
[ViewVariables(VVAccess.ReadWrite)]
public string? LastSetVoice; // tts
@@ -20,4 +20,4 @@ public sealed partial class VoiceMaskerComponent : Component
[DataField]
public EntityUid? ActionEntity;
}
}

View File

@@ -51,6 +51,14 @@ public sealed partial class ItemToggleComponent : Component
/// </summary>
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
public bool ToggleLight = true;
// WD added start
[DataField]
public string ActivatedDescription = "comp-item-toggle-on"; // fallback/standard text
[DataField]
public string DeactivatedDescription = "comp-item-toggle-off"; // fallback/standard text
// WD added end
}
/// <summary>

View File

@@ -1,3 +1,4 @@
using Content.Shared.Examine;
using Content.Shared.Interaction.Events;
using Content.Shared.Item.ItemToggle.Components;
using Content.Shared.Popups;
@@ -23,6 +24,8 @@ public abstract class SharedItemToggleSystem : EntitySystem
[Dependency] private readonly INetManager _netManager = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedItemSystem _item = default!; // WD
public override void Initialize()
{
base.Initialize();
@@ -35,6 +38,9 @@ public abstract class SharedItemToggleSystem : EntitySystem
SubscribeLocalEvent<ItemToggleHotComponent, IsHotEvent>(OnIsHotEvent);
SubscribeLocalEvent<ItemToggleActiveSoundComponent, ItemToggledEvent>(UpdateActiveSound);
SubscribeLocalEvent<ItemToggleComponent, ExaminedEvent>(OnExamined); // WD
SubscribeLocalEvent<ItemToggleComponent, ItemToggledEvent>(UpdatePrefix); // WD
}
private void OnStartup(Entity<ItemToggleComponent> ent, ref ComponentStartup args)
@@ -255,4 +261,21 @@ public abstract class SharedItemToggleSystem : EntitySystem
activeSound.PlayingStream = _audio.Stop(activeSound.PlayingStream);
}
}
// WD added start
private void OnExamined(Entity<ItemToggleComponent> ent, ref ExaminedEvent args)
{
var onMsg = IsActivated(ent.Owner)
? Loc.GetString(ent.Comp.ActivatedDescription)
: Loc.GetString(ent.Comp.DeactivatedDescription);
args.PushMarkup(onMsg);
}
private void UpdatePrefix(Entity<ItemToggleComponent> ent, ref ItemToggledEvent args)
{
_item.SetHeldPrefix(ent.Owner, args.Activated ? "on" : "off");
}
// WD added end
}

View File

@@ -63,6 +63,21 @@ public sealed class RCDAmmoSystem : EntitySystem
var user = args.User;
args.Handled = true;
// WD edit start
TryComp<StackComponent>(uid, out var stackComponent);
if (stackComponent != null)
{
var realValue = (int) (stackComponent.Count * comp.ChargeCountModifier);
comp.Charges = realValue;
if (realValue == 0)
{
_popup.PopupClient(Loc.GetString("rcd-ammo-component-after-interact-not-enough"), target, user);
return;
}
}
// WD edit end
var count = Math.Min(charges.MaxCharges - charges.Charges, comp.Charges);
if (count <= 0)
{
@@ -73,7 +88,7 @@ public sealed class RCDAmmoSystem : EntitySystem
_popup.PopupClient(Loc.GetString("rcd-ammo-component-after-interact-refilled"), target, user);
// WD edit start
if (TryComp<StackComponent>(uid, out var stackComponent))
if (stackComponent != null)
{
var spent = (int) (count / comp.ChargeCountModifier) == 0 ? 1 : (int) (count / comp.ChargeCountModifier);
_stack.SetCount(uid, stackComponent.Count - spent);

View File

@@ -26,25 +26,25 @@ public sealed partial class IonStormTargetComponent : Component
/// Chance to replace the lawset with a random one
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float RandomLawsetChance = 0.40f; // WD was 0.25f
public float RandomLawsetChance = 0.25f;
/// <summary>
/// Chance to remove a random law.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float RemoveChance = 0.15f; // WD was 0.20f
public float RemoveChance = 0.20f;
/// <summary>
/// Chance to replace a random law with the new one, rather than have it be a glitched-order law.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float ReplaceChance = 0.15f; // WD was 0.20f
public float ReplaceChance = 0.20f;
/// <summary>
/// Chance to shuffle laws after everything is done.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float ShuffleChance = 0.15f; // WD was 0.20f
public float ShuffleChance = 0.20f;
}
/// <summary>

View File

@@ -123,6 +123,30 @@ namespace Content.Shared.StatusEffect
return false;
}
// WD added start
// May god forgive us
public bool TryAddStatusEffect<T>(EntityUid uid, string key, TimeSpan time, bool refresh, Component component,
StatusEffectsComponent? status = null)
where T : IComponent, new()
{
if (!Resolve(uid, ref status, false))
return false;
if (TryAddStatusEffect(uid, key, time, refresh, status))
{
// If they already have the comp, we just won't bother updating anything.
if (!EntityManager.HasComponent<T>(uid))
{
EntityManager.AddComponent(uid, component);
status.ActiveEffects[key].RelevantComponent = _componentFactory.GetComponentName(component.GetType());
}
return true;
}
return false;
}
// WD added end
public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool refresh, string component,
StatusEffectsComponent? status = null)
{

View File

@@ -1,18 +1,24 @@
using Content.Shared.Standing.Systems;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
namespace Content.Shared.Stunnable;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedStunSystem))]
public sealed partial class KnockedDownComponent : Component
{
[DataField("helpInterval"), AutoNetworkedField]
[DataField, AutoNetworkedField]
public float HelpInterval = 1f;
[DataField("helpAttemptSound")]
[DataField]
public SoundSpecifier StunAttemptSound = new SoundPathSpecifier("/Audio/Effects/thudswoosh.ogg");
[ViewVariables, AutoNetworkedField]
public float HelpTimer = 0f;
// WD added start
// Holy shit why is this so long
[DataField, AutoNetworkedField]
public SharedStandingStateSystem.DropHeldItemsBehavior KnockDownBehavior = SharedStandingStateSystem.DropHeldItemsBehavior.DropIfStanding;
// WD added end
}

View File

@@ -106,25 +106,25 @@ public abstract class SharedStunSystem : EntitySystem
private void OnKnockInit(EntityUid uid, KnockedDownComponent component, ComponentInit args)
{
RaiseNetworkEvent(new CheckAutoGetUpEvent()); // WD EDIT
_standingState.TryLieDown(uid, null, SharedStandingStateSystem.DropHeldItemsBehavior.DropIfStanding);
RaiseNetworkEvent(new CheckAutoGetUpEvent()); // WD edit
_standingState.TryLieDown(uid, null, component.KnockDownBehavior); // WD edit
}
private void OnKnockShutdown(EntityUid uid, KnockedDownComponent component, ComponentShutdown args)
{
// WD EDIT START
// WD edit start
// Don't stand up if we can lie down via keybind
if (!TryComp(uid, out StandingStateComponent? standing) || !(!standing.CanLieDown || standing.AutoGetUp)) // WD EDIT
if (!TryComp(uid, out StandingStateComponent? standing) || !(!standing.CanLieDown || standing.AutoGetUp)) // WD edit
return;
if (standing.AutoGetUp && !_container.IsEntityInContainer(uid)) // WD EDIT
if (standing.AutoGetUp && !_container.IsEntityInContainer(uid)) // WD edit
{
_standingState.TryStandUp(uid, standing);
return;
}
_standingState.Stand(uid, standing);
// WD EDIT END
// WD edit end
}
private void OnStandAttempt(EntityUid uid, KnockedDownComponent component, StandAttemptEvent args)
@@ -178,7 +178,7 @@ public abstract class SharedStunSystem : EntitySystem
/// Knocks down the entity, making it fall to the ground.
/// </summary>
public bool TryKnockdown(EntityUid uid, TimeSpan time, bool refresh,
StatusEffectsComponent? status = null)
StatusEffectsComponent? status = null, SharedStandingStateSystem.DropHeldItemsBehavior? behavior = null)
{
if (time <= TimeSpan.Zero)
return false;
@@ -186,8 +186,24 @@ public abstract class SharedStunSystem : EntitySystem
if (!Resolve(uid, ref status, false))
return false;
if (!_statusEffect.TryAddStatusEffect<KnockedDownComponent>(uid, "KnockedDown", time, refresh))
return false;
// WD added start
// May god forgive us
if (behavior.HasValue && !HasComp<KnockedDownComponent>(uid))
{
var knockedDownComponent = new KnockedDownComponent
{
KnockDownBehavior = behavior.Value
};
if (!_statusEffect.TryAddStatusEffect<KnockedDownComponent>(uid, "KnockedDown", time, refresh, knockedDownComponent))
return false;
}
else
{
if (!_statusEffect.TryAddStatusEffect<KnockedDownComponent>(uid, "KnockedDown", time, refresh))
return false;
}
// WD added end
var ev = new KnockedDownEvent();
RaiseLocalEvent(uid, ref ev);

View File

@@ -48,7 +48,7 @@ public sealed partial class MeleeThrowOnHitComponent : Component
[AutoNetworkedField]
public bool Enabled = true;
// WD START
// WD added
[DataField, ViewVariables(VVAccess.ReadWrite)]
[AutoNetworkedField]
public float StunTime;
@@ -56,7 +56,15 @@ public sealed partial class MeleeThrowOnHitComponent : Component
[DataField, ViewVariables(VVAccess.ReadWrite)]
[AutoNetworkedField]
public bool ThrowOnThrowHit;
// WD END
[DataField, ViewVariables(VVAccess.ReadWrite)]
[AutoNetworkedField]
public bool FallAfterHit;
[DataField, ViewVariables(VVAccess.ReadWrite)]
[AutoNetworkedField]
public bool RequireWield = true;
// WD added
}
/// <summary>

View File

@@ -1,9 +1,11 @@
using System.Numerics;
using Content.Shared.Construction.Components;
using Content.Shared.Standing.Systems;
using Content.Shared.Stunnable;
using Content.Shared.Throwing;
using Content.Shared.Weapons.Melee.Components;
using Content.Shared.Weapons.Melee.Events;
using Content.Shared.Wieldable.Components;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Events;
@@ -20,8 +22,9 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly SharedStunSystem _stun = default!; // WD
[Dependency] private readonly ThrownItemSystem _thrownItem = default!; // WD
[Dependency] private readonly SharedStunSystem _stun = default!; // WD added
[Dependency] private readonly ThrownItemSystem _thrownItem = default!; // WD added
[Dependency] private readonly SharedStandingStateSystem _standingState = default!; // WD added
/// <inheritdoc/>
public override void Initialize()
@@ -36,8 +39,10 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
private void OnDoHit(Entity<MeleeThrowOnHitComponent> ent, ref ThrowDoHitEvent args) // WD
{
// WD edit start
if (!ent.Comp.ThrowOnThrowHit)
return;
// WD edit end
if (!CanThrowOnHit(ent, args.Target))
return;
@@ -55,9 +60,15 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
MinLifetime = ent.Comp.MinLifetime
};
AddComp(args.Target, thrownComp);
// WD added start
if (ent.Comp.StunTime != 0f)
_stun.TryParalyze(args.Target, TimeSpan.FromSeconds(ent.Comp.StunTime), true);
else if (ent.Comp.FallAfterHit)
_standingState.TryLieDown(ent, null, SharedStandingStateSystem.DropHeldItemsBehavior.DropIfStanding);
// WD added end
_thrownItem.LandComponent(ent, args.Component, physics, false);
_physics.SetLinearVelocity(ent, Vector2.Zero);
}
@@ -67,14 +78,24 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
if (args.Handled) // WD
return;
var (_, comp) = ent;
if (!args.IsHit)
return;
// WD START
var stunTime = comp.StunTime;
var speed = comp.Speed;
var lifetime = comp.Lifetime;
// WD added start
if (ent.Comp.RequireWield)
{
if (!TryComp<WieldableComponent>(args.Weapon, out var weapon))
return;
if (!weapon.Wielded)
return;
}
// WD added end
// WD edit start
var stunTime = ent.Comp.StunTime;
var speed = ent.Comp.Speed;
var lifetime = ent.Comp.Lifetime;
if (args.Direction != null) // Heavy attack
{
@@ -82,7 +103,7 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
speed *= 0.5f;
lifetime *= 0.5f;
}
// WD END
// WD edit end
var mapPos = _transform.GetMapCoordinates(args.User).Position;
foreach (var hit in args.HitEntities)
@@ -95,7 +116,7 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
if (!CanThrowOnHit(ent, hit))
continue;
if (comp.UnanchorOnHit && HasComp<AnchorableComponent>(hit))
if (ent.Comp.UnanchorOnHit && HasComp<AnchorableComponent>(hit))
{
_transform.Unanchor(hit, Transform(hit));
}
@@ -105,13 +126,19 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
RaiseLocalEvent(hit, ref ev);
var thrownComp = new MeleeThrownComponent
{
Velocity = angle.Normalized() * speed, // WD EDIT
Lifetime = lifetime, // WD EDIT
MinLifetime = comp.MinLifetime
Velocity = angle.Normalized() * speed, // WD edit
Lifetime = lifetime, // WD edit
MinLifetime = ent.Comp.MinLifetime
};
AddComp(hit, thrownComp);
// WD added end
if (stunTime != 0f)
_stun.TryParalyze(hit, TimeSpan.FromSeconds(stunTime), true);
else if (ent.Comp.FallAfterHit)
_standingState.TryLieDown(hit);
// WD added start
}
}
@@ -126,9 +153,11 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem
comp.PreviousStatus = body.BodyStatus;
comp.ThrownEndTime = _timing.CurTime + TimeSpan.FromSeconds(comp.Lifetime);
comp.MinLifetimeTime = _timing.CurTime + TimeSpan.FromSeconds(comp.MinLifetime);
_physics.SetBodyStatus(ent, body, BodyStatus.InAir);
_physics.SetLinearVelocity(ent, Vector2.Zero, body: body);
_physics.ApplyLinearImpulse(ent, comp.Velocity * body.Mass, body: body);
Dirty(ent, ent.Comp);
}

View File

@@ -0,0 +1,17 @@
using Content.Shared.Standing.Systems;
using Robust.Shared.GameStates;
namespace Content.Shared._White.Item.KnockDownOnHit;
[RegisterComponent, NetworkedComponent]
public sealed partial class KnockDownOnHitComponent : Component
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan KnockdownTime = TimeSpan.FromSeconds(1.5f);
[DataField]
public SharedStandingStateSystem.DropHeldItemsBehavior? KnockDownBehavior;
[DataField]
public bool RequireWield;
}

View File

@@ -0,0 +1,49 @@
using Content.Shared.Damage.Events;
using Content.Shared.Item.ItemToggle;
using Content.Shared.Stunnable;
using Content.Shared.Weapons.Melee.Events;
using Content.Shared.Wieldable.Components;
namespace Content.Shared._White.Item.KnockDownOnHit;
public sealed class KnockDownOnHitSystem : EntitySystem
{
[Dependency] private readonly SharedStunSystem _stun = default!;
[Dependency] private readonly SharedItemToggleSystem _itemToggle = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<KnockDownOnHitComponent, StaminaDamageOnHitAttemptEvent>(OnStaminaHitAttempt);
SubscribeLocalEvent<KnockDownOnHitComponent, MeleeHitEvent>(OnHit);
}
private void OnHit(Entity<KnockDownOnHitComponent> ent, ref MeleeHitEvent args)
{
var time = ent.Comp.KnockdownTime;
if (time <= TimeSpan.Zero)
return;
foreach (var uid in args.HitEntities)
{
if (ent.Comp.RequireWield)
{
if (!TryComp<WieldableComponent>(args.Weapon, out var weapon))
continue;
if (!weapon.Wielded)
continue;
}
_stun.TryKnockdown(uid, time, true, behavior: ent.Comp.KnockDownBehavior);
}
}
private void OnStaminaHitAttempt(Entity<KnockDownOnHitComponent> entity, ref StaminaDamageOnHitAttemptEvent args)
{
if (!_itemToggle.IsActivated(entity.Owner))
args.Cancelled = true;
}
}

View File

@@ -1,8 +0,0 @@
namespace Content.Shared._White.Item.TelescopicBaton;
[RegisterComponent]
public sealed partial class TelescopicBatonComponent : Component
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan KnockdownTime = TimeSpan.FromSeconds(1.5f);
}

View File

@@ -1,56 +0,0 @@
using Content.Shared.Damage.Events;
using Content.Shared.Examine;
using Content.Shared.Item;
using Content.Shared.Item.ItemToggle;
using Content.Shared.Item.ItemToggle.Components;
using Content.Shared.Stunnable;
namespace Content.Shared._White.Item.TelescopicBaton;
public sealed class TelescopicBatonSystem : EntitySystem
{
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedStunSystem _stun = default!;
[Dependency] private readonly SharedItemToggleSystem _itemToggle = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TelescopicBatonComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<TelescopicBatonComponent, StaminaDamageOnHitAttemptEvent>(OnStaminaHitAttempt);
SubscribeLocalEvent<TelescopicBatonComponent, ItemToggledEvent>(ToggleDone);
SubscribeLocalEvent<TelescopicBatonComponent, StaminaMeleeHitEvent>(OnHit);
}
private void OnHit(Entity<TelescopicBatonComponent> ent, ref StaminaMeleeHitEvent args)
{
var time = ent.Comp.KnockdownTime;
if (time <= TimeSpan.Zero)
return;
foreach (var (uid, _) in args.HitList)
{
_stun.TryKnockdown(uid, time, true);
}
}
private void OnStaminaHitAttempt(Entity<TelescopicBatonComponent> entity, ref StaminaDamageOnHitAttemptEvent args)
{
if (!_itemToggle.IsActivated(entity.Owner))
args.Cancelled = true;
}
private void OnExamined(Entity<TelescopicBatonComponent> entity, ref ExaminedEvent args)
{
var onMsg = _itemToggle.IsActivated(entity.Owner)
? Loc.GetString("comp-telebaton-examined-on")
: Loc.GetString("comp-telebaton-examined-off");
args.PushMarkup(onMsg);
}
private void ToggleDone(Entity<TelescopicBatonComponent> entity, ref ItemToggledEvent args)
{
_item.SetHeldPrefix(entity.Owner, args.Activated ? "on" : "off");
}
}

View File

@@ -1,93 +1,4 @@
Entries:
- author: HitPanda
changes:
- message: "\u041D\u043E\u0432\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u0441\
\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u043F\
\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0438\u0432\u0435\u043D\
\u0442\u043E\u0432"
type: Add
id: 40
time: '2023-01-21T21:40:22.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u0423\u0434\u0430\u043B\u0435\u043D\u043E \u0432\u0441\u044F\u043A\u043E\
\u0435!"
type: Add
id: 41
time: '2023-01-22T11:26:16.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u041A\u043E\u043D\u0441\u043E\u043B\u044C \u0445\u043E\u043F\u0430\
\ \u0442\u0435\u043F\u0435\u0440\u044C \u043D\u043E\u0440\u043C\u0430\u043B\u044C\
\u043D\u043E \u043E\u0442\u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\
\u043D\u0430!"
type: Add
id: 42
time: '2023-01-22T11:28:17.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0440\u0435\u0437\
\u043D\u044F \u0432 \u043A\u043E\u043D\u0446\u0435 \u0440\u0430\u0443\u043D\u0434\
\u0430!"
type: Add
id: 43
time: '2023-01-22T12:11:03.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0431\u043B\u043E\
\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u043F\u0440\u043E\u0444\u0435\u0441\
\u0441\u0438\u0439 \u0434\u043B\u044F \u043E\u043F\u0440\u0435\u0434\u0435\u043B\
\u0435\u043D\u043D\u044B\u0445 \u0432\u0438\u0434\u043E\u0432. \u0415\u0441\u043B\
\u0438 \u0432\u0430\u0448\u0435\u0433\u043E \u0432\u0438\u0434\u0430 \u043D\u0435\
\u0442 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0430\u0437\u0440\u0435\
\u0448\u0435\u043D\u043D\u044B\u0445 \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\
\u043D\u043E\u0439 \u0432\u0430\u043C\u0438 \u043F\u0440\u043E\u0444\u0435\u0441\
\u0441\u0438\u0438, \u0442\u043E \u0432\u0430\u0448\u0430 \u0432\u043D\u0435\
\u0448\u043D\u043E\u0441\u0442\u044C \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\
\u043C\u0435\u043D\u0435\u043D\u0430 \u043D\u0430 \u0440\u0430\u043D\u0434\u043E\
\u043C\u043D\u0443\u044E \u0432\u043D\u0435\u0448\u043D\u043E\u0441\u0442\u044C\
\ \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430 \u043F\u043E\u0434\u0445\
\u043E\u0434\u044F\u0449\u0438\u0445 \u0432\u0438\u0434\u043E\u0432, \u043B\u0438\
\u0431\u043E \u0436\u0435 \u043D\u0430 \u043E\u0434\u043D\u043E\u0433\u043E\
\ \u0438\u0437 \u0432\u0430\u0448\u0438\u0445 \u043F\u0435\u0440\u0441\u043E\
\u043D\u0430\u0436\u0435\u0439, \u0435\u0441\u043B\u0438 \u0435\u0433\u043E\
\ \u0432\u0438\u0434 \u043F\u043E\u0434\u0445\u043E\u0434\u0438\u0442!"
type: Add
id: 44
time: '2023-01-23T11:45:06.0000000+00:00'
- author: BronyUraj
changes:
- message: "\u0421\u043A\u0440\u0443\u0431\u0431\u0435\u0440 \u0440\u0430\u0431\u043E\
\u0442\u0430\u0435\u0442 \u0431\u044B\u0441\u0442\u0440\u0435\u0435"
type: Add
id: 45
time: '2023-01-23T18:17:29.0000000+00:00'
- author: BronyUraj
changes:
- message: "\u041C\u0435\u0434\u0432\u0435\u0434\u0438 \u0442\u0435\u043F\u0435\u0440\
\u044C \u043F\u0440\u043E\u0445\u043E\u0434\u044F\u0442 \u0432 \u0434\u0432\u0435\
\u0440\u0438."
type: Add
- message: "\u0413\u043E\u0440\u0438\u043B\u043B\u044B \u0441\u0442\u0430\u043B\u0438\
\ \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043D\u044B\u043C\u0438."
type: Add
- message: "\u0420\u0435\u0430\u0433\u0435\u043D\u0442 \u043F\u0447\u0435\u043B\
\ \u0441\u0442\u0430\u043B \u0441\u043F\u0430\u0432\u043D\u0438\u0442\u044C\
\ \u0437\u043B\u044B\u0445 \u043F\u0447\u0435\u043B."
type: Add
- message: "\u041F\u0447\u0435\u043B\u044B \u0438\u0437\u0434\u0430\u044E\u0442\
\ \u0437\u0432\u0443\u043A (\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\
\u0435 \u0440\u0435\u0448\u0435\u043D\u0438\u0435)"
type: Add
id: 46
time: '2023-01-24T07:41:12.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u0432\u0441\
\u044F\u043A\u043E\u0435!"
type: Add
id: 47
time: '2023-01-24T09:28:49.0000000+00:00'
- author: RavMorgan
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u043E\u0432\
@@ -8711,3 +8622,102 @@
id: 539
time: '2024-09-07T15:41:55.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/688
- author: Valtos
changes:
- message: "\u0424\u0438\u043A\u0441 \u043A\u0440\u0430\u0448\u0435\u0439 \u043F\
\u0440\u0438 \u0437\u0430\u0445\u043E\u0434\u0435."
type: Fix
id: 540
time: '2024-09-08T04:00:32.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/689
- author: BIG_Zi_348
changes:
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044B \u043C\u0435\
\u043B\u043E\u0447\u0438"
type: Fix
id: 541
time: '2024-09-10T17:20:56.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/690
- author: Jabak
changes:
- message: "\u042F\u0434\u0435\u0440\u043A\u0430 \u0434\u0435\u043B\u0430\u0435\u0442\
\ \u0411\u0423\u041C!!! \u0420\u0430\u0443\u043D\u0434 \u0437\u0430\u043A\u0430\
\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F."
type: Fix
id: 542
time: '2024-09-12T18:30:03.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/692
- author: BIG_Zi
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043F\u0435\u0440\u0435\
\u0432\u043E\u0434 \u0430\u043A\u0446\u0435\u043D\u0442\u0430 \u0448\u0435\u043F\
\u0435\u043B\u044F\u0432\u043E\u0441\u0442\u0438."
type: Add
id: 543
time: '2024-09-12T18:29:30.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/691
- author: ThereDrD0
changes:
- message: "\u041C\u0438\u043B\u0438 \u043E\u0440\u0443\u0436\u0438\u0435 \u043F\
\u0435\u0440\u0435\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u043E. \u0422\u0435\
\u043F\u0435\u0440\u044C \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043F\
\u043E-\u0434\u0440\u0443\u0433\u043E\u043C\u0443."
type: Add
id: 544
time: '2024-09-12T18:52:04.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/681
- author: BIG_Zi
changes:
- message: "\u0423\u0431\u0440\u0430\u043D\u044B \u043F\u0430\u0441\u0441\u0430\u0436\
\u0438\u0440\u044B."
type: Remove
id: 545
time: '2024-09-14T07:16:24.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/695
- author: BIG_Zi_348
changes:
- message: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u044B \u043C\u0435\u043B\u043E\
\u0447\u0435\u0439."
type: Add
id: 546
time: '2024-09-15T12:23:31.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/697
- author: BIG_Zi_348
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043F\u0435\u0440\u0435\
\u0432\u043E\u0434 \u0441\u0443\u043F\u0435\u0440\u043C\u0430\u0442\u0435\u0440\
\u0438\u0438 \u0438 \u0432\u0441\u0435\u0445 \u0435\u0451 \u0441\u0438\u0441\
\u0442\u0435\u043C."
type: Add
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043F\u0435\u0440\u0435\
\u0432\u043E\u0434 \u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u0430\
\ \u0445\u0430\u043C\u0435\u043B\u0435\u043E\u043D\u0430 \u0438 \u0432\u0441\
\u0435\u0445 \u0435\u0433\u043E \u0441\u0438\u0441\u0442\u0435\u043C."
type: Add
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0448\
\u0438\u0431\u043A\u0430 \u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\
\u0438\u0438 \u0437\u0430\u043A\u043E\u043D\u0430 \u0431\u043E\u0440\u0433\u043E\
\u0432 \u043E\u0442 \u0438\u043E\u043D\u043D\u043E\u0433\u043E \u0448\u0442\u043E\
\u0440\u043C\u0430."
type: Fix
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u043F\
\u0438\u0441\u0430\u043D\u0438\u0435 \u0438\u043C\u043F\u043B\u0430\u043D\u0442\
\u0435\u0440\u043E\u0432 \u0432 \u0440\u0443\u043A\u0435."
type: Fix
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044B \u043E\u043F\
\u0435\u0447\u0430\u0442\u043A\u0438 \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\
\u0440\u044B\u0445 \u043C\u0435\u0441\u0442\u0430\u0445."
type: Fix
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u0431\u0430\u0433\
\ \u0441 \u0431\u043B\u0438\u043D\u0447\u0438\u043A\u0430\u043C\u0438."
type: Fix
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u043B\u043E\
\u0433\u0438\u043A\u0430 \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\
\u044F \u0437\u0430\u0440\u044F\u0434\u043E\u0432 \u0420\u0426\u0414."
type: Fix
- message: "\u041F\u043E\u0434\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044B \u043C\
\u0435\u043B\u043E\u0447\u0438."
type: Tweak
id: 547
time: '2024-09-17T18:00:13.0000000+00:00'
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/700

View File

@@ -2,3 +2,9 @@ chameleon-projector-inside-container = There's no room to scan that!
chameleon-projector-invalid = You can't disguise as that!
chameleon-projector-success = Projected new disguise.
chameleon-projector-set-disguise = Set Disguise
# Actions
ent-ActionDisguiseNoRot = Toggle Rotation
.desc = Use this to prevent your disguise from rotating, making it easier to hide in some scenarios.
ent-ActionDisguiseAnchor = Toggle Anchored
.desc = For many objects you will want to be anchored to not be completely obvious.

View File

@@ -1,3 +1,4 @@
rcd-ammo-component-on-examine = It holds {$charges} charges.
rcd-ammo-component-after-interact-full = The RCD is full!
rcd-ammo-component-after-interact-refilled = You refill the RCD.
rcd-ammo-component-after-interact-not-enough = Not enough material for charge.

View File

@@ -27,8 +27,8 @@ ent-SpawnMobSyndicateFootSoldier = генератор пехотинца син
.desc = "генератор пехотинца синдиката"
ent-SpawnMobSyndicateFootsoldierPilot = генератор пилота челнока синдиката
.desc = "генератор пилота челнока синдиката"
ent-SpawnPointPassenger = пассажир
.desc = "пассажир"
ent-SpawnPointPassenger = ассистент
.desc = "ассистент"
ent-SpawnPointInspector = инспектор
.desc = "инспектор"
ent-SpawnPointBomzh = бомж

View File

@@ -20,8 +20,8 @@ ent-ERTMedicIDCard = удостоверение личности медика ER
.desc = "удостоверение личности медика ERT"
ent-ERTSecurityIDCard = удостоверение личности службы безопасности ERT
.desc = "удостоверение личности службы безопасности ERT"
ent-NukieAgentIDCard = пропуск пассажира
.desc = "пропуск пассажира"
ent-NukieAgentIDCard = ID карта ассистента
.desc = "Карта, необходимая для доступа в различные области станции."
.suffix = Нюки
ent-PirateIDCard = пиратское удостоверение личности
.desc = "пиратское удостоверение личности"
@@ -39,4 +39,4 @@ ent-LandMineAspectExplosive = мина аспекта
ent-KoboldCubeBox = коробка с кубиками кобольдов
.desc = Сжатые кобольды в кубе. Просто добавьте воды!
ent-VariantCubeBox = коробка с вариативными кубиками
.desc = И кобольды, и обезьяны в кубиках. Просто добавьте воды!
.desc = И кобольды, и обезьяны в кубиках. Просто добавьте воды!

View File

@@ -3,3 +3,6 @@ ent-TelescopicBaton = телескопическая дубинка
comp-telebaton-examined-on = Дубинка в боевом положении.
comp-telebaton-examined-off = Дубинка сложена.
comp-item-toggle-on = Активировано
comp-item-toggle-off = Деактивировано

View File

@@ -0,0 +1 @@
bodyburn-text-others = {$name} сгорел до тла!

View File

@@ -0,0 +1,10 @@
chameleon-projector-inside-container = Здесь нет места для сканирования!
chameleon-projector-invalid = Неверный объект для маскировки!
chameleon-projector-success = Маскировка выполнена успешно.
chameleon-projector-set-disguise = Выбрать для маскировки
# Actions
ent-ActionDisguiseNoRot = Переключить вращение
.desc = Используйте это, чтобы предотвратить вращение вашей маскировки, что упрощает маскировку в некоторых ситуациях.
ent-ActionDisguiseAnchor = Переключить закрепление
.desc = Для многих объектов вам надо быть закреплённым, чтобы быть менее заметным.

View File

@@ -12,7 +12,8 @@ implanter-inject-text = Установка
implanter-empty-text = Пусто
implanter-label = [color=white]Имплант: { $implantName }{ $lineBreak }Режим: { $modeString }[/color]
implanter-label = [color=white]{$implantName}
Режим: {$modeString}[/color]
implanter-contained-implant-text = [color=green]{ $desc }[/color]

View File

@@ -2,7 +2,7 @@ ent-ToyFigurineBoxer = фигурка боксёра
.desc = Статуэтка, изображающая боксера в красных перчатках.
ent-ToyFigurineCaptain = фигурка капитана
.desc = Статуэтка, изображающая стандартную экипировку капитана, принадлежащего гражданскому судну Nanotrasen.
ent-ToyFigurineHeadOfSecurity = фигурка главый службы безопасности
ent-ToyFigurineHeadOfSecurity = фигурка главы службы безопасности
.desc = Статуэтка, изображающая славного начальника отдела безопасности.
ent-ToyFigurineWarden = фигурка надзирателя
.desc = Статуэтка, изображающая надзирателя, готового в любой момент посадить кого-нибудь в тюрьму.

View File

@@ -25,9 +25,9 @@ ent-ParticleAcceleratorUnfinishedBase = ""
.desc = ""
ent-ParticleAcceleratorEmitterPort = правый эмиттер УЧ
.desc = Это запускает альфа-частицы, возможно, они не захотят стоять рядом с этим концом.
ent-ParticleAcceleratorEmitterFore = центральный эммитер УЧ
ent-ParticleAcceleratorEmitterFore = центральный эмиттер УЧ
.desc = Это запускает альфа-частицы, возможно, они не захотят стоять рядом с этим концом.
ent-ParticleAcceleratorEmitterStarboard = левый эммитер УЧ
ent-ParticleAcceleratorEmitterStarboard = левый эмиттер УЧ
.desc = Это запускает альфа-частицы, возможно, они не захотят стоять рядом с этим концом.
ent-ParticleAcceleratorEmitterPortUnfinished = { ent-ParticleAcceleratorEmitterPort }
.desc = Это запускает альфа-частицы, возможно, они не захотят стоять рядом с этим концом. Он выглядит незаконченным.

View File

@@ -23,7 +23,7 @@ ent-ClothingUniformJumpsuitSeniorSalvageSpecialist = комбинезон охо
ent-ClothingUniformJumpsuitRecruitNT = комбинезон новобранца
.desc = Стильный серый комбинезон с синей отделкой. Идеально подходит для достойного помощника.
ent-ClothingUniformJumpsuitRecruitSyndie = комбинезон новобранца синдиката
.desc = Сомнительный темно-серый комбинезон. Как будто пассажиры и без того недостаточно сомневались.
.desc = Сомнительный темно-серый комбинезон. Как будто ассистенты и без того недостаточно сомневались.
ent-ClothingUniformJumpsuitRepairmanNT = комбинезон ремонтника
.desc = Комбинезон, который напоминает вам об определенной рабочей должности в секторе экипажа. Надеюсь, тебе не придется выполнять ту же работу, что и ЭТИМ уродам.
ent-ClothingUniformJumpsuitRepairmanSyndie = комбинезон ремонтника синдиката

View File

@@ -6,11 +6,11 @@ comp-mind-ghosting-prevented = Вы не можете стать призрак
comp-mind-examined-catatonic = { CAPITALIZE(SUBJECT($ent)) } в кататоническом ступоре. Стрессы жизни в глубоком космосе, должно быть, оказались слишком тяжелы для { OBJECT($ent) }. Восстановление маловероятно.
comp-mind-examined-dead = { CAPITALIZE(POSS-PRONOUN($ent)) } душа покинула тело.
comp-mind-examined-ssd = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро придти в себя.
comp-mind-examined-ssd = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро прийти в себя.
comp-mind-examined-dead-and-ssd = { CAPITALIZE(POSS-ADJ($ent)) } душа дремлет и может скоро вернуться.
comp-mind-examined-dead-and-irrecoverable = { CAPITALIZE(POSS-ADJ($ent)) } душа покинула тело и пропала. Восстановление маловероятно.
mind-component-no-mind-and-alive-text = { CAPITALIZE(SUBJECT($ent)) } в кататоническом ступоре. Стрессы жизни в глубоком космосе, должно быть, оказались слишком тяжелы для него. Восстановление маловероятно.
mind-component-no-mind-and-dead-text = { CAPITALIZE(POSS-PRONOUN($ent)) } душа покинула тело и пропала. Восстановление маловероятно.
mind-component-mind-and-no-session-text = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро придти в себя.
mind-component-mind-and-no-session-text = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро прийти в себя.

View File

@@ -1,6 +1,7 @@
rcd-ammo-component-on-examine = Оно содержит { $charges } зарядов.
rcd-ammo-component-after-interact-full = РЦд полностью заряжена!
rcd-ammo-component-after-interact-full = РЦД полностью заряжен!
rcd-ammo-component-after-interact-refilled = Вы перезаряжаете РЦД.
rcd-ammo-component-on-examine-text = Содержит { $ammo } зарядов.
rcd-ammo-component-after-interact-full-text = РЦД полностью заряжен!
rcd-ammo-component-after-interact-refilled-text = Вы перезаряжаете РЦД.
rcd-ammo-component-after-interact-not-enough = Недостаточно материала для заряда.

View File

@@ -43,7 +43,7 @@ ent-ClothingHeadsetSecurity = охранная гарнитура
ent-ClothingHeadsetService = сервисная гарнитура
.desc = Гарнитура, используемая обслуживающим персоналом, задачей которого является поддержание станции в полноценном, счастливом и чистом состоянии.
.suffix = { "" }
ent-ClothingHeadsetGrey = гарнитура пассажира
ent-ClothingHeadsetGrey = гарнитура ассистента
.desc = Модифицированный модульный интерком, надеваемый на голову. Принимает ключи шифрования.
.suffix = { "" }
ent-ClothingHeadsetFreelance = гарнитура наемника

View File

@@ -1,3 +1,3 @@
ent-ClothingHeadsetChameleon = гарнитура пассажира
ent-ClothingHeadsetChameleon = гарнитура ассистента
.desc = Модифицированный модульный интерком, надеваемый на голову. Принимает ключи шифрования.
.suffix = Хамелеон

View File

@@ -2,5 +2,5 @@ ent-Holoprojector = проектор голографических знаков
.desc = Удобный голографический проектор, отображающий табличку уборщика.
.suffix = { "" }
ent-HolofanProjector = атмос голопроектор
.desc = Останавливает суицидально настроеных пассажиров от убийства остальных во время разгерметизации.
.desc = Останавливает суицидально настроеных ассистентов от убийства остальных во время разгерметизации.
.suffix = { "" }

View File

@@ -2,7 +2,7 @@ ent-BaseVendingMachineRestock = набор пополнения Торгомат
.desc = Набор для пополнения торговых автоматов фирменными товарами.
.suffix = { "" }
ent-VendingMachineRestockBooze = набор пополнения АлкоМат
.desc = Поместите в АлкоМат чтобы начать вечеринку! Не для продажи пассажирам, не достигшим совершеннолетия.
.desc = Поместите в АлкоМат чтобы начать вечеринку! Не для продажи ассистентам, не достигшим совершеннолетия.
.suffix = { "" }
ent-VendingMachineRestockChang = набор пополнения Мистер Чанг
.desc = Коробка, покрытая белыми наклейками с крупными красными китайскими иероглифами, готовая к загрузке в ближайший торгомат Мистер Чанг.

View File

@@ -9,6 +9,7 @@ ion-storm-the-job = { CAPITALIZE($job) }
ion-storm-clowns = КЛОУНЫ
ion-storm-heads = ГЛАВЫ
ion-storm-crew = ЭКИПАЖ
ion-storm-people = ЛЮДИ
ion-storm-adjective-things = {$adjective} ОБЪЕКТЫ
ion-storm-x-and-y = {$x} И {$y}

View File

@@ -349,7 +349,7 @@ uplink-cigarettes-name = Пачка сигарет Синдиката
uplink-cigarettes-desc = Элитные сигареты для элитных агентов. Насыщенные лекарствами, когда вам нужно больше, чем просто успокоить нервы.
uplink-clothing-conducting-gloves-name = Токопроводящие перчатки
uplink-clothing-conducting-gloves-desc = Выглядят как изолированные перчатки, но удар током нанесёт вам гораздо больше повреждений, чем если бы у вас вообще ничего не было на руках! Лучше всего подойдут в качестве подарка пассажирам, которых вы искренне недолюбливаете.
uplink-clothing-conducting-gloves-desc = Выглядят как изолированные перчатки, но удар током нанесёт вам гораздо больше повреждений, чем если бы у вас вообще ничего не было на руках! Лучше всего подойдут в качестве подарка ассистентам, которых вы искренне недолюбливаете.
uplink-snack-box-name = Коробка закусок Синдиката
uplink-snack-box-desc = Коробка с вкусными закусками и напитками, которые можно съесть в одиночку или разделить с командой. Включает одну нежеланную игрушку.

View File

@@ -88,13 +88,13 @@ character-information-ui-flavor-text-disabled = На этом сервере о
# sm
supermatter-self = Supermatter
supermatter-danger-message = Danger! Crystal hyperstructure integrity faltering! Integrity: { $integrity }%
supermatter-warning-message = WARNING! Crystal hyperstructure integrity reaching critical levels! Integrity: { $integrity }%
supermatter-safe-alert = Crystalline hyperstructure returning to safe operating parameters. Failsafe has been Disengaged. Integrity: { $integrity }%
supermatter-delamination-overmass = The Supermatter has Reached Critical Mass Falure. Singularity formation Imminent
supermatter-delamination-default = The Supermatter has Reached Critical Integrity Falure. Emergency Causality Destabilization Field has been Activated.
supermatter-seconds-before-delam = { $Seconds } Seconds Remain Before Delamination.
supermatter-self = Суперматерия
supermatter-danger-message = Опасность! Нарушение целостности кристаллической гиперструктуры! Целостность: { $integrity }%
supermatter-warning-message = ВНИМАНИЕ! Целостность кристаллической гиперструктуры достигает критических уровней! Целостность: { $integrity }%
supermatter-safe-alert = Кристаллическая гиперструктура возвращается к безопасным рабочим параметрам. Предохранитель отключён. Целостность: { $integrity }%
supermatter-delamination-overmass = Суперматерия достигла уровня критической массы. Обнаружена угроза формирования сингулярности.
supermatter-delamination-default = Суперматерия достигла уровня критической целостности. Активироанно экстренное поле дестабилизации причинности.
supermatter-seconds-before-delam = { $Seconds } секунд осталось до деламинации.
# MobStateShit

View File

@@ -256120,8 +256120,8 @@ entities:
- uid: 38080
components:
- type: MetaData
desc: Переключает работу эмитеров.
name: переключатель эммитеров
desc: Переключает работу эмиттеров.
name: переключатель эмиттеров
- type: Transform
rot: 3.141592653589793 rad
pos: -157.5,71.5

View File

@@ -241,10 +241,10 @@
# in relation to how they cause bleed rate.
- type: damageModifierSet
id: BloodlossHuman
coefficients:
Blunt: 0.05
Slash: 0.25
Piercing: 0.2
coefficients: # WD edit alert!! Weapons rebalanced - only slash and piercing damage should cast bleeding
Blunt: 0.0
Slash: 0.45 # WD
Piercing: 0.3 # WD
Shock: 0.0
Cold: 0.0
Heat: -0.5 # heat damage cauterizes wounds, but will still hurt obviously.

View File

@@ -315,7 +315,7 @@
- ВРАЧИ
- МИМЫ
- ПАРАМЕДИКИ
- ПАССАЖИРЫ
- АССИСТЕНТЫ
- КВАРТИРМЕЙСТЕРЫ
- НАУЧНЫЕ РУКОВОДИТЕЛИ
- РОБОТОТЕХНИКИ

View File

@@ -228,13 +228,13 @@
layers:
- state: pancakes1
map: ["pancakes1"]
visible: false
visible: true # WD changed to fix chameleon projector bug
- state: pancakes2
map: ["pancakes2"]
visible: false
visible: true # WD changed to fix chameleon projector bug
- state: pancakes3
map: ["pancakes3"]
visible: false
visible: true # WD changed to fix chameleon projector bug
- state: pancakes4
map: ["pancakes4"]
visible: false
@@ -277,7 +277,7 @@
layers:
- state: pancakesbb1
map: ["pancakesbb1"]
visible: false
visible: true # WD changed to fix chameleon projector bug
- state: pancakesbb2
map: ["pancakesbb2"]
visible: false
@@ -309,7 +309,7 @@
layers:
- state: pancakescc1
map: ["pancakescc1"]
visible: false
visible: true # WD changed to fix chameleon projector bug
- state: pancakescc2
map: ["pancakescc2"]
visible: false

View File

@@ -9,7 +9,7 @@
- type: Item
size: Normal
sprite: Objects/Tanks/generic.rsi
storedRotation: 45
storedRotation: 44 # WD fixing some rare texture bug
- type: Clothing
quickEquip: false
sprite: Objects/Tanks/generic.rsi

View File

@@ -11,15 +11,16 @@
wideAnimationRotation: -135
damage:
types:
Blunt: 10
Blunt: 8 # WD
Structural: 5
soundHit:
path: "/Audio/Weapons/smash.ogg"
canHeavyAttack: false
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Blunt: 5
Blunt: 4 # WD
Structural: 10
- type: Item
size: Normal
@@ -42,6 +43,14 @@
- type: Tag
tags:
- BaseballBat
- type: MeleeThrowOnHit # WD
lifetime: 0.2
speed: 5
requireWield: true
- type: KnockDownOnHit
knockDownBehavior: NoDrop
knockdownTime: 0.5
requireWield: true
- type: entity
name: incomplete baseball bat

View File

@@ -41,7 +41,7 @@
attackRate: 1.5
damage:
types:
Slash: 14
Slash: 12 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item

View File

@@ -13,7 +13,7 @@
attackRate: 1.5
damage:
types:
Slash: 12
Slash: 9 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -66,7 +66,7 @@
attackRate: 0.75
damage:
types:
Slash: 33
Slash: 27 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -104,7 +104,7 @@
damage:
types:
Blunt: 10
Slash: 20
Slash: 18 # WD
Structural: 5
soundHit:
path: "/Audio/Weapons/smash.ogg"
@@ -113,7 +113,7 @@
damage:
types:
Blunt: 4
Slash: 12
Slash: 10 # WD
Structural: 10
- type: Item
size: Ginormous

View File

@@ -13,7 +13,7 @@
attackRate: 1.3
damage:
types:
Slash: 10.5
Slash: 10.5 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -45,7 +45,7 @@
attackRate: 1.5
damage:
types:
Slash: 17.5
Slash: 15 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: EmbeddableProjectile
@@ -55,7 +55,7 @@
- type: DamageOtherOnHit
damage:
types:
Slash: 20
Slash: 44 # WD
- type: Item
size: Small
- type: DisarmMalus

View File

@@ -36,8 +36,7 @@
variation: 0.125
activatedDamage:
types:
Slash: 15
Heat: 15
Slash: 41 # WD
Structural: 20
- type: Sprite
sprite: Objects/Weapons/Melee/e_sword.rsi
@@ -131,8 +130,7 @@
variation: 0.250
activatedDamage:
types:
Slash: 10
Heat: 10
Slash: 23 # WD
deactivatedSecret: true
- type: ItemToggleActiveSound
activeSound:
@@ -263,8 +261,7 @@
- type: IncreaseDamageOnWield
damage:
types:
Slash: 15
Heat: 15
Slash: 30 # WD
- type: Reflect
reflectProb: 1
enabled: false
@@ -299,8 +296,7 @@
variation: 0.125
activatedDamage:
types:
Slash: 15
Heat: 15
Slash: 33 # WD
Structural: 20
- type: Reflect
reflectProb: 0.8

View File

@@ -18,8 +18,8 @@
damage:
types:
# axes are kinda like sharp hammers, you know?
Blunt: 5
Slash: 13
Blunt: 3 # WD
Slash: 10 # WD
Structural: 10
soundHit:
path: "/Audio/Weapons/smash.ogg"
@@ -28,7 +28,7 @@
damage:
types:
Blunt: 2.5
Slash: 10.5
Slash: 8 # WD
Structural: 60
- type: Item
size: Ginormous

View File

@@ -14,7 +14,7 @@
wideAnimationRotation: -135
damage:
types:
Slash: 12
Slash: 10 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Sprite
@@ -42,6 +42,10 @@
- type: Item
sprite: Objects/Weapons/Melee/kitchen_knife.rsi
storedRotation: -45
- type: DamageOtherOnHit # WD
damage:
types:
Piercing: 20
- type: GuideHelp
guides:
- Chef
@@ -68,7 +72,7 @@
attackRate: 1.5
damage:
types:
Slash: 12
Slash: 13 # WD
- type: Item
size: Normal
sprite: Objects/Weapons/Melee/cleaver.rsi
@@ -100,7 +104,7 @@
- type: DamageOtherOnHit
damage:
types:
Slash: 10
Piercing: 27 # WD
- type: Item
sprite: Objects/Weapons/Melee/combat_knife.rsi
storedRotation: -45
@@ -136,7 +140,11 @@
attackRate: 1.0
damage:
types:
Slash: 18 # Same DPS as combat knife
Slash: 12 # WD
- type: DamageOtherOnHit # WD
damage:
types:
Piercing: 44
- type: Item
sprite: Objects/Weapons/Melee/kukri_knife.rsi
@@ -159,7 +167,7 @@
- type: DamageOtherOnHit
damage:
types:
Slash: 10
Piercing: 10 # WD
- type: Sprite
sprite: Clothing/Head/Hats/greyflatcap.rsi
- type: Clothing
@@ -289,7 +297,7 @@
damage:
types:
Slash: 10
Piercing: 15
Piercing: 35 # WD
- type: Item
sprite: Objects/Weapons/Melee/throwing_knife.rsi
storedRotation: -45

View File

@@ -13,7 +13,7 @@
attackRate: 1.5
damage:
types:
Slash: 19
Slash: 14 # WD
# WD edit sounds start
soundHit:
path: /Audio/White/Items/hit/sabre_hit2.ogg
@@ -27,12 +27,12 @@
storedRotation: 44 # It just works
shape:
- 0, 0, 4, 0
- type: Tag
tags:
- CaptainSabre
- type: DisarmMalus
- type: MeleeBlock
delay: 6.1
- type: Tag
tags:
- CaptainSabre
- type: entity
name: katana
@@ -51,7 +51,7 @@
wideAnimationRotation: -135
damage:
types:
Slash: 24
Slash: 20 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -80,7 +80,7 @@
wideAnimationRotation: -60
damage:
types:
Slash: 30
Slash: 33 # WD
- type: Item
size: Huge
sprite: Objects/Weapons/Melee/energykatana.rsi
@@ -123,7 +123,7 @@
wideAnimationRotation: -135
damage:
types:
Slash: 20
Slash: 17 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -155,7 +155,7 @@
attackRate: 0.75
damage:
types:
Slash: 30
Slash: 21 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
@@ -191,7 +191,7 @@
wideAnimationRotation: -135
damage:
types:
Slash: 20
Slash: 20 # WD
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item

View File

@@ -14,8 +14,7 @@
attackRate: 0.75
damage:
types:
Blunt: 5
Slash: 5
Blunt: 10
Structural: 10
soundHit:
path: "/Audio/Weapons/sledgehammer_hit_1.ogg"
@@ -23,8 +22,7 @@
- type: IncreaseDamageOnWield
damage:
types:
Blunt: 10
Slash: 5
Blunt: 15
Structural: 40
- type: Item
size: Ginormous

View File

@@ -77,7 +77,7 @@
damage:
types:
Slash: 8
Piercing: 10
Piercing: 16 # WD
- type: StaminaDamageOnCollide
damage: 45
- type: StaminaDamageOnEmbed

View File

@@ -1,5 +1,5 @@
- type: entity
parent: ClothingOuterBaseLarge
parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing]
id: ClothingOuterArmorTemplar
name: доспехи крестоносца
description: Бог желает этого!

View File

@@ -1,5 +1,21 @@
# Так как мечей много, а смысла в них не очень - я буду писать в комментариях геймдизайнерских прикол каждого из них
- type: entity
parent: BaseItem
id: BaseHolyWeapon
abstract: true
components:
- type: HolyWeapon
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
state: icon
- type: MeleeWeapon
soundHit:
path: /Audio/Weapons/bladeslice.ogg
# Базовая палка, чтобы как можно быстрее сменить ее.
- type: entity
parent: BaseHolyWeapon
id: NullRod
name: жезл нулификации
description: Жезл из чистого обсидиана. Само его присутствие разрушает и ослабляет "магические силы". Во всяком случае так написано в путеводителе.
@@ -11,6 +27,8 @@
damage:
types:
Blunt: 18
soundHit:
collection: MetalThud
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
@@ -43,10 +61,10 @@
- UnholyPitchfork
- WarHammer
- HyperTool
- type: HolyWeapon
# Прикольно выглядящая рука, нельзя снять и бьет ожогами.
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: GodHand
name: божья длань
description: Эта рука сияет с потрясающей силой!
@@ -63,26 +81,22 @@
wideAnimationRotation: 180
damage:
types:
Heat: 18
Heat: 15
- type: Item
size: Ginormous
sprite: White/Objects/Weapons/Chaplain/godhand.rsi
- type: Unremoveable
deleteOnDrop: true
- type: HolyWeapon
# Типичный меч, база базовая. Может блокировать, острый.
- type: entity
parent: Claymore
parent: BaseHolyWeapon
id: HolyClaymore
name: священный клеймор
description: Оружие, подходящее для крестового похода!
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
- type: MeleeWeapon
damage:
types:
Slash: 33
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
slots:
@@ -91,29 +105,45 @@
- suitStorage
- type: Item
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
- type: HolyWeapon
- type: MeleeWeapon
damage:
types:
Slash: 15
- type: Sharp
- type: MeleeBlock
delay: 12.1
# Отсылка на вархаммер, больше всего урона, так как не может блокировать
- type: entity
parent: HolyClaymore
parent: BaseHolyWeapon
id: Chainsword
name: цепной меч
description: Не позволь еретику жить.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
state: icon
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
slots:
- back
- belt
- suitStorage
- type: Item
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
- type: MeleeWeapon
soundHit:
path: /Audio/Weapons/chainsaw.ogg
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
- type: Item
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
damage:
types:
Slash: 21
- type: Tool
qualities:
- Sawing
speed: 0.5
- type: HolyWeapon
- type: Sharp
# Он светится
- type: entity
parent: HolyClaymore
id: SwordGlowing
@@ -130,10 +160,10 @@
color: lightblue
- type: Item
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
- type: HolyWeapon
# Позволяет блокировать быстрее, средненький урон.
- type: entity
parent: Katana
parent: BaseHolyWeapon
id: HolyKatana
name: лезвие ханзо
description: Способен прорезать святой клеймор.
@@ -148,10 +178,24 @@
- suitStorage
- type: Item
sprite: White/Objects/Weapons/Chaplain/katana.rsi
- type: HolyWeapon
- type: MeleeWeapon
wideAnimationRotation: -135
damage:
types:
Slash: 13
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: DisarmMalus
- type: MeleeBlock
delay: 8.1
- type: Sharp
- type: Tag
tags:
- Katana
# Смешной меч с разбросом дамага
- type: entity
parent: HolyKatana
parent: BaseHolyWeapon
id: MultiverseBlade
name: внепространственный клинок
description: Будучи когда-то предвестником межпространственной войны, его острота сильно колеблется. Наносит от 1 до 50 урона.
@@ -170,10 +214,11 @@
- type: Item
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
- type: RandomDamage
- type: HolyWeapon
- type: Sharp
# Пробивает броню
- type: entity
parent: HolyClaymore
parent: BaseHolyWeapon
id: VorpalScythe
name: коса жнеца
description: И жрец, и жнец, и на дуде игрец! Коса способна пробить броню противника.
@@ -184,7 +229,7 @@
ignoreResistances: true
damage:
types:
Slash: 24
Slash: 14
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/scythe.rsi
slots:
@@ -192,8 +237,9 @@
- suitStorage
- type: Item
sprite: White/Objects/Weapons/Chaplain/scythe-inhands.rsi
- type: HolyWeapon
- type: Sharp
# Может пиздеть
- type: entity
parent: HolyKatana
id: PossessedBlade
@@ -218,10 +264,10 @@
- type: Examiner
- type: Item
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
- type: HolyWeapon
# Приклеен к руке, быстро и громко бьет
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: ChainsawHand
name: рука-бензопила
description: Добро? Зло? Ты парень с бензопилой в руке.
@@ -251,10 +297,10 @@
qualities:
- Sawing
speed: 0.5
- type: HolyWeapon
# Нокдаунит при ударе
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: HolyWhip
name: священная плеть
description: Какая ужасная ночь на космической станции 14.
@@ -265,10 +311,11 @@
- type: MeleeWeapon
soundHit:
path: /Audio/White/Items/hit/chainhit.ogg
range: 2.5
range: 1.5
attackRate: 0.5
damage:
types:
Blunt: 18
Blunt: 10
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/whip.rsi
@@ -277,10 +324,13 @@
slots:
- belt
- type: DisarmMalus
- type: HolyWeapon
- type: KnockDownOnHit
knockDownBehavior: NoDrop
knockdownTime: 0.4
# Отбрасывает при ударе и может блокировать, требует держать себя в двух руках для отброса
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: HolyStaff
name: посох монаха
description: Длинный высокий посох из полированного дерева. Традиционно используемый в боевых искусствах древней Земли, теперь он используется для преследования клоуна.
@@ -288,11 +338,6 @@
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/staff.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: 135
damage:
types:
Blunt: 10
- type: Item
size: Huge
sprite: White/Objects/Weapons/Chaplain/staff.rsi
@@ -301,23 +346,64 @@
slots:
- back
- suitStorage
- type: MeleeWeapon
wideAnimationRotation: 135
damage:
types:
Blunt: 6
soundHit:
collection: MetalThud
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Blunt: 8
- type: MeleeThrowOnHit
lifetime: 0.2
speed: 5
fallAfterHit: true
requireWield: true
- type: UseDelay
- type: DisarmMalus
- type: MeleeBlock
delay: 6.1
- type: HolyWeapon
delay: 8.1
# Можно кинуть, если попасть нанесет ебать как много, не попадет - ты проебал ее. Далеко бьет
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: UnholyPitchfork
name: нечестивые вилы
description: Держа это, ты выглядишь абсолютно по дьявольски.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
state: icon
- type: Item
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
size: Huge
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
slots:
- back
- suitStorage
- type: MeleeWeapon
range: 2
wideAnimationRotation: -135
damage:
types:
Piercing: 8
angle: 0
animation: WeaponArcThrust
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: DamageOtherOnHit
damage:
types:
Piercing: 77
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Piercing: 4
- type: EmbeddableProjectile
offset: 0.15,0.15
- type: ThrowingAngle
@@ -337,42 +423,12 @@
restitution: 0.3
friction: 0.2
- type: Sharp
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
state: icon
- type: MeleeWeapon
range: 2
wideAnimationRotation: -135
damage:
types:
Piercing: 15
angle: 0
animation: WeaponArcThrust
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: DamageOtherOnHit
damage:
types:
Piercing: 25
- type: Item
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
size: Huge
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
slots:
- back
- suitStorage
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Piercing: 9
- type: UseDelay
- type: DisarmMalus
- type: HolyWeapon
# Высокий структурный урон
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: WarHammer
name: реликтовый боевой молот
description: Этот боевой молот обошелся священнику в сорок тысяч кредитов.
@@ -380,17 +436,6 @@
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
Blunt: 24
Structural: 40
soundHit:
collection: HammerHit
soundSwing:
collection: HammerMiss
- type: Item
size: Huge
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
@@ -400,14 +445,25 @@
- belt
- back
- suitStorage
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
Blunt: 16
Structural: 40
soundHit:
collection: HammerHit
soundSwing:
collection: HammerMiss
- type: DisarmMalus
- type: HolyWeapon
# Имеет все инструменты в себе, но работает медленно и почти не наносит урона
- type: entity
parent: BaseItem
parent: BaseHolyWeapon
id: HyperTool
name: гиперинструмент
description: Инструмент настолько мощный, что даже вы не можете им идеально пользоваться.
description: Кто-то додумался склеить все инструменты вместе и вот, что вышло. Настолько продуманный, что вы не понимаете, как этим адекватно пользоваться
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
@@ -417,9 +473,9 @@
canHeavyAttack: false
damage:
types:
Blunt: 0
- type: StaminaDamageOnHit
damage: 40
Blunt: 4
soundHit:
collection: HyperToolUsing
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
@@ -428,4 +484,29 @@
slots:
- belt
- type: DisarmMalus
- type: HolyWeapon
- type: Tool
qualities:
- Screwing
- Prying
- Anchoring
- Cutting
- Pulsing
speed: 0.7
useSound:
collection: HyperToolUsing
- type: soundCollection
id: HyperToolUsing
files:
- /Audio/Effects/RingtoneNotes/a.ogg
- /Audio/Effects/RingtoneNotes/asharp.ogg
- /Audio/Effects/RingtoneNotes/b.ogg
- /Audio/Effects/RingtoneNotes/c.ogg
- /Audio/Effects/RingtoneNotes/csharp.ogg
- /Audio/Effects/RingtoneNotes/d.ogg
- /Audio/Effects/RingtoneNotes/dsharp.ogg
- /Audio/Effects/RingtoneNotes/e.ogg
- /Audio/Effects/RingtoneNotes/f.ogg
- /Audio/Effects/RingtoneNotes/fsharp.ogg
- /Audio/Effects/RingtoneNotes/g.ogg
- /Audio/Effects/RingtoneNotes/gsharp.ogg

View File

@@ -4,7 +4,6 @@
name: telescopic baton
description: A compact yet robust personal defense weapon. Can be concealed when folded.
components:
- type: TelescopicBaton
- type: Sprite
sprite: White/Objects/Weapons/telebaton.rsi
layers:
@@ -23,6 +22,8 @@
path: /Audio/Weapons/telescopicoff.ogg
params:
volume: -5
activatedDescription: comp-telebaton-examined-on
deactivatedDescription: comp-telebaton-examined-off
- type: Appearance
- type: GenericVisualizer
visuals:
@@ -64,3 +65,4 @@
- Belt
- type: StaticPrice
price: 150
- type: KnockDownOnHit

View File

@@ -824,7 +824,7 @@
wideAnimationRotation: -135
damage:
types:
Slash: 18
Slash: 14
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: HolyWeapon

View File

@@ -11,7 +11,7 @@
attackRate: 5
damage:
types:
Slash: 10
Slash: 25
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
slots:
@@ -101,6 +101,7 @@
minLifetime: 0.01
speed: 20
stunTime: 1.5
fallAfterHit: true
throwOnThrowHit: true
- type: DamageOtherOnHit
sound:

View File

@@ -4,9 +4,9 @@
SS14 имеет большое количество должностей, разделенных на семь основных отделов:
## Сервисный
В этот отдел входят уборщик, пассажиры, клоун, мим, музыкант, шеф-повар, бармен, начальник персонала и другие работники, которые существуют для обслуживания станции.
В этот отдел входят уборщик, ассистенты, клоун, мим, музыкант, шеф-повар, бармен, начальник персонала и другие работники, которые существуют для обслуживания станции.
В первую очередь это люди, которые развлекают, убирают и обслуживают остальную команду, за исключением пассажиров, у которых нет никакой конкретной работы.
В первую очередь это люди, которые развлекают, убирают и обслуживают остальную команду, за исключением ассистентов, у которых нет никакой конкретной работы.
## Карго
Снабжения или карго состоит из грузчиков, утилизаторов и квартирмейстера. Как отдел, он отвечает за распределение ресурсов и торговлю, способен покупать и продавать вещи на галактическом рынке.