if (traitorRule == null)
{
//todo fuck me this shit is awful
+ //no i wont fuck you, erp is against rules
GameTicker.StartGameRule("Traitor", out var ruleEntity);
- traitorRule = EntityManager.GetComponent<TraitorRuleComponent>(ruleEntity);
+ traitorRule = Comp<TraitorRuleComponent>(ruleEntity);
}
var mind = traitor.Data.ContentData()?.Mind;
using Content.Server.Cuffs;
+using Content.Server.Store.Components;
+using Content.Server.Store.Systems;
using Content.Shared.Cuffs.Components;
using Content.Shared.Implants;
using Content.Shared.Implants.Components;
+using Content.Shared.Interaction;
using Content.Shared.Interaction.Events;
using Content.Shared.Mobs;
+using Content.Shared.Popups;
using Robust.Shared.Containers;
namespace Content.Server.Implants;
{
[Dependency] private readonly CuffableSystem _cuffable = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly StoreSystem _store = default!;
public override void Initialize()
{
SubscribeLocalEvent<SubdermalImplantComponent, UseFreedomImplantEvent>(OnFreedomImplant);
+ SubscribeLocalEvent<StoreComponent, AfterInteractUsingEvent>(OnUplinkInteractUsing);
+
SubscribeLocalEvent<ImplantedComponent, MobStateChangedEvent>(RelayToImplantEvent);
+ SubscribeLocalEvent<ImplantedComponent, AfterInteractUsingEvent>(RelayToImplantEvent);
SubscribeLocalEvent<ImplantedComponent, SuicideEvent>(RelayToImplantEvent);
}
args.Handled = true;
}
+ private void OnUplinkInteractUsing(EntityUid uid, StoreComponent store, AfterInteractUsingEvent args)
+ {
+ // can only insert into yourself to prevent uplink checking with renault
+ if (args.Target != args.User)
+ return;
+
+ if (!TryComp<CurrencyComponent>(args.Used, out var currency))
+ return;
+
+ // same as store code, but message is only shown to yourself
+ args.Handled = _store.TryAddCurrency(_store.GetCurrencyValue(args.Used, currency), uid, store);
+
+ if (!args.Handled)
+ return;
+
+ var msg = Loc.GetString("store-currency-inserted-implant", ("used", args.Used));
+ _popup.PopupEntity(msg, args.User, args.User);
+ QueueDel(args.Used);
+ }
+
#region Relays
//Relays from the implanted to the implant
using Content.Server.Actions;
using Content.Server.Administration.Logs;
+using Content.Server.Stack;
using Content.Server.Store.Components;
+using Content.Server.UserInterface;
using Content.Shared.Actions.ActionTypes;
using Content.Shared.FixedPoint;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Database;
using Robust.Server.GameObjects;
using System.Linq;
-using Content.Server.Stack;
-using Content.Server.UserInterface;
namespace Content.Server.Store.Systems;
using Content.Server.Store.Components;
using Content.Server.UserInterface;
using Content.Shared.FixedPoint;
+using Content.Shared.Implants.Components;
using Content.Shared.Interaction;
using Content.Shared.Popups;
using Content.Shared.Stacks;
SubscribeLocalEvent<StoreComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<StoreComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<StoreComponent, ComponentShutdown>(OnShutdown);
+ SubscribeLocalEvent<StoreComponent, OpenUplinkImplantEvent>(OnImplantActivate);
InitializeUi();
InitializeCommand();
}
}
+ private void OnImplantActivate(EntityUid uid, StoreComponent component, OpenUplinkImplantEvent args)
+ {
+ ToggleUi(args.Performer, uid, component);
+ }
+
/// <summary>
/// Gets the value from an entity's currency component.
/// Scales with stacks.
{
}
+
+/// <summary>
+/// Used for opening the uplink implant via action.
+/// </summary>
+public sealed class OpenUplinkImplantEvent : InstantActionEvent
+{
+
+}
use-freedom-implant-action-name = Break Free
use-freedom-implant-action-description = Activating your freedom implant will free you from any hand restraints
+
+open-uplink-implant-action-name = Open Uplink
+open-uplink-implant-action-description = Opens the syndicate uplink embedded under your skin
store-currency-inserted = {CAPITALIZE(THE($used))} is inserted into the {THE($target)}.
+store-currency-inserted-implant = {CAPITALIZE(THE($used))} is inserted into your implant.
store-currency-free = Free
store-currency-display-debugdollar = {$amount ->
*[other] Debug Dollars
}
store-currency-display-telecrystal = TC
-store-currency-display-stolen-essence = Stolen Essence
\ No newline at end of file
+store-currency-display-stolen-essence = Stolen Essence
uplink-macro-bomb-implanter-name = Macro Bomb Implanter
uplink-macro-bomb-implanter-desc = Inject this and on death you'll create a large explosion. Huge team casualty cost, use at own risk. Replaces internal micro bomb.
+uplink-uplink-implanter-name = Uplink Implanter
+uplink-uplink-implanter-desc = Stealthily order equipment without the need for a PDA. Swallow telecrystals to top up the uplink.
+
# Bundles
uplink-c20r-bundle-name = C-20r Bundle
uplink-c20r-bundle-desc = Old faithful: The classic C-20r Submachine Gun, bundled with three magazines.
state: freedom
event: !type:UseFreedomImplantEvent
+- type: instantAction
+ id: OpenUplinkImplant
+ name: open-uplink-implant-action-name
+ description: open-uplink-implant-action-description
+ itemIconStyle: BigAction
+ priority: -20
+ icon:
+ sprite: Objects/Devices/communication.rsi
+ state: old-radio
+ event: !type:OpenUplinkImplantEvent
+
- type: instantAction
id: ToggleSuitHelmet
name: action-name-hardsuit
components:
- SurplusBundle
+- type: listing
+ id: UplinkUplinkImplanter # uplink uplink real
+ name: uplink-uplink-implanter-name
+ description: uplink-uplink-implanter-desc
+ icon: { sprite: /Textures/Objects/Devices/communication.rsi, state: old-radio }
+ productEntity: UplinkImplanter
+ cost:
+ Telecrystal: 4
+ categories:
+ - UplinkImplants
+
# Bundles
- type: listing
- type: Implanter
implant: FreedomImplant
+- type: entity
+ id: UplinkImplanter
+ name: uplink implanter
+ description: a single use implanter, the implant lets the user access a syndicate uplink at will
+ parent: BaseImplantOnlyImplanter
+ components:
+ - type: Implanter
+ implant: UplinkImplant
+
#Nuclear Operative/Special implanters
- type: entity
- type: SubdermalImplant
implantAction: ActivateFreedomImplant
+- type: entity
+ parent: BaseSubdermalImplant
+ id: UplinkImplant
+ name: uplink implant
+ description: allows the user to open a hidden uplink at will
+ noSpawn: true
+ components:
+ - type: SubdermalImplant
+ implantAction: OpenUplinkImplant
+ - type: Store
+ preset: StorePresetUplink
+ balance:
+ Telecrystal: 0
+ - type: UserInterface
+ interfaces:
+ - key: enum.StoreUiKey.Key
+ type: StoreBoundUserInterface
+
#Nuclear Operative/Special Exclusive implants
- type: entity