Merge remote-tracking branch 'upstream/master' into UPS
This commit is contained in:
@@ -18,6 +18,7 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
private readonly ContainerSystem _container;
|
private readonly ContainerSystem _container;
|
||||||
private readonly TransformSystem _transform;
|
private readonly TransformSystem _transform;
|
||||||
private readonly OccluderSystem _occluder;
|
private readonly OccluderSystem _occluder;
|
||||||
|
private readonly PointLightSystem _pointLight;
|
||||||
|
|
||||||
public override OverlaySpace Space => OverlaySpace.WorldSpace;
|
public override OverlaySpace Space => OverlaySpace.WorldSpace;
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
_container = _entity.System<ContainerSystem>();
|
_container = _entity.System<ContainerSystem>();
|
||||||
_transform = _entity.System<TransformSystem>();
|
_transform = _entity.System<TransformSystem>();
|
||||||
_occluder = _entity.System<OccluderSystem>();
|
_occluder = _entity.System<OccluderSystem>();
|
||||||
|
_pointLight = _entity.System<PointLightSystem>();
|
||||||
ZIndex = -1;
|
ZIndex = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +53,8 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
if (_pointLightEntity == default)
|
if (_pointLightEntity == default)
|
||||||
{
|
{
|
||||||
_pointLightEntity = _entity.SpawnAttachedTo(null, transform.Coordinates);
|
_pointLightEntity = _entity.SpawnAttachedTo(null, transform.Coordinates);
|
||||||
_entity.EnsureComponent<PointLightComponent>(_pointLightEntity);
|
var pointLight = _entity.EnsureComponent<PointLightComponent>(_pointLightEntity);
|
||||||
|
_pointLight.SetRadius(_pointLightEntity, 3f, pointLight);
|
||||||
_transform.SetParent(_pointLightEntity, ent);
|
_transform.SetParent(_pointLightEntity, ent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -59,6 +62,7 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
var pointLightXForm = _entity.GetComponent<TransformComponent>(_pointLightEntity);
|
var pointLightXForm = _entity.GetComponent<TransformComponent>(_pointLightEntity);
|
||||||
if (pointLightXForm.ParentUid != ent)
|
if (pointLightXForm.ParentUid != ent)
|
||||||
_transform.SetParent(_pointLightEntity, pointLightXForm, ent, transform);
|
_transform.SetParent(_pointLightEntity, pointLightXForm, ent, transform);
|
||||||
|
_transform.SetLocalPosition(_pointLightEntity, Vector2.Zero, pointLightXForm);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasOccluders(ent))
|
if (HasOccluders(ent))
|
||||||
@@ -73,6 +77,9 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
var entities = _entity.EntityQueryEnumerator<BodyComponent, SpriteComponent, TransformComponent>();
|
var entities = _entity.EntityQueryEnumerator<BodyComponent, SpriteComponent, TransformComponent>();
|
||||||
while (entities.MoveNext(out var uid, out _, out var sprite, out var xform))
|
while (entities.MoveNext(out var uid, out _, out var sprite, out var xform))
|
||||||
{
|
{
|
||||||
|
if (!CanSee(uid))
|
||||||
|
continue;
|
||||||
|
|
||||||
var entity = uid;
|
var entity = uid;
|
||||||
|
|
||||||
if (_container.TryGetOuterContainer(uid, xform, out var container))
|
if (_container.TryGetOuterContainer(uid, xform, out var container))
|
||||||
@@ -107,7 +114,7 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
Angle eyeRot)
|
Angle eyeRot)
|
||||||
{
|
{
|
||||||
var (uid, sprite, xform) = ent;
|
var (uid, sprite, xform) = ent;
|
||||||
if (xform.MapID != map || HasOccluders(uid))
|
if (xform.MapID != map || HasOccluders(uid) || !CanSee(uid))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var position = _transform.GetWorldPosition(xform);
|
var position = _transform.GetWorldPosition(xform);
|
||||||
@@ -116,6 +123,11 @@ public sealed class ThermalVisionOverlay : Overlay
|
|||||||
sprite.Render(handle, eyeRot, rotation, position: position);
|
sprite.Render(handle, eyeRot, rotation, position: position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CanSee(EntityUid ent)
|
||||||
|
{
|
||||||
|
return !_entity.HasComponent<ThermalBlockerComponent>(ent);
|
||||||
|
}
|
||||||
|
|
||||||
private bool HasOccluders(EntityUid ent)
|
private bool HasOccluders(EntityUid ent)
|
||||||
{
|
{
|
||||||
var mapCoordinates = _transform.GetMapCoordinates(ent);
|
var mapCoordinates = _transform.GetMapCoordinates(ent);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ using Robust.Shared.Physics;
|
|||||||
using Robust.Shared.Physics.Components;
|
using Robust.Shared.Physics.Components;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
using Content.Server.IdentityManagement;
|
||||||
using Content.Shared.Movement.Pulling.Components;
|
using Content.Shared.Movement.Pulling.Components;
|
||||||
using Content.Shared.Movement.Pulling.Systems;
|
using Content.Shared.Movement.Pulling.Systems;
|
||||||
using Robust.Shared.Collections;
|
using Robust.Shared.Collections;
|
||||||
@@ -39,6 +40,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
|
|||||||
[Dependency] private readonly PullingSystem _pullingSystem = default!;
|
[Dependency] private readonly PullingSystem _pullingSystem = default!;
|
||||||
[Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
|
[Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
|
||||||
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
|
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
|
||||||
|
[Dependency] private readonly IdentitySystem _identity = default!; // WD
|
||||||
|
|
||||||
private EntityQuery<PhysicsComponent> _physicsQuery;
|
private EntityQuery<PhysicsComponent> _physicsQuery;
|
||||||
private HashSet<Entity<MapGridComponent>> _targetGrids = [];
|
private HashSet<Entity<MapGridComponent>> _targetGrids = [];
|
||||||
@@ -208,6 +210,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
|
|||||||
var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species);
|
var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species);
|
||||||
_humanoidAppearance.LoadProfile(ent, newProfile, humanoid);
|
_humanoidAppearance.LoadProfile(ent, newProfile, humanoid);
|
||||||
_metaData.SetEntityName(ent, newProfile.Name);
|
_metaData.SetEntityName(ent, newProfile.Name);
|
||||||
|
_identity.QueueIdentityUpdate(ent); // WD
|
||||||
if (TryComp<DnaComponent>(ent, out var dna))
|
if (TryComp<DnaComponent>(ent, out var dna))
|
||||||
{
|
{
|
||||||
dna.DNA = _forensicsSystem.GenerateDNA();
|
dna.DNA = _forensicsSystem.GenerateDNA();
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace Content.Server._White.Explosion;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class TriggerOnLandComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public float Delay = 0.3f;
|
||||||
|
}
|
||||||
19
Content.Server/_White/Explosion/TriggerOnLandSystem.cs
Normal file
19
Content.Server/_White/Explosion/TriggerOnLandSystem.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Content.Server.Explosion.EntitySystems;
|
||||||
|
using Content.Shared.Throwing;
|
||||||
|
|
||||||
|
namespace Content.Server._White.Explosion;
|
||||||
|
|
||||||
|
public sealed class TriggerOnLandSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly TriggerSystem _timer = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<TriggerOnLandComponent, LandEvent>(OnLand);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnLand(EntityUid uid, TriggerOnLandComponent component, ref LandEvent args)
|
||||||
|
{
|
||||||
|
_timer.HandleTimerTrigger(uid, null, component.Delay, 1, null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,7 +37,8 @@ public sealed class MindslaveSystem : SharedMindslaveSystem
|
|||||||
masterComponent.Slaves.Add(GetNetEntity(args.Target));
|
masterComponent.Slaves.Add(GetNetEntity(args.Target));
|
||||||
masterComponent.Master = GetNetEntity(args.User);
|
masterComponent.Master = GetNetEntity(args.User);
|
||||||
|
|
||||||
Dirty(args.Target, masterComponent);
|
Dirty(args.User, masterComponent);
|
||||||
|
Dirty(args.Target, slaveComponent);
|
||||||
|
|
||||||
if (!Mind.TryGetMind(args.Target, out var targetMindId, out var targetMind) || targetMind.Session is null)
|
if (!Mind.TryGetMind(args.Target, out var targetMindId, out var targetMind) || targetMind.Session is null)
|
||||||
{
|
{
|
||||||
@@ -85,6 +86,14 @@ public sealed class MindslaveSystem : SharedMindslaveSystem
|
|||||||
Popup.PopupEntity(Loc.GetString("mindslave-freed", ("player", mindslave.Master)), args.Target, args.Target);
|
Popup.PopupEntity(Loc.GetString("mindslave-freed", ("player", mindslave.Master)), args.Target, args.Target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var master = GetEntity(mindslave.Master);
|
||||||
|
if (TryComp(master, out MindSlaveComponent? masterMindslave))
|
||||||
|
{
|
||||||
|
masterMindslave.Slaves.Remove(GetNetEntity(args.Target));
|
||||||
|
if (masterMindslave.Slaves.Count == 0)
|
||||||
|
RemComp<MindSlaveComponent>(master);
|
||||||
|
}
|
||||||
|
|
||||||
RemComp<MindSlaveComponent>(args.Target);
|
RemComp<MindSlaveComponent>(args.Target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Shared._White.StaminaProtection;
|
using Content.Shared._White.StaminaProtection;
|
||||||
|
using Content.Shared._White.StunLock;
|
||||||
using Content.Shared.Administration.Logs;
|
using Content.Shared.Administration.Logs;
|
||||||
using Content.Shared.Alert;
|
using Content.Shared.Alert;
|
||||||
using Content.Shared.CombatMode;
|
using Content.Shared.CombatMode;
|
||||||
@@ -8,6 +9,7 @@ using Content.Shared.Damage.Events;
|
|||||||
using Content.Shared.Database;
|
using Content.Shared.Database;
|
||||||
using Content.Shared.Effects;
|
using Content.Shared.Effects;
|
||||||
using Content.Shared.IdentityManagement;
|
using Content.Shared.IdentityManagement;
|
||||||
|
using Content.Shared.Item.ItemToggle.Components;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
using Content.Shared.Projectiles;
|
using Content.Shared.Projectiles;
|
||||||
using Content.Shared.Rejuvenate;
|
using Content.Shared.Rejuvenate;
|
||||||
@@ -15,6 +17,7 @@ using Content.Shared.Rounding;
|
|||||||
using Content.Shared.Stunnable;
|
using Content.Shared.Stunnable;
|
||||||
using Content.Shared.Throwing;
|
using Content.Shared.Throwing;
|
||||||
using Content.Shared.Weapons.Melee.Events;
|
using Content.Shared.Weapons.Melee.Events;
|
||||||
|
using Content.Shared.StatusEffect;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
@@ -35,6 +38,7 @@ public sealed partial class StaminaSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedColorFlashEffectSystem _color = default!;
|
[Dependency] private readonly SharedColorFlashEffectSystem _color = default!;
|
||||||
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
|
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
|
||||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
|
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!; // WD EDIT
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// How much of a buffer is there between the stun duration and when stuns can be re-applied.
|
/// How much of a buffer is there between the stun duration and when stuns can be re-applied.
|
||||||
@@ -209,7 +213,7 @@ public sealed partial class StaminaSystem : EntitySystem
|
|||||||
damage = modifyEv.Damage;
|
damage = modifyEv.Damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
TakeStaminaDamage(target, damage, source: uid, sound: component.Sound);
|
TakeStaminaDamage(target, damage, with: uid, sound: component.Sound);
|
||||||
// WD EDIT END
|
// WD EDIT END
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,8 +259,20 @@ public sealed partial class StaminaSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Have we already reached the point of max stamina damage?
|
// Have we already reached the point of max stamina damage?
|
||||||
if (component.Critical)
|
if (component.Critical) // WD EDIT
|
||||||
|
{
|
||||||
|
if (TryComp<StunLockComponent>(with, out _))
|
||||||
|
{
|
||||||
|
if (TryComp<ItemToggleComponent>(with, out var toggle) && !toggle.Activated)
|
||||||
return;
|
return;
|
||||||
|
_stunSystem.TryParalyze(uid, component.StunTime, true);
|
||||||
|
if (visual)
|
||||||
|
_color.RaiseEffect(Color.Aqua, new List<EntityUid>() { uid }, Filter.Pvs(uid, entityManager: EntityManager));
|
||||||
|
if (_net.IsServer)
|
||||||
|
_audio.PlayPvs(sound, uid);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var oldDamage = component.StaminaDamage;
|
var oldDamage = component.StaminaDamage;
|
||||||
component.StaminaDamage = MathF.Max(0f, component.StaminaDamage + value);
|
component.StaminaDamage = MathF.Max(0f, component.StaminaDamage + value);
|
||||||
@@ -349,7 +365,7 @@ public sealed partial class StaminaSystem : EntitySystem
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// We were in crit so come out of it and continue.
|
// We were in crit so come out of it and continue.
|
||||||
if (comp.Critical)
|
if (!_statusEffectsSystem.HasStatusEffect(uid, "Stun") && comp.Critical) // WD EIT
|
||||||
{
|
{
|
||||||
ExitStamCrit(uid, comp);
|
ExitStamCrit(uid, comp);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Content.Shared.Emag.Systems;
|
using Content.Shared.Emag.Systems;
|
||||||
using Content.Shared.Tag;
|
using Content.Shared.Tag;
|
||||||
|
using Content.Shared.Whitelist;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
@@ -17,4 +18,7 @@ public sealed partial class EmagComponent : Component
|
|||||||
[DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer<TagPrototype>)), ViewVariables(VVAccess.ReadWrite)]
|
[DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer<TagPrototype>)), ViewVariables(VVAccess.ReadWrite)]
|
||||||
[AutoNetworkedField]
|
[AutoNetworkedField]
|
||||||
public string EmagImmuneTag = "EmagImmune";
|
public string EmagImmuneTag = "EmagImmune";
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public EntityWhitelist? Whitelist;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ public sealed class EmagSystem : EntitySystem
|
|||||||
if (_tag.HasTag(target, comp.EmagImmuneTag))
|
if (_tag.HasTag(target, comp.EmagImmuneTag))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (comp.Whitelist?.IsValid(target, EntityManager) is false)
|
||||||
|
return false;
|
||||||
|
|
||||||
TryComp<LimitedChargesComponent>(uid, out var charges);
|
TryComp<LimitedChargesComponent>(uid, out var charges);
|
||||||
if (_charges.IsEmpty(uid, charges))
|
if (_charges.IsEmpty(uid, charges))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -202,6 +202,9 @@ public abstract class SharedStunSystem : EntitySystem
|
|||||||
if (!Resolve(uid, ref status, false))
|
if (!Resolve(uid, ref status, false))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (_statusEffect.HasStatusEffect(uid, "Stun"))
|
||||||
|
time = TimeSpan.FromSeconds(6);
|
||||||
|
|
||||||
return TryKnockdown(uid, time, refresh, status) && TryStun(uid, time, refresh, status);
|
return TryKnockdown(uid, time, refresh, status) && TryStun(uid, time, refresh, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
using Content.Shared._White.Overlays;
|
using Content.Shared._White.Overlays;
|
||||||
using Content.Shared.Actions;
|
using Content.Shared.Actions;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
|
using Robust.Shared.Network;
|
||||||
|
using Robust.Shared.Player;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Shared._Miracle.Systems;
|
namespace Content.Shared._Miracle.Systems;
|
||||||
@@ -13,6 +15,7 @@ public abstract class SharedEnhancedVisionSystem<TComp, TTempComp, TEvent> : Ent
|
|||||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
|
[Dependency] private readonly INetManager _net = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -52,7 +55,8 @@ public abstract class SharedEnhancedVisionSystem<TComp, TTempComp, TEvent> : Ent
|
|||||||
|
|
||||||
component.IsActive = !component.IsActive;
|
component.IsActive = !component.IsActive;
|
||||||
|
|
||||||
_audio.PlayPredicted(component.IsActive ? component.ActivateSound : component.DeactivateSound, uid, uid);
|
if (_net.IsClient)
|
||||||
|
_audio.PlayEntity(component.IsActive ? component.ActivateSound : component.DeactivateSound, Filter.Local(), uid, false);
|
||||||
|
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Overlays;
|
||||||
|
|
||||||
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
public sealed partial class ThermalBlockerComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@ public sealed class StaminaProtectionSystem : EntitySystem
|
|||||||
args.Args.Damage = MathF.Max(0f, args.Args.Damage - flat);
|
args.Args.Damage = MathF.Max(0f, args.Args.Damage - flat);
|
||||||
|
|
||||||
if (modifiers.Coefficients.TryGetValue("Blunt", out var coefficient))
|
if (modifiers.Coefficients.TryGetValue("Blunt", out var coefficient))
|
||||||
args.Args.Damage *= coefficient;
|
args.Args.Damage *= coefficient / 1.5f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
7
Content.Shared/_White/StunLock/StunLockComponent.cs
Normal file
7
Content.Shared/_White/StunLock/StunLockComponent.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Content.Shared._White.StunLock;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class StunLockComponent : Component
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6310,3 +6310,118 @@
|
|||||||
id: 403
|
id: 403
|
||||||
time: '2024-07-21T16:53:20.0000000+00:00'
|
time: '2024-07-21T16:53:20.0000000+00:00'
|
||||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/475
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/475
|
||||||
|
- author: Spatison
|
||||||
|
changes:
|
||||||
|
- message: "\u0423\u0434\u0430\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\
|
||||||
|
\u043E\u0439 \u0434\u0443\u0431\u0438\u043D\u043A\u043E\u0439 \u0421\u0411 \u043D\
|
||||||
|
\u0435 \u0434\u0430\u0435\u0442 \u0432\u0441\u0442\u0430\u0442\u044C \u0438\u0437\
|
||||||
|
\ \u0441\u0442\u0430\u043D\u043A\u0440\u0438\u0442\u0430"
|
||||||
|
type: Add
|
||||||
|
- message: "\u0421\u0442\u0430\u043D \u0443\u0440\u043E\u043D \u0440\u0435\u0437\
|
||||||
|
\u0438\u043D\u043E\u0432\u044B\u0445 \u043F\u0443\u043B\u044C 22 -> 33"
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u0421\u0442\u0430\u043D \u0443\u0440\u043E\u043D \u0440\u0435\u0437\
|
||||||
|
\u0438\u043D\u043E\u0432\u044B\u0445 \u043F\u0443\u043B\u044C \u043C\u0430\u0433\
|
||||||
|
\u043D\u0443\u043C\u0430 35 -> 45"
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u0421\u0442\u0430\u043D \u0443\u0440\u043E\u043D \u0442\u0440\u0430\
|
||||||
|
\u0432\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043F\u0443\
|
||||||
|
\u043B\u044C 60 -> 80"
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u0429\u0438\u0442\u044B \u0441\u0442\u0430\u043B\u043E \u0441\u043B\
|
||||||
|
\u043E\u0436\u043D\u0435\u0435 \u0432\u044B\u0431\u0438\u0442\u044C \u0438\u0437\
|
||||||
|
\ \u0440\u0443\u043A"
|
||||||
|
type: Tweak
|
||||||
|
id: 404
|
||||||
|
time: '2024-07-21T17:55:01.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/474
|
||||||
|
- author: ThereDrD
|
||||||
|
changes:
|
||||||
|
- message: "\u0423\u0431\u0440\u0430\u043D\u0430 \u0432\u043E\u0437\u043C\u043E\u0436\
|
||||||
|
\u043D\u043E\u0441\u0442\u044C \u0433\u0438\u0431\u043D\u0443\u0442\u044C \u0447\
|
||||||
|
\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u043D\u0430\u043D\u0435\u0441\u044F\
|
||||||
|
\ 400 \u0443\u0440\u043E\u043D\u0430 \u0431\u0440\u0443\u0442\u043E\u043C. \u042D\
|
||||||
|
\u0442\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0442\u0443\u043F\u043E\
|
||||||
|
\u0439 \u0438 \u043B\u0435\u0433\u043A\u0438\u0439 \u0441\u043F\u043E\u0441\u043E\
|
||||||
|
\u0431 \u043D\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044B\u0432\u0435\
|
||||||
|
\u0441\u0442\u0438 \u0438\u0433\u0440\u0443\u043D\u0430 \u0438\u0437 \u0438\u0433\
|
||||||
|
\u0440\u044B. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\
|
||||||
|
\ \u0431\u043E\u043B\u0435\u0435 \u0441\u043B\u043E\u0436\u043D\u044B\u0435\
|
||||||
|
\ \u0441\u043F\u043E\u0441\u043E\u0431\u044B \u0438\u043B\u0438 \u0434\u0430\
|
||||||
|
\u0439\u0442\u0435 \u0438\u0433\u0440\u043E\u043A\u0430\u043C \u0441\u043B\u0443\
|
||||||
|
\u0447\u0430\u0439\u043D\u044B\u0439 \u0432\u0442\u043E\u0440\u043E\u0439 \u0448\
|
||||||
|
\u0430\u043D\u0441."
|
||||||
|
type: Remove
|
||||||
|
- message: "\u0426\u0435\u043D\u0430 \u0436\u0438\u0432\u044B\u0445 \u043A\u043E\
|
||||||
|
\u0441\u043C\u043E\u043D\u0430\u0432\u0442\u0438\u043A\u043E\u0432 \u0432 \u043A\
|
||||||
|
\u0430\u0440\u0433\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0430\
|
||||||
|
\ \u0441 1500 -> 10000."
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u041A\u043E\u0441\u043C\u043E\u043D\u0430\u0432\u0442\u044B \u0441\u0442\
|
||||||
|
\u0430\u043B\u0438 \u043D\u0430 10% \u0431\u044B\u0441\u0442\u0440\u0435\u0435\
|
||||||
|
\ \u0434\u0432\u0438\u0433\u0430\u0442\u044C\u0441\u044F \u0431\u0443\u0434\u0443\
|
||||||
|
\u0447\u0438 \u0437\u0430\u043C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u043C\
|
||||||
|
\u0438 \u043E\u0442 \u0434\u0430\u043C\u0430\u0433\u0430"
|
||||||
|
type: Tweak
|
||||||
|
id: 405
|
||||||
|
time: '2024-07-21T23:53:41.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/476
|
||||||
|
- author: Aviu
|
||||||
|
changes:
|
||||||
|
- message: "\u0423\u0431\u0440\u0430\u043D \u043D\u0430\u0431\u043E\u0440 \u0441\
|
||||||
|
\u0438\u043D\u0434\u0438\u043A\u0430\u0442\u0430 \u0443 \u0432\u043E\u0440\u0430\
|
||||||
|
."
|
||||||
|
type: Remove
|
||||||
|
- message: "\u0414\u043E\u0431\u0430\u0432\u0438\u0435\u043D \u043D\u0430\u0431\u043E\
|
||||||
|
\u0440 \u0440\u0430\u0431\u043E\u0432\u043B\u0430\u0434\u0435\u043B\u044C\u0446\
|
||||||
|
\u0430 \u0432\u043E\u0440\u0443."
|
||||||
|
type: Add
|
||||||
|
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0432\u044B\u0441\u043E\
|
||||||
|
\u043A\u043E\u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0447\u043D\
|
||||||
|
\u044B\u0439 \u043D\u0430\u0431\u043E\u0440 \u0432\u043E\u0440\u0443."
|
||||||
|
type: Add
|
||||||
|
- message: "\u0410\u0439\u0434\u0438 \u043A\u0430\u0440\u0442\u0430 \u0430\u0433\
|
||||||
|
\u0435\u043D\u0442\u0430 \u0442\u0435\u043F\u0435\u0440\u044C \u0435\u0441\u0442\
|
||||||
|
\u044C \u0432 \u0445\u0430\u043C\u0435\u043B\u0435\u043E\u043D \u043D\u0430\u0431\
|
||||||
|
\u043E\u0440\u0435 \u0443 \u0432\u043E\u0440\u0430."
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u0424\u0438\u043A\u0441 \u0438\u043C\u043F\u043B\u0430\u043D\u0442\u0430\
|
||||||
|
\ \u043F\u043E\u0434\u0447\u0438\u043D\u0435\u043D\u0438\u044F \u0438 \u0441\
|
||||||
|
\u043A\u0440\u0430\u043C\u0431\u043B\u0435\u0440\u0430 \u0434\u043D\u043A."
|
||||||
|
type: Fix
|
||||||
|
id: 406
|
||||||
|
time: '2024-07-22T14:20:05.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/480
|
||||||
|
- author: Spatison
|
||||||
|
changes:
|
||||||
|
- message: "\u041F\u0440\u043E\u0442\u043E\u0442\u0438\u043F \u0433\u0440\u0430\u043D\
|
||||||
|
\u0430\u0442\u043E\u043C\u0435\u0442\u0430 \u0421\u0411"
|
||||||
|
type: Add
|
||||||
|
- message: "\u0428\u043E\u043A \u0434\u0443\u0431\u0438\u043D\u043A\u0430 \u0432\
|
||||||
|
\ \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u043E\u043C \u0441\u043E\
|
||||||
|
\u0441\u0442\u043E\u044F\u043D\u0438\u0438 \u043D\u0435 \u043C\u0435\u0448\u0430\
|
||||||
|
\u0435\u0442 \u0432\u0441\u0442\u0430\u0442\u044C"
|
||||||
|
type: Fix
|
||||||
|
id: 407
|
||||||
|
time: '2024-07-22T14:20:16.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/479
|
||||||
|
- author: Aviu
|
||||||
|
changes:
|
||||||
|
- message: "\u041D\u0438\u043D\u0434\u0437\u044F \u0432 \u0441\u043A\u0430\u0444\
|
||||||
|
\u0430\u043D\u0434\u0440\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\
|
||||||
|
\ \u0432\u0438\u0434\u043D\u043E \u0432 \u0442\u0435\u0440\u043C\u0430\u043B\
|
||||||
|
\u043A\u0430\u0445."
|
||||||
|
type: Add
|
||||||
|
- message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u043D\u043E\u0447\
|
||||||
|
\u043D\u043E\u0435 \u0437\u0440\u0435\u043D\u0438\u0435 \u0443 \u0442\u0435\u0440\
|
||||||
|
\u043C\u0430\u043B\u043E\u043A."
|
||||||
|
type: Tweak
|
||||||
|
- message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0437\u0432\u0443\u043A \u043F\
|
||||||
|
\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0442\u0435\
|
||||||
|
\u0440\u043C\u0430\u043B\u043E\u043A \u0438 \u043F\u043D\u0432 \u0441\u043B\u044B\
|
||||||
|
\u0448\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u043A\u043B\u0438\
|
||||||
|
\u0435\u043D\u0442\u0435."
|
||||||
|
type: Tweak
|
||||||
|
id: 408
|
||||||
|
time: '2024-07-22T14:24:00.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/477
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ implanter-contained-implant-text = [color=green]{ $desc }[/color]
|
|||||||
|
|
||||||
## Implant Popups
|
## Implant Popups
|
||||||
|
|
||||||
scramble-implant-activated-popup = Вы превратились в { $identity }
|
scramble-implant-activated-popup = Ваша внешность меняется!
|
||||||
|
|
||||||
## Implanter Actions
|
## Implanter Actions
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ thief-backpack-button-deselect = Выбрать [X]
|
|||||||
|
|
||||||
thief-backpack-category-chameleon-name = набор хамелеона
|
thief-backpack-category-chameleon-name = набор хамелеона
|
||||||
thief-backpack-category-chameleon-description =
|
thief-backpack-category-chameleon-description =
|
||||||
Включает в себя полный комплект одежды-хамелеона,
|
Включает в себя айди карту агента, а также полный комплект одежды-хамелеона,
|
||||||
позволяющую вам маскироваться под практически любую вещь на станции.
|
позволяющую вам маскироваться под практически любую вещь на станции.
|
||||||
|
|
||||||
thief-backpack-category-tools-name = набор медвежатника
|
thief-backpack-category-tools-name = набор медвежатника
|
||||||
@@ -53,3 +53,15 @@ thief-backpack-category-smuggler-description =
|
|||||||
и ящик-невидимка. В них нельзя передвигаться,
|
и ящик-невидимка. В них нельзя передвигаться,
|
||||||
но вы можете быстро спрятать или унести ценную добычу.
|
но вы можете быстро спрятать или унести ценную добычу.
|
||||||
К этому набору также прилагается крутой плащ пустоты.
|
К этому набору также прилагается крутой плащ пустоты.
|
||||||
|
|
||||||
|
thief-backpack-category-slavery-name = набор рабовладельца
|
||||||
|
thief-backpack-category-slavery-description =
|
||||||
|
Набор, состоящий из трёх имплантеров подчинения
|
||||||
|
и стильной одежды рабовладельца.
|
||||||
|
Собери собственную армию послушных рабов!
|
||||||
|
|
||||||
|
thief-backpack-category-hitech-name = высокотехнологичный набор
|
||||||
|
thief-backpack-category-hitech-description =
|
||||||
|
Набор для любителей технологий.
|
||||||
|
Включает в себя устройство для взлома шлюзов и шкафов,
|
||||||
|
временной маяк, глушитель радио и хамелеон проектор.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
- ClothingEyesChameleon
|
- ClothingEyesChameleon
|
||||||
- ClothingHeadsetChameleon
|
- ClothingHeadsetChameleon
|
||||||
- ClothingShoesChameleon
|
- ClothingShoesChameleon
|
||||||
|
- AgentIDCard # WD
|
||||||
|
|
||||||
- type: thiefBackpackSet
|
- type: thiefBackpackSet
|
||||||
id: ToolsSet
|
id: ToolsSet
|
||||||
@@ -108,3 +109,30 @@
|
|||||||
- SmokeGrenade
|
- SmokeGrenade
|
||||||
- SmokeGrenade
|
- SmokeGrenade
|
||||||
- SmokeGrenade
|
- SmokeGrenade
|
||||||
|
|
||||||
|
- type: thiefBackpackSet
|
||||||
|
id: SlaverySet
|
||||||
|
name: thief-backpack-category-slavery-name
|
||||||
|
description: thief-backpack-category-slavery-description
|
||||||
|
sprite:
|
||||||
|
sprite: /Textures/Clothing/Head/Hats/syndiecap_maa.rsi
|
||||||
|
state: icon
|
||||||
|
content:
|
||||||
|
- MindSlaveImplanter
|
||||||
|
- MindSlaveImplanter
|
||||||
|
- MindSlaveImplanter
|
||||||
|
- ClothingOuterCoatSyndieCap
|
||||||
|
- ClothingHeadHatSyndieMAA
|
||||||
|
|
||||||
|
- type: thiefBackpackSet
|
||||||
|
id: HiTechSet
|
||||||
|
name: thief-backpack-category-hitech-name
|
||||||
|
description: thief-backpack-category-hitech-description
|
||||||
|
sprite:
|
||||||
|
sprite: /Textures/White/Objects/Tools/doorjack.rsi
|
||||||
|
state: icon
|
||||||
|
content:
|
||||||
|
- ChameleonProjector
|
||||||
|
- Doorjack
|
||||||
|
- TimeBeacon
|
||||||
|
- RadioJammer
|
||||||
|
|||||||
@@ -155,6 +155,9 @@
|
|||||||
name: power-cell-slot-component-slot-name-default
|
name: power-cell-slot-component-slot-name-default
|
||||||
startingItem: PowerCellSmall
|
startingItem: PowerCellSmall
|
||||||
disableEject: true
|
disableEject: true
|
||||||
|
- type: ClothingGrantComponent
|
||||||
|
component:
|
||||||
|
- type: ThermalBlocker
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingOuterBase
|
parent: ClothingOuterBase
|
||||||
|
|||||||
@@ -106,8 +106,8 @@
|
|||||||
species: Human
|
species: Human
|
||||||
- type: SlowOnDamage
|
- type: SlowOnDamage
|
||||||
speedModifierThresholds:
|
speedModifierThresholds:
|
||||||
60: 0.7
|
60: 0.8 # WD
|
||||||
80: 0.5
|
80: 0.6 # WD
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
fixtures: # TODO: This needs a second fixture just for mob collisions.
|
fixtures: # TODO: This needs a second fixture just for mob collisions.
|
||||||
fix1:
|
fix1:
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
attributes:
|
attributes:
|
||||||
proper: true
|
proper: true
|
||||||
- type: MobPrice
|
- type: MobPrice
|
||||||
price: 1500 # Kidnapping a living person and selling them for cred is a good move.
|
price: 10000 # Kidnapping a living person and selling them for cred is a good move.
|
||||||
deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less.
|
deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less.
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -279,6 +279,7 @@
|
|||||||
- type: InteractionPanel
|
- type: InteractionPanel
|
||||||
actionListPrototype: Humanoid
|
actionListPrototype: Humanoid
|
||||||
- type: RoleplayInfo
|
- type: RoleplayInfo
|
||||||
|
- type: Mood # WD
|
||||||
- type: OfferItem # WD-EDIT
|
- type: OfferItem # WD-EDIT
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
@@ -54,12 +54,6 @@
|
|||||||
damageContainer: Biological
|
damageContainer: Biological
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
- trigger:
|
|
||||||
!type:DamageTypeTrigger
|
|
||||||
damageType: Blunt
|
|
||||||
damage: 400
|
|
||||||
behaviors:
|
|
||||||
- !type:GibBehavior { }
|
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTypeTrigger
|
!type:DamageTypeTrigger
|
||||||
damageType: Heat
|
damageType: Heat
|
||||||
|
|||||||
@@ -59,6 +59,7 @@
|
|||||||
max: 2
|
max: 2
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 50
|
price: 50
|
||||||
|
- type: DisarmMalus
|
||||||
|
|
||||||
#Security Shields
|
#Security Shields
|
||||||
|
|
||||||
|
|||||||
@@ -170,10 +170,12 @@
|
|||||||
- ChemistrySet
|
- ChemistrySet
|
||||||
- ToolsSet
|
- ToolsSet
|
||||||
- ChameleonSet # - TO DO Chameleon stump PR needed
|
- ChameleonSet # - TO DO Chameleon stump PR needed
|
||||||
- SyndieSet
|
# - SyndieSet
|
||||||
- SleeperSet
|
- SleeperSet
|
||||||
- CommunicatorSet
|
- CommunicatorSet
|
||||||
- SmugglerSet
|
- SmugglerSet
|
||||||
|
- SlaverySet # WD
|
||||||
|
- HiTechSet # WD
|
||||||
- type: ActivatableUI
|
- type: ActivatableUI
|
||||||
key: enum.ThiefBackpackUIKey.Key
|
key: enum.ThiefBackpackUIKey.Key
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
Blunt: 3
|
Blunt: 3
|
||||||
- type: StaminaDamageOnCollide
|
- type: StaminaDamageOnCollide
|
||||||
ignoreResistances: false
|
ignoreResistances: false
|
||||||
damage: 35 # 3 hits to stun cuz revolver
|
damage: 45 # 3 hits to stun cuz revolver
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BulletMagnumIncendiary
|
id: BulletMagnumIncendiary
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
Blunt: 10
|
Blunt: 10
|
||||||
- type: StaminaDamageOnCollide
|
- type: StaminaDamageOnCollide
|
||||||
ignoreResistances: false
|
ignoreResistances: false
|
||||||
damage: 60
|
damage: 80
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: PelletShotgun
|
id: PelletShotgun
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
path: /Audio/Weapons/Guns/Hits/snap.ogg
|
path: /Audio/Weapons/Guns/Hits/snap.ogg
|
||||||
- type: StaminaDamageOnCollide
|
- type: StaminaDamageOnCollide
|
||||||
ignoreResistances: false
|
ignoreResistances: false
|
||||||
damage: 22 # 5 hits to stun sounds reasonable
|
damage: 33 # Wd EDIT
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseBulletIncendiary
|
id: BaseBulletIncendiary
|
||||||
@@ -756,6 +756,7 @@
|
|||||||
- state: grenade
|
- state: grenade
|
||||||
- type: FlashOnTrigger
|
- type: FlashOnTrigger
|
||||||
range: 7
|
range: 7
|
||||||
|
forceStun: true # WD EDIT
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: GrenadeFlashEffect
|
proto: GrenadeFlashEffect
|
||||||
- type: ActiveTimerTrigger
|
- type: ActiveTimerTrigger
|
||||||
|
|||||||
@@ -87,6 +87,7 @@
|
|||||||
- type: GuideHelp
|
- type: GuideHelp
|
||||||
guides:
|
guides:
|
||||||
- Security
|
- Security
|
||||||
|
- type: StunLock # Wd EDIT
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: truncheon
|
name: truncheon
|
||||||
|
|||||||
@@ -54,6 +54,9 @@
|
|||||||
radius: 1.15
|
radius: 1.15
|
||||||
energy: 0.45
|
energy: 0.45
|
||||||
- type: PointLightLocker
|
- type: PointLightLocker
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- DoorjackUsable
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerBaseSecure
|
id: LockerBaseSecure
|
||||||
|
|||||||
@@ -291,3 +291,6 @@
|
|||||||
stateDoorOpen: base
|
stateDoorOpen: base
|
||||||
stateDoorClosed: door
|
stateDoorClosed: door
|
||||||
- type: LockVisuals
|
- type: LockVisuals
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- DoorjackUsable
|
||||||
|
|||||||
@@ -148,3 +148,6 @@
|
|||||||
- Energy
|
- Energy
|
||||||
reflectProb: 0.2
|
reflectProb: 0.2
|
||||||
spread: 90
|
spread: 90
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- DoorjackUsable
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Emag
|
||||||
|
id: Doorjack
|
||||||
|
name: взломщик замков
|
||||||
|
description: Специальное устройство, предназначенное для обхода доступа в замках шлюзов и шкафов.
|
||||||
|
components:
|
||||||
|
- type: LimitedCharges
|
||||||
|
- type: AutoRecharge
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Tools/doorjack.rsi
|
||||||
|
state: icon
|
||||||
|
scale: 0.8, 0.8
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Tools/doorjack.rsi
|
||||||
|
storedRotation: -90
|
||||||
|
- type: Emag
|
||||||
|
whitelist:
|
||||||
|
tags:
|
||||||
|
- DoorjackUsable
|
||||||
|
components:
|
||||||
|
- Airlock
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- type: entity
|
||||||
|
name: BaseWeaponLauncher
|
||||||
|
parent: BaseItem
|
||||||
|
id: BaseWeaponLauncher
|
||||||
|
description: A rooty tooty point and shooty.
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
- type: entity
|
||||||
|
name: Riot Launcher
|
||||||
|
parent: BaseItem
|
||||||
|
id: RiotWeaponLauncher
|
||||||
|
description: ShitSec Launcher
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-icons.rsi
|
||||||
|
layers:
|
||||||
|
- state: icon
|
||||||
|
map: ["enum.GunVisualLayers.Base"]
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-inhands.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-inhands.rsi
|
||||||
|
slots:
|
||||||
|
- Back
|
||||||
|
- suitStorage
|
||||||
|
- type: AmmoCounter
|
||||||
|
- type: Gun
|
||||||
|
fireRate: 1
|
||||||
|
selectedMode: SemiAuto
|
||||||
|
projectileSpeed: 10
|
||||||
|
projectileSpeedModified: 10
|
||||||
|
availableModes:
|
||||||
|
- SemiAuto
|
||||||
|
soundGunshot:
|
||||||
|
path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg
|
||||||
|
- type: BallisticAmmoProvider
|
||||||
|
whitelist:
|
||||||
|
tags:
|
||||||
|
- RiotGrenade
|
||||||
|
capacity: 1
|
||||||
|
proto: RiotGrenadeFlash
|
||||||
|
soundInsert:
|
||||||
|
path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
|
||||||
|
autoCycle: false
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseRiotGrenade
|
||||||
|
name: base riot grenade
|
||||||
|
parent: BaseItem
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- RiotGrenade
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
|
- type: Sprite
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: RiotGrenadeFlash
|
||||||
|
name: riot flash grenade
|
||||||
|
parent: BaseRiotGrenade
|
||||||
|
components:
|
||||||
|
- type: CartridgeAmmo
|
||||||
|
proto: RiotBulletGrenadeFlash
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
||||||
|
layers:
|
||||||
|
- state: blast
|
||||||
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
|
- type: Appearance
|
||||||
|
- type: SpentAmmoVisuals
|
||||||
|
state: flash
|
||||||
|
suffix: false
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: RiotGrenadeSmoke
|
||||||
|
name: riot smoke grenade
|
||||||
|
parent: BaseRiotGrenade
|
||||||
|
components:
|
||||||
|
- type: CartridgeAmmo
|
||||||
|
proto: RiotBulletGrenadeSmoke
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
||||||
|
layers:
|
||||||
|
- state: blast
|
||||||
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
|
- type: Appearance
|
||||||
|
- type: SpentAmmoVisuals
|
||||||
|
state: smoke
|
||||||
|
suffix: false
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseBulletRiotGranade
|
||||||
|
name: base roit granade
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: MovedByPressure
|
||||||
|
- type: FlyBySound
|
||||||
|
- type: Clickable
|
||||||
|
- type: Sprite
|
||||||
|
noRot: false
|
||||||
|
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||||
|
layers:
|
||||||
|
- state: grenade
|
||||||
|
- type: Fixtures
|
||||||
|
fixtures:
|
||||||
|
fix1:
|
||||||
|
shape:
|
||||||
|
!type:PhysShapeAabb
|
||||||
|
bounds: "-0.25,-0.25,0.25,0.25"
|
||||||
|
density: 20
|
||||||
|
mask:
|
||||||
|
- ItemMask
|
||||||
|
restitution: 0.3 # fite me
|
||||||
|
friction: 0.2
|
||||||
|
- type: DeleteOnTrigger
|
||||||
|
- type: Physics
|
||||||
|
bodyType: Dynamic
|
||||||
|
- type: TimedDespawn
|
||||||
|
lifetime: 10
|
||||||
|
- type: TriggerOnLand
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: RiotBulletGrenadeFlash
|
||||||
|
name: flash riot grenade
|
||||||
|
parent: BaseBulletRiotGranade
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||||
|
layers:
|
||||||
|
- state: grenade
|
||||||
|
- type: FlashOnTrigger
|
||||||
|
range: 7
|
||||||
|
forceStun: true
|
||||||
|
- type: SpawnOnTrigger
|
||||||
|
proto: GrenadeFlashEffect
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: RiotBulletGrenadeSmoke
|
||||||
|
name: smoke riot grenade
|
||||||
|
parent: BaseBulletRiotGranade
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||||
|
layers:
|
||||||
|
- state: grenade
|
||||||
|
- type: SmokeOnTrigger
|
||||||
|
duration: 30
|
||||||
|
spreadAmount: 50
|
||||||
|
- type: SoundOnTrigger
|
||||||
|
sound: /Audio/Items/smoke_grenade_smoke.ogg
|
||||||
@@ -78,3 +78,6 @@
|
|||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: BaseAimModule
|
id: BaseAimModule
|
||||||
|
|
||||||
|
- type: Tag
|
||||||
|
id: DoorjackUsable
|
||||||
|
|||||||
BIN
Resources/Textures/White/Objects/Tools/doorjack.rsi/icon.png
Normal file
BIN
Resources/Textures/White/Objects/Tools/doorjack.rsi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 369 B |
Binary file not shown.
|
After Width: | Height: | Size: 261 B |
Binary file not shown.
|
After Width: | Height: | Size: 262 B |
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation from commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e, inhand sprites modified from tgstation at commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user