Фикс энерго мечей. Фикс смены цвета работы каргой агента. карту агента, эсворды, пИИ синдиката и одежду хамелеона больше не могут использовать не синдикаты.

This commit is contained in:
Vigers Ray 2024-12-02 07:31:30 +03:00
parent d3dc1659b6
commit 7c8a5ae4c2
29 changed files with 332 additions and 57 deletions

View file

@ -9,6 +9,8 @@ using Robust.Server.GameObjects;
using Robust.Shared.Prototypes;
using Content.Shared.Roles;
using System.Diagnostics.CodeAnalysis;
using Content.Shared._Sunrise.Biocode;
using BiocodeComponent = Content.Shared._Sunrise.Biocode.BiocodeComponent;
namespace Content.Server.Access.Systems
{
@ -18,6 +20,7 @@ namespace Content.Server.Access.Systems
[Dependency] private readonly IdCardSystem _cardSystem = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
public override void Initialize()
{
@ -35,6 +38,14 @@ namespace Content.Server.Access.Systems
if (args.Target == null || !args.CanReach || !TryComp<AccessComponent>(args.Target, out var targetAccess) || !HasComp<IdCardComponent>(args.Target))
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
if (!TryComp<AccessComponent>(uid, out var access) || !HasComp<IdCardComponent>(uid))
return;
@ -98,7 +109,10 @@ namespace Content.Server.Access.Systems
_cardSystem.TryChangeJobIcon(uid, jobIcon, idCard);
if (TryFindJobProtoFromIcon(jobIcon, out var job))
_cardSystem.TryChangeJobDepartment(uid, job, idCard);
{
_cardSystem.TryChangeJobColor(uid, _cardSystem.GetJobColor(_prototypeManager, job), job.RadioIsBold);
_cardSystem.TryChangeJobDepartment(uid, job, idCard); // Sunrise-Edit
}
}
private bool TryFindJobProtoFromIcon(JobIconPrototype jobIcon, [NotNullWhen(true)] out JobPrototype? job)

View file

@ -134,11 +134,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
_idCard.TryChangeJobIcon(targetId, jobIcon, player: player);
_idCard.TryChangeJobDepartment(targetId, job);
// Sunrise-Start
_idCard.TryChangeJobColor(
targetId,
PresetIdCardSystem.GetJobColor(_prototype, job),
job.RadioIsBold
);
_idCard.TryChangeJobColor(targetId,_idCard.GetJobColor(_prototype, job), job.RadioIsBold);
// Sunrise-End
}

View file

@ -82,29 +82,9 @@ public sealed class PresetIdCardSystem : EntitySystem
_cardSystem.TryChangeJobTitle(uid, job.LocalizedName);
_cardSystem.TryChangeJobDepartment(uid, job);
_cardSystem.TryChangeJobColor(uid, GetJobColor(_prototypeManager, job), job.RadioIsBold); // Sunrise-End
_cardSystem.TryChangeJobColor(uid, _cardSystem.GetJobColor(_prototypeManager, job), job.RadioIsBold); // Sunrise-End
if (_prototypeManager.TryIndex(job.Icon, out var jobIcon))
_cardSystem.TryChangeJobIcon(uid, jobIcon);
}
// Sunrise-Start
public static string GetJobColor(IPrototypeManager prototypeManager, IPrototype job)
{
var jobCode = job.ID;
var departments = prototypeManager.EnumeratePrototypes<DepartmentPrototype>().ToList();
departments.Sort((a, b) => a.Sort.CompareTo(b.Sort));
foreach (var department in from department in departments
from jobId in department.Roles
where jobId == jobCode
select department)
{
return department.Color.ToHex();
}
return string.Empty;
}
// Sunrise-End
}

View file

@ -1,4 +1,5 @@
using Content.Server.IdentityManagement;
using Content.Shared._Sunrise.Biocode;
using Content.Shared.Clothing.Components;
using Content.Shared.Clothing.EntitySystems;
using Content.Shared.IdentityManagement.Components;
@ -17,6 +18,7 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly IdentitySystem _identity = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
public override void Initialize()
{
@ -33,9 +35,17 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem
private void OnVerb(EntityUid uid, ChameleonClothingComponent component, GetVerbsEvent<InteractionVerb> args)
{
if (!args.CanAccess || !args.CanInteract || component.User != args.User)
if (!args.CanAccess || !args.CanInteract) // || component.User != args.User // Sunrise-Edit: Не надо
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Verbs.Add(new InteractionVerb()
{
Text = Loc.GetString("chameleon-component-verb-text"),

View file

@ -1,4 +1,5 @@
using Content.Server.Ghost.Roles.Components;
using Content.Shared._Sunrise.Biocode;
using Content.Shared.Examine;
using Content.Shared.Interaction.Events;
using Content.Shared.Mind;
@ -16,6 +17,7 @@ public sealed class ToggleableGhostRoleSystem : EntitySystem
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
/// <inheritdoc/>
public override void Initialize()
@ -32,6 +34,14 @@ public sealed class ToggleableGhostRoleSystem : EntitySystem
if (args.Handled)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Handled = true;
// check if a mind is present
@ -100,6 +110,14 @@ public sealed class ToggleableGhostRoleSystem : EntitySystem
if (args.Hands == null || !args.CanAccess || !args.CanInteract)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
if (TryComp<MindContainerComponent>(uid, out var mind) && mind.HasMind)
{
ActivationVerb verb = new()

View file

@ -1,4 +1,5 @@
using System.Globalization;
using System.Linq;
using Content.Shared.Access.Components;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
@ -213,6 +214,24 @@ public abstract class SharedIdCardSystem : EntitySystem
return true;
}
public string GetJobColor(IPrototypeManager prototypeManager, IPrototype job)
{
var jobCode = job.ID;
var departments = prototypeManager.EnumeratePrototypes<DepartmentPrototype>().ToList();
departments.Sort((a, b) => a.Sort.CompareTo(b.Sort));
foreach (var department in from department in departments
from jobId in department.Roles
where jobId == jobCode
select department)
{
return department.Color.ToHex();
}
return string.Empty;
}
// Sunrise-End
/// <summary>

View file

@ -18,6 +18,6 @@ public sealed partial class ItemToggleActiveSoundComponent : Component
/// <summary>
/// Used when the item emits sound while active.
/// </summary>
[DataField]
[DataField, AutoNetworkedField]
public EntityUid? PlayingStream;
}

View file

@ -1,3 +1,7 @@
using Content.Shared._Sunrise.Biocode;
using Content.Shared.Hands;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Events;
using Content.Shared.Item.ItemToggle.Components;
@ -23,6 +27,8 @@ public sealed class ItemToggleSystem : EntitySystem
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
private EntityQuery<ItemToggleComponent> _query;
@ -43,6 +49,16 @@ public sealed class ItemToggleSystem : EntitySystem
SubscribeLocalEvent<ItemToggleHotComponent, IsHotEvent>(OnIsHotEvent);
SubscribeLocalEvent<ItemToggleActiveSoundComponent, ItemToggledEvent>(UpdateActiveSound);
SubscribeLocalEvent<ItemToggleComponent, GotUnequippedHandEvent>(OnItemToggleHandUnequipped);
}
private void OnItemToggleHandUnequipped(Entity<ItemToggleComponent> ent, ref GotUnequippedHandEvent args)
{
if (!ent.Comp.Activated || ent.Owner != args.Unequipped)
return;
Toggle((ent.Owner, ent.Comp), args.User, predicted: ent.Comp.Predictable);
}
private void OnStartup(Entity<ItemToggleComponent> ent, ref ComponentStartup args)
@ -64,6 +80,22 @@ public sealed class ItemToggleSystem : EntitySystem
if (args.Handled || !ent.Comp.OnUse)
return;
// Sunrise-Start
if (TryComp<HandsComponent>(args.User, out var handsComp))
{
if (!_handsSystem.TryGetActiveItem((args.User, handsComp), out var itemInHand))
return;
if (itemInHand != ent.Owner)
return;
}
if (TryComp<BiocodeComponent>(ent.Owner, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Handled = true;
Toggle((ent, ent.Comp), args.User, predicted: ent.Comp.Predictable);
@ -75,6 +107,21 @@ public sealed class ItemToggleSystem : EntitySystem
return;
var user = args.User;
// Sunrise-Start
if (TryComp<HandsComponent>(args.User, out var handsComp))
{
if (!_handsSystem.TryGetActiveItem((args.User, handsComp), out var itemInHand))
return;
if (itemInHand != ent.Owner)
return;
}
if (TryComp<BiocodeComponent>(ent.Owner, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Verbs.Add(new ActivationVerb()
{
@ -91,6 +138,22 @@ public sealed class ItemToggleSystem : EntitySystem
if (args.Handled || !ent.Comp.OnActivate)
return;
// Sunrise-Start
if (TryComp<HandsComponent>(args.User, out var handsComp))
{
if (!_handsSystem.TryGetActiveItem((args.User, handsComp), out var itemInHand))
return;
if (itemInHand != ent.Owner)
return;
}
if (TryComp<BiocodeComponent>(ent.Owner, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Handled = true;
Toggle((ent.Owner, ent.Comp), args.User, predicted: ent.Comp.Predictable);
}
@ -273,6 +336,9 @@ public sealed class ItemToggleSystem : EntitySystem
/// </summary>
private void UpdateActiveSound(Entity<ItemToggleActiveSoundComponent> ent, ref ItemToggledEvent args)
{
if (_netManager.IsClient)
return;
var (uid, comp) = ent;
if (!args.Activated)
{
@ -283,9 +349,7 @@ public sealed class ItemToggleSystem : EntitySystem
if (comp.ActiveSound != null && comp.PlayingStream == null)
{
var loop = comp.ActiveSound.Params.WithLoop(true);
var stream = args.Predicted
? _audio.PlayPredicted(comp.ActiveSound, uid, args.User, loop)
: _audio.PlayPvs(comp.ActiveSound, uid, loop);
var stream = _audio.PlayPvs(comp.ActiveSound, uid, loop);
if (stream?.Entity is {} entity)
comp.PlayingStream = entity;
}

View file

@ -26,13 +26,15 @@ namespace Content.Shared.PAI
private void OnMapInit(EntityUid uid, PAIComponent component, MapInitEvent args)
{
_actionsSystem.AddAction(uid, ref component.MidiAction, component.MidiActionId);
_actionsSystem.AddAction(uid, ref component.MapAction, component.MapActionId);
// Sunrise-Edit
//_actionsSystem.AddAction(uid, ref component.MapAction, component.MapActionId);
}
private void OnShutdown(EntityUid uid, PAIComponent component, ComponentShutdown args)
{
_actionsSystem.RemoveAction(uid, component.MidiAction);
_actionsSystem.RemoveAction(uid, component.MapAction);
// Sunrise-Edit
//_actionsSystem.RemoveAction(uid, component.MapAction);
}
}
}

View file

@ -1,3 +1,4 @@
using Content.Shared._Sunrise.Biocode;
using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Managers;
using Content.Shared.Ghost;
@ -21,6 +22,7 @@ public sealed partial class ActivatableUISystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
public override void Initialize()
{
@ -70,6 +72,14 @@ public sealed partial class ActivatableUISystem : EntitySystem
if (component.VerbOnly || !ShouldAddVerb(uid, component, args))
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Verbs.Add(new ActivationVerb
{
Act = () => InteractUI(args.User, uid, component),
@ -84,6 +94,14 @@ public sealed partial class ActivatableUISystem : EntitySystem
if (!component.VerbOnly || !ShouldAddVerb(uid, component, args))
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Verbs.Add(new Verb
{
Act = () => InteractUI(args.User, uid, component),
@ -130,6 +148,14 @@ public sealed partial class ActivatableUISystem : EntitySystem
if (component.RequiredItems != null)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Handled = InteractUI(args.User, uid, component);
}
@ -144,6 +170,14 @@ public sealed partial class ActivatableUISystem : EntitySystem
if (component.RequiredItems != null)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
args.Handled = InteractUI(args.User, uid, component);
}
@ -158,6 +192,14 @@ public sealed partial class ActivatableUISystem : EntitySystem
if (component.RequiredItems == null)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
if (_whitelistSystem.IsWhitelistFail(component.RequiredItems, args.Used))
return;

View file

@ -1,4 +1,5 @@
using System.Linq;
using Content.Shared._Sunrise.Biocode;
using Content.Shared.Examine;
using Content.Shared.Hands;
using Content.Shared.Hands.Components;
@ -35,6 +36,7 @@ public sealed class WieldableSystem : EntitySystem
[Dependency] private readonly SharedGunSystem _gun = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _netManager = default!;
[Dependency] private readonly BiocodeSystem _biocodeSystem = default!;
public override void Initialize()
{
@ -138,6 +140,14 @@ public sealed class WieldableSystem : EntitySystem
if (args.Hands == null || !args.CanAccess || !args.CanInteract)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
if (!_handsSystem.IsHolding(args.User, uid, out _, args.Hands))
return;
@ -161,6 +171,14 @@ public sealed class WieldableSystem : EntitySystem
if (args.Handled)
return;
// Sunrise-Start
if (TryComp<BiocodeComponent>(uid, out var biocodedComponent))
{
if (!_biocodeSystem.CanUse(args.User, biocodedComponent.Factions))
return;
}
// Sunrise-End
if (!component.Wielded)
args.Handled = TryWield(uid, component, args.User);
else if (component.UnwieldOnUse)

View file

@ -0,0 +1,16 @@
using Content.Shared.NPC.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
namespace Content.Shared._Sunrise.Biocode;
[RegisterComponent]
public sealed partial class BiocodeComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
[DataField("alertText")]
public string AlertText = "";
[ViewVariables(VVAccess.ReadWrite),
DataField("factions", customTypeSerializer:typeof(PrototypeIdHashSetSerializer<NpcFactionPrototype>))]
public HashSet<string> Factions = new();
}

View file

@ -0,0 +1,22 @@
using Content.Shared.NPC.Components;
namespace Content.Shared._Sunrise.Biocode;
public sealed class BiocodeSystem : EntitySystem
{
public bool CanUse(EntityUid user, HashSet<string> factions)
{
var canUse = false;
if (!TryComp<NpcFactionMemberComponent>(user, out var npcFactionMemberComponent))
return canUse;
foreach (var faction in npcFactionMemberComponent.Factions)
{
if (factions.Contains(faction))
canUse = true;
}
return canUse;
}
}

View file

@ -81,14 +81,6 @@
Telecrystal: 8
categories:
- UplinkWeaponry
#Sunrise-start
conditions:
- !type:StoreWhitelistCondition
blacklist:
tags:
- SyndieAgentUplink
- AssaultOpsUplink
#Sunrise-end
- type: listing
id: UplinkEnergyDagger

View file

@ -18,6 +18,11 @@
type: StorageBoundUserInterface
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: Clothing

View file

@ -18,3 +18,8 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -18,4 +18,9 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -21,6 +21,11 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: ClothingHandsChameleon

View file

@ -18,3 +18,8 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -23,6 +23,11 @@
- type: HideLayerClothing
slots:
- Snout
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: ClothingMaskGasChameleon

View file

@ -18,3 +18,8 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -18,3 +18,8 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -198,6 +198,11 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: ClothingShoesChameleon

View file

@ -40,3 +40,8 @@
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End

View file

@ -127,6 +127,9 @@
worldTargetActions:
- Emag
- HandheldHealthAnalyzerUnpowered
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity

View file

@ -606,6 +606,11 @@
type: AgentIDCardBoundUserInterface
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
name: passenger ID card

View file

@ -39,15 +39,15 @@
variation: 0.125
activatedDamage:
types:
Slash: 15
Heat: 15
Slash: 12
Heat: 12
Structural: 20
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 1
damage:
types:
Blunt: 4.5
Blunt: 1
- type: Item
size: Small
- type: UseDelay
@ -188,8 +188,8 @@
variation: 0.250
activatedDamage:
types:
Slash: 10
Heat: 10
Slash: 8
Heat: 8
- type: ComponentToggler
components:
- type: Sharp
@ -244,7 +244,7 @@
state: e_dagger
- type: SpawnItemsOnUse
items:
- id: EnergyDagger
- id: EnergyDaggerBiocode # Sunrise-Edit
sound:
path: /Audio/Effects/unwrap.ogg
@ -297,9 +297,9 @@
variation: 0.250
activatedDamage:
types:
Slash: 12
Heat: 12
Structural: 15
Slash: 6
Heat: 6
Structural: 10
- type: ItemToggleActiveSound
activeSound:
path: /Audio/Weapons/ebladehum.ogg
@ -316,11 +316,11 @@
wieldSound: null # esword light sound instead
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 1.5
attackRate: 1.75
angle: 100
damage:
types:
Blunt: 4.5
Blunt: 1
- type: Sprite
sprite: Objects/Weapons/Melee/e_sword_double.rsi
layers:
@ -334,8 +334,8 @@
size: Small
sprite: Objects/Weapons/Melee/e_sword_double-inhands.rsi
- type: Reflect
reflectProb: .75
spread: 75
reflectProb: .50
spread: 100
- type: entity
suffix: One-Handed, For Borgs

View file

@ -206,6 +206,7 @@
items:
- SyndicateJawsOfLife
- PinpointerNuclear
- WeaponPistolEchis
- type: entity
id: BorgModuleSyndicateMedical
@ -233,7 +234,7 @@
- state: icon-syndicate
- type: ItemBorgModule
items:
- EnergySword
- EnergyDaggerLoud
- LightMachineGunBorg
- type: entity

View file

@ -10,6 +10,11 @@
- type: Construction
graph: EnergySwordDoubleGraph
node: DoubleEnergySwordNode
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: EnergySword
@ -25,4 +30,22 @@
- EnergySword
- type: Construction
graph: EnergySwordDoubleGraph
node: start
node: start
# Sunrise-Start
- type: Biocode
factions:
- Syndicate
# Sunrise-End
- type: entity
parent: EnergyDagger
id: EnergyDaggerBiocode
suffix: BIOCODE
components:
- type: FactionWeaponBlocker
factions:
- Syndicate
alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Biocode
factions:
- Syndicate