Великий фикс апстрима (#2821)
Co-authored-by: Matthew Herber <32679887+Happyrobot33@users.noreply.github.com>
This commit is contained in:
parent
305718810a
commit
1a62c50d57
40 changed files with 450 additions and 289 deletions
|
|
@ -48,6 +48,11 @@ namespace Content.Client.Chemistry.UI
|
|||
(uint) _window.BottleDosage.Value, _window.LabelLine));
|
||||
_window.BufferSortButton.OnPressed += _ => SendMessage(
|
||||
new ChemMasterSortingTypeCycleMessage());
|
||||
// Starlight-start
|
||||
_window.CreatePatchButton.OnPressed += _ => SendMessage(
|
||||
new ChemMasterCreatePatchesMessage(
|
||||
(uint)_window.PatchDosage.Value, (uint)_window.PatchNumber.Value, _window.LabelLine));
|
||||
// Starlight-end
|
||||
|
||||
for (uint i = 0; i < _window.PillTypeButtons.Length; i++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,11 +58,11 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
|
|||
|
||||
var humanoidAppearance = entity.Comp1;
|
||||
var sprite = entity.Comp2;
|
||||
|
||||
// Sunrise-start
|
||||
var scale = new Vector2(humanoidAppearance.Width, humanoidAppearance.Height);
|
||||
|
||||
_sprite.SetScale(entity.Owner, scale);
|
||||
|
||||
// Sunrise-end
|
||||
sprite[_sprite.LayerMapReserve((entity.Owner, sprite), HumanoidVisualLayers.Eyes)].Color = humanoidAppearance.EyeColor;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@
|
|||
</BoxContainer>
|
||||
<!-- Right side -->
|
||||
<BoxContainer Orientation="Vertical" VerticalExpand="True" VerticalAlignment="Center">
|
||||
<SpriteView Name="SpriteView" Scale="8 8" Margin="4" SizeFlagsStretchRatio="1" />
|
||||
<SpriteView Name="SpriteView" Scale="8 8" Margin="4" SizeFlagsStretchRatio="1" SetSize="256 384"/> <!-- Sunrise-edit -->
|
||||
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 5">
|
||||
<Button Name="SpriteRotateLeft" Text="◀" StyleClasses="OpenRight" />
|
||||
<cc:VSeparator Margin="2 0 3 0" />
|
||||
|
|
|
|||
|
|
@ -12,8 +12,10 @@
|
|||
<PanelContainer Name="PaperContent" VerticalExpand="True" HorizontalExpand="True" MaxWidth="600">
|
||||
<BoxContainer Orientation="Vertical" VerticalAlignment="Stretch">
|
||||
<TextureButton Name="HeaderImage" HorizontalAlignment="Center" VerticalAlignment="Top" MouseFilter="Ignore"/>
|
||||
<!-- Sunrise-start -->
|
||||
<TextureRect Name="ImageContent" HorizontalAlignment="Stretch" VerticalAlignment="Top"
|
||||
HorizontalExpand="True" VerticalExpand="True" Stretch="KeepAspectCentered" MouseFilter="Ignore"/>
|
||||
<!-- Sunrise-end -->
|
||||
<Control Name="TextAlignmentPadding" VerticalAlignment="Top"/>
|
||||
<RichTextLabel Name="BlankPaperIndicator" StyleClasses="LabelSecondaryColor" VerticalAlignment="Top" HorizontalAlignment="Center"/>
|
||||
<RichTextLabel StyleClasses="PaperWrittenText" Name="WrittenTextLabel" VerticalAlignment="Top"/>
|
||||
|
|
|
|||
|
|
@ -296,8 +296,11 @@ namespace Content.Client.Paper.UI
|
|||
ImageContent.Texture = sprite.Frame0(state.ImageContent);
|
||||
if (state.ImageScale != null)
|
||||
ImageContent.TextureScale = state.ImageScale.Value;
|
||||
ImageContent.Visible = true;
|
||||
BlankPaperIndicator.Visible = false;
|
||||
}
|
||||
else
|
||||
ImageContent.Visible = false;
|
||||
// Sunrise-End
|
||||
|
||||
StampDisplay.RemoveAllChildren();
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ public sealed partial class SurveillanceCameraMonitorWindow : FancyWindow
|
|||
{
|
||||
private static readonly ProtoId<ShaderPrototype> CameraStaticShader = "CameraStatic";
|
||||
|
||||
private readonly IPrototypeManager _prototypeManager; // Sunrise-edit
|
||||
private readonly IEntityManager _entManager; // Sunrise-edit
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly IResourceCache _resourceCache = default!;
|
||||
[Dependency] private readonly IEntityManager _entManager = default!; // Sunrise-edit
|
||||
|
||||
public event Action<string, string>? CameraSelected;
|
||||
public event Action? CameraRefresh;
|
||||
|
|
@ -43,11 +43,9 @@ public sealed partial class SurveillanceCameraMonitorWindow : FancyWindow
|
|||
public SurveillanceCameraMonitorWindow()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
// Sunrise-start
|
||||
_prototypeManager = IoCManager.Resolve<IPrototypeManager>();
|
||||
var resourceCache = IoCManager.Resolve<IResourceCache>();
|
||||
_entManager = IoCManager.Resolve<IEntityManager>();
|
||||
var spriteSystem = _entManager.System<SpriteSystem>();
|
||||
// Sunrise-end
|
||||
|
||||
|
|
@ -70,7 +68,6 @@ public sealed partial class SurveillanceCameraMonitorWindow : FancyWindow
|
|||
|
||||
// Sunrise-start
|
||||
NavMap.TrackedEntitySelectedAction += SetTrackedEntityFromNavMap;
|
||||
_entManager = IoCManager.Resolve<IEntityManager>();
|
||||
// Sunrise-end
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ public abstract class BaseTextureTag : IMarkupTagHandler
|
|||
SplitRsiPath(path, out var rsiPath, out var state);
|
||||
var resourceCache = new SpriteSpecifier.Rsi(new ResPath(rsiPath), state);
|
||||
|
||||
texture.TexturePath = path;
|
||||
_spriteSystem ??= _entitySystemManager.GetEntitySystem<SpriteSystem>();
|
||||
texture.Texture = _spriteSystem.Frame0(resourceCache);
|
||||
texture.TextureScale = new Vector2(scaleValue, scaleValue);
|
||||
|
|
|
|||
|
|
@ -119,13 +119,6 @@ public sealed class EmpSystem : SharedEmpSystem
|
|||
{
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
private void OnEmpAttempt(EntityUid uid, EmpImmuneComponent comp, EmpAttemptEvent args)
|
||||
{
|
||||
args.Cancel();
|
||||
}
|
||||
// Sunrise-Edit
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -223,16 +223,17 @@ public sealed class RadioSystem : EntitySystem
|
|||
if (accessItems.Count == 0)
|
||||
return null;
|
||||
|
||||
var idUid = accessItems.FirstOrDefault();
|
||||
|
||||
if (TryComp<PdaComponent>(idUid, out var pda) && pda.ContainedId.HasValue)
|
||||
foreach (var item in accessItems)
|
||||
{
|
||||
if (TryComp<IdCardComponent>(pda.ContainedId, out var idComp))
|
||||
return idComp;
|
||||
}
|
||||
else if (TryComp<IdCardComponent>(idUid, out var id))
|
||||
{
|
||||
return id;
|
||||
if (TryComp<PdaComponent>(item, out var pda) && pda.ContainedId.HasValue)
|
||||
{
|
||||
if (TryComp<IdCardComponent>(pda.ContainedId, out var idComp))
|
||||
return idComp;
|
||||
}
|
||||
else if (TryComp<IdCardComponent>(item, out var id))
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@ internal static class Const
|
|||
];
|
||||
|
||||
public static float MinPressure = 33f;
|
||||
public static float MaxPressure = 303.9f;
|
||||
public static float MaxPressure = 363.9f;
|
||||
|
||||
public static float MaxTemperature = Atmospherics.T0C + 150;
|
||||
public static float MaxTemperature = Atmospherics.T0C + 200;
|
||||
|
||||
public static float EvaporationCompensation = 10;
|
||||
|
||||
public static FixedPoint2 MaxDamagePerSecond = (100f / 120f) + RegenerationPerSecond; // Ensures it takes at least 2 minutes to deplete
|
||||
public static FixedPoint2 MaxDamagePerSecond = (100f / 180f) + RegenerationPerSecond; // Ensures it takes at least 3 minutes to deplete
|
||||
public static FixedPoint2 RegenerationPerSecond = 0.3f;
|
||||
|
||||
public static string[] AudioCrack = ["/Audio/_Starlight/Effects/supermatter/crystal_crack_1.ogg", "/Audio/_Starlight/Effects/supermatter/crystal_crack_2.ogg"];
|
||||
|
|
|
|||
|
|
@ -93,9 +93,6 @@ public sealed class SupermatterCascadeSystem : EntitySystem
|
|||
}
|
||||
branch.Coordinates = branch.Coordinates.SnapToGrid(gridComp);
|
||||
|
||||
foreach (var entity in _lookup.GetEntitiesIntersecting(branch.Coordinates))
|
||||
QueueDel(entity);
|
||||
|
||||
SpawnAttachedTo(_random.Pick(_prototypes), branch.Coordinates);
|
||||
|
||||
node = nextNode;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using System;
|
|||
using System.Linq;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Explosion.EntitySystems;
|
||||
using Content.Server.Lightning;
|
||||
using Content.Server.Radio.EntitySystems;
|
||||
using Content.Server.Starlight.Energy.Supermatter;
|
||||
|
|
@ -38,6 +39,7 @@ public sealed class SupermatterSystem : AccUpdateEntitySystem
|
|||
[Dependency] private readonly IChatManager _chat = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypes = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly ExplosionSystem _explosion = default!;
|
||||
|
||||
private readonly Dictionary<EntityUid, Entity<SupermatterComponent>> _supermatters = [];
|
||||
private DamageGroupPrototype? _brute;
|
||||
|
|
@ -111,7 +113,7 @@ public sealed class SupermatterSystem : AccUpdateEntitySystem
|
|||
private void Cascad(Entity<SupermatterComponent> supermatter)
|
||||
{
|
||||
if (supermatter.Comp.Durability > 0.01) return;
|
||||
|
||||
_explosion.QueueExplosion(supermatter, ExplosionSystem.DefaultExplosionPrototypeId, 150, 3, 20);
|
||||
_cascade.StartCascade(Transform(supermatter.Owner).Coordinates);
|
||||
QueueDel(supermatter.Owner);
|
||||
}
|
||||
|
|
@ -182,7 +184,7 @@ public sealed class SupermatterSystem : AccUpdateEntitySystem
|
|||
radiationStability += prop.RadiationStability * percent;
|
||||
}
|
||||
|
||||
supermatter.Comp.RadiationStability = MathHelper.Clamp(radiationStability, 1, 10);
|
||||
supermatter.Comp.RadiationStability = MathHelper.Clamp(radiationStability, 1.1, 10);
|
||||
|
||||
ProcessHeat(supermatter, gas, heatTransfer, heatModifier);
|
||||
TryCompensateDamage(supermatter, gas);
|
||||
|
|
@ -237,6 +239,6 @@ public sealed class SupermatterSystem : AccUpdateEntitySystem
|
|||
supermatter.Comp.AccBreak = MathHelper.Clamp(supermatter.Comp.AccBreak + (trueDamage * Const.BreakPercent), 0, 9999);
|
||||
supermatter.Comp.AccHeat = MathHelper.Clamp(supermatter.Comp.AccHeat + (trueDamage * Const.HeatPercent), 0, 9999);
|
||||
supermatter.Comp.AccLighting = MathHelper.Clamp(supermatter.Comp.AccLighting + (trueDamage * Const.LightingPercent), 0, 25);
|
||||
supermatter.Comp.AccRadiation = MathHelper.Clamp(supermatter.Comp.AccRadiation + (trueDamage * Const.RadiationPercent), 0, 100);
|
||||
supermatter.Comp.AccRadiation = MathHelper.Clamp(supermatter.Comp.AccRadiation + (trueDamage * Const.RadiationPercent), 0, 50);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,9 +38,6 @@ public sealed partial class AbductorSystem : SharedAbductorSystem
|
|||
[Dependency] private readonly SharedHandsSystem _hands = default!;
|
||||
[Dependency] private readonly SharedVirtualItemSystem _virtualItem = default!;
|
||||
private readonly EntProtoId _nanoStation = "StandardNanotrasenStation";
|
||||
|
||||
private EntityUid? _opener;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<AbductorHumanObservationConsoleComponent, BeforeActivatableUIOpenEvent>(OnBeforeActivatableUIOpen);
|
||||
|
|
@ -70,7 +67,22 @@ public sealed partial class AbductorSystem : SharedAbductorSystem
|
|||
|
||||
EntityUid eye;
|
||||
|
||||
_opener = args.Actor;
|
||||
ent.Comp.Opener = args.Actor;
|
||||
|
||||
if (!TryComp<UserInterfaceComponent>(ent, out var bound))
|
||||
return;
|
||||
|
||||
foreach (var uids in bound.Actors.Values)
|
||||
{
|
||||
foreach (var uid in uids)
|
||||
{
|
||||
if (uid == args.Actor)
|
||||
continue;
|
||||
|
||||
_uiSystem.CloseUserUis<AbductorCameraConsoleUIKey>(uid);
|
||||
}
|
||||
}
|
||||
|
||||
var beacon = _entityManager.GetEntity(args.Beacon.NetEnt);
|
||||
var beaconCoords = Transform(beacon).Coordinates;
|
||||
|
||||
|
|
@ -115,10 +127,13 @@ public sealed partial class AbductorSystem : SharedAbductorSystem
|
|||
if (console == null)
|
||||
return;
|
||||
|
||||
if (!TryComp<AbductorHumanObservationConsoleComponent>(console, out var comp))
|
||||
return;
|
||||
|
||||
comp.Opener = null;
|
||||
|
||||
RemoveEye(actor);
|
||||
_virtualItem.DeleteInHandsMatching(actor, console.Value);
|
||||
|
||||
_opener = null;
|
||||
}
|
||||
|
||||
private void OnActivatableUIOpenAttemptEvent(Entity<AbductorHumanObservationConsoleComponent> ent, ref ActivatableUIOpenAttemptEvent args)
|
||||
|
|
@ -126,7 +141,7 @@ public sealed partial class AbductorSystem : SharedAbductorSystem
|
|||
if (!HasComp<AbductorScientistComponent>(args.User) && !HasComp<AbductorAgentComponent>(args.User))
|
||||
args.Cancel();
|
||||
|
||||
if (_opener != null && _opener != args.User)
|
||||
if (ent.Comp.Opener != null && ent.Comp.Opener != args.User)
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("console-occupied"), args.User, args.User);
|
||||
args.Cancel();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
using Content.Server._Sunrise.Emp;
|
||||
|
||||
namespace Content.Server.Emp;
|
||||
|
||||
/// <summary>
|
||||
/// Upon being triggered will EMP area around it.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
[Access(typeof(EmpSystem))]
|
||||
[Access(typeof(EmpImmuneSystem))]
|
||||
public sealed partial class EmpImmuneComponent : Component
|
||||
{
|
||||
|
||||
|
|
|
|||
19
Content.Server/_Sunrise/Emp/EmpImmuneSystem.cs
Normal file
19
Content.Server/_Sunrise/Emp/EmpImmuneSystem.cs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
using Content.Server.Emp;
|
||||
|
||||
namespace Content.Server._Sunrise.Emp;
|
||||
|
||||
public sealed class EmpImmuneSystem : EntitySystem
|
||||
{
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<EmpImmuneComponent, EmpAttemptEvent>(OnEmpAttempt);
|
||||
}
|
||||
|
||||
private void OnEmpAttempt(EntityUid uid, EmpImmuneComponent comp, EmpAttemptEvent args)
|
||||
{
|
||||
args.Cancel();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||
|
||||
namespace Content.Server._Sunrise.InnateItem
|
||||
{
|
||||
[RegisterComponent]
|
||||
public sealed partial class InnateItemComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadOnly),
|
||||
DataField("instantActions", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
|
||||
public List<string?> InstantActions = new();
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly),
|
||||
DataField("worldTargetActions", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
|
||||
public List<string?> WorldTargetActions = new();
|
||||
|
||||
public List<EntityUid> Actions = new();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,140 +0,0 @@
|
|||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions.Components;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.UserInterface;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Server._Sunrise.InnateItem
|
||||
{
|
||||
public sealed class InnateItemSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<InnateItemComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<InnateItemComponent, InnateEntityTargetActionEvent>(WorldTargetActionActivate);
|
||||
SubscribeLocalEvent<InnateItemComponent, InnateInstantActionEvent>(InstantActionActivate);
|
||||
SubscribeLocalEvent<InnateItemComponent, ComponentShutdown>(OnShutdown);
|
||||
}
|
||||
|
||||
private void OnShutdown(EntityUid uid, InnateItemComponent component, ComponentShutdown args)
|
||||
{
|
||||
foreach (var action in component.Actions)
|
||||
{
|
||||
_actionContainer.RemoveAction(action);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, InnateItemComponent component, MapInitEvent args)
|
||||
{
|
||||
AddItems(uid, component);
|
||||
}
|
||||
|
||||
private void AddItems(EntityUid uid, InnateItemComponent component)
|
||||
{
|
||||
foreach (var itemProto in component.WorldTargetActions)
|
||||
{
|
||||
var item = Spawn(itemProto);
|
||||
var action = CreateWorldTargetAction(item);
|
||||
_actionContainer.AddAction(uid, action);
|
||||
_actionsSystem.AddAction(uid, action, uid);
|
||||
component.Actions.Add(action);
|
||||
}
|
||||
|
||||
foreach (var itemProto in component.InstantActions)
|
||||
{
|
||||
var item = Spawn(itemProto);
|
||||
var action = CreateInstantAction(item);
|
||||
_actionContainer.AddAction(uid, action);
|
||||
_actionsSystem.AddAction(uid, action, uid);
|
||||
component.Actions.Add(action);
|
||||
}
|
||||
}
|
||||
|
||||
private EntityUid CreateWorldTargetAction(EntityUid uid)
|
||||
{
|
||||
var action = EnsureComp<ActionComponent>(uid);
|
||||
EnsureComp<WorldTargetActionComponent>(uid);
|
||||
EnsureComp<EntityTargetActionComponent>(uid);
|
||||
var targetAction = EnsureComp<TargetActionComponent>(uid);
|
||||
_actionsSystem.SetIcon(uid, new SpriteSpecifier.EntityPrototype(MetaData(uid).EntityPrototype!.ID));
|
||||
_actionsSystem.SetEvent(uid, new InnateEntityTargetActionEvent(uid));
|
||||
_actionsSystem.SetPriority((uid, action), 0);
|
||||
_actionsSystem.SetItemIconStyle((uid, action), ItemActionIconStyle.NoItem);
|
||||
_actionsSystem.SetCheckCanInteract((uid, action), false);
|
||||
_actionsSystem.SetIgnoreContainer((uid, targetAction), true);
|
||||
if (TryComp<ActivatableUIComponent>(uid, out var activatableUIComponent))
|
||||
{
|
||||
activatableUIComponent.RequiresComplex = false;
|
||||
activatableUIComponent.InHandsOnly = false;
|
||||
activatableUIComponent.RequireActiveHand = false;
|
||||
Dirty(uid, activatableUIComponent);
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
private EntityUid CreateInstantAction(EntityUid uid)
|
||||
{
|
||||
var action = EnsureComp<ActionComponent>(uid);
|
||||
EnsureComp<InstantActionComponent>(uid);
|
||||
_actionsSystem.SetEvent(uid, new InnateInstantActionEvent(uid));
|
||||
_actionsSystem.SetPriority((uid, action), 0);
|
||||
_actionsSystem.SetIcon(uid, new SpriteSpecifier.EntityPrototype(MetaData(uid).EntityPrototype!.ID));
|
||||
_actionsSystem.SetCheckCanInteract((uid, action), false);
|
||||
if (TryComp<ActivatableUIComponent>(uid, out var activatableUIComponent))
|
||||
{
|
||||
activatableUIComponent.RequiresComplex = false;
|
||||
activatableUIComponent.InHandsOnly = false;
|
||||
activatableUIComponent.RequireActiveHand = false;
|
||||
Dirty(uid, activatableUIComponent);
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
private void WorldTargetActionActivate(EntityUid uid, InnateItemComponent component, InnateEntityTargetActionEvent args)
|
||||
{
|
||||
if (args.Entity == null)
|
||||
return;
|
||||
|
||||
_interactionSystem.InteractUsing(
|
||||
args.Performer,
|
||||
args.Item,
|
||||
args.Entity.Value,
|
||||
args.Target,
|
||||
false,
|
||||
false,
|
||||
false);
|
||||
}
|
||||
|
||||
private void InstantActionActivate(EntityUid uid, InnateItemComponent component, InnateInstantActionEvent args)
|
||||
{
|
||||
var ev = new UseInHandEvent(args.Performer);
|
||||
RaiseLocalEvent(args.Item, ev);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed partial class InnateEntityTargetActionEvent : WorldTargetActionEvent
|
||||
{
|
||||
public EntityUid Item;
|
||||
|
||||
public InnateEntityTargetActionEvent(EntityUid item)
|
||||
{
|
||||
Item = item;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed partial class InnateInstantActionEvent : InstantActionEvent
|
||||
{
|
||||
public EntityUid Item;
|
||||
|
||||
public InnateInstantActionEvent(EntityUid item)
|
||||
{
|
||||
Item = item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
using Content.Shared._Sunrise.ThermalVision;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Toggleable;
|
||||
|
||||
namespace Content.Server._Sunrise.ThermalVision;
|
||||
|
||||
public sealed class ToggleableThermalVisionSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ToggleableThermalVisionComponent, ComponentInit>(OnVisionInit);
|
||||
SubscribeLocalEvent<ToggleableThermalVisionComponent, ComponentShutdown>(OnVisionShutdown);
|
||||
SubscribeLocalEvent<ToggleableThermalVisionComponent, ToggleActionEvent>(OnToggleThermalVision);
|
||||
}
|
||||
|
||||
private void OnVisionInit(Entity<ToggleableThermalVisionComponent> ent, ref ComponentInit args)
|
||||
{
|
||||
_actionsSystem.AddAction(ent.Owner, ref ent.Comp.ActionEntity, ent.Comp.Action);
|
||||
}
|
||||
|
||||
private void OnVisionShutdown(Entity<ToggleableThermalVisionComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
_actionsSystem.RemoveAction(ent.Comp.ActionEntity);
|
||||
RemComp<ThermalVisionComponent>(ent);
|
||||
}
|
||||
|
||||
private void OnToggleThermalVision(Entity<ToggleableThermalVisionComponent> ent, ref ToggleActionEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
return;
|
||||
|
||||
ent.Comp.Active = !ent.Comp.Active;
|
||||
|
||||
if (ent.Comp.Active)
|
||||
EnsureComp<ThermalVisionComponent>(ent);
|
||||
else
|
||||
RemComp<ThermalVisionComponent>(ent);
|
||||
|
||||
args.Handled = true;
|
||||
Dirty(ent, ent.Comp);
|
||||
}
|
||||
}
|
||||
|
|
@ -84,19 +84,6 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
var fireMode = component.FireModes[i];
|
||||
var index = i;
|
||||
|
||||
if (fireMode.Conditions != null)
|
||||
{
|
||||
var conditionArgs = new FireModeConditionConditionArgs(args.User, args.Target, fireMode, EntityManager);
|
||||
var conditionsMet = fireMode.Conditions.All(condition => condition.Condition(conditionArgs));
|
||||
|
||||
if (!conditionsMet)
|
||||
{
|
||||
if (component.CurrentFireMode == index)
|
||||
SetFireMode(uid, component, 0, args.User);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (ammoProvider is ProjectileBatteryAmmoProviderComponent projectileAmmo)
|
||||
{
|
||||
var entProto = _prototypeManager.Index<EntityPrototype>(fireMode.Prototype);
|
||||
|
|
@ -142,12 +129,12 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
|
||||
private void OnUseInHandEvent(EntityUid uid, BatteryWeaponFireModesComponent component, UseInHandEvent args)
|
||||
{
|
||||
//starlight
|
||||
if(args.Handled)
|
||||
//starlight
|
||||
if (args.Handled)
|
||||
return;
|
||||
|
||||
args.Handled = true;
|
||||
//starlight end
|
||||
//starlight end
|
||||
TryCycleFireMode(uid, component, args.User);
|
||||
}
|
||||
|
||||
|
|
@ -179,6 +166,20 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
component.CurrentFireMode = index;
|
||||
Dirty(uid, component);
|
||||
|
||||
if (fireMode.Conditions != null && user != null)
|
||||
{
|
||||
var conditionArgs = new FireModeConditionConditionArgs(user.Value, uid, fireMode, EntityManager);
|
||||
var conditionsMet = fireMode.Conditions.All(condition => condition.Condition(conditionArgs));
|
||||
|
||||
if (!conditionsMet)
|
||||
{
|
||||
if (TryComp<ActorComponent>(user, out var actor))
|
||||
_popupSystem.PopupEntity(Loc.GetString("gun-alert-level-condition"),
|
||||
uid, actor.PlayerSession);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (TryGetAmmoProvider(uid, out var ammoProvider) && ammoProvider != null)
|
||||
{
|
||||
if (ammoProvider is ProjectileBatteryAmmoProviderComponent projectileAmmo)
|
||||
|
|
@ -195,8 +196,7 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
projectileAmmo.Capacity = (int)Math.Round(projectileAmmo.Capacity / fireCostDiff);
|
||||
Dirty(uid, projectileAmmo);
|
||||
|
||||
if (user != null && TryComp<ActorComponent>(user, out var actor))
|
||||
_popupSystem.PopupEntity(Loc.GetString("gun-set-fire-mode", ("mode", prototype.Name)), uid, actor.PlayerSession);
|
||||
_popupSystem.PopupPredicted(Loc.GetString("gun-set-fire-mode", ("mode", prototype.Name)), uid, user);
|
||||
}
|
||||
else if (ammoProvider is HitscanBatteryAmmoProviderComponent hitscanAmmo)
|
||||
{
|
||||
|
|
@ -212,8 +212,7 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
hitscanAmmo.Capacity = (int)Math.Round(hitscanAmmo.Capacity / fireCostDiff);
|
||||
Dirty(uid, hitscanAmmo);
|
||||
|
||||
if (user != null && TryComp<ActorComponent>(user, out var actor))
|
||||
_popupSystem.PopupEntity(Loc.GetString("gun-set-fire-mode", ("mode", hitscan.Name)), uid, actor.PlayerSession);
|
||||
_popupSystem.PopupPredicted(Loc.GetString("gun-set-fire-mode", ("mode", hitscan.Name)), uid, user);
|
||||
}
|
||||
|
||||
var updateClientAmmoEvent = new UpdateClientAmmoEvent();
|
||||
|
|
@ -282,19 +281,6 @@ public sealed class BatteryWeaponFireModesSystem : EntitySystem
|
|||
|
||||
var index = (component.CurrentFireMode + 1) % component.FireModes.Count;
|
||||
|
||||
var fireMode = component.FireModes[index];
|
||||
|
||||
if (fireMode.Conditions != null)
|
||||
{
|
||||
var conditionArgs = new FireModeConditionConditionArgs(user, uid, fireMode, EntityManager);
|
||||
var conditionsMet = fireMode.Conditions.All(condition => condition.Condition(conditionArgs));
|
||||
|
||||
if (!conditionsMet)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SetFireMode(uid, component, index, user);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public sealed partial class AbductorHumanObservationConsoleComponent : Component
|
|||
|
||||
[DataField, AutoNetworkedField]
|
||||
public NetEntity? RemoteEntity;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? Opener;
|
||||
}
|
||||
[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState]
|
||||
public sealed partial class AbductorConsoleComponent : Component
|
||||
|
|
|
|||
18
Content.Shared/_Sunrise/InnateItem/InnateItemComponent.cs
Normal file
18
Content.Shared/_Sunrise/InnateItem/InnateItemComponent.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.InnateItem;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
|
||||
public sealed partial class InnateItemComponent : Component
|
||||
{
|
||||
[DataField, AutoNetworkedField]
|
||||
public List<EntProtoId?> InstantActions = new();
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public List<EntProtoId?> WorldTargetActions = new();
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public List<EntityUid> Actions = new();
|
||||
}
|
||||
144
Content.Shared/_Sunrise/InnateItem/InnateItemSystem.cs
Normal file
144
Content.Shared/_Sunrise/InnateItem/InnateItemSystem.cs
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions.Components;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.UserInterface;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared._Sunrise.InnateItem;
|
||||
|
||||
public sealed class InnateItemSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<InnateItemComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<InnateItemComponent, InnateEntityTargetActionEvent>(WorldTargetActionActivate);
|
||||
SubscribeLocalEvent<InnateItemComponent, InnateInstantActionEvent>(InstantActionActivate);
|
||||
SubscribeLocalEvent<InnateItemComponent, ComponentShutdown>(OnShutdown);
|
||||
}
|
||||
|
||||
private void OnShutdown(EntityUid uid, InnateItemComponent component, ComponentShutdown args)
|
||||
{
|
||||
foreach (var action in component.Actions)
|
||||
{
|
||||
_actionsSystem.RemoveAction(action);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, InnateItemComponent component, MapInitEvent args)
|
||||
{
|
||||
AddItems(uid, component);
|
||||
}
|
||||
|
||||
private void AddItems(EntityUid uid, InnateItemComponent component)
|
||||
{
|
||||
foreach (var itemProto in component.WorldTargetActions)
|
||||
{
|
||||
var item = Spawn(itemProto);
|
||||
var action = CreateWorldTargetAction(item);
|
||||
_actionContainer.AddAction(uid, action);
|
||||
_actionsSystem.AddAction(uid, action, uid);
|
||||
component.Actions.Add(action);
|
||||
}
|
||||
|
||||
foreach (var itemProto in component.InstantActions)
|
||||
{
|
||||
var item = Spawn(itemProto);
|
||||
var action = CreateInstantAction(item);
|
||||
_actionContainer.AddAction(uid, action);
|
||||
_actionsSystem.AddAction(uid, action, uid);
|
||||
component.Actions.Add(action);
|
||||
}
|
||||
}
|
||||
|
||||
private EntityUid CreateWorldTargetAction(EntityUid uid)
|
||||
{
|
||||
if (!TryComp<ActionComponent>(uid, out var action))
|
||||
return EntityUid.Invalid;
|
||||
|
||||
EnsureComp<WorldTargetActionComponent>(uid);
|
||||
EnsureComp<EntityTargetActionComponent>(uid);
|
||||
var targetAction = EnsureComp<TargetActionComponent>(uid);
|
||||
_actionsSystem.SetIcon(uid, new SpriteSpecifier.EntityPrototype(MetaData(uid).EntityPrototype!.ID));
|
||||
_actionsSystem.SetEvent(uid, new InnateEntityTargetActionEvent(uid));
|
||||
_actionsSystem.SetPriority((uid, action), 0);
|
||||
_actionsSystem.SetItemIconStyle((uid, action), ItemActionIconStyle.NoItem);
|
||||
_actionsSystem.SetCheckCanInteract((uid, action), false);
|
||||
_actionsSystem.SetIgnoreContainer((uid, targetAction), true);
|
||||
if (TryComp<ActivatableUIComponent>(uid, out var activatableUIComponent))
|
||||
{
|
||||
activatableUIComponent.RequiresComplex = false;
|
||||
activatableUIComponent.InHandsOnly = false;
|
||||
activatableUIComponent.RequireActiveHand = false;
|
||||
Dirty(uid, activatableUIComponent);
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
private EntityUid CreateInstantAction(EntityUid uid)
|
||||
{
|
||||
if (!TryComp<ActionComponent>(uid, out var action))
|
||||
return EntityUid.Invalid;
|
||||
|
||||
EnsureComp<InstantActionComponent>(uid);
|
||||
_actionsSystem.SetEvent(uid, new InnateInstantActionEvent(uid));
|
||||
_actionsSystem.SetPriority((uid, action), 0);
|
||||
_actionsSystem.SetIcon(uid, new SpriteSpecifier.EntityPrototype(MetaData(uid).EntityPrototype!.ID));
|
||||
_actionsSystem.SetCheckCanInteract((uid, action), false);
|
||||
if (TryComp<ActivatableUIComponent>(uid, out var activatableUIComponent))
|
||||
{
|
||||
activatableUIComponent.RequiresComplex = false;
|
||||
activatableUIComponent.InHandsOnly = false;
|
||||
activatableUIComponent.RequireActiveHand = false;
|
||||
Dirty(uid, activatableUIComponent);
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
private void WorldTargetActionActivate(EntityUid uid, InnateItemComponent component, InnateEntityTargetActionEvent args)
|
||||
{
|
||||
if (args.Entity == null)
|
||||
return;
|
||||
|
||||
_interactionSystem.InteractUsing(
|
||||
args.Performer,
|
||||
args.Item,
|
||||
args.Entity.Value,
|
||||
args.Target,
|
||||
false,
|
||||
false,
|
||||
false);
|
||||
}
|
||||
|
||||
private void InstantActionActivate(EntityUid uid, InnateItemComponent component, InnateInstantActionEvent args)
|
||||
{
|
||||
var ev = new UseInHandEvent(args.Performer);
|
||||
RaiseLocalEvent(args.Item, ev);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed partial class InnateEntityTargetActionEvent : WorldTargetActionEvent
|
||||
{
|
||||
public EntityUid Item;
|
||||
|
||||
public InnateEntityTargetActionEvent(EntityUid item)
|
||||
{
|
||||
Item = item;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed partial class InnateInstantActionEvent : InstantActionEvent
|
||||
{
|
||||
public EntityUid Item;
|
||||
|
||||
public InnateInstantActionEvent(EntityUid item)
|
||||
{
|
||||
Item = item;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.ThermalVision;
|
||||
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class ToggleableThermalVisionComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntProtoId Action = "ActionToggleThermalVision";
|
||||
|
||||
[ViewVariables]
|
||||
public EntityUid? ActionEntity;
|
||||
|
||||
[ViewVariables]
|
||||
public bool Active;
|
||||
}
|
||||
|
|
@ -28,9 +28,9 @@ flesh-cult-round-end-leader = [bold]Лидером культа плоти бы
|
|||
preset-flesh-cult-objective-issuer-flesh-cult = [color=#e0106a]Культ плоти[/color]
|
||||
objective-issuer-flesh-cult = [color=#e0106a]Культ плоти[/color]
|
||||
# Shown at the end of a round of Traitor
|
||||
flesh-cult-objective-condition-success = { $condition } | [color={ $markupColor }]Успех![/color]
|
||||
flesh-cult-objective-condition-success = { $condition } | [color=green]Успех![/color]
|
||||
# Shown at the end of a round of Traitor
|
||||
flesh-cult-objective-condition-fail = { $condition } | [color={ $markupColor }]Провал![/color] ({ $progress }%)
|
||||
flesh-cult-objective-condition-fail = { $condition } | [color=red]Провал![/color] ({ $progress }%)
|
||||
flesh-cult-title = Культ плоти
|
||||
flesh-cult-description = На станции появился культ, который желает захватить станцию.
|
||||
flesh-cult-not-enough-ready-players = Недостаточно игроков готовы к игре! Из { $minimumPlayers } необходимых игроков готовы { $readyPlayersCount }.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
shared-solution-container-component-on-examine-empty-container = Не содержит вещества.
|
||||
shared-solution-container-component-on-examine-main-text = Содержит [color={ $color }]{ $desc }[/color] { $wordedAmount }
|
||||
shared-solution-container-component-on-examine-main-text = Содержит [color={ $color }]{ $desc }[/color] { $chemCount }
|
||||
shared-solution-container-component-on-examine-worded-amount-one-reagent = вещество.
|
||||
shared-solution-container-component-on-examine-worded-amount-multiple-reagents = смесь веществ.
|
||||
examinable-solution-has-recognizable-chemicals = В этом растворе вы можете распознать { $recognizedString }.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,12 @@ objectives-player-user-named = [color=White]{ $name }[/color] ([color=gray]{ $us
|
|||
objectives-player-user = [color=gray]{ $user }[/color]
|
||||
objectives-player-named = [color=White]{ $name }[/color]
|
||||
objectives-no-objectives = { $custody }{ $title } – { $agent }.
|
||||
|
||||
objectives-with-objectives = { $custody }{ $title } – { $agent } со следующими целями:
|
||||
objectives-objective-success = { $objective } | [color={ $markupColor }]Успех![/color]
|
||||
objectives-objective-fail = { $objective } | [color={ $markupColor }]Провал![/color] ({ $progress }%)
|
||||
|
||||
objectives-objective-success = {$objective} | [color=green]Успех![/color] ({TOSTRING($progress, "P0")})
|
||||
objectives-objective-partial-success = {$objective} | [color=yellow]Частичный успех![/color] ({TOSTRING($progress, "P0")})
|
||||
objectives-objective-partial-failure = {$objective} | [color=orange]Частичный провал![/color] ({TOSTRING($progress, "P0")})
|
||||
objectives-objective-fail = {$objective} | [color=red]Провал![/color] ({TOSTRING($progress, "P0")})
|
||||
|
||||
objectives-in-custody = [bold][color=red]| АРЕСТОВАН | [/color][/bold]
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ gun-selected-mode = Выбран { $mode }
|
|||
gun-disabled = Вы не можете использовать оружие!
|
||||
gun-clumsy = Оружие взрывается вам в лицо!
|
||||
gun-set-fire-mode = Выбран режим { $mode }
|
||||
gun-alert-level-condition = Слишком низкий станционный код для этого режима стрельбы!
|
||||
gun-magazine-whitelist-fail = Это не помещается в оружие!
|
||||
gun-magazine-fired-empty = Патронов не осталось!
|
||||
gun-Insulated-gloves = У вас слишком толстые пальцы чтобы нажать курок!
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@
|
|||
|
||||
#Make a scanner category when these actually function and we get the trayson
|
||||
- type: entity
|
||||
parent: [ClothingEyesBase, BaseToggleClothing]
|
||||
parent: [ClothingEyesBase, BaseToggleClothing, PowerCellSlotSmallItem] # Sunrise-edit
|
||||
id: ClothingEyesGlassesThermal
|
||||
name: optical thermal scanner
|
||||
description: Thermals in the shape of glasses.
|
||||
|
|
@ -259,6 +259,20 @@
|
|||
parent: true
|
||||
components:
|
||||
- type: ThermalVision
|
||||
- type: PowerCellDraw
|
||||
drawRate: 3.5
|
||||
useRate: 20
|
||||
- type: ItemToggle
|
||||
predictable: false # issues between ToggleCellDraw and ItemToggleActiveSound
|
||||
onUse: false
|
||||
canActivateInhand: false
|
||||
soundActivate:
|
||||
path: /Audio/_Sunrise/Items/Goggles/activate.ogg
|
||||
soundDeactivate:
|
||||
path: /Audio/_Sunrise/Items/Goggles/deactivate.ogg
|
||||
soundFailToActivate:
|
||||
path: /Audio/Machines/button.ogg
|
||||
- type: ToggleCellDraw
|
||||
# Sunrise-End
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@
|
|||
range: 3
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- HandheldStationMapUnpowered
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- type: BorgCrewManifestViewer
|
||||
- type: StationRecordKeyStorage
|
||||
# Sunrise-End
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@
|
|||
baseSprintSpeed : 4.5
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- AccessBreaker
|
||||
- AccessBreakerInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
- type: entity
|
||||
|
|
@ -194,8 +194,8 @@
|
|||
baseSprintSpeed: 5
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- Emag
|
||||
- HandheldHealthAnalyzerUnpowered
|
||||
- EmagInnateItem
|
||||
- HandheldHealthAnalyzerUnpoweredInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@
|
|||
voice: HearthstoneLordOfThunder
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- HandHeldMassScannerBorg
|
||||
- HandHeldMassScannerBorgInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -99,11 +99,11 @@
|
|||
voice: Portal2FactCore
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- PortableSurveillanceCameraMonitorUnpowered
|
||||
- HandheldStationMapUnpowered
|
||||
- HandheldCrewMonitorBorg
|
||||
- PortableSurveillanceCameraMonitorUnpoweredInnateItem
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- HandheldCrewMonitorBorgInnateItem
|
||||
worldTargetActions:
|
||||
- HandheldHealthAnalyzerUnpowered
|
||||
- HandheldHealthAnalyzerUnpoweredInnateItem
|
||||
- type: BorgBrain
|
||||
# Sunrise-End
|
||||
- type: ChangeVoiceInContainer
|
||||
|
|
@ -161,8 +161,8 @@
|
|||
enabled: false
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- AccessBreaker
|
||||
- HandheldHealthAnalyzerUnpowered
|
||||
- AccessBreakerInnateItem
|
||||
- HandheldHealthAnalyzerUnpoweredInnateItem
|
||||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
|
|
|
|||
|
|
@ -65,4 +65,4 @@
|
|||
- type: entity
|
||||
id: HandHeldMassScannerUnpowered
|
||||
parent: HandHeldMassScanner
|
||||
suffix: Handheld, Always Powered
|
||||
suffix: Handheld, Always Powered
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@
|
|||
tags:
|
||||
- Bottle
|
||||
- PillCanister
|
||||
- PatchPack # Sunrise-edit
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
buffer: {}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
sprite: _Starlight/Objects/Specific/Medical/implants.rsi
|
||||
state: eyes_night
|
||||
- type: FunctionalOrgan
|
||||
comps:
|
||||
- type: NightVision
|
||||
comps:
|
||||
- type: ToggleableNightVision
|
||||
- type: OrganVisualization
|
||||
layer: Eyes
|
||||
prototype: CyberEyesNightVision
|
||||
|
|
@ -40,8 +40,8 @@
|
|||
sprite: _Starlight/Objects/Specific/Medical/implants.rsi
|
||||
state: eyes_thermal
|
||||
- type: FunctionalOrgan
|
||||
comps:
|
||||
- type: ThermalVision
|
||||
comps:
|
||||
- type: ToggleableThermalVision
|
||||
- type: OrganVisualization
|
||||
layer: Eyes
|
||||
prototype: CyberEyesThermalVision
|
||||
prototype: CyberEyesThermalVision
|
||||
|
|
|
|||
|
|
@ -58,16 +58,6 @@
|
|||
eyes:
|
||||
- state: on-equipped-EYES
|
||||
shader: unshaded
|
||||
- type: PowerCellSlot
|
||||
cellSlotId: cell_slot
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
cell_slot:
|
||||
name: power-cell-slot-component-slot-name-default
|
||||
startingItem: PowerCellSmall
|
||||
- type: ToggleCellDraw
|
||||
- type: HideLayerClothing
|
||||
layers:
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@
|
|||
nameSegments: [NamesBorg]
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- Emag
|
||||
- EmagInnateItem
|
||||
|
||||
- type: startingGear
|
||||
id: SyndiReaperHardsuitGear
|
||||
|
|
@ -209,10 +209,10 @@
|
|||
- EmagImmune
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- PortableSurveillanceCameraMonitor
|
||||
- HandheldStationMapUnpowered
|
||||
- HandheldCrewMonitorBorg
|
||||
- HandHeldMassScannerUnpowered
|
||||
- PortableSurveillanceCameraMonitorUnpoweredInnateItem
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- HandheldCrewMonitorBorgInnateItem
|
||||
- HandHeldMassScannerBorgInnateItem
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
|
|
@ -330,7 +330,7 @@
|
|||
baseSprintSpeed : 3
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- Emag
|
||||
- EmagInnateItem
|
||||
|
||||
- type: entity
|
||||
id: BorgChassisSyndicateSpider
|
||||
|
|
@ -411,4 +411,4 @@
|
|||
baseSprintSpeed : 5
|
||||
- type: InnateItem
|
||||
worldTargetActions:
|
||||
- Emag
|
||||
- EmagInnateItem
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
- type: entity
|
||||
id: HandHeldMassScannerBorgInnateItem
|
||||
parent: HandHeldMassScannerBorg
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
id: HandheldStationMapUnpoweredInnateItem
|
||||
parent: BaseHandheldStationMap
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
id: EngiAlertsMonitorInnateItem
|
||||
parent: EngiAlertsMonitor
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
parent: HandheldCrewMonitorBorg
|
||||
id: HandheldCrewMonitorBorgInnateItem
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
id: PortableSurveillanceCameraMonitorUnpoweredInnateItem
|
||||
parent: PortableSurveillanceCameraMonitorUnpowered
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
id: HandheldCriminalRecordsMonitorUnpoweredInnateItem
|
||||
parent: HandheldCriminalRecordsMonitorUnpowered
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
id: HandheldHealthAnalyzerUnpoweredInnateItem
|
||||
parent: HandheldHealthAnalyzerUnpowered
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
parent: Emag
|
||||
id: EmagInnateItem
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
parent: AccessBreaker
|
||||
id: AccessBreakerInnateItem
|
||||
components:
|
||||
- type: Action
|
||||
|
||||
- type: entity
|
||||
parent: ForensicScanner
|
||||
id: ForensicScannerInnateItem
|
||||
components:
|
||||
- type: Action
|
||||
|
|
@ -39,8 +39,8 @@
|
|||
- type: BorgCuffed
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- PortableSurveillanceCameraMonitor
|
||||
- HandheldStationMapUnpowered
|
||||
- PortableSurveillanceCameraMonitorUnpoweredInnateItem
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- type: Access
|
||||
tags:
|
||||
- EmergencyShuttleRepealAll
|
||||
|
|
@ -159,7 +159,7 @@
|
|||
- BorgModuleGeneric
|
||||
- BorgModuleSecurity
|
||||
- BorgModuleSyndicate
|
||||
- BorgModuleSyndicateAssault
|
||||
- BorgModuleSyndicateAssault
|
||||
|
||||
defaultModules:
|
||||
- BorgModuleStandart
|
||||
|
|
@ -192,11 +192,11 @@
|
|||
voice: Sentrybot
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- PortableSurveillanceCameraMonitorUnpowered
|
||||
- HandheldCriminalRecordsMonitorUnpowered
|
||||
- HandheldStationMapUnpowered
|
||||
- PortableSurveillanceCameraMonitorUnpoweredInnateItem
|
||||
- HandheldCriminalRecordsMonitorUnpoweredInnateItem
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
worldTargetActions:
|
||||
- ForensicScanner
|
||||
- ForensicScannerInnateItem
|
||||
- type: ShowCriminalRecordIcons
|
||||
- type: ShowMindShieldIcons
|
||||
- type: BorgCuffed
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@
|
|||
- Mech
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- HandheldStationMapUnpowered
|
||||
- EngiAlertsMonitor
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- EngiAlertsMonitorInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
# Visual
|
||||
|
|
@ -135,7 +135,7 @@
|
|||
collection: FootstepCyborgSpider
|
||||
params:
|
||||
volume: -15
|
||||
|
||||
|
||||
addComponents:
|
||||
- type: BorgJetpack
|
||||
acceleration: 1
|
||||
|
|
@ -167,7 +167,7 @@
|
|||
False: {state: icon}
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- HandheldStationMapUnpowered
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
# Visual
|
||||
|
|
@ -285,10 +285,10 @@
|
|||
- type: FabricateCandy
|
||||
- type: InnateItem
|
||||
instantActions:
|
||||
- HandheldStationMapUnpowered
|
||||
- HandheldCrewMonitorBorg
|
||||
- HandheldStationMapUnpoweredInnateItem
|
||||
- HandheldCrewMonitorBorgInnateItem
|
||||
worldTargetActions:
|
||||
- HandheldHealthAnalyzerUnpowered
|
||||
- HandheldHealthAnalyzerUnpoweredInnateItem
|
||||
# Sunrise-End
|
||||
|
||||
# Visual
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue