Фикс многих тестов (#3586)
This commit is contained in:
parent
a42e78c3c9
commit
73455af753
106 changed files with 1126 additions and 969 deletions
|
|
@ -244,10 +244,12 @@ public sealed partial class AdminLogsControl : Control
|
|||
|
||||
foreach (var child in LogsContainer.Children)
|
||||
{
|
||||
if (child is not AdminLogLabel log)
|
||||
// Sunrise edit start - крутые красивые логи
|
||||
if (child is not SunriseAdminLogLabel log)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// Sunrise edit end
|
||||
|
||||
child.Visible = ShouldShowLog(log);
|
||||
if (child.Visible)
|
||||
|
|
@ -271,7 +273,8 @@ public sealed partial class AdminLogsControl : Control
|
|||
button.Text.Contains(PlayerSearch.Text, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private bool LogMatchesPlayerFilter(AdminLogLabel label)
|
||||
// Sunrise edit - крутые красивые логи
|
||||
private bool LogMatchesPlayerFilter(SunriseAdminLogLabel label)
|
||||
{
|
||||
if (label.Log.Players.Length == 0)
|
||||
return SelectedPlayers.Count == 0 || IncludeNonPlayerLogs;
|
||||
|
|
@ -279,7 +282,8 @@ public sealed partial class AdminLogsControl : Control
|
|||
return SelectedPlayers.Overlaps(label.Log.Players);
|
||||
}
|
||||
|
||||
private bool ShouldShowLog(AdminLogLabel label)
|
||||
// Sunrise edit - крутые красивые логи
|
||||
private bool ShouldShowLog(SunriseAdminLogLabel label)
|
||||
{
|
||||
// Check log type
|
||||
if (!SelectedTypes.Contains(label.Log.Type))
|
||||
|
|
@ -471,7 +475,11 @@ public sealed partial class AdminLogsControl : Control
|
|||
{
|
||||
ref var log = ref span[i];
|
||||
var separator = new HSeparator();
|
||||
var label = new AdminLogLabel(ref log, separator);
|
||||
|
||||
// Sunrise edit start - крутые красивые логи
|
||||
var label = new SunriseAdminLogLabel(ref log, separator);
|
||||
// Sunrise edit end
|
||||
|
||||
label.Visible = ShouldShowLog(label);
|
||||
|
||||
TotalLogs++;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using Content.Client._Sunrise.Administration.UI.CustomControls;
|
||||
using Content.Client.Administration.UI.CustomControls;
|
||||
using Content.Client.Eui;
|
||||
using Content.Shared.Administration.Logs;
|
||||
|
|
@ -109,8 +110,10 @@ public sealed class AdminLogsEui : BaseEui
|
|||
await writer.WriteLineAsync(CsvHeader);
|
||||
foreach (var child in LogsControl.LogsContainer.Children)
|
||||
{
|
||||
if (child is not AdminLogLabel logLabel || !child.Visible)
|
||||
// Sunrise edit start - крутые красивые логи
|
||||
if (child is not SunriseAdminLogLabel logLabel || !child.Visible)
|
||||
continue;
|
||||
// Sunrise edit end
|
||||
|
||||
var log = logLabel.Log;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,15 @@ using Robust.Shared.Utility;
|
|||
|
||||
namespace Content.Client._Sunrise.Administration.UI.CustomControls;
|
||||
|
||||
/// <summary>
|
||||
/// Красивая обертка для логов, поддерживающая форматирование текста.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Добавляет в начало файла цветовой индикатор важности логи и выделяет время жирным текстом. <br/>
|
||||
/// Дополнительную информацию о сущности выделяет <see cref="InfoColor"/> цветом, чтобы не засорять основную информацию. <br/>
|
||||
/// Цвета логов определяются в <see cref="GetTypeSpecificColor"/>
|
||||
/// </remarks>
|
||||
/// <seealso cref="AdminLogLabel"/>
|
||||
public sealed class SunriseAdminLogLabel : RichTextLabel
|
||||
{
|
||||
private const string InfoColor = "gray";
|
||||
|
|
@ -91,7 +100,7 @@ public sealed class SunriseAdminLogLabel : RichTextLabel
|
|||
|
||||
#endregion
|
||||
|
||||
public SharedAdminLog Log { get; }
|
||||
public new SharedAdminLog Log { get; }
|
||||
|
||||
public HSeparator Separator { get; }
|
||||
|
||||
|
|
@ -100,9 +109,9 @@ public sealed class SunriseAdminLogLabel : RichTextLabel
|
|||
Separator.Visible = Visible;
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
protected override void ExitedTree()
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
base.ExitedTree();
|
||||
|
||||
OnVisibilityChanged -= VisibilityChanged;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
using Content.Shared.Sunrise.FactionGunBlockerSystem;
|
||||
|
||||
namespace Content.Client._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class FactionWeaponBlockerComponent : SharedFactionWeaponBlockerComponent
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public bool CanUse;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public string AlertText = "";
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.Sunrise.FactionGunBlockerSystem;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Client._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
public sealed class FactionWeaponBlockerSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptShootEvent>(OnShootAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptMeleeEvent>(OnMeleeAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, UseAttemptEvent>(OnUseAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, InteractionAttemptEvent>(OnInteractAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, ComponentHandleState>(OnFactionWeaponBlockerHandleState);
|
||||
}
|
||||
|
||||
private void OnUseAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref UseAttemptEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancel();
|
||||
}
|
||||
|
||||
private void OnInteractAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref InteractionAttemptEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
private void OnFactionWeaponBlockerHandleState(EntityUid uid, FactionWeaponBlockerComponent component, ref ComponentHandleState args)
|
||||
{
|
||||
if (args.Current is not FactionWeaponBlockerComponentState state)
|
||||
return;
|
||||
|
||||
component.CanUse = state.CanUse;
|
||||
component.AlertText = state.AlertText;
|
||||
}
|
||||
|
||||
private void OnMeleeAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptMeleeEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = component.AlertText;
|
||||
}
|
||||
|
||||
private void OnShootAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptShootEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = component.AlertText;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Linq;
|
||||
using Content.Client._Sunrise.Administration.UI.CustomControls;
|
||||
using Content.Client.Administration.UI;
|
||||
using Content.Client.Administration.UI.CustomControls;
|
||||
using Content.Client.Administration.UI.Logs;
|
||||
|
|
@ -41,7 +42,11 @@ public sealed class LogWindowTest : InteractionTest
|
|||
await Client.WaitPost(() => search.Text = guid.ToString());
|
||||
await ClickControl(refresh);
|
||||
await RunTicks(5);
|
||||
var searchResult = cont.Children.Where(x => x.Visible && x is AdminLogLabel).Cast<AdminLogLabel>().ToArray();
|
||||
|
||||
// Sunrise edit start - крутые красивые логи
|
||||
var searchResult = cont.Children.Where(x => x.Visible && x is SunriseAdminLogLabel).Cast<SunriseAdminLogLabel>().ToArray();
|
||||
// Sunrise edit end
|
||||
|
||||
Assert.That(searchResult.Length, Is.EqualTo(1));
|
||||
Assert.That(searchResult[0].Log.Message, Contains.Substring($" test log 1: {guid}"));
|
||||
|
||||
|
|
@ -53,7 +58,11 @@ public sealed class LogWindowTest : InteractionTest
|
|||
await Client.WaitPost(() => search.Text = guid.ToString());
|
||||
await ClickControl(refresh);
|
||||
await RunTicks(5);
|
||||
searchResult = cont.Children.Where(x => x.Visible && x is AdminLogLabel).Cast<AdminLogLabel>().ToArray();
|
||||
|
||||
// Sunrise edit start - крутые красивые логи
|
||||
searchResult = cont.Children.Where(x => x.Visible && x is SunriseAdminLogLabel).Cast<SunriseAdminLogLabel>().ToArray();
|
||||
// Sunrise edit end
|
||||
|
||||
Assert.That(searchResult.Length, Is.EqualTo(1));
|
||||
Assert.That(searchResult[0].Log.Message, Contains.Substring($" test log 2: {guid}"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ public abstract class TileAtmosphereTest : AtmosTest
|
|||
[Test]
|
||||
public async Task FireSpreading()
|
||||
{
|
||||
// Sunrise added start - так как у нас включен ветер - это ломает математику теста. Ветер нужно выключить
|
||||
Server.CfgMan.SetCVar(CCVars.SpaceWind, false);
|
||||
Assert.That(Server.CfgMan.GetCVar(CCVars.SpaceWind), Is.False);
|
||||
// Sunrise added end
|
||||
|
||||
var markers = SEntMan.AllEntities<TestMarkerComponent>();
|
||||
|
||||
EntityUid source, point1, point2;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,14 @@ public sealed class BuckleDragTest : InteractionTest
|
|||
Assert.That(pullable.Puller, Is.Null);
|
||||
Assert.That(pullable.BeingPulled, Is.False);
|
||||
|
||||
// Sunrise added start - у нас пулинг не убирает бакл
|
||||
// Поэтому делаем это вручную, до того, как человека схватят, чтобы логика теста не сломалась
|
||||
await Server.WaitAssertion(() =>
|
||||
{
|
||||
Assert.That(Server.System<SharedBuckleSystem>().TryUnbuckle(sUrist, sUrist));
|
||||
});
|
||||
// Sunrise added end
|
||||
|
||||
// Start pulling, and thus unbuckle them
|
||||
await PressKey(ContentKeyFunctions.TryPullObject, cursorEntity: urist);
|
||||
await RunTicks(5);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ namespace Content.IntegrationTests.Tests.Buckle
|
|||
id: {BuckleDummyId}
|
||||
components:
|
||||
- type: Buckle
|
||||
# Sunrise edit start
|
||||
unbuckleDoafterTime: 0
|
||||
# Sunrise edit end
|
||||
- type: Hands
|
||||
- type: ComplexInteraction
|
||||
- type: InputMover
|
||||
|
|
|
|||
|
|
@ -251,6 +251,11 @@ public sealed class SuicideCommandTests
|
|||
var player = playerMan.Sessions.First().AttachedEntity!.Value;
|
||||
var mind = mindSystem.GetMind(player);
|
||||
|
||||
// Sunrise edit start - подарки от праздников ломают тест.
|
||||
// Поэтому выбрасываем все говно, что может помешать
|
||||
handsSystem.TryDrop(player);
|
||||
// Sunrise edit end
|
||||
|
||||
MindComponent mindComponent = default;
|
||||
MobStateComponent mobStateComp = default;
|
||||
MobThresholdsComponent mobThresholdsComp = default;
|
||||
|
|
@ -326,6 +331,11 @@ public sealed class SuicideCommandTests
|
|||
var player = playerMan.Sessions.First().AttachedEntity!.Value;
|
||||
var mind = mindSystem.GetMind(player);
|
||||
|
||||
// Sunrise edit start - подарки от праздников ломают тест.
|
||||
// Поэтому выбрасываем все говно, что может помешать
|
||||
handsSystem.TryDrop(player);
|
||||
// Sunrise edit end
|
||||
|
||||
MindComponent mindComponent = default;
|
||||
MobStateComponent mobStateComp = default;
|
||||
MobThresholdsComponent mobThresholdsComp = default;
|
||||
|
|
|
|||
|
|
@ -242,6 +242,10 @@ namespace Content.IntegrationTests.Tests
|
|||
"StationEvent",
|
||||
"TimedDespawn",
|
||||
|
||||
// Sunrise added start
|
||||
"StationTransitHub",
|
||||
// Sunrise added end
|
||||
|
||||
// makes an announcement on mapInit.
|
||||
"AnnounceOnSpawn",
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Server._Sunrise.Helpers;
|
||||
using Content.Server._Sunrise.Station;
|
||||
using Content.Server.Administration.Managers;
|
||||
using Content.Server.Administration.Systems;
|
||||
|
|
@ -13,7 +14,6 @@ using Content.Server.Spawners.Components;
|
|||
using Content.Server.Speech.Components;
|
||||
using Content.Server.Station.Components;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared._Sunrise.SunriseCCVars;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Humanoid;
|
||||
|
|
@ -45,7 +45,11 @@ namespace Content.Server.GameTicking
|
|||
[Dependency] private readonly AdminSystem _admin = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
[Dependency] private readonly ArrivalsSystem _arrivals = default!;
|
||||
[Dependency] private readonly NewLifeSystem _newLifeSystem = default!; // Sunrise-Edit
|
||||
|
||||
// Sunrise added start
|
||||
[Dependency] private readonly NewLifeSystem _newLife = default!;
|
||||
[Dependency] private readonly SunriseHelpersSystem _helpers = default!;
|
||||
// Sunrise added end
|
||||
|
||||
public static readonly EntProtoId ObserverPrototypeName = "MobObserver";
|
||||
public static readonly EntProtoId AdminObserverPrototypeName = "AdminObserver";
|
||||
|
|
@ -182,7 +186,10 @@ namespace Content.Server.GameTicking
|
|||
|
||||
if (station == EntityUid.Invalid)
|
||||
{
|
||||
var stations = GetSpawnableStations();
|
||||
// Sunrise edit start - фикс спавна на ЦК вместо девмапы
|
||||
var stations = _helpers.GetSpawnableStations();
|
||||
// Sunrise edit end
|
||||
|
||||
_robustRandom.Shuffle(stations);
|
||||
if (stations.Count == 0)
|
||||
station = EntityUid.Invalid;
|
||||
|
|
@ -197,8 +204,8 @@ namespace Content.Server.GameTicking
|
|||
}
|
||||
|
||||
// Sunrise-NewLife-Start
|
||||
_newLifeSystem.AddUsedCharactersForRespawn(player.UserId, _prefsManager.GetPreferences(player.UserId).SelectedCharacterIndex);
|
||||
_newLifeSystem.SetNextAllowRespawn(player.UserId, _gameTiming.CurTime + TimeSpan.FromMinutes(_newLifeSystem.NewLifeTimeout));
|
||||
_newLife.AddUsedCharactersForRespawn(player.UserId, _prefsManager.GetPreferences(player.UserId).SelectedCharacterIndex);
|
||||
_newLife.SetNextAllowRespawn(player.UserId, _gameTiming.CurTime + TimeSpan.FromMinutes(_newLife.NewLifeTimeout));
|
||||
// Sunrise-NewLife-End
|
||||
|
||||
string speciesId;
|
||||
|
|
@ -272,11 +279,17 @@ namespace Content.Server.GameTicking
|
|||
return;
|
||||
}
|
||||
|
||||
DoSpawn(player, character, station, jobId, silent, out var mob, out var jobPrototype, out var jobName);
|
||||
// Sunrise edit start - почему-то тут проебан тип спавна,
|
||||
// что приводит к тому, что ивент о спавне игрока не знает, куда его спавнить.
|
||||
// Учитывая, что у нас система из Delta-V с этими спавнпоинтами - я думаю, что тут наша ошибка, а не виздена.
|
||||
var spawnPointType = lateJoin ? SpawnPointType.LateJoin : SpawnPointType.Job;
|
||||
|
||||
DoSpawn(player, character, station, jobId, silent, out var mob, out var jobPrototype, out var jobName, spawnPointType);
|
||||
// Sunrise edit end
|
||||
|
||||
// Sunrise-Start
|
||||
if (HasComp<StationAntagsTargetsComponent>(station))
|
||||
EntityManager.AddComponent<AntagTargetComponent>(mob);
|
||||
EnsureComp<AntagTargetComponent>(mob);
|
||||
// Sunrise-End
|
||||
|
||||
if (lateJoin && !silent)
|
||||
|
|
@ -365,7 +378,8 @@ namespace Content.Server.GameTicking
|
|||
bool silent,
|
||||
out EntityUid mob,
|
||||
out JobPrototype jobPrototype,
|
||||
out string jobName)
|
||||
out string jobName,
|
||||
SpawnPointType spawnPointType = SpawnPointType.Unset) // Sunrise added
|
||||
{
|
||||
PlayerJoinGame(player, silent);
|
||||
|
||||
|
|
@ -380,7 +394,7 @@ namespace Content.Server.GameTicking
|
|||
|
||||
_playTimeTrackings.PlayerRolesChanged(player);
|
||||
|
||||
var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character);
|
||||
var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character, spawnPointType: spawnPointType);
|
||||
DebugTools.AssertNotNull(mobMaybe);
|
||||
mob = mobMaybe!.Value;
|
||||
|
||||
|
|
|
|||
|
|
@ -164,6 +164,14 @@ public sealed class SecretRuleSystem : GameRuleSystem<SecretRuleComponent>
|
|||
if (selected == null)
|
||||
return false;
|
||||
|
||||
// Sunrise added start - Почему раньше это НЕ учитывалось
|
||||
if (players < selected.MinPlayers)
|
||||
return false;
|
||||
|
||||
if (players > selected.MaxPlayers)
|
||||
return false;
|
||||
// Sunrise added end
|
||||
|
||||
foreach (var ruleId in selected.Rules)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex(ruleId, out EntityPrototype? rule)
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Holiday
|
||||
{
|
||||
[Prototype("holidayGiveawayItem")]
|
||||
public sealed partial class HolidayGiveawayItemPrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField("holiday", customTypeSerializer:typeof(PrototypeIdSerializer<HolidayPrototype>))]
|
||||
public string Holiday { get; private set; } = string.Empty;
|
||||
|
||||
[DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string Prototype { get; private set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
|
|
@ -39,8 +39,8 @@ namespace Content.Server.Holiday
|
|||
private IHolidayGreet _greet = new DefaultHolidayGreet();
|
||||
|
||||
// Sunrise-Start
|
||||
[DataField("greetColor")]
|
||||
private Color? _color;
|
||||
[DataField]
|
||||
public Color? Color;
|
||||
// Sunrise-End
|
||||
|
||||
[DataField("celebrate")]
|
||||
|
|
@ -56,13 +56,6 @@ namespace Content.Server.Holiday
|
|||
return _greet.Greet(this);
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
public Color? GreetColor()
|
||||
{
|
||||
return _color;
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
/// <summary>
|
||||
/// Called before the round starts to set up any festive shenanigans.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ namespace Content.Server.Holiday
|
|||
{
|
||||
foreach (var holiday in _currentHolidays)
|
||||
{
|
||||
_chatManager.DispatchServerAnnouncement(holiday.Greet(), holiday.GreetColor()); // Sunrise-Edit
|
||||
_chatManager.DispatchServerAnnouncement(holiday.Greet(), holiday.Color); // Sunrise-Edit
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ namespace Content.Server.Holiday
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void OnLightMapInit(Entity<PointLightComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
foreach (var holiday in _currentHolidays)
|
||||
|
|
|
|||
|
|
@ -24,9 +24,16 @@ public sealed class ToggleNinjaSuitDrawSystem : EntitySystem
|
|||
|
||||
private void OnMapInit(Entity<ToggleNinjaSuitDrawComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
var uid = ent.Owner;
|
||||
var draw = Comp<NinjaSuitDrawComponent>(uid);
|
||||
_suitDraw.SetEnabled((uid, draw), _toggle.IsActivated(uid));
|
||||
if (!TryComp<NinjaSuitDrawComponent>(ent, out var draw))
|
||||
{
|
||||
// Если тут будет стоять еррор, то AllComponentsToOneDeleteTest насрет, что все плохо.
|
||||
Log.Warning($"Found entity {ToPrettyString(ent)} with {nameof(ToggleNinjaSuitDrawComponent)} but without {nameof(NinjaSuitDrawComponent)}! Toggle component will be removed");
|
||||
RemComp<ToggleNinjaSuitDrawComponent>(ent);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
_suitDraw.SetEnabled((ent, draw), _toggle.IsActivated(ent.Owner));
|
||||
}
|
||||
|
||||
private void OnActivateAttempt(Entity<ToggleNinjaSuitDrawComponent> ent, ref ItemToggleActivateAttemptEvent args)
|
||||
|
|
|
|||
|
|
@ -33,36 +33,29 @@ public sealed class SpawnPointSystem : EntitySystem
|
|||
if (args.Station != null && _stationSystem.GetOwningStation(uid, xform) != args.Station)
|
||||
continue;
|
||||
|
||||
// Sunrise added start
|
||||
// Delta-V: Allow setting a desired SpawnPointType
|
||||
if (args.DesiredSpawnPointType != SpawnPointType.Unset)
|
||||
|
||||
// То, что приходит из ивента главнее заданного в спавнпоинте.
|
||||
var spawnPointType = args.DesiredSpawnPointType != SpawnPointType.Unset
|
||||
? args.DesiredSpawnPointType
|
||||
: spawnPoint.SpawnType;
|
||||
|
||||
var isMatchingJob = string.IsNullOrEmpty(args.Job)
|
||||
|| string.IsNullOrEmpty(spawnPoint.Job)
|
||||
|| spawnPoint.Job == args.Job;
|
||||
|
||||
switch (spawnPointType)
|
||||
{
|
||||
var isMatchingJob = spawnPoint.SpawnType == SpawnPointType.Job &&
|
||||
(args.Job == null || spawnPoint.Job == args.Job);
|
||||
|
||||
switch (args.DesiredSpawnPointType)
|
||||
{
|
||||
case SpawnPointType.Job when isMatchingJob:
|
||||
case SpawnPointType.LateJoin when spawnPoint.SpawnType == SpawnPointType.LateJoin:
|
||||
case SpawnPointType.Observer when spawnPoint.SpawnType == SpawnPointType.Observer:
|
||||
possiblePositions.Add(xform.Coordinates);
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
else
|
||||
{
|
||||
|
||||
if (spawnPoint.SpawnType == SpawnPointType.Job &&
|
||||
(args.Job == null || spawnPoint.Job == args.Job))
|
||||
{
|
||||
case SpawnPointType.Job when isMatchingJob && spawnPoint.SpawnType == SpawnPointType.Job:
|
||||
case SpawnPointType.LateJoin when spawnPoint.SpawnType == SpawnPointType.LateJoin:
|
||||
case SpawnPointType.Observer when spawnPoint.SpawnType == SpawnPointType.Observer:
|
||||
possiblePositions.Add(xform.Coordinates);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
// Sunrise added end
|
||||
}
|
||||
|
||||
if (possiblePositions.Count == 0)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using Content.Server.Access.Systems;
|
||||
using Content.Server.Holiday;
|
||||
using Content.Server.Humanoid;
|
||||
using Content.Server.Mind;
|
||||
using Content.Server.PDA;
|
||||
|
|
@ -11,7 +10,6 @@ using Content.Shared.Access.Systems;
|
|||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Clothing;
|
||||
using Content.Shared.DetailExaminable;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Humanoid.Prototypes;
|
||||
using Content.Shared.IdentityManagement;
|
||||
|
|
@ -222,25 +220,6 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
|||
{
|
||||
jobSpecial.AfterEquip(entity);
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
foreach (var giveaway in _prototypeManager.EnumeratePrototypes<HolidayGiveawayItemPrototype>())
|
||||
{
|
||||
if (string.IsNullOrEmpty(giveaway.Holiday) || string.IsNullOrEmpty(giveaway.Prototype))
|
||||
continue;
|
||||
|
||||
var sysMan = IoCManager.Resolve<IEntitySystemManager>();
|
||||
|
||||
if (!sysMan.GetEntitySystem<HolidaySystem>().IsCurrentlyHoliday(giveaway.Holiday))
|
||||
continue;
|
||||
|
||||
var entMan = IoCManager.Resolve<IEntityManager>();
|
||||
|
||||
var ent = entMan.SpawnEntity(giveaway.Prototype, entMan.GetComponent<TransformComponent>(entity).Coordinates);
|
||||
|
||||
sysMan.GetEntitySystem<SharedHandsSystem>().PickupOrDrop(entity, ent);
|
||||
}
|
||||
// Sunrise-End
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ public sealed class BiocodeDefibrillatorSystem : EntitySystem
|
|||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<BiocodeComponent, SunriseCanZapEvent>(OnCanZap);
|
||||
}
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ public sealed class BiocodeDefibrillatorSystem : EntitySystem
|
|||
|
||||
// User is not authorized, cancel the zap
|
||||
if (!string.IsNullOrEmpty(component.AlertText))
|
||||
_popup.PopupEntity(component.AlertText, uid, args.User.Value);
|
||||
_popup.PopupEntity(Loc.GetString(component.AlertText), uid, args.User.Value);
|
||||
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -397,6 +397,9 @@ public sealed class BloodCultRuleSystem : GameRuleSystem<BloodCultRuleComponent>
|
|||
{
|
||||
foreach (var userAction in actionsComponent.Actions)
|
||||
{
|
||||
if (TerminatingOrDeleted(userAction))
|
||||
continue;
|
||||
|
||||
var entityPrototypeId = MetaData(userAction).EntityPrototype?.ID;
|
||||
if (entityPrototypeId != null && BloodCultistComponent.CultistActions.Contains(entityPrototypeId))
|
||||
_actionsSystem.RemoveAction(uid, userAction);
|
||||
|
|
|
|||
|
|
@ -13,11 +13,13 @@ using Content.Shared._Sunrise.Events;
|
|||
using Content.Shared.Blocking;
|
||||
using Content.Shared.Body.Events;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Interaction.Components;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Mobs;
|
||||
using Content.Shared.Mobs.Components;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.NPC.Systems;
|
||||
using Content.Shared.Popups;
|
||||
|
|
@ -164,6 +166,10 @@ public sealed partial class CultMirrorShieldSystem : EntitySystem
|
|||
/// </summary>
|
||||
private void OnIllusionInit(EntityUid uid, CultMirrorIllusionComponent component, ComponentInit args)
|
||||
{
|
||||
EnsureComp<MobStateComponent>(uid);
|
||||
EnsureComp<MobThresholdsComponent>(uid);
|
||||
EnsureComp<DamageableComponent>(uid);
|
||||
|
||||
_mobThreshold.SetMobStateThreshold(uid, 15, MobState.Critical);
|
||||
_mobThreshold.SetMobStateThreshold(uid, 20, MobState.Dead);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,9 @@ public sealed class ExtendedAccessSystem : EntitySystem
|
|||
/// </summary>
|
||||
private void AfterDelay(Entity<AlertLevelComponent> station)
|
||||
{
|
||||
if (TerminatingOrDeleted(station))
|
||||
return;
|
||||
|
||||
_chat.DispatchStationAnnouncement(station,
|
||||
Loc.GetString("access-system-accesses-established"),
|
||||
colorOverride: Color.Yellow,
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
using Content.Shared.NPC.Prototypes;
|
||||
using Content.Shared.Sunrise.FactionGunBlockerSystem;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
||||
|
||||
namespace Content.Server._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class FactionWeaponBlockerComponent : SharedFactionWeaponBlockerComponent
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public bool CanUse;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("alertText")]
|
||||
public string AlertText = "";
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite),
|
||||
DataField("factions", customTypeSerializer:typeof(PrototypeIdHashSetSerializer<NpcFactionPrototype>))]
|
||||
public HashSet<string> Factions = new();
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
using Content.Shared.Hands;
|
||||
using Content.Shared.NPC.Components;
|
||||
using Content.Shared.Sunrise.FactionGunBlockerSystem;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Server._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
public sealed class FactionWeaponBlockerSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptShootEvent>(OnShootAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptMeleeEvent>(OnMeleeAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, ComponentGetState>(OnGetState);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, GotEquippedHandEvent>(OnGotEquippedHand);
|
||||
}
|
||||
|
||||
private void OnGotEquippedHand(EntityUid uid, FactionWeaponBlockerComponent component, GotEquippedHandEvent args)
|
||||
{
|
||||
var canUse = false;
|
||||
if (TryComp<NpcFactionMemberComponent>(args.User, out var npcFactionMemberComponent))
|
||||
{
|
||||
foreach (var faction in npcFactionMemberComponent.Factions)
|
||||
{
|
||||
if (component.Factions.Contains(faction))
|
||||
canUse = true;
|
||||
}
|
||||
}
|
||||
|
||||
component.CanUse = canUse;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private void OnGetState(EntityUid uid, FactionWeaponBlockerComponent component, ref ComponentGetState args)
|
||||
{
|
||||
args.State = new FactionWeaponBlockerComponentState()
|
||||
{
|
||||
CanUse = component.CanUse,
|
||||
AlertText = component.AlertText
|
||||
};
|
||||
}
|
||||
|
||||
private void OnMeleeAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptMeleeEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = component.AlertText;
|
||||
}
|
||||
|
||||
private void OnShootAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptShootEvent args)
|
||||
{
|
||||
if (component.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = component.AlertText;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server._Sunrise.Other.StationOnlyDirectSpawn;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Station.Components;
|
||||
using Content.Shared._Sunrise.Helpers;
|
||||
|
|
@ -125,4 +126,19 @@ public sealed partial class SunriseHelpersSystem : SharedSunriseHelpersSystem
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public List<EntityUid> GetSpawnableStations()
|
||||
{
|
||||
var spawnableStations = new List<EntityUid>();
|
||||
var query = EntityQueryEnumerator<StationJobsComponent, StationSpawningComponent>();
|
||||
while (query.MoveNext(out var uid, out _, out _))
|
||||
{
|
||||
if (HasComp<StationOnlyDirectSpawnComponent>(uid))
|
||||
continue;
|
||||
|
||||
spawnableStations.Add(uid);
|
||||
}
|
||||
|
||||
return spawnableStations;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
using Content.Server.Holiday;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
|
||||
|
||||
/// <summary>
|
||||
/// Прототип для подарков, которые будут выданы в определенный праздник.
|
||||
/// <seealso cref="HolidayGiveawaySystem"/>
|
||||
/// <seealso cref="PreventHolidayGiveawayComponent"/>
|
||||
/// </summary>
|
||||
[Prototype]
|
||||
public sealed partial class HolidayGiveawayItemPrototype : IPrototype
|
||||
{
|
||||
[IdDataField, ViewVariables]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField(required: true)]
|
||||
public ProtoId<HolidayPrototype> Holiday;
|
||||
|
||||
[DataField(required: true)]
|
||||
public EntProtoId Prototype;
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
using Content.Server.GameTicking;
|
||||
using Content.Server.Hands.Systems;
|
||||
using Content.Server.Holiday;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.GameTicking;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
|
||||
|
||||
/// <summary>
|
||||
/// Система для выдачи различных подарков во время определенных праздников.
|
||||
/// </summary>
|
||||
public sealed class HolidayGiveawaySystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IConfigurationManager _configuration = default!;
|
||||
[Dependency] private readonly HolidaySystem _holiday = default!;
|
||||
[Dependency] private readonly HandsSystem _hands = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Кешированные текущие раздачи, которые будут применены после спавна игрока в <see cref="OnPlayerSpawn"/> <br/>
|
||||
/// Сбрасываются и пересчитываются каждый раунд в <see cref="CacheGiveaways()"/>
|
||||
/// </summary>
|
||||
private readonly List<ProtoId<HolidayGiveawayItemPrototype>> _activeGiveaways = [];
|
||||
|
||||
[ViewVariables]
|
||||
private bool _enabled = true;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
Subs.CVar(_configuration, CCVars.HolidaysEnabled, OnHolidaysEnableChange);
|
||||
|
||||
SubscribeLocalEvent<GameRunLevelChangedEvent>(CacheGiveaways);
|
||||
SubscribeLocalEvent<RoundStartedEvent>(CacheGiveaways);
|
||||
|
||||
SubscribeLocalEvent<PlayerSpawnCompleteEvent>(OnPlayerSpawn);
|
||||
SubscribeLocalEvent<PreventHolidayGiveawayComponent, HolidayGiveawayAttemptEvent>(Cancel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Основной метод для кеширования подарков.
|
||||
/// </summary>
|
||||
private void CacheGiveaways(GameRunLevelChangedEvent ev)
|
||||
{
|
||||
if (!_enabled)
|
||||
return;
|
||||
|
||||
if (ev.New != GameRunLevel.PreRoundLobby)
|
||||
return;
|
||||
|
||||
CacheGiveaways();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительный метод для кеширования подарков.
|
||||
/// Специально для случая, когда лобби недоступно или выключено.
|
||||
/// </summary>
|
||||
private void CacheGiveaways(RoundStartedEvent ev)
|
||||
{
|
||||
if (!_enabled)
|
||||
return;
|
||||
|
||||
if (_activeGiveaways.Count != 0)
|
||||
return;
|
||||
|
||||
CacheGiveaways();
|
||||
}
|
||||
|
||||
private void CacheGiveaways()
|
||||
{
|
||||
_activeGiveaways.Clear();
|
||||
|
||||
foreach (var giveaway in _prototype.EnumeratePrototypes<HolidayGiveawayItemPrototype>())
|
||||
{
|
||||
if (!_holiday.IsCurrentlyHoliday(giveaway.Holiday))
|
||||
continue;
|
||||
|
||||
_activeGiveaways.Add(giveaway.ID);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPlayerSpawn(PlayerSpawnCompleteEvent ev)
|
||||
{
|
||||
if (!_enabled)
|
||||
return;
|
||||
|
||||
if (_activeGiveaways.Count == 0)
|
||||
return;
|
||||
|
||||
var attempt = new HolidayGiveawayAttemptEvent();
|
||||
RaiseLocalEvent(ev.Mob, ref attempt);
|
||||
|
||||
if (attempt.Canceled)
|
||||
return;
|
||||
|
||||
foreach (var giveawayProto in _activeGiveaways)
|
||||
{
|
||||
var giveAway = _prototype.Index(giveawayProto);
|
||||
var present = SpawnNextToOrDrop(giveAway.Prototype, ev.Mob);
|
||||
|
||||
_hands.PickupOrDrop(ev.Mob, present);
|
||||
}
|
||||
}
|
||||
|
||||
private void Cancel(Entity<PreventHolidayGiveawayComponent> ent, ref HolidayGiveawayAttemptEvent args)
|
||||
{
|
||||
args.Canceled = true;
|
||||
}
|
||||
|
||||
private void OnHolidaysEnableChange(bool enabled)
|
||||
{
|
||||
_enabled = enabled;
|
||||
|
||||
if (enabled)
|
||||
CacheGiveaways();
|
||||
else
|
||||
_activeGiveaways.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
[ByRefEvent]
|
||||
public record struct HolidayGiveawayAttemptEvent
|
||||
{
|
||||
public bool Canceled;
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
|
||||
|
||||
/// <summary>
|
||||
/// Компонент, блокирующий выдаче сущности подарков в честь праздника.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class PreventHolidayGiveawayComponent : Component
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
namespace Content.Server._Sunrise.Other.StationOnlyDirectSpawn;
|
||||
|
||||
/// <summary>
|
||||
/// Компонент маркер, который обозначает, что на станции нельзя будет заспавниться путем случайного выбора из пула доступных станций.
|
||||
/// Это нужно, чтобы помечать станции, на которые появляться должно быть можно ТОЛЬКО путем прямого спавна на ней
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class StationOnlyDirectSpawnComponent : Component
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -48,7 +48,8 @@ public sealed class SyndicateTeleporterSystem : EntitySystem
|
|||
if (TryComp<BiocodeComponent>(uid, out var biocode) && !_biocode.CanUse(args.User, biocode.Factions))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(biocode.AlertText))
|
||||
_popup.PopupEntity(biocode.AlertText, args.User, args.User);
|
||||
_popup.PopupEntity(Loc.GetString(biocode.AlertText), args.User, args.User);
|
||||
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public sealed partial class BuckleComponent : Component
|
|||
|
||||
// Sunrise-Start
|
||||
[DataField]
|
||||
public float UnbuckleDoafterTime = 2f;
|
||||
public TimeSpan UnbuckleDoafterTime = TimeSpan.FromSeconds(2f);
|
||||
// Sunrise-End
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -116,14 +116,10 @@ public abstract partial class SharedBuckleSystem
|
|||
{
|
||||
BreakOnMove = true,
|
||||
BreakOnDamage = true,
|
||||
AttemptFrequency = AttemptFrequency.EveryTick
|
||||
AttemptFrequency = AttemptFrequency.EveryTick,
|
||||
};
|
||||
|
||||
if (_doAfter.TryStartDoAfter(doAfterArgs))
|
||||
{
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
args.Handled = _doAfter.TryStartDoAfter(doAfterArgs);
|
||||
}
|
||||
}
|
||||
// Sunrise-End
|
||||
|
|
|
|||
|
|
@ -1,17 +1,15 @@
|
|||
using Content.Shared.Damage;
|
||||
using Content.Shared.Damage.Prototypes;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Shared._Sunrise.Abilities.Felinid;
|
||||
|
||||
[RegisterComponent]
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class FelinidLickingComponent : Component
|
||||
{
|
||||
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string ActionLickingWoundsId = "ActionLickingWounds";
|
||||
[DataField]
|
||||
public EntProtoId ActionLickingWoundsId = "ActionLickingWounds";
|
||||
|
||||
[DataField(required: true)]
|
||||
public DamageSpecifier Damage = default!;
|
||||
|
|
@ -26,8 +24,11 @@ public sealed partial class FelinidLickingComponent : Component
|
|||
public TimeSpan Delay = TimeSpan.FromSeconds(3f);
|
||||
|
||||
[DataField]
|
||||
public SoundSpecifier? HealingBeginSound = null;
|
||||
public SoundSpecifier? HealingBeginSound;
|
||||
|
||||
[DataField]
|
||||
public SoundSpecifier? HealingEndSound = null;
|
||||
public SoundSpecifier? HealingEndSound;
|
||||
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
public EntityUid? Action;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using Content.Shared.Actions;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Standing;
|
||||
|
|
@ -12,7 +11,6 @@ using Content.Shared.Mobs.Systems;
|
|||
using Content.Shared.Nutrition.Components;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Serialization;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.Damage.Systems;
|
||||
|
||||
|
|
@ -25,56 +23,63 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageable = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedBloodstreamSystem _bloodstreamSystem = default!;
|
||||
[Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!;
|
||||
[Dependency] private readonly StandingStateSystem _standing = default!;
|
||||
[Dependency] private readonly InventorySystem _inventorySystem = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FelinidLickingComponent, ComponentStartup>(OnStartup);
|
||||
SubscribeLocalEvent<FelinidLickingComponent, ComponentShutdown>(OnShutdown);
|
||||
|
||||
SubscribeLocalEvent<FelinidLickingComponent, LickingWoundsTargetActionEvent>(OnLickingAction);
|
||||
SubscribeLocalEvent<FelinidLickingComponent, FelinidLickingDoAfterEvent>(OnDoAfter);
|
||||
}
|
||||
|
||||
private void OnStartup(EntityUid uid, FelinidLickingComponent component, ComponentStartup args)
|
||||
private void OnStartup(Entity<FelinidLickingComponent> ent, ref ComponentStartup args)
|
||||
{
|
||||
_actions.AddAction(uid, component.ActionLickingWoundsId);
|
||||
_actions.AddAction(ent, ref ent.Comp.Action, ent.Comp.ActionLickingWoundsId);
|
||||
Dirty(ent);
|
||||
}
|
||||
|
||||
private void OnLickingAction(EntityUid uid, FelinidLickingComponent component, LickingWoundsTargetActionEvent args)
|
||||
private void OnShutdown(Entity<FelinidLickingComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
if (args.Handled || args.Target == null) // мда
|
||||
_actions.RemoveAction(ent.Owner, ent.Comp.Action);
|
||||
}
|
||||
|
||||
private void OnLickingAction(Entity<FelinidLickingComponent> ent, ref LickingWoundsTargetActionEvent args)
|
||||
{
|
||||
if (args.Handled) // мда
|
||||
return;
|
||||
|
||||
var target = args.Target;
|
||||
|
||||
if (!CanLick(uid, target, component, out var damageable, out var errorMessage))
|
||||
if (!CanLick(ent, args.Target, out var errorMessage))
|
||||
{
|
||||
if (errorMessage != null)
|
||||
_popup.PopupClient(errorMessage, uid, uid);
|
||||
_popup.PopupClient(errorMessage, ent, ent);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
StartLicking(uid, target, component, damageable!);
|
||||
args.Handled = TryStartLicking(ent, args.Target);
|
||||
}
|
||||
|
||||
private void StartLicking(EntityUid uid, EntityUid target, FelinidLickingComponent licking, DamageableComponent damageable)
|
||||
private bool TryStartLicking(Entity<FelinidLickingComponent> ent, EntityUid target)
|
||||
{
|
||||
_audio.PlayPredicted(licking.HealingBeginSound, uid, uid);
|
||||
_audio.PlayPredicted(ent.Comp.HealingBeginSound, ent, ent);
|
||||
|
||||
var doAfterArgs = new DoAfterArgs(EntityManager, uid, licking.Delay, new FelinidLickingDoAfterEvent(), uid, target: target)
|
||||
var doAfterArgs = new DoAfterArgs(EntityManager, ent, ent.Comp.Delay, new FelinidLickingDoAfterEvent(), ent, target: target)
|
||||
{
|
||||
BreakOnMove = true,
|
||||
NeedHand = false
|
||||
NeedHand = false,
|
||||
};
|
||||
|
||||
_doAfter.TryStartDoAfter(doAfterArgs);
|
||||
return _doAfter.TryStartDoAfter(doAfterArgs);
|
||||
}
|
||||
|
||||
private void OnDoAfter(EntityUid uid, FelinidLickingComponent component, FelinidLickingDoAfterEvent args)
|
||||
private void OnDoAfter(Entity<FelinidLickingComponent> ent, ref FelinidLickingDoAfterEvent args)
|
||||
{
|
||||
if (args.Cancelled || args.Handled || args.Target is not { } target)
|
||||
return;
|
||||
|
|
@ -82,28 +87,26 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
if (!TryComp<DamageableComponent>(target, out var damageable))
|
||||
return;
|
||||
|
||||
_damageable.TryChangeDamage(target, component.Damage, true, origin: uid);
|
||||
_damageable.TryChangeDamage(target, ent.Comp.Damage, true, origin: ent);
|
||||
|
||||
if (component.StopBleeding && TryComp<BloodstreamComponent>(target, out var bloodstream))
|
||||
if (ent.Comp.StopBleeding && TryComp<BloodstreamComponent>(target, out var bloodstream))
|
||||
{
|
||||
var wasBleeding = bloodstream.BleedAmount > 0;
|
||||
_bloodstreamSystem.TryModifyBleedAmount((target, bloodstream), component.BloodlossModifier);
|
||||
_bloodstream.TryModifyBleedAmount((target, bloodstream), ent.Comp.BloodlossModifier);
|
||||
|
||||
if (wasBleeding && bloodstream.BleedAmount <= 0)
|
||||
{
|
||||
var popup = (uid == target)
|
||||
var popup = ent.Owner == target
|
||||
? Loc.GetString("medical-item-stop-bleeding-self")
|
||||
: Loc.GetString("medical-item-stop-bleeding", ("target", Identity.Entity(target, EntityManager)));
|
||||
_popup.PopupClient(popup, target, uid);
|
||||
_popup.PopupClient(popup, target, ent);
|
||||
}
|
||||
}
|
||||
|
||||
_audio.PlayPredicted(component.HealingEndSound, uid, uid);
|
||||
_audio.PlayPredicted(ent.Comp.HealingEndSound, ent, ent);
|
||||
|
||||
if (_mobStateSystem.IsAlive(target) && HasDamageToHeal(target, damageable, component))
|
||||
{
|
||||
StartLicking(uid, target, component, damageable);
|
||||
}
|
||||
if (_mobState.IsAlive(target) && HasDamageToHeal(target, damageable, ent.Comp))
|
||||
TryStartLicking(ent, target);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
|
@ -111,28 +114,24 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
/// <summary>
|
||||
/// Проверяет, можно ли облизывать раны цели
|
||||
/// </summary>
|
||||
/// <param name="licker">Тот, кто облизывает</param>
|
||||
/// <param name="ent">Тот, кто облизывает</param>
|
||||
/// <param name="target">Цель</param>
|
||||
/// <param name="component">Компонент облизывания</param>
|
||||
/// <param name="damageable">Компонент урона цели (если доступен)</param>
|
||||
/// <param name="errorMessage">Сообщение об ошибке (если есть)</param>
|
||||
/// <returns>True, если можно облизывать</returns>
|
||||
private bool CanLick(EntityUid licker, EntityUid target, FelinidLickingComponent component,
|
||||
[NotNullWhen(true)] out DamageableComponent? damageable, out string? errorMessage)
|
||||
private bool CanLick(Entity<FelinidLickingComponent> ent, EntityUid target, out string? errorMessage)
|
||||
{
|
||||
damageable = null;
|
||||
errorMessage = null;
|
||||
|
||||
if (_standing.IsDown(licker))
|
||||
if (_standing.IsDown(ent.Owner))
|
||||
return false;
|
||||
|
||||
if (!TryComp<DamageableComponent>(target, out damageable))
|
||||
if (!TryComp<DamageableComponent>(target, out var damageable))
|
||||
return false;
|
||||
|
||||
if (!_mobStateSystem.IsAlive(target))
|
||||
if (!_mobState.IsAlive(target))
|
||||
return false;
|
||||
|
||||
if (HasIngestionBlocker(licker))
|
||||
if (HasIngestionBlocker(ent))
|
||||
{
|
||||
errorMessage = Loc.GetString("felinid-licking-blocked-by-blocker");
|
||||
return false;
|
||||
|
|
@ -144,7 +143,7 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!HasDamageToHeal(target, damageable, component))
|
||||
if (!HasDamageToHeal(target, damageable, ent.Comp))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -155,7 +154,7 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
/// </summary>
|
||||
private bool HasDamageToHeal(EntityUid target, DamageableComponent damageable, FelinidLickingComponent licking)
|
||||
{
|
||||
foreach (var (type, amount) in licking.Damage.DamageDict)
|
||||
foreach (var (type, _) in licking.Damage.DamageDict)
|
||||
{
|
||||
if (damageable.Damage.DamageDict.TryGetValue(type, out var currentDamage) &&
|
||||
currentDamage > FixedPoint2.Zero)
|
||||
|
|
@ -181,7 +180,7 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
if (!TryComp<InventoryComponent>(uid, out var inventory))
|
||||
return false;
|
||||
|
||||
var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventory), SlotFlags.MASK | SlotFlags.HEAD);
|
||||
var enumerator = _inventory.GetSlotEnumerator((uid, inventory), SlotFlags.MASK | SlotFlags.HEAD);
|
||||
while (enumerator.NextItem(out var item))
|
||||
{
|
||||
if (TryComp<IngestionBlockerComponent>(item, out var blocker) && blocker.Enabled)
|
||||
|
|
@ -199,7 +198,7 @@ public sealed class FelinidLickingSystem : EntitySystem
|
|||
if (!TryComp<InventoryComponent>(uid, out var inventory))
|
||||
return false;
|
||||
|
||||
var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventory), SlotFlags.INNERCLOTHING | SlotFlags.OUTERCLOTHING);
|
||||
var enumerator = _inventory.GetSlotEnumerator((uid, inventory), SlotFlags.INNERCLOTHING | SlotFlags.OUTERCLOTHING);
|
||||
return enumerator.NextItem(out _);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
using Content.Shared.NPC.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.Biocode;
|
||||
|
||||
[RegisterComponent]
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class BiocodeComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("alertText")]
|
||||
public string AlertText = "";
|
||||
[DataField]
|
||||
public string AlertText = "item-biocode-refused";
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite),
|
||||
DataField("factions", customTypeSerializer:typeof(PrototypeIdHashSetSerializer<NpcFactionPrototype>))]
|
||||
public HashSet<string> Factions = new();
|
||||
[DataField(required: true)]
|
||||
public HashSet<ProtoId<NpcFactionPrototype>> Factions = [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
using Content.Shared.NPC.Components;
|
||||
using Content.Shared.NPC.Prototypes;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.Biocode;
|
||||
|
||||
|
|
@ -13,7 +15,7 @@ public sealed class BiocodeSystem : EntitySystem
|
|||
SubscribeLocalEvent<BiocodeComponent, AttemptThrowBiocodeEvent>(OnAttemptThrowBiocode);
|
||||
}
|
||||
|
||||
public bool CanUse(EntityUid user, HashSet<string> factions)
|
||||
public bool CanUse(EntityUid user, HashSet<ProtoId<NpcFactionPrototype>> factions)
|
||||
{
|
||||
var canUse = false;
|
||||
if (!TryComp<NpcFactionMemberComponent>(user, out var npcFactionMemberComponent))
|
||||
|
|
@ -34,7 +36,7 @@ public sealed class BiocodeSystem : EntitySystem
|
|||
return;
|
||||
|
||||
if (!string.IsNullOrEmpty(component.AlertText))
|
||||
_popup.PopupEntity(component.AlertText, args.User.Value, args.User.Value);
|
||||
_popup.PopupEntity(Loc.GetString(component.AlertText), args.User.Value, args.User.Value);
|
||||
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,19 +11,19 @@ public sealed partial class BiocodeDeactivationComponent : Component
|
|||
/// <summary>
|
||||
/// Whether the item should be deactivated when removed from authorized user's possession.
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public bool DeactivateOnRemoval = true;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the item should be deactivated when placed in unauthorized user's possession.
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public bool DeactivateOnUnauthorized = true;
|
||||
|
||||
/// <summary>
|
||||
/// Alert text to show when unauthorized user tries to use the item.
|
||||
/// If null, uses the BiocodeComponent's alert text.
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public string? AlertText;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
using Content.Shared._Sunrise.BloodCult.Components;
|
||||
|
||||
namespace Content.Shared._Sunrise.BloodCult.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// Thats need for chat perms update
|
||||
/// </summary>
|
||||
public sealed class CultistSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<BloodCultistComponent, ComponentStartup>(OnInit);
|
||||
SubscribeLocalEvent<BloodCultistComponent, ComponentShutdown>(OnRemove);
|
||||
}
|
||||
|
||||
private void OnInit(EntityUid uid, BloodCultistComponent component, ComponentStartup args)
|
||||
{
|
||||
RaiseLocalEvent(new EventCultistComponentState(true));
|
||||
}
|
||||
|
||||
private void OnRemove(EntityUid uid, BloodCultistComponent component, ComponentShutdown args)
|
||||
{
|
||||
RaiseLocalEvent(new EventCultistComponentState(false));
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class EventCultistComponentState
|
||||
{
|
||||
public EventCultistComponentState(bool state)
|
||||
{
|
||||
Created = state;
|
||||
}
|
||||
|
||||
public bool Created { get; }
|
||||
}
|
||||
|
|
@ -59,7 +59,7 @@ public abstract class SharedHellSpawnInvincibilitySystem : EntitySystem
|
|||
|
||||
private void RemoveGodmode(EntityUid uid, HellSpawnInvincibilityComponent? comp = null)
|
||||
{
|
||||
if (!Resolve(uid, ref comp))
|
||||
if (!Resolve(uid, ref comp, false))
|
||||
return;
|
||||
if (HasComp<GodmodeComponent>(uid))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
using Content.Shared.NPC.Prototypes;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class FactionWeaponBlockerComponent : Component
|
||||
{
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
public bool CanUse;
|
||||
|
||||
[DataField]
|
||||
public string AlertText = "weapon-biocode-refused";
|
||||
|
||||
[DataField(required: true)]
|
||||
public HashSet<ProtoId<NpcFactionPrototype>> Factions = [];
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
using System.Linq;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.NPC.Components;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
|
||||
namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
public sealed class SharedFactionWeaponBlockerSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptShootEvent>(OnShootAttempt);
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, AttemptMeleeEvent>(OnMeleeAttempt);
|
||||
|
||||
SubscribeLocalEvent<FactionWeaponBlockerComponent, GotEquippedHandEvent>(OnGotEquippedHand);
|
||||
}
|
||||
|
||||
private void OnGotEquippedHand(Entity<FactionWeaponBlockerComponent> ent, ref GotEquippedHandEvent args)
|
||||
{
|
||||
if (!TryComp<NpcFactionMemberComponent>(args.User, out var npcFactionMemberComponent))
|
||||
return;
|
||||
|
||||
var canUse = npcFactionMemberComponent.Factions
|
||||
.Any(x => ent.Comp.Factions.Contains(x));
|
||||
|
||||
if (ent.Comp.CanUse == canUse)
|
||||
return;
|
||||
|
||||
ent.Comp.CanUse = canUse;
|
||||
Dirty(ent);
|
||||
}
|
||||
|
||||
private void OnMeleeAttempt(Entity<FactionWeaponBlockerComponent> ent, ref AttemptMeleeEvent args)
|
||||
{
|
||||
if (ent.Comp.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = Loc.GetString(ent.Comp.AlertText);
|
||||
}
|
||||
|
||||
private void OnShootAttempt(Entity<FactionWeaponBlockerComponent> ent, ref AttemptShootEvent args)
|
||||
{
|
||||
if (ent.Comp.CanUse)
|
||||
return;
|
||||
|
||||
args.Cancelled = true;
|
||||
args.Message = Loc.GetString(ent.Comp.AlertText);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Sunrise.FactionGunBlockerSystem;
|
||||
|
||||
[NetworkedComponent]
|
||||
public abstract partial class SharedFactionWeaponBlockerComponent : Component
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class FactionWeaponBlockerComponentState : ComponentState
|
||||
{
|
||||
public bool CanUse;
|
||||
public string AlertText = "";
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
|
||||
|
||||
public sealed class SharedFactionWeaponBlockerSystem : EntitySystem
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
using Content.Shared.Trigger.Components.Triggers;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._Sunrise.Trigger.TriggerOnBeingGibbed;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class TriggerOnBeingGibbedComponent : BaseTriggerOnXComponent
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
using Content.Shared.Body.Events;
|
||||
using Content.Shared.Trigger.Systems;
|
||||
|
||||
namespace Content.Shared._Sunrise.Trigger.TriggerOnBeingGibbed;
|
||||
|
||||
public sealed class TriggerOnBeingGibbedSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly TriggerSystem _trigger = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<TriggerOnBeingGibbedComponent, BeingGibbedEvent>(Trigger);
|
||||
}
|
||||
|
||||
private void Trigger(Entity<TriggerOnBeingGibbedComponent> ent, ref BeingGibbedEvent args)
|
||||
{
|
||||
_trigger.Trigger(ent, key: ent.Comp.KeyOut);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,5 @@ ent-ImplantExtractor = microwave implant extractor
|
|||
.desc = A high-tech device specifically designed for implant extraction in conditions with low-skilled medical personnel.
|
||||
ent-Interrogator = interrogator
|
||||
.desc = apchy
|
||||
ent-ImplantExtractorMachineCircuitboard = implant scan machine board
|
||||
.desc = A machine printed circuit board for a implant extractor.
|
||||
ent-InterrogatorMachineCircuitboard = interrogator machine board
|
||||
.desc = A machine printed circuit board for a interrogator.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,5 @@ ent-ImplantExtractor = Микроволновой экстрактор импл
|
|||
.desc = Устройство предназначеное для извлечения имплантов из гуманоидов, разработанное для извлечени имплантов в условиях низкоквалифицированных врачей.
|
||||
ent-Interrogator = Экстрактор имплантов
|
||||
.desc = Устройство предназначеное для извлечения имплантов из гуманоидов.
|
||||
ent-ImplantExtractorMachineCircuitboard = плата машины для сканирования имплантатов
|
||||
.desc = Машинная печатная плата для экстрактора имплантатов.
|
||||
ent-InterrogatorMachineCircuitboard = машинная плата интеррогатора
|
||||
.desc = Машинная печатная плата для интеррогатора.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
weapon-biocode-refused = Данное оружие биокодировано. Вы не можете его использовать.
|
||||
item-biocode-refused = Данный предмет биокодирован. Вы не можете его использовать.
|
||||
|
|
@ -10,4 +10,4 @@ contraband-examine-text-in-the-clear = [color=green][italic]Вы, скорее
|
|||
contraband-examinable-verb-text = Легальность
|
||||
contraband-examinable-verb-message = Проверить легальность этого предмета.
|
||||
contraband-department-plural = { $department }
|
||||
contraband-job-plural = { MAKEPLURAL($job) }
|
||||
contraband-job-plural = { $job }
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
sprite: Objects/Specific/Service/vending_machine_restock.rsi
|
||||
state: base
|
||||
product: CrateVendingMachineRestockClothesFilled
|
||||
cost: 3270 # Sunrise-edit
|
||||
cost: 3600 # Sunrise-edit
|
||||
category: cargoproduct-category-name-service
|
||||
group: market
|
||||
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
sprite: Objects/Specific/Service/vending_machine_restock.rsi
|
||||
state: base
|
||||
product: CrateVendingMachineRestockMedicalFilled
|
||||
cost: 2045 # Sunrise-edit
|
||||
cost: 2200 # Sunrise-edit
|
||||
category: cargoproduct-category-name-medical
|
||||
group: market
|
||||
|
||||
|
|
|
|||
|
|
@ -80,7 +80,9 @@
|
|||
- id: ClothingUniformJumpsuitHosFormal
|
||||
- id: ClothingOuterWinterHoS
|
||||
- id: ClothingNeckCloakHos
|
||||
# Sunrise edit start
|
||||
- id: ClothingHoSMantleCoat
|
||||
# Sunrise edit end
|
||||
|
||||
- type: entity
|
||||
id: DresserQuarterMasterFilled
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@
|
|||
# Sunrise-start
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 25
|
||||
Plastic: 25
|
||||
Cloth: 500
|
||||
Steel: 5
|
||||
Plastic: 20
|
||||
Cloth: 100
|
||||
# Sunrise-end
|
||||
|
||||
- type: entity
|
||||
|
|
@ -332,6 +332,8 @@
|
|||
grid:
|
||||
- 0,0,19,9
|
||||
# Sunrise-start
|
||||
- type: StaticPrice
|
||||
price: 700
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 1000
|
||||
|
|
|
|||
|
|
@ -255,6 +255,8 @@
|
|||
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
|
||||
- type: HeldSpeedModifier
|
||||
# Sunrise-start
|
||||
- type: StaticPrice
|
||||
price: 700
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 1000
|
||||
|
|
|
|||
|
|
@ -188,6 +188,8 @@
|
|||
grid:
|
||||
- 0,0,19,9
|
||||
# Sunrise-start
|
||||
- type: StaticPrice
|
||||
price: 700
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 1000
|
||||
|
|
|
|||
|
|
@ -213,11 +213,14 @@
|
|||
- type: ShowSyndicateIcons
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband, WeldingMaskBase]
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband]
|
||||
id: ClothingEyesHudSyndicate
|
||||
name: syndicate visor
|
||||
description: The syndicate's professional head-up display, designed for better detection of humanoids and their subsequent elimination.
|
||||
components:
|
||||
# Sunrise added start
|
||||
- type: FlashImmunity
|
||||
# Sunrise added end
|
||||
- type: Sprite
|
||||
sprite: Clothing/Eyes/Hud/synd.rsi
|
||||
- type: Clothing
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
id: FoodBreadBase
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
size: Small # Sunrise edit - для багета внутри запаски мима
|
||||
- type: FlavorProfile
|
||||
flavors:
|
||||
- bread
|
||||
|
|
@ -670,7 +670,7 @@
|
|||
quickEquip: false
|
||||
- type: Item
|
||||
shape:
|
||||
- 0,0,0,3
|
||||
- 0,0,0,2 # Sunrise edit - для багета внутри запаски мима
|
||||
storedRotation: -45
|
||||
inhandVisuals:
|
||||
left:
|
||||
|
|
|
|||
|
|
@ -425,6 +425,10 @@
|
|||
- state: paper_stamp-generic
|
||||
map: ["enum.PaperVisualLayers.Stamp"]
|
||||
visible: false
|
||||
# Sunrise edit start - пендосы ебанные. PaperVisuals требуется этот слой. Я сделал его фиктивным
|
||||
- map: [ "enum.PaperVisualLayers.Writing" ]
|
||||
visible: false
|
||||
# Sunrise edit end
|
||||
- type: Paper
|
||||
content: envelope-default-message
|
||||
- type: PaperVisuals
|
||||
|
|
@ -460,7 +464,7 @@
|
|||
tags:
|
||||
- Trash
|
||||
- Document
|
||||
#- type: Appearance, hide stamp marks until we have some kind of displacement
|
||||
- type: Appearance # Sunrise edit - ебанный рот это нужно для работы FireVisuals
|
||||
- type: Flammable
|
||||
fireSpread: true
|
||||
canResistFire: false
|
||||
|
|
|
|||
|
|
@ -602,7 +602,7 @@
|
|||
# Gygax
|
||||
- type: entity
|
||||
id: MechGygax
|
||||
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
|
||||
parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
|
||||
name: Gygax
|
||||
description: While lightly armored, the Gygax has incredible mobility thanks to its ability that lets it smash through walls at high speeds.
|
||||
components:
|
||||
|
|
@ -665,7 +665,7 @@
|
|||
# Durand
|
||||
- type: entity
|
||||
id: MechDurand
|
||||
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
|
||||
parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
|
||||
name: Durand
|
||||
description: A slow but beefy combat exosuit that is extra scary in confined spaces due to its punches. Xenos hate it!
|
||||
components:
|
||||
|
|
@ -734,7 +734,7 @@
|
|||
# NT Gygax
|
||||
- type: entity
|
||||
id: MechNTGygax
|
||||
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
|
||||
parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
|
||||
name: Nanotrasen Special Gygax
|
||||
description: "Nanotrasen's trump card when solving problems. High durability, increased protection against shock, explosions, temperature, shots: conventional, laser and energy, as well as expanded equipment slots allow to turn the situation on the station upside down. Gas pedals consume a colossal amount of energy."
|
||||
components:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
# TODO: Перенеси в папки санрайза
|
||||
|
||||
- type: entity
|
||||
name: blood red personal shield generator
|
||||
description: A personal shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
|
||||
|
|
@ -137,6 +139,7 @@
|
|||
maxChargeRate: 1000 #<- passive charging frow power net
|
||||
supplyRampTolerance: 500
|
||||
supplyRampRate: 50
|
||||
netsync: false # Sunrise edit
|
||||
- type: BatteryCharger
|
||||
voltage: Medium
|
||||
- type: NodeContainer
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@
|
|||
- type: Transform
|
||||
- type: ProtectedGrid
|
||||
- type: UnbuildableGrid
|
||||
- type: StationOnlyDirectSpawn # Sunrise added
|
||||
|
||||
- type: entity
|
||||
id: StandardStationArena
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
acts: [ "Destruction" ]
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,6,3
|
||||
- 0,0,6,4 # Sunrise edit - миллион одежды не лезет в таком маленький комод
|
||||
maxItemSize: Normal
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
|
|
|
|||
|
|
@ -573,8 +573,8 @@
|
|||
|
||||
- type: latheRecipe #sunrise-start
|
||||
parent: BaseGoldCircuitboardRecipe
|
||||
id: ImplantExtractorMachineCircuitboard
|
||||
result: ImplantExtractorMachineCircuitboard
|
||||
id: InterrogatorMachineCircuitboard
|
||||
result: InterrogatorMachineCircuitboard
|
||||
materials:
|
||||
Steel: 100
|
||||
Glass: 500
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@
|
|||
- Metal
|
||||
- type: Construction
|
||||
graph: SwordForgedGraph
|
||||
node: tool
|
||||
node: sword
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
|
|
@ -257,7 +257,7 @@
|
|||
- Metal
|
||||
- type: Construction
|
||||
graph: ClaymoreForgedGraph
|
||||
node: tool
|
||||
node: sword
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
|
|
|
|||
|
|
@ -311,5 +311,5 @@
|
|||
min: 2
|
||||
max: 10
|
||||
- type: Construction
|
||||
graph: MakeshiftShield
|
||||
node: makeshiftShield
|
||||
graph: ImprovisedShieldGraph
|
||||
node: start
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Action
|
||||
temporary: true
|
||||
useDelay: 6
|
||||
icon:
|
||||
sprite: /Textures/_Sunrise/Actions/felionoid.rsi
|
||||
|
|
|
|||
|
|
@ -16,4 +16,3 @@
|
|||
- type: Biocode
|
||||
factions:
|
||||
- BloodCult
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
|
|
|||
|
|
@ -2,46 +2,43 @@
|
|||
parent: ClothingBackpackDuffelSyndicateBundle
|
||||
id: ClothingBackpackDuffelSyndicateFilledBauer127
|
||||
name: Sniper bundle
|
||||
description: "Iconic heavy anti-materiel sniper rifle with three spare magazines, a large-calibre ammo boxes and thermal goggles."
|
||||
description: Iconic heavy anti-materiel sniper rifle with three spare magazines, a large-calibre ammo boxes and thermal goggles.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponRifleBauer127Biocode
|
||||
- id: MagazineBauer127
|
||||
amount: 3
|
||||
- id: MagazineBoxAntiMateriel
|
||||
- id: MagazineBauer127Penetrator
|
||||
amount: 2
|
||||
- id: MagazineBauer127Frag
|
||||
amount: 2
|
||||
- id: MagazineBauer127Blast
|
||||
amount: 2
|
||||
- id: MagazineBauer127Emp
|
||||
amount: 2
|
||||
- id: ClothingEyesGlassesSniperThermalSyndie
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleBauer127Biocode
|
||||
- id: MagazineBauer127
|
||||
amount: 3
|
||||
- id: MagazineBoxAntiMateriel
|
||||
- id: MagazineBauer127Penetrator
|
||||
amount: 2
|
||||
- id: MagazineBauer127Frag
|
||||
amount: 2
|
||||
- id: MagazineBauer127Blast
|
||||
amount: 2
|
||||
- id: MagazineBauer127Emp
|
||||
amount: 2
|
||||
- id: ClothingEyesGlassesSniperThermalSyndie
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffelSyndicateAmmo
|
||||
id: ClothingBackpackDuffelSyndicateSuperAmmoFilled
|
||||
name: ammo bundle
|
||||
description: "Reloading! Contains 4 magazines for the C-20r, 5 drums for the Bulldog, 3 magazines for the Estoc DMR, and 2 ammo boxes for the L6 SAW."
|
||||
description: Reloading! Contains 4 magazines for the C-20r, 5 drums for the Bulldog, 3 magazines for the Estoc DMR, and 2 ammo boxes for the L6 SAW.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: SMGAmmoKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: ShotGunKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: LMGKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: MMGKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: CaselessAmmoKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: RifleAmmoKit # Sunrise-edit
|
||||
amount: 1
|
||||
- id: DragunovAmmoKit # Sunrise-edit
|
||||
amount: 1
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: SMGAmmoKit
|
||||
- id: ShotGunKit
|
||||
- id: LMGKit
|
||||
- id: MMGKit
|
||||
- id: CaselessAmmoKit
|
||||
- id: RifleAmmoKit
|
||||
- id: DragunovAmmoKit
|
||||
|
||||
#ERT_Uplink
|
||||
- type: entity
|
||||
|
|
@ -50,13 +47,15 @@
|
|||
name: Bundle MP5
|
||||
description: MP5 with 4 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponSubMachineGunMP5
|
||||
- id: MagazineMP5
|
||||
amount: 1
|
||||
- id: MagazineMP5Extended
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunMP5
|
||||
- id: MagazineMP5
|
||||
amount: 1
|
||||
- id: MagazineMP5Extended
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponSubMachineGunMP7Filled
|
||||
|
|
@ -64,11 +63,13 @@
|
|||
name: Bundle MP7
|
||||
description: MP7 with 3 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponSubMachineGunMP7
|
||||
- id: MagazinePistolHighCapacityFMJ
|
||||
amount: 3
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunMP7
|
||||
- id: MagazinePistolHighCapacityFMJ
|
||||
amount: 3
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponSubMachineGunWt550
|
||||
|
|
@ -76,13 +77,15 @@
|
|||
name: Bundle WT550
|
||||
description: WT550 with 3 raspy magazines FMJ and 2 HP.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponSubMachineGunWt550
|
||||
- id: MagazinePistolSubMachineGunTopMounted
|
||||
amount: 3
|
||||
- id: MagazinePistolSubMachineGunTopMountedHP
|
||||
amount: 2
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunWt550
|
||||
- id: MagazinePistolSubMachineGunTopMounted
|
||||
amount: 3
|
||||
- id: MagazinePistolSubMachineGunTopMountedHP
|
||||
amount: 2
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponSubMachineGunDrozdMk2
|
||||
|
|
@ -90,13 +93,15 @@
|
|||
name: Bundle Drozd Mk2
|
||||
description: Drozd Mk2 with 3 raspy magazines FMJ and 2 HP.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponSubMachineGunDrozdMk2
|
||||
- id: MagazinePistolSubMachineGunFMJ
|
||||
amount: 3
|
||||
- id: MagazinePistolSubMachineGunHP
|
||||
amount: 2
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunDrozdMk2
|
||||
- id: MagazinePistolSubMachineGunFMJ
|
||||
amount: 3
|
||||
- id: MagazinePistolSubMachineGunHP
|
||||
amount: 2
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponRifleLecterFilled
|
||||
|
|
@ -104,15 +109,16 @@
|
|||
name: Bundle lecter Mk2
|
||||
description: Lecter Mk2 with 3 raspy FMJ magazines and 2 HP.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponRifleLecterMk2
|
||||
- id: MagazineRifleFMJ
|
||||
amount: 3
|
||||
- id: MagazineRifleHP
|
||||
amount: 2
|
||||
- id: MagazineRifleSP
|
||||
amount: 1
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleLecterMk2
|
||||
- id: MagazineRifleFMJ
|
||||
amount: 3
|
||||
- id: MagazineRifleHP
|
||||
amount: 2
|
||||
- id: MagazineRifleSP
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponRifleM52Filled
|
||||
|
|
@ -120,15 +126,16 @@
|
|||
name: Bundle M-52
|
||||
description: Premium assault rifle with 3 raspy FMJ magazines, 2 SP and 1 HP.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleM52
|
||||
- id: MagazineRifleM52FMJ
|
||||
amount: 3
|
||||
- id: MagazineRifleM52SP
|
||||
amount: 2
|
||||
- id: MagazineRifleM52HP
|
||||
amount: 1
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponSubMachineGunP90Filled
|
||||
|
|
@ -136,8 +143,10 @@
|
|||
name: Bundle p90
|
||||
description: P-90 with 4 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunP90
|
||||
- id: MagazineP90
|
||||
amount: 2
|
||||
|
|
@ -150,8 +159,10 @@
|
|||
name: Bundle ams42
|
||||
description: AMS-42 with 4 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponAMS-42
|
||||
- id: MagazineRifleSP
|
||||
amount: 4
|
||||
|
|
@ -162,8 +173,10 @@
|
|||
name: Bundle G36
|
||||
description: G36 with 4 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleG36
|
||||
- id: MagazineRifleSP
|
||||
amount: 4
|
||||
|
|
@ -174,11 +187,13 @@
|
|||
name: Bundle Assault Shotgun
|
||||
description: Assault Shotgun with 6 raspy speedloaders.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunCycler
|
||||
- id: SpeedLoaderShellShotgun
|
||||
amount: 4
|
||||
amount: 2
|
||||
- id: SpeedLoaderShotgunSlug
|
||||
amount: 2
|
||||
|
||||
|
|
@ -188,8 +203,10 @@
|
|||
name: Bundle Trenchgun 4034
|
||||
description: Trenchgun 4034 with 1 Box ammo.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunTrenchgun4034
|
||||
- id: BoxLethalshot
|
||||
- id: BoxShotgunFlare
|
||||
|
|
@ -201,8 +218,10 @@
|
|||
name: Bundle law12
|
||||
description: Law-12 with 1 Box ammo.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunSPAS12
|
||||
- id: BoxLethalshot
|
||||
- id: BoxShotgunFlare
|
||||
|
|
@ -214,13 +233,14 @@
|
|||
name: Bundle SKM-24
|
||||
description: SKM-24 with 6 raspy various magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM24Nano
|
||||
- id: MagazineLightRifleSP
|
||||
amount: 3
|
||||
- id: MagazineLightRifleFMJ
|
||||
amount: 1
|
||||
- id: MagazineLightRifleHP
|
||||
amount: 2
|
||||
|
||||
|
|
@ -230,8 +250,10 @@
|
|||
name: Bundle SKM-24
|
||||
description: AR18 with 6 raspy Incendiary magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM24
|
||||
- id: MagazineLightRifleIncendiary
|
||||
amount: 6
|
||||
|
|
@ -243,11 +265,12 @@
|
|||
name: Bundle SKM-28
|
||||
description: SKM-28 with 6 raspy various magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM28Nano
|
||||
- id: MagazineRifleHeavyFMJ
|
||||
amount: 1
|
||||
- id: MagazineRifleHeavySP
|
||||
amount: 3
|
||||
- id: MagazineRifleHeavyHP
|
||||
|
|
@ -259,8 +282,10 @@
|
|||
name: Bundle SKM-28
|
||||
description: SKM-28 with 6 raspy Incendiary magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM28
|
||||
- id: MagazineRifleHeavyIncendiary
|
||||
amount: 6
|
||||
|
|
@ -272,8 +297,10 @@
|
|||
name: Bundle br64
|
||||
description: BR64 with 2 raspy magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleBR64
|
||||
- id: MagazineRifleHeavyFMJ
|
||||
amount: 2
|
||||
|
|
@ -284,8 +311,10 @@
|
|||
name: Bundle smart gun M492
|
||||
description: M492 with 2 raspy SP and FMJ belt-box.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponLightMachineGunM492
|
||||
- id: MagazineLightRifleBeltBox
|
||||
- id: MagazineLightRifleBeltBoxFMJ
|
||||
|
|
@ -293,11 +322,13 @@
|
|||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponLightMachineGunM492CBURN
|
||||
parent: ClothingBackpackDuffelCBURN
|
||||
name: Bundle M492 "Incinerator"
|
||||
name: Bundle M492 Incinerator
|
||||
description: M492 with 3 raspy Incendiary belt-box.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponLightMachineGunM492Cburn
|
||||
- id: MagazineLightRifleBeltBoxIncendiary
|
||||
amount: 3
|
||||
|
|
@ -309,11 +340,13 @@
|
|||
name: Bundle Hristov
|
||||
description: Hristov with 4 raspy .60 10-rounds Box.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSniperHristov
|
||||
- id: MagazineBoxAntiMateriel
|
||||
amount: 4
|
||||
amount: 3
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelWeaponRifleAsh12
|
||||
|
|
@ -321,12 +354,14 @@
|
|||
name: Bundle ASH-12
|
||||
description: ASH-12 with 5 magazines and a blueprint.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponRifleAsh12
|
||||
- id: MagazineAsh12
|
||||
amount: 5
|
||||
- id: BlueprintMagAsh12Slug
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleAsh12
|
||||
- id: MagazineAsh12
|
||||
amount: 5
|
||||
- id: BlueprintMagAsh12Slug
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelNanotrasenMedicalBundleFilled
|
||||
|
|
@ -334,42 +369,46 @@
|
|||
name: nanotrasen medical bundle
|
||||
description: A large duffel bag for holding any medical army goods.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: DefibrillatorCompact
|
||||
- id: MedkitCombatFilled
|
||||
amount: 3
|
||||
- id: Tourniquet
|
||||
amount: 2
|
||||
- id: MedipenCombatInjector
|
||||
amount: 2
|
||||
- id: CombatMedipen
|
||||
amount: 4
|
||||
- id: PunctAutoInjector
|
||||
amount: 4
|
||||
- id: PyraAutoInjector
|
||||
amount: 4
|
||||
- id: AirlossAutoInjector
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: DefibrillatorCompact
|
||||
- id: MedkitCombatFilled
|
||||
amount: 3
|
||||
- id: Tourniquet
|
||||
amount: 2
|
||||
- id: MedipenCombatInjector
|
||||
amount: 2
|
||||
- id: CombatMedipen
|
||||
amount: 4
|
||||
- id: PunctAutoInjector
|
||||
amount: 4
|
||||
- id: PyraAutoInjector
|
||||
amount: 4
|
||||
- id: AirlossAutoInjector
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffelAbductorBundle
|
||||
id: ClothingBackpackDuffelAbductorFilled
|
||||
suffix: Filled
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: HemostatAbductor
|
||||
- id: SawAbductor
|
||||
- id: DrillAbductor
|
||||
- id: CauteryAbductor
|
||||
- id: RetractorAbductor
|
||||
- id: ScalpelAbductor
|
||||
- id: BoneGelAbductor
|
||||
- id: BoneSetterAbductor
|
||||
- id: NitrousOxideTankFilled
|
||||
- id: NitrousOxideTankFilled
|
||||
- id: ClothingMaskBreath
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: HemostatAbductor
|
||||
- id: SawAbductor
|
||||
- id: DrillAbductor
|
||||
- id: CauteryAbductor
|
||||
- id: RetractorAbductor
|
||||
- id: ScalpelAbductor
|
||||
- id: BoneGelAbductor
|
||||
- id: BoneSetterAbductor
|
||||
- id: NitrousOxideTankFilled
|
||||
- id: NitrousOxideTankFilled
|
||||
- id: ClothingMaskBreath
|
||||
|
||||
|
||||
- type: entity
|
||||
|
|
@ -378,82 +417,94 @@
|
|||
name: Minotaur bundle
|
||||
description: "Lean and mean: Contains smooth, powerful, highly illegal Shotgun, a 5 12g buckshot drums."
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponShotgunMinotaurBiocode
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunMinotaurBiocode
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffelSyndicateBundle
|
||||
id: ClothingBackpackDuffelSyndicateFilledDeagle
|
||||
name: Desert Eagle bundle
|
||||
description: "Contains high damage Desert Eagle, a 3 magnum magazines."
|
||||
description: Contains high damage Desert Eagle, a 3 magnum magazines.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponPistolDeagle
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponPistolDeagle
|
||||
- id: MagazineDeagle
|
||||
amount: 3
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffelSyndicateBundle
|
||||
id: ClothingBackpackDufelSyndicateFilledMantisBladeArms
|
||||
name: Mantis Blade bundle
|
||||
description: "Contains a pair of cybernetic arms, watch out. You got a psycho on the loose."
|
||||
description: Contains a pair of cybernetic arms, watch out. You got a psycho on the loose.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: RightArmCyberMantisBlade
|
||||
- id: LeftArmCyberMantisBlade
|
||||
- id: RightHandCyber
|
||||
- id: LeftHandCyber
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: RightArmCyberMantisBlade
|
||||
- id: LeftArmCyberMantisBlade
|
||||
- id: RightHandCyber
|
||||
- id: LeftHandCyber
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffelSyndicateBundle
|
||||
id: ClothingBackpackDuffelSyndicateFilledInfiltration
|
||||
name: infiltration hardsuit bundle
|
||||
description: "Contains the latest in Syndicate chameleon technology, the infiltration hardsuit."
|
||||
description: Contains the latest in Syndicate chameleon technology, the infiltration hardsuit.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingOuterHardsuitInfiltrationBiocode
|
||||
- id: ClothingMaskGasSyndicate
|
||||
- id: ClothingHandsGlovesCombatCQC
|
||||
- id: DoubleEmergencyOxygenTankFilled
|
||||
- id: DoubleEmergencyNitrogenTankFilled
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingOuterHardsuitInfiltrationBiocode
|
||||
- id: ClothingMaskGasSyndicate
|
||||
- id: ClothingHandsGlovesCombatCQC
|
||||
- id: DoubleEmergencyOxygenTankFilled
|
||||
- id: DoubleEmergencyNitrogenTankFilled
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackMessengerPirate
|
||||
id: ClothingBackpackMessengerPirateDecoyKitFilled
|
||||
name: decoy bundle
|
||||
description: "Contains visual distractions. Smell and audio coming soon."
|
||||
description: Contains visual distractions. Smell and audio coming soon.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: BalloonPirate1
|
||||
- id: BalloonPirate2
|
||||
- id: BalloonPirate3
|
||||
- id: BalloonPirate4
|
||||
- id: BalloonPirate5
|
||||
- id: BalloonPirate6
|
||||
- id: BalloonPirate7
|
||||
- id: BalloonPirate8
|
||||
- id: GrenadeDummy
|
||||
amount: 4
|
||||
- id: SnapPop
|
||||
amount: 2
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: BalloonPirate1
|
||||
- id: BalloonPirate2
|
||||
- id: BalloonPirate3
|
||||
- id: BalloonPirate4
|
||||
- id: BalloonPirate5
|
||||
- id: BalloonPirate6
|
||||
- id: BalloonPirate7
|
||||
- id: BalloonPirate8
|
||||
- id: GrenadeDummy
|
||||
amount: 4
|
||||
- id: SnapPop
|
||||
amount: 2
|
||||
|
||||
- type: entity
|
||||
id: ClothingBackpackDuffelMilitaryBundleScaf
|
||||
parent: ClothingBackpackDuffelMilitary
|
||||
name: Scaf bundle
|
||||
description: "Contains the old combat EVA suit."
|
||||
description: Contains the old combat EVA suit.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingOuterHardsuitScaf
|
||||
- id: ClothingHeadHelmetHardsuitScaf
|
||||
- id: DoubleEmergencyOxygenTankFilled
|
||||
|
|
@ -463,10 +514,12 @@
|
|||
id: ClothingBackpackDuffelMilitaryBundlePirateEva
|
||||
parent: ClothingBackpackDuffelMilitary
|
||||
name: Pirate EVA bundle
|
||||
description: "Contains the old pirate EVA suit."
|
||||
description: Contains the old pirate EVA suit.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingHeadHelmetPirateOld
|
||||
- id: ClothingOuterEVASuitPirateOld
|
||||
- id: DoubleEmergencyOxygenTankFilled
|
||||
|
|
@ -476,20 +529,19 @@
|
|||
id: ClothingBackpackMessengerMercenaryBundleSKM24
|
||||
parent: ClothingBackpackMessengerMercenary
|
||||
name: SKM-24 bundle
|
||||
description: "Contains the cheap assault rifle."
|
||||
description: Contains the cheap assault rifle.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponRifleSKM24
|
||||
orGroup: SKM24
|
||||
- id: WeaponRifleSKM24Syndi
|
||||
orGroup: SKM24
|
||||
- id: WeaponRifleSKM24White
|
||||
orGroup: SKM24
|
||||
- id: WeaponRifleSKM24Nano
|
||||
orGroup: SKM24
|
||||
- id: WeaponRifleSKM24Green
|
||||
orGroup: SKM24
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM24
|
||||
- id: WeaponRifleSKM24Syndi
|
||||
- id: WeaponRifleSKM24White
|
||||
- id: WeaponRifleSKM24Nano
|
||||
- id: WeaponRifleSKM24Green
|
||||
- id: MagazineLightRifleFMJ
|
||||
- id: MagazineLightRifleSP
|
||||
- id: MagazineLightRifleSP
|
||||
|
|
@ -501,26 +553,25 @@
|
|||
id: ClothingBackpackMessengerPirateBundleSKM24Scrap
|
||||
parent: ClothingBackpackMessengerPirate
|
||||
name: SKM-24 bundle
|
||||
description: "Contains the cheapest assault rifle."
|
||||
description: Contains the cheapest assault rifle.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleSKM24Scrap
|
||||
- id: MagazineLightRifleImprovised
|
||||
- id: MagazineLightRifleImprovised
|
||||
- id: MagazineLightRifleImprovised
|
||||
- id: MagazineBoxImprovisedRifle
|
||||
prob: 0.5
|
||||
orGroup: MagRifle
|
||||
- id: MagazineLightRifleFMJ
|
||||
prob: 0.25
|
||||
orGroup: MagRifle
|
||||
- id: MagazineLightRifleAP
|
||||
prob: 0.01
|
||||
orGroup: MagRifle
|
||||
- id: MagazineLightRifleHP
|
||||
prob: 0.4
|
||||
orGroup: MagRifle
|
||||
- id: MagazineLightRifleSP
|
||||
prob: 0.4
|
||||
orGroup: MagRifle
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: MagazineBoxImprovisedRifle
|
||||
prob: 0.5
|
||||
- id: MagazineLightRifleFMJ
|
||||
prob: 0.25
|
||||
- id: MagazineLightRifleAP
|
||||
prob: 0.01
|
||||
- id: MagazineLightRifleHP
|
||||
prob: 0.4
|
||||
- id: MagazineLightRifleSP
|
||||
prob: 0.4
|
||||
|
|
|
|||
|
|
@ -1,19 +1,21 @@
|
|||
- type: entity
|
||||
name: blue shield encryption key box
|
||||
parent: BoxEncryptionKeyPassenger
|
||||
id: BoxEncryptionKeyLaw
|
||||
name: law encryption key box
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: EncryptionKeyLaw
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase:
|
||||
id: EncryptionKeyLaw
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
name: blue shield encryption key box
|
||||
parent: BoxEncryptionKeyPassenger
|
||||
id: BoxEncryptionKeyBlueShield
|
||||
name: blue shield encryption key box
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: EncryptionKeyBlueShield
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase:
|
||||
id: EncryptionKeyBlueShield
|
||||
amount: 4
|
||||
|
|
|
|||
|
|
@ -6,11 +6,13 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,3,1
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ExplosiveCollarRed
|
||||
- id: ExplosiveCollarWhite
|
||||
- id: Bouquet
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ExplosiveCollarRed
|
||||
- id: ExplosiveCollarWhite
|
||||
- id: Bouquet
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -26,11 +28,13 @@
|
|||
maxItemSize: Normal
|
||||
grid:
|
||||
- 0,0,2,2
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: CaneShotgun
|
||||
- id: ShellShotgunBooze
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: CaneShotgun
|
||||
- id: ShellShotgunBooze
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
parent: [BoxCardboard, BaseSyndicateContraband]
|
||||
|
|
@ -69,14 +73,15 @@
|
|||
id: SMGAmmoKit
|
||||
name: C20r ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazinePistolSubMachineGunSP
|
||||
- id: MagazinePistolSubMachineGunSP
|
||||
- id: MagazinePistolSubMachineGunSP
|
||||
- id: MagazinePistolSubMachineGunFMJ
|
||||
- id: MagazinePistolSubMachineGunFMJ
|
||||
- id: MagazinePistolSubMachineGunHP
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazinePistolSubMachineGunSP
|
||||
amount: 3
|
||||
- id: MagazinePistolSubMachineGunFMJ
|
||||
amount: 2
|
||||
- id: MagazinePistolSubMachineGunHP
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -87,14 +92,15 @@
|
|||
id: RifleAmmoKit
|
||||
name: Estoc ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineRifleSP
|
||||
- id: MagazineRifleSP
|
||||
- id: MagazineRifleSP
|
||||
- id: MagazineRifleFMJ
|
||||
- id: MagazineRifleFMJ
|
||||
- id: MagazineRifleAP
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineRifleSP
|
||||
amount: 3
|
||||
- id: MagazineRifleFMJ
|
||||
amount: 2
|
||||
- id: MagazineRifleAP
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -108,12 +114,12 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,1,3
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazinePistolSubMachineGunCaselessExtended
|
||||
- id: MagazinePistolSubMachineGunCaselessExtended
|
||||
- id: MagazinePistolSubMachineGunCaselessExtended
|
||||
- id: MagazinePistolSubMachineGunCaselessExtended
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazinePistolSubMachineGunCaselessExtended
|
||||
amount: 4
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom
|
||||
|
|
@ -127,12 +133,14 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,1,3
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineDragunov
|
||||
- id: MagazineDragunov
|
||||
- id: MagazineDragunovExtended
|
||||
- id: MagazineDragunovExtended
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineDragunov
|
||||
amount: 2
|
||||
- id: MagazineDragunovExtended
|
||||
amount: 2
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom
|
||||
|
|
@ -143,14 +151,16 @@
|
|||
id: AntimaterialAmmoKit
|
||||
name: Antimaterial magazine kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineBauer127
|
||||
- id: MagazineBauer127
|
||||
- id: MagazineBauer127Penetrator
|
||||
- id: MagazineBauer127Frag
|
||||
- id: MagazineBauer127Blast
|
||||
- id: MagazineBauer127Emp
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineBauer127
|
||||
amount: 2
|
||||
- id: MagazineBauer127Penetrator
|
||||
- id: MagazineBauer127Frag
|
||||
- id: MagazineBauer127Blast
|
||||
- id: MagazineBauer127Emp
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom
|
||||
|
|
@ -161,91 +171,35 @@
|
|||
id: SMGIncendiaryAmmoKit
|
||||
name: C20r Incendiary ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazinePistolSubMachineGunIncendiary
|
||||
amount: 8
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazinePistolSubMachineGunIncendiary
|
||||
amount: 8
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
- state: smg_red
|
||||
|
||||
# - type: entity
|
||||
# parent: BaseSyndicateAmmoKit
|
||||
# id: SMGUraniumAmmoKit
|
||||
# name: C20r Uranium ammo kit
|
||||
# components:
|
||||
# - type: StorageFill
|
||||
# contents:
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - id: MagazinePistolSubMachineGunUranium
|
||||
# - type: Sprite
|
||||
# layers:
|
||||
# - state: box_of_doom_big
|
||||
# - state: smg_uranium
|
||||
|
||||
- type: entity
|
||||
parent: BaseSyndicateAmmoKit
|
||||
id: ShotGunKit
|
||||
name: Bulldog ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgun
|
||||
- id: MagazineShotgunSlug
|
||||
- id: MagazineShotgunSlug
|
||||
- id: MagazineShotgunSlug
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineShotgun
|
||||
amount: 5
|
||||
- id: MagazineShotgunSlug
|
||||
amount: 3
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
- state: shotgun_base
|
||||
|
||||
# - type: entity
|
||||
# parent: BaseSyndicateAmmoKit
|
||||
# id: ShotGunIncendiaryKit
|
||||
# name: Bulldog Incendiary ammo kit
|
||||
# components:
|
||||
# - type: StorageFill
|
||||
# contents:
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - id: MagazineShotgunIncendiary
|
||||
# - type: Sprite
|
||||
# layers:
|
||||
# - state: box_of_doom_big
|
||||
# - state: shotgun_red
|
||||
|
||||
# - type: entity
|
||||
# parent: BaseSyndicateAmmoKit
|
||||
# id: ShotGunUraniumKit
|
||||
# name: Bulldog Uranium ammo kit
|
||||
# components:
|
||||
# - type: StorageFill
|
||||
# contents:
|
||||
# - id: MagazineShotgunUranium
|
||||
# - id: MagazineShotgunUranium
|
||||
# - id: MagazineShotgunUranium
|
||||
# - id: MagazineShotgunUranium
|
||||
# - type: Sprite
|
||||
# layers:
|
||||
# - state: box_of_doom_big
|
||||
# - state: shotgun_uranium
|
||||
|
||||
- type: entity
|
||||
parent: BaseSyndicateAmmoKit
|
||||
id: MMGKit
|
||||
|
|
@ -258,11 +212,12 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,2,1
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineDl6902
|
||||
- id: MagazineDl6902
|
||||
- id: MagazineDl6902
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineDl6902
|
||||
amount: 3
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -276,11 +231,13 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,3,1
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineRifleBoxSP
|
||||
amount: 3
|
||||
- id: MagazineRifleBoxFMJ
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineRifleBoxSP
|
||||
amount: 3
|
||||
- id: MagazineRifleBoxFMJ
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -291,10 +248,12 @@
|
|||
id: LMGIncendiaryKit
|
||||
name: L6 Saw Incendiary ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineRifleBoxIncendiary
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineRifleBoxIncendiary
|
||||
amount: 4
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -305,10 +264,12 @@
|
|||
id: LMGUraniumKit
|
||||
name: L6 Saw Uranium ammo kit
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineRifleBoxUranium
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineRifleBoxUranium
|
||||
amount: 4
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
@ -335,7 +296,6 @@
|
|||
- id: CyberEyeThermal
|
||||
sound:
|
||||
path: /Audio/Effects/unwrap.ogg
|
||||
# Sunrise edit start
|
||||
- type: EmitSoundOnPickup
|
||||
sound:
|
||||
path: /Audio/_Sunrise/Items/Handling/cardboardbox_pickup.ogg
|
||||
|
|
@ -348,7 +308,6 @@
|
|||
- type: EmitSoundOnCollide
|
||||
sound:
|
||||
path: /Audio/_Sunrise/Items/Handling/cardboardbox_drop.ogg
|
||||
# Sunrise edit end
|
||||
|
||||
- type: entity
|
||||
parent: CyberEyeThermalBox
|
||||
|
|
@ -422,10 +381,12 @@
|
|||
- type: Storage
|
||||
grid:
|
||||
- 0,0,1,1
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: RightArmCyberMantisBlade
|
||||
- id: LeftArmCyberMantisBlade
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: RightArmCyberMantisBlade
|
||||
- id: LeftArmCyberMantisBlade
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box_of_doom_big
|
||||
|
|
|
|||
|
|
@ -4,14 +4,16 @@
|
|||
name: Trenchgun4034 crate
|
||||
description: Contains two Trenchgun4034 with two Bandolier and four buckshot box. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponShotgunTrenchgun4034
|
||||
amount: 2
|
||||
- id: ClothingBeltBandolier
|
||||
amount: 2
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunTrenchgun4034
|
||||
amount: 2
|
||||
- id: ClothingBeltBandolier
|
||||
amount: 2
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryCombatShotgun
|
||||
|
|
@ -19,29 +21,33 @@
|
|||
name: Combat Shotgun crate
|
||||
description: Contains two Combat Shotgun with two Bandolier and four buckshot box. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponShotgunCombat
|
||||
amount: 2
|
||||
- id: ClothingBeltBandolier
|
||||
amount: 2
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponShotgunCombat
|
||||
amount: 2
|
||||
- id: ClothingBeltBandolier
|
||||
amount: 2
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryShotgunAmmo
|
||||
parent: [ CrateWeaponSecure, BaseSecurityContraband ]
|
||||
name: Shotgun Ammo crate
|
||||
description: Contains varios Box Shotgun ammo. Requires Armory access to open.
|
||||
description: Contains various Box Shotgun ammo. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
- id: BoxBeanbag
|
||||
amount: 2
|
||||
- id: BoxShotgunSlug
|
||||
amount: 2
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: BoxLethalshot
|
||||
amount: 4
|
||||
- id: BoxBeanbag
|
||||
amount: 2
|
||||
- id: BoxShotgunSlug
|
||||
amount: 2
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryAKMS
|
||||
|
|
@ -49,18 +55,20 @@
|
|||
name: AKMS crate
|
||||
description: Contains two AKMS assault rifle with four mags. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponRifleAKM
|
||||
amount: 2
|
||||
- id: MagazineLightRifleSP
|
||||
amount: 1
|
||||
- id: MagazineLightRifleHP
|
||||
amount: 1
|
||||
- id: MagazineLightRifleFMJ
|
||||
amount: 1
|
||||
- id: MagazineLightRifleAP
|
||||
amount: 1
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponRifleAKM
|
||||
amount: 2
|
||||
- id: MagazineLightRifleSP
|
||||
amount: 1
|
||||
- id: MagazineLightRifleHP
|
||||
amount: 1
|
||||
- id: MagazineLightRifleFMJ
|
||||
amount: 1
|
||||
- id: MagazineLightRifleAP
|
||||
amount: 1
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryMP5
|
||||
|
|
@ -68,12 +76,14 @@
|
|||
name: MP5 crate
|
||||
description: Contains two MP5 submachine gun with two mags. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponSubMachineGunMP5
|
||||
amount: 2
|
||||
- id: MagazineMP5
|
||||
amount: 2
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponSubMachineGunMP5
|
||||
amount: 2
|
||||
- id: MagazineMP5
|
||||
amount: 2
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryIK30
|
||||
|
|
@ -81,12 +91,14 @@
|
|||
name: IK-30 crate
|
||||
description: Contains three IK-30 laser carbine with additional ammunition. Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: WeaponGunLaserCarbineSemi
|
||||
amount: 3
|
||||
- id: MagazineBatteryLr30
|
||||
amount: 3
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponGunLaserCarbineSemi
|
||||
amount: 3
|
||||
- id: MagazineBatteryLr30
|
||||
amount: 3
|
||||
|
||||
- type: entity
|
||||
id: CrateArmoryIK30Magazines
|
||||
|
|
@ -94,7 +106,9 @@
|
|||
name: IK-30 magazine's crate
|
||||
description: Contains six magazines for "IK-30". Requires Armory access to open.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: MagazineBatteryLr30
|
||||
amount: 6
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:AllSelector
|
||||
children:
|
||||
- id: MagazineBatteryLr30
|
||||
amount: 6
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
sprite: _Sunrise/Clothing/Eyes/Glasses/kim.rsi
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseRestrictedContraband]
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSecurityContraband]
|
||||
id: ClothingEyesGlassesBlueShield
|
||||
name: blueshield's glasses
|
||||
description: The innovative blue lenses hide your eyes from light flashes and have a built-in visor.
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: [BaseNightVisionDevice, ClothingEyesGlassesSunglasses,ShowSecurityIcons, PowerCellSlotSmallItem]
|
||||
parent: [BaseNightVisionDevice, ClothingEyesGlassesSunglasses, ShowSecurityIcons, PowerCellSlotSmallItem]
|
||||
id: ClothingEyesGlassesNVG
|
||||
name: sun glasses
|
||||
description: A pair of black sunglasses.
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
- HudMedical
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband, WeldingMaskBase]
|
||||
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband]
|
||||
id: ClothingEyesHudSyndicateMech
|
||||
name: syndicate Mech pilot visor
|
||||
description: The syndicate Mech pilote`s professional head-up display, designed for quick diagnosis of their Mech's status.
|
||||
|
|
@ -28,7 +28,8 @@
|
|||
damageContainers:
|
||||
- Inorganic
|
||||
- Silicon
|
||||
- Mech # Sunrise-edit
|
||||
- Mech
|
||||
- type: FlashImmunity
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingEyesBase, ShowSecurityIcons ]
|
||||
|
|
@ -44,4 +45,4 @@
|
|||
damageContainers:
|
||||
- Inorganic
|
||||
- Silicon
|
||||
- Mech # Sunrise-edit
|
||||
- Mech
|
||||
|
|
|
|||
|
|
@ -31,16 +31,14 @@
|
|||
Blunt: 0.9
|
||||
Slash: 0.9
|
||||
Piercing: 0.95
|
||||
# SUNRISE EDIT
|
||||
- type: Tag
|
||||
tags:
|
||||
- ClothMade
|
||||
- FullCovered # INTERACTIONS
|
||||
- WhitelistChameleon
|
||||
# SUNRISE EDIT
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingHeadBase, BaseRestrictedContraband, BaseFoldable]
|
||||
parent: [ClothingHeadBase, BaseSecurityContraband, BaseFoldable]
|
||||
id: ClothingHeadHelmetPubg
|
||||
name: Altyn
|
||||
description: A fortified helmet used to suppress and incite riots.
|
||||
|
|
@ -69,13 +67,11 @@
|
|||
Piercing: 0.85
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.95
|
||||
# SUNRISE EDIT
|
||||
- type: Tag
|
||||
tags:
|
||||
- ClothMade
|
||||
- FullCovered # INTERACTIONS
|
||||
- WhitelistChameleon
|
||||
# SUNRISE EDIT
|
||||
|
||||
# region ERT Amber EVA
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@
|
|||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingOuterHardsuitBase, BaseRestrictedContraband]
|
||||
parent: ClothingOuterHardsuitBase
|
||||
id: ClothingOuterLightHardsuitUSSP
|
||||
name: Thunder-P
|
||||
description: A lightweight combat suit designed for rapid response and mobile operations. The light armor provides protection against firearms and allows for high maneuverability. The Grom-P is used by assault troops for fast and effective combat operations.
|
||||
|
|
@ -235,12 +235,11 @@
|
|||
clothingPrototype: ClothingHeadHelmetLightHardsuitUSSP
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingOuterHardsuitEngineering, BaseEngineeringContraband]
|
||||
parent: [ ClothingOuterHardsuitEngineering, BaseEngineeringContraband ]
|
||||
id: ClothingOuterHardsuitEngineeringCompact
|
||||
name: senior's engineer hardsuit
|
||||
description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding. Very compact.
|
||||
components:
|
||||
# Sunrise-Start
|
||||
- type: FireProtection
|
||||
reduction: 0.8
|
||||
- type: ExplosionResistance
|
||||
|
|
@ -256,7 +255,6 @@
|
|||
Shock: 0.5
|
||||
Heat: 0.7
|
||||
Radiation: 0.4
|
||||
# Sunrise-End
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.85
|
||||
sprintModifier: 0.85
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@
|
|||
- type: Sprite
|
||||
sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rsi
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rs
|
||||
sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingUniformBase
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
- type: Sprite
|
||||
state: cpu_supply
|
||||
- type: ComputerBoard
|
||||
prototype: ComputerFineRecords
|
||||
prototype: ComputerContrabandSale
|
||||
- type: StaticPrice
|
||||
price: 3000
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
factions:
|
||||
- Syndicate
|
||||
- Thief
|
||||
alertText: Данный предмет биокодирован. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: DefibrillatorSyndicate
|
||||
|
|
@ -17,8 +16,6 @@
|
|||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данный предмет биокодирован. Вы не можете его использовать.
|
||||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
# region Mech Pod
|
||||
- type: entity
|
||||
id: MechSecPod
|
||||
parent: [ BaseMechPod, BaseRestrictedContraband ]
|
||||
parent: [ BaseMechPod, BaseSecurityContraband ]
|
||||
name: Security Pod
|
||||
description: Despite its size, the Security Pod has incredible mobility in space thanks to its engines.
|
||||
suffix: Filled
|
||||
|
|
@ -169,6 +169,7 @@
|
|||
equipmentWhitelist:
|
||||
tags:
|
||||
- CombatMech
|
||||
- PaddyMech
|
||||
startingEquipment:
|
||||
- WeaponMechCombatSolarisLaser
|
||||
- type: Reflect
|
||||
|
|
@ -193,7 +194,7 @@
|
|||
|
||||
- type: entity
|
||||
id: MechMiningPod
|
||||
parent: [ BaseMechPod, BaseRestrictedContraband ]
|
||||
parent: [ BaseMechPod, BaseSalvageSpecialistContraband ]
|
||||
name: Mining Pod
|
||||
description: Despite its size, the Mining Pod has incredible survability in space.
|
||||
suffix: Filled
|
||||
|
|
@ -553,7 +554,7 @@
|
|||
|
||||
- type: entity
|
||||
id: MechPhazon
|
||||
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
|
||||
parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
|
||||
name: Phazon
|
||||
description: The most advanced mech on the market, the pinnacle of technological development, extremely mobile and deadly.
|
||||
components:
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
- type: entity
|
||||
name: CommandFriend™ X-02
|
||||
parent: [ BaseHandheldComputer, BaseRestrictedContraband ]
|
||||
parent: [ BaseHandheldComputer, BaseMedicalContraband ]
|
||||
id: HandheldBSOCrewMonitor
|
||||
description: Does not monitor the competence levels of command members.
|
||||
components:
|
||||
# - type: Tag
|
||||
# tags:
|
||||
# - BSOBeltEquip
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Specific/Medical/handheld_bso_crewmonitor.rsi
|
||||
state: scanner
|
||||
|
|
@ -28,9 +25,6 @@
|
|||
parent: HandheldBSOCrewMonitor
|
||||
suffix: Empty
|
||||
components:
|
||||
# - type: Tag
|
||||
# tags:
|
||||
# - BSOBeltEquip
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
cell_slot:
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
map: ["enum.AmmoVisualLayers.Base"]
|
||||
- type: Appearance
|
||||
- type: SpentAmmoVisuals
|
||||
- type: StaticPrice
|
||||
price: 3
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 10
|
||||
|
|
@ -36,6 +38,8 @@
|
|||
map: ["enum.AmmoVisualLayers.Base"]
|
||||
- type: Appearance
|
||||
- type: SpentAmmoVisuals
|
||||
- type: StaticPrice
|
||||
price: 3
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 10
|
||||
|
|
|
|||
|
|
@ -54,9 +54,9 @@
|
|||
|
||||
- type: entity
|
||||
name: LNT620 "Spark"
|
||||
parent: [ BaseWeaponAutoPowerCell, BaseRestrictedContraband ]
|
||||
parent: [ BaseWeaponAutoPowerCell, BaseSecurityContraband ]
|
||||
id: WeaponLaserLNT620
|
||||
description: "Automatic Laser NanoTrasen LNT620."
|
||||
description: Automatic Laser NanoTrasen LNT620.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/smg_laser.rsi
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponShotgunBulldog
|
||||
|
|
@ -16,7 +15,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponLightMachineGunL6
|
||||
|
|
@ -26,7 +24,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSubMachineGunC20r
|
||||
|
|
@ -36,7 +33,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponRifleEstoc
|
||||
|
|
@ -46,7 +42,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponLauncherChinaLake
|
||||
|
|
@ -56,7 +51,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponLauncherM79
|
||||
|
|
@ -66,7 +60,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSniperHristov
|
||||
|
|
@ -76,7 +69,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponPistolDeagle
|
||||
|
|
@ -86,7 +78,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponRifleM90GrenadeLauncher
|
||||
|
|
@ -96,7 +87,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponRifleBauer127
|
||||
|
|
@ -106,7 +96,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSniperDragunov
|
||||
|
|
@ -116,7 +105,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSIAR52
|
||||
|
|
@ -126,7 +114,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponDL6902
|
||||
|
|
@ -136,7 +123,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponAJ100
|
||||
|
|
@ -146,7 +132,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSyndieLaserPistol
|
||||
|
|
@ -156,7 +141,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponLaserMinigun
|
||||
|
|
@ -166,7 +150,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSyndieLaserGun
|
||||
|
|
@ -176,7 +159,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponGrenadeLauncherGL70
|
||||
|
|
@ -186,7 +168,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponShotgunMinotaur
|
||||
|
|
@ -196,7 +177,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponEnergyCrossbow
|
||||
|
|
@ -206,7 +186,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponSubMachineGunC40r
|
||||
|
|
@ -216,7 +195,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
||||
- type: entity
|
||||
parent: WeaponPistolDeagleGolden
|
||||
|
|
@ -226,4 +204,3 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
- type: entity
|
||||
name: SyndyFlash Grenade
|
||||
description: It definitely smells fake.
|
||||
parent: [ GrenadeBase, BaseRestrictedContraband, GrenadeFlashBang ]
|
||||
parent: [ GrenadeBase, BaseSyndicateContraband, GrenadeFlashBang ]
|
||||
id: SyndyFlashGrenade
|
||||
components:
|
||||
- type: Sprite
|
||||
|
|
|
|||
|
|
@ -6,10 +6,9 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
- type: Construction
|
||||
graph: EnergySwordDoubleGraph
|
||||
node: DoubleEnergySwordNode
|
||||
node: double
|
||||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
|
|
@ -22,7 +21,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
- type: Tag
|
||||
tags:
|
||||
- EnergySword
|
||||
|
|
@ -41,7 +39,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
|
|
@ -54,7 +51,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
|
|
@ -67,7 +63,6 @@
|
|||
- type: FactionWeaponBlocker
|
||||
factions:
|
||||
- Syndicate
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
- type: Biocode
|
||||
factions:
|
||||
- Syndicate
|
||||
|
|
|
|||
|
|
@ -7,4 +7,3 @@
|
|||
factions:
|
||||
- Syndicate
|
||||
- Thief
|
||||
alertText: Данное оружие биокодировано. Вы не можете его использовать.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
- type: entity
|
||||
id: BaseSecurityScienceContraband
|
||||
parent: BaseRestrictedContraband
|
||||
abstract: true
|
||||
components:
|
||||
- type: Contraband
|
||||
allowedDepartments: [ Security, Science ]
|
||||
|
||||
- type: entity
|
||||
id: BaseSalvageSpecialistContraband
|
||||
parent: BaseRestrictedContraband
|
||||
abstract: true
|
||||
components:
|
||||
- type: Contraband
|
||||
allowedJobs: [ SalvageSpecialist ]
|
||||
|
|
@ -11,6 +11,8 @@
|
|||
layers:
|
||||
- state: icon
|
||||
map: ["enum.LatheVisualLayers.IsRunning"]
|
||||
- type: Machine
|
||||
board: SewingPrinterMetusMachineCircuitboard
|
||||
- type: Lathe
|
||||
staticPacks:
|
||||
- ClothingMetusPlanetPrison
|
||||
|
|
@ -107,6 +109,8 @@
|
|||
- PowerCellsStatic
|
||||
- ElectronicsStaticPrison
|
||||
- HydroponicsStatic
|
||||
- type: Machine
|
||||
board: AutolathePrisonMetusMachineCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: PirateTechFab
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
# Какого хуя это не наследуется от BaseStructure
|
||||
# TODO: Исправьте это говно кто-нибудь
|
||||
|
||||
- type: entity
|
||||
id: Reflector
|
||||
name: reflector
|
||||
|
|
@ -16,6 +19,7 @@
|
|||
- type: Pullable
|
||||
- type: Rotatable
|
||||
- type: Machine
|
||||
board: ReflectorMachineCircuitboard
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
|
|
|
|||
|
|
@ -28,15 +28,9 @@
|
|||
collection: MetalBreak
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
SheetSteel1:
|
||||
min: 4
|
||||
max: 12
|
||||
MaterialWoodPlank1:
|
||||
min: 1
|
||||
max: 4
|
||||
PartRodMetal1:
|
||||
min: 2
|
||||
max: 8
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: Fixtures
|
||||
|
|
@ -101,14 +95,14 @@
|
|||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
SheetSteel1:
|
||||
min: 4
|
||||
max: 12
|
||||
min: 0
|
||||
max: 1
|
||||
MaterialWoodPlank1:
|
||||
min: 1
|
||||
max: 4
|
||||
PartRodMetal1:
|
||||
min: 2
|
||||
max: 8
|
||||
min: 1
|
||||
max: 2
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: Fixtures
|
||||
|
|
|
|||
|
|
@ -64,8 +64,8 @@
|
|||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
MaterialWoodPlank:
|
||||
min: 1
|
||||
max: 2
|
||||
min: 0
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: Construction
|
||||
|
|
@ -165,8 +165,8 @@
|
|||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
MaterialWoodPlank:
|
||||
min: 1
|
||||
max: 2
|
||||
min: 0
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: Construction
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
parent: BaseStructure
|
||||
name: Flesh Heart
|
||||
description: Flesh Heart
|
||||
categories: [ Spawner ]
|
||||
placement:
|
||||
mode: AlignTileAny
|
||||
components:
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
- DurandTargetingElectronics
|
||||
- ClarkeCentralElectronics
|
||||
- ClarkePeripheralsElectronics
|
||||
- ImplantExtractorMachineCircuitboard
|
||||
- InterrogatorMachineCircuitboard
|
||||
- ExosuitFabricatorHyperConvectionMachineCircuitboard
|
||||
- MedicalAssemblerMachineCircuitboard
|
||||
|
||||
|
|
|
|||
|
|
@ -18,14 +18,9 @@
|
|||
Plastic: 600
|
||||
|
||||
- type: latheRecipe
|
||||
parent: BaseLightRecipe
|
||||
id: UvLightTube
|
||||
result: UvLightTube
|
||||
categories:
|
||||
- Lights
|
||||
completetime: 2
|
||||
materials:
|
||||
Steel: 50
|
||||
Glass: 50
|
||||
|
||||
- type: latheRecipe
|
||||
id: ClothingShoesBootsMagSec
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@
|
|||
tier: 3
|
||||
cost: 12500
|
||||
recipeUnlocks:
|
||||
- ImplantExtractorMachineCircuitboard
|
||||
- InterrogatorMachineCircuitboard
|
||||
|
||||
- type: technology
|
||||
id: AutoMenders
|
||||
|
|
|
|||
|
|
@ -55,3 +55,15 @@
|
|||
storage:
|
||||
back:
|
||||
- HandheldBSOCrewMonitor
|
||||
|
||||
- type: chameleonOutfit
|
||||
id: BlueShieldEnsignChameleonOutfit
|
||||
job: BlueShieldEnsign
|
||||
icon: JobIconBlueShield
|
||||
equipment:
|
||||
shoes: ClothingShoesBootsBlueShieldFilled
|
||||
eyes: ClothingEyesGlassesBlueShield
|
||||
head: ClothingHeadHatBeretBlueShield
|
||||
outerClothing: ClothingOuterArmorBlueShield
|
||||
belt: ClothingBeltBlueShieldWebbingFilled
|
||||
gloves: ClothingHandsGlovesCombat
|
||||
|
|
@ -52,3 +52,13 @@
|
|||
storage:
|
||||
back:
|
||||
# - HandheldBSOCrewMonitor
|
||||
|
||||
- type: chameleonOutfit
|
||||
id: BlueShieldOfficerChameleonOutfit
|
||||
job: BlueShieldOfficer
|
||||
icon: JobIconBlueShield
|
||||
equipment:
|
||||
shoes: ClothingShoesBootsBlueShieldFilled
|
||||
eyes: ClothingEyesGlassesBlueShield
|
||||
outerClothing: ClothingOuterArmorBlueShield
|
||||
gloves: ClothingHandsGlovesCombat
|
||||
|
|
@ -40,3 +40,14 @@
|
|||
sprite: /Textures/_Sunrise/Interface/Misc/job_icons.rsi
|
||||
state: CommandMaid
|
||||
|
||||
- type: chameleonOutfit
|
||||
id: ComMaidChameleonOutfit
|
||||
job: ComMaid
|
||||
icon: JobIconComMaid
|
||||
equipment:
|
||||
jumpsuit: ClothingUniformJumpskirtElegantMaid
|
||||
head: ClothingHeadNurseHat
|
||||
eyes: ClothingEyesGlassesSunglasses
|
||||
neck: BunnyButterfly
|
||||
shoes: ClothingShoesColorWhite
|
||||
|
||||
|
|
|
|||
|
|
@ -347,10 +347,8 @@
|
|||
description:
|
||||
components:
|
||||
- type: CargoPalletConsole
|
||||
#tag: #Service sale
|
||||
#whitelist:
|
||||
# components:
|
||||
# - Food
|
||||
- type: Computer
|
||||
board: ComputerServiceSaleConsoleCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: ComputerSecuritySaleConsole
|
||||
|
|
@ -360,10 +358,8 @@
|
|||
description:
|
||||
components:
|
||||
- type: CargoPalletConsole
|
||||
# tag: #Security sale
|
||||
# whitelist:
|
||||
# components:
|
||||
# - Gun
|
||||
- type: Computer
|
||||
board: ComputerSecuritySaleConsoleCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: ComputerMedicalSaleConsole
|
||||
|
|
@ -373,10 +369,8 @@
|
|||
description:
|
||||
components:
|
||||
- type: CargoPalletConsole
|
||||
# tag: #Medical sale
|
||||
# whitelist:
|
||||
# components:
|
||||
# - Healing
|
||||
- type: Computer
|
||||
board: ComputerMedicalSaleConsoleCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: ComputerMiningSaleConsole
|
||||
|
|
@ -386,10 +380,8 @@
|
|||
description:
|
||||
components:
|
||||
- type: CargoPalletConsole
|
||||
# tag: #Mining sale
|
||||
# whitelist:
|
||||
# components:
|
||||
# - Material
|
||||
- type: Computer
|
||||
board: ComputerMiningSaleConsoleCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: ComputerScienceSaleConsole
|
||||
|
|
@ -399,13 +391,8 @@
|
|||
description:
|
||||
components:
|
||||
- type: CargoPalletConsole
|
||||
# tag: #Science sale
|
||||
# whitelist:
|
||||
# components:
|
||||
# - TechnologyDisk
|
||||
# - MachineBoard
|
||||
# - MachinePart
|
||||
# - PowerCell
|
||||
- type: Computer
|
||||
board: ComputerScienceSaleConsoleboard
|
||||
|
||||
- type: entity
|
||||
parent: ComputerComms
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: Machine
|
||||
board: ImplantExtractorMachineCircuitboard
|
||||
board: InterrogatorMachineCircuitboard
|
||||
- type: WiresPanel
|
||||
- type: ApcPowerReceiver
|
||||
powerLoad: 200
|
||||
|
|
@ -70,10 +70,10 @@
|
|||
board: InterrogatorMachineCircuitboard
|
||||
|
||||
- type: entity
|
||||
id: ImplantExtractorMachineCircuitboard
|
||||
id: InterrogatorMachineCircuitboard
|
||||
parent: BaseMachineCircuitboard
|
||||
name: implant scan machine board
|
||||
description: A machine printed circuit board for a implant extractor.
|
||||
name: interrogator machine board
|
||||
description: A machine printed circuit board for a interrogator.
|
||||
components:
|
||||
- type: Sprite
|
||||
state: medical
|
||||
|
|
@ -83,12 +83,3 @@
|
|||
Manipulator: 4
|
||||
Glass: 1
|
||||
Cable: 1
|
||||
|
||||
- type: entity
|
||||
id: InterrogatorMachineCircuitboard
|
||||
parent: ImplantExtractorMachineCircuitboard
|
||||
name: interrogator machine board
|
||||
description: A machine printed circuit board for a interrogator.
|
||||
components:
|
||||
- type: Sprite
|
||||
state: medical
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue