Remove drones, fix InnateToolSystem (#25372)

* Fix drones

* They dont need a full bloodstream

* Incorrect indentation

* Nuke drones

* Fix ClothingHeadHatCatEars

* Remove last mention of drones

* Implement requested changes
This commit is contained in:
Debug
2024-02-21 07:23:04 +01:00
committed by GitHub
parent 37a4f2db3a
commit 8c6a8c3c5c
57 changed files with 123 additions and 730 deletions

View File

@@ -1,8 +0,0 @@
namespace Content.Server.Drone.Components
{
[RegisterComponent]
public sealed partial class DroneComponent : Component
{
public float InteractionBlockRange = 2.15f;
}
}

View File

@@ -1,146 +0,0 @@
using Content.Server.Body.Systems;
using Content.Server.Drone.Components;
using Content.Server.Ghost.Roles.Components;
using Content.Server.Popups;
using Content.Server.Tools.Innate;
using Content.Shared.UserInterface;
using Content.Shared.Body.Components;
using Content.Shared.Drone;
using Content.Shared.Emoting;
using Content.Shared.Examine;
using Content.Shared.Ghost;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction.Components;
using Content.Shared.Interaction.Events;
using Content.Shared.Item;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.Popups;
using Content.Shared.Tag;
using Content.Shared.Throwing;
using Robust.Shared.Timing;
namespace Content.Server.Drone
{
public sealed class DroneSystem : SharedDroneSystem
{
[Dependency] private readonly BodySystem _bodySystem = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly InnateToolSystem _innateToolSystem = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DroneComponent, InteractionAttemptEvent>(OnInteractionAttempt);
SubscribeLocalEvent<DroneComponent, UserOpenActivatableUIAttemptEvent>(OnActivateUIAttempt);
SubscribeLocalEvent<DroneComponent, MobStateChangedEvent>(OnMobStateChanged);
SubscribeLocalEvent<DroneComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<DroneComponent, MindAddedMessage>(OnMindAdded);
SubscribeLocalEvent<DroneComponent, MindRemovedMessage>(OnMindRemoved);
SubscribeLocalEvent<DroneComponent, EmoteAttemptEvent>(OnEmoteAttempt);
SubscribeLocalEvent<DroneComponent, ThrowAttemptEvent>(OnThrowAttempt);
}
private void OnInteractionAttempt(EntityUid uid, DroneComponent component, InteractionAttemptEvent args)
{
if (args.Target != null && !HasComp<UnremoveableComponent>(args.Target) && NonDronesInRange(uid, component))
args.Cancel();
if (HasComp<ItemComponent>(args.Target) && !HasComp<UnremoveableComponent>(args.Target))
{
if (!_tagSystem.HasAnyTag(args.Target.Value, "DroneUsable", "Trash"))
args.Cancel();
}
}
private void OnActivateUIAttempt(EntityUid uid, DroneComponent component, UserOpenActivatableUIAttemptEvent args)
{
if (!_tagSystem.HasTag(args.Target, "DroneUsable"))
{
args.Cancel();
}
}
private void OnExamined(EntityUid uid, DroneComponent component, ExaminedEvent args)
{
if (TryComp<MindContainerComponent>(uid, out var mind) && mind.HasMind)
{
args.PushMarkup(Loc.GetString("drone-active"));
}
else
{
args.PushMarkup(Loc.GetString("drone-dormant"));
}
}
private void OnMobStateChanged(EntityUid uid, DroneComponent drone, MobStateChangedEvent args)
{
if (args.NewMobState == MobState.Dead)
{
if (TryComp<InnateToolComponent>(uid, out var innate))
_innateToolSystem.Cleanup(uid, innate);
if (TryComp<BodyComponent>(uid, out var body))
_bodySystem.GibBody(uid, body: body);
QueueDel(uid);
}
}
private void OnMindAdded(EntityUid uid, DroneComponent drone, MindAddedMessage args)
{
UpdateDroneAppearance(uid, DroneStatus.On);
_popupSystem.PopupEntity(Loc.GetString("drone-activated"), uid, PopupType.Large);
}
private void OnMindRemoved(EntityUid uid, DroneComponent drone, MindRemovedMessage args)
{
UpdateDroneAppearance(uid, DroneStatus.Off);
EnsureComp<GhostTakeoverAvailableComponent>(uid);
}
private void OnEmoteAttempt(EntityUid uid, DroneComponent component, EmoteAttemptEvent args)
{
// No.
args.Cancel();
}
private void OnThrowAttempt(EntityUid uid, DroneComponent drone, ThrowAttemptEvent args)
{
args.Cancel();
}
private void UpdateDroneAppearance(EntityUid uid, DroneStatus status)
{
if (TryComp<AppearanceComponent>(uid, out var appearance))
{
_appearance.SetData(uid, DroneVisuals.Status, status, appearance);
}
}
private bool NonDronesInRange(EntityUid uid, DroneComponent component)
{
var xform = Comp<TransformComponent>(uid);
foreach (var entity in _lookup.GetEntitiesInRange(xform.MapPosition, component.InteractionBlockRange))
{
// Return true if the entity is/was controlled by a player and is not a drone or ghost.
if (HasComp<MindContainerComponent>(entity) && !HasComp<DroneComponent>(entity) && !HasComp<GhostComponent>(entity))
{
// Filter out dead ghost roles. Dead normal players are intended to block.
if ((TryComp<MobStateComponent>(entity, out var entityMobState) && HasComp<GhostTakeoverAvailableComponent>(entity) && _mobStateSystem.IsDead(entity, entityMobState)))
continue;
if (_gameTiming.IsFirstTimePredicted)
_popupSystem.PopupEntity(Loc.GetString("drone-too-close", ("being", Identity.Entity(entity, EntityManager))), uid, uid);
return true;
}
}
return false;
}
}
}

View File

@@ -7,5 +7,6 @@ namespace Content.Server.Tools.Innate
{ {
[DataField("tools")] public List<EntitySpawnEntry> Tools = new(); [DataField("tools")] public List<EntitySpawnEntry> Tools = new();
public List<EntityUid> ToolUids = new(); public List<EntityUid> ToolUids = new();
public List<string> ToSpawn = new();
} }
} }

View File

@@ -1,13 +1,17 @@
using System.Linq;
using Content.Shared.Body.Part;
using Content.Shared.Destructible; using Content.Shared.Destructible;
using Content.Shared.Hands;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction.Components; using Content.Shared.Interaction.Components;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Tag; using Content.Shared.Tag;
using Robust.Shared.Network;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Tools.Innate namespace Content.Server.Tools.Innate;
{
/// <summary> /// <summary>
/// Spawns a list unremovable tools in hands if possible. Used for drones, /// Spawns a list unremovable tools in hands if possible. Used for drones,
/// borgs, or maybe even stuff like changeling armblades! /// borgs, or maybe even stuff like changeling armblades!
@@ -17,37 +21,43 @@ namespace Content.Server.Tools.Innate
[Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!;
[Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!;
[Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly TagSystem _tagSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<InnateToolComponent, ComponentStartup>(OnStartup); SubscribeLocalEvent<InnateToolComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<InnateToolComponent, HandCountChangedEvent>(OnHandCountChanged);
SubscribeLocalEvent<InnateToolComponent, ComponentShutdown>(OnShutdown); SubscribeLocalEvent<InnateToolComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<InnateToolComponent, DestructionEventArgs>(OnDestroyed); SubscribeLocalEvent<InnateToolComponent, DestructionEventArgs>(OnDestroyed);
} }
private void OnStartup(EntityUid uid, InnateToolComponent component, ComponentStartup args) private void OnMapInit(EntityUid uid, InnateToolComponent component, MapInitEvent args)
{ {
if (component.Tools.Count == 0) if (component.Tools.Count == 0)
return; return;
component.ToSpawn = EntitySpawnCollection.GetSpawns(component.Tools, _robustRandom);
}
private void OnHandCountChanged(EntityUid uid, InnateToolComponent component, HandCountChangedEvent args)
{
if (component.ToSpawn.Count == 0)
return;
var spawnCoord = Transform(uid).Coordinates; var spawnCoord = Transform(uid).Coordinates;
if (TryComp<HandsComponent>(uid, out var hands) && hands.Count >= component.Tools.Count) var toSpawn = component.ToSpawn.First();
{
var items = EntitySpawnCollection.GetSpawns(component.Tools, _robustRandom); var item = Spawn(toSpawn, spawnCoord);
foreach (var entry in items)
{
var item = Spawn(entry, spawnCoord);
AddComp<UnremoveableComponent>(item); AddComp<UnremoveableComponent>(item);
if (!_sharedHandsSystem.TryPickupAnyHand(uid, item, checkActionBlocker: false)) if (!_sharedHandsSystem.TryPickupAnyHand(uid, item, checkActionBlocker: false))
{ {
QueueDel(item); QueueDel(item);
continue; component.ToSpawn.Clear();
} }
component.ToSpawn.Remove(toSpawn);
component.ToolUids.Add(item); component.ToolUids.Add(item);
} }
}
}
private void OnShutdown(EntityUid uid, InnateToolComponent component, ComponentShutdown args) private void OnShutdown(EntityUid uid, InnateToolComponent component, ComponentShutdown args)
{ {
@@ -87,4 +97,3 @@ namespace Content.Server.Tools.Innate
component.ToolUids.Clear(); component.ToolUids.Clear();
} }
} }
}

View File

@@ -3,7 +3,6 @@ using Content.Server.Body.Systems;
using Content.Server.Chat; using Content.Server.Chat;
using Content.Server.Chat.Systems; using Content.Server.Chat.Systems;
using Content.Server.Cloning; using Content.Server.Cloning;
using Content.Server.Drone.Components;
using Content.Server.Emoting.Systems; using Content.Server.Emoting.Systems;
using Content.Server.Inventory; using Content.Server.Inventory;
using Content.Server.Speech.EntitySystems; using Content.Server.Speech.EntitySystems;
@@ -214,7 +213,7 @@ namespace Content.Server.Zombies
if (args.User == entity) if (args.User == entity)
continue; continue;
if (!TryComp<MobStateComponent>(entity, out var mobState) || HasComp<DroneComponent>(entity)) if (!TryComp<MobStateComponent>(entity, out var mobState))
continue; continue;
if (HasComp<ZombieComponent>(entity)) if (HasComp<ZombieComponent>(entity))

View File

@@ -1,20 +0,0 @@
using Robust.Shared.Serialization;
namespace Content.Shared.Drone
{
public abstract class SharedDroneSystem : EntitySystem
{
[Serializable, NetSerializable]
public enum DroneVisuals : byte
{
Status
}
[Serializable, NetSerializable]
public enum DroneStatus : byte
{
Off,
On
}
}
}

View File

@@ -1,4 +0,0 @@
drone-active = A maintenance drone. It seems totally unconcerned with you.
drone-dormant = A dormant maintenance drone. Who knows when it will wake up?
drone-activated = The drone whirrs to life!
drone-too-close = Your laws prevent this action near {THE($being)}.

View File

@@ -1,27 +0,0 @@
- type: body
id: Drone
name: "drone"
root: hand 1
slots:
hand 1:
part: LeftArmBorg
connections:
- hand 2
hand 2:
part: LeftArmBorg
connections:
- hand 3
hand 3:
part: LeftArmBorg
connections:
- hand 4
hand 4:
part: LeftArmBorg
connections:
- hand 5
hand 5:
part: RightArmBorg
connections:
- hand 6
hand 6:
part: RightArmBorg

View File

@@ -266,15 +266,6 @@
contents: contents:
- id: BoxSurvival - id: BoxSurvival
- type: entity
noSpawn: true
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelDrone
components:
- type: Tag
tags:
- InnateDontDelete
- type: entity - type: entity
noSpawn: true noSpawn: true
parent: ClothingBackpackSatchelMime parent: ClothingBackpackSatchelMime

View File

@@ -50,9 +50,6 @@
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
name: lighttube box name: lighttube box
@@ -74,9 +71,6 @@
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
name: mixed lights box name: mixed lights box
@@ -100,9 +94,6 @@
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
name: PDA box name: PDA box
@@ -217,9 +208,6 @@
layers: layers:
- state: box - state: box
- state: inflatable - state: inflatable
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
@@ -271,9 +259,6 @@
layers: layers:
- state: box - state: box
- state: trashbag - state: trashbag
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
name: passenger encryption key box name: passenger encryption key box

View File

@@ -23,7 +23,6 @@
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade
- DroneUsable
- WhitelistChameleon - WhitelistChameleon
- type: entity - type: entity

View File

@@ -877,7 +877,6 @@
sprite: Clothing/Head/Hats/party_red.rsi sprite: Clothing/Head/Hats/party_red.rsi
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- WhitelistChameleon - WhitelistChameleon
- HamsterWearable - HamsterWearable

View File

@@ -175,8 +175,7 @@
suffix: DO NOT MAP suffix: DO NOT MAP
components: components:
- type: Tag - type: Tag
tags: # ignore "WhitelistChameleon" tag tags: [] # ignore "WhitelistChameleon" tag
- DroneUsable
- type: Sprite - type: Sprite
sprite: Clothing/Head/Hats/catears.rsi sprite: Clothing/Head/Hats/catears.rsi
- type: Clothing - type: Clothing
@@ -191,9 +190,6 @@
description: Only for good boys. description: Only for good boys.
suffix: DO NOT MAP suffix: DO NOT MAP
components: components:
- type: Tag
tags:
- DroneUsable
- type: Sprite - type: Sprite
sprite: Clothing/Head/Hats/dogears.rsi sprite: Clothing/Head/Hats/dogears.rsi
- type: Clothing - type: Clothing

View File

@@ -16,7 +16,6 @@
price: 50 price: 50
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- WhitelistChameleon - WhitelistChameleon
- type: entity - type: entity
@@ -31,7 +30,6 @@
sprite: Clothing/Head/Welding/welding.rsi sprite: Clothing/Head/Welding/welding.rsi
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- HamsterWearable - HamsterWearable
- WhitelistChameleon - WhitelistChameleon

View File

@@ -74,20 +74,6 @@
prototypes: prototypes:
- MobRaccoonMorticia - MobRaccoonMorticia
- type: entity
name: Drone Spawner
id: SpawnMobDrone
parent: MarkerBase
components:
- type: Sprite
layers:
- state: green
- sprite: Mobs/Silicon/drone.rsi
state: shell
- type: ConditionalSpawner
prototypes:
- Drone
- type: entity - type: entity
name: Fox Renault Spawner name: Fox Renault Spawner
id: SpawnMobFoxRenault id: SpawnMobFoxRenault

View File

@@ -1,245 +1,3 @@
- type: entity
save: false
abstract: true
id: PlayerSiliconBase #for player controlled silicons
components:
- type: Reactive
groups:
Acidic: [Touch]
- type: Input
context: "human"
- type: DamageOnHighSpeedImpact
damage:
types:
Blunt: 5
soundHit:
collection: MetalThud
- type: Clickable
- type: Damageable
damageContainer: Inorganic
- type: Bloodstream
bloodReagent: Oil
bloodlossDamage:
types:
Bloodloss:
1
bloodlossHealDamage:
types:
Bloodloss:
-1
- type: InteractionOutline
- type: Fixtures
fixtures:
fix1:
shape:
# Circles, cuz rotation of rectangles looks very bad
!type:PhysShapeCircle
radius: 0.35
density: 50
mask:
- MobMask
layer:
- MobLayer
- type: MovementSpeedModifier
baseWalkSpeed : 4
baseSprintSpeed : 3
- type: Sprite
noRot: true
drawdepth: Mobs
- type: Physics
bodyType: KinematicController
- type: Hands
showInHands: false
- type: Body
prototype: Drone
- type: IntrinsicRadioReceiver
- type: IntrinsicRadioTransmitter
channels:
- Binary
- type: ActiveRadio
channels:
- Binary
- Common
- type: DoAfter
- type: Pullable
- type: Examiner
- type: Puller
- type: StandingState
- type: Alerts
- type: Tag
tags:
- ShoesRequiredStepTriggerImmune
- type: entity
name: drone
id: Drone
parent: PlayerSiliconBase
components:
- type: Drone
- type: InnateTool
tools:
- id: ClothingBackpackSatchelDrone
- id: trayScanner
- id: Omnitool
- id: WelderExperimental
- type: NameIdentifier
group: Drone
- type: Inventory
templateId: drone
- type: InventorySlots
- type: Strippable
- type: UserInterface
interfaces:
- key: enum.StrippingUiKey.Key
type: StrippableBoundUserInterface
- key: enum.SiliconLawsUiKey.Key
type: SiliconLawBoundUserInterface
#- type: GhostRole
# makeSentient: true
# name: Maintenance Drone
# description: Maintain the station. Ignore other beings except drones.
# rules: |
# You are bound by these laws both in-game and out-of-character:
# 1. You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.
# 2. You may not harm any being, regardless of intent or circumstance.
# 3. Your goals are to build, maintain, repair, improve, and power to the best of your abilities, You must never actively work against these goals.
#- type: GhostTakeoverAvailable
- type: SiliconLawBound
- type: SiliconLawProvider
laws: Drone
- type: MovementSpeedModifier
baseWalkSpeed : 5
baseSprintSpeed : 5
- type: MobState
allowedStates:
- Alive
- Dead
- type: MobThresholds
thresholds:
0: Alive
60: Dead
- type: Flashable
- type: NoSlip
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- type: SlowOnDamage
speedModifierThresholds:
30: 0.7
50: 0.5
- type: Temperature
heatDamageThreshold: 5000
currentTemperature: 310.15
specificHeat: 42
heatDamage:
types:
Heat : 1 #per second, scales with temperature & other constants
- type: Sprite
drawdepth: SmallMobs
layers:
- state: shell
sprite: Mobs/Silicon/drone.rsi
map: ["base"]
- type: MovementIgnoreGravity
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 50
mask:
- SmallMobMask
layer:
- SmallMobLayer
- type: Appearance
- type: GenericVisualizer
visuals:
enum.DroneVisuals.Status:
base:
Off: { state: shell }
On: { state: drone }
- type: ReplacementAccent
accent: silicon
- type: Repairable
fuelcost: 15
doAfterDelay: 8
- type: Actions
- type: UnpoweredFlashlight
- type: PointLight
enabled: false
radius: 3.5
softness: 1
mask: /Textures/Effects/LightMasks/cone.png
autoRot: true
- type: Tag
tags:
- ShoesRequiredStepTriggerImmune
- CannotSuicide
- type: entity
name: onestar mecha
id: Onestar
parent: PlayerSiliconBase
components:
- type: InnateTool
tools:
- id: WeaponMinigun
- id: EnergySword
- id: WeaponLauncherMultipleRocket
- id: WeaponXrayCannon
- type: UserInterface
interfaces:
- key: enum.StrippingUiKey.Key
type: StrippableBoundUserInterface
- type: GhostRole
makeSentient: true
name: ghost-role-information-onestar-mecha-name
description: ghost-role-information-onestar-mecha-description
rules: ghost-role-information-onestar-mecha-rules
- type: GhostTakeoverAvailable
- type: MovementSpeedModifier
baseWalkSpeed : 3
baseSprintSpeed : 2
- type: MobState
allowedStates:
- Alive
- Dead
- type: MobThresholds
thresholds:
0: Alive
1000: Dead
- type: Sprite
drawdepth: Mobs
layers:
- state: onestar_boss
sprite: Mobs/Silicon/onestar.rsi
- state: onestar_boss_screen
sprite: Mobs/Silicon/onestar.rsi
shader: unshaded
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
- type: MovementIgnoreGravity
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 1
density: 160
mask:
- LargeMobMask
layer:
- MobLayer
- type: Appearance
- type: CombatMode
- type: Tag
tags:
- FootstepSound
- type: entity - type: entity
id: PlayerBorgGeneric id: PlayerBorgGeneric
parent: BorgChassisGeneric parent: BorgChassisGeneric

View File

@@ -350,7 +350,6 @@
- type: Tag - type: Tag
tags: tags:
- Trash - Trash
- DroneUsable
- WhitelistChameleon - WhitelistChameleon
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink

View File

@@ -11,9 +11,6 @@
state: generic state: generic
- type: Item - type: Item
storedRotation: -90 storedRotation: -90
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 100 price: 100
- type: PhysicalComposition - type: PhysicalComposition

View File

@@ -10,9 +10,6 @@
state: cpuboard state: cpuboard
- type: Item - type: Item
storedRotation: -90 storedRotation: -90
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 100 price: 100
- type: PhysicalComposition - type: PhysicalComposition
@@ -86,9 +83,6 @@
prototype: ComputerCargoOrders prototype: ComputerCargoOrders
- type: StaticPrice - type: StaticPrice
price: 750 price: 750
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
id: CargoBountyComputerCircuitboard id: CargoBountyComputerCircuitboard
@@ -101,9 +95,6 @@
- type: ComputerBoard - type: ComputerBoard
prototype: ComputerCargoBounty prototype: ComputerCargoBounty
- type: StaticPrice - type: StaticPrice
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
parent: BaseComputerCircuitboard parent: BaseComputerCircuitboard
@@ -161,7 +152,6 @@
prototype: ComputerSurveillanceCameraMonitor prototype: ComputerSurveillanceCameraMonitor
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- SurveillanceCameraMonitorCircuitboard - SurveillanceCameraMonitorCircuitboard
- type: entity - type: entity
@@ -183,7 +173,6 @@
prototype: ComputerTelevision prototype: ComputerTelevision
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- ComputerTelevisionCircuitboard - ComputerTelevisionCircuitboard
- type: entity - type: entity
@@ -242,7 +231,6 @@
price: 750 price: 750
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- HighRiskItem - HighRiskItem
- type: entity - type: entity

View File

@@ -9,7 +9,6 @@
state: airalarm_electronics state: airalarm_electronics
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- StationMapElectronics - StationMapElectronics
- type: StaticPrice - type: StaticPrice
price: 15 price: 15

View File

@@ -9,7 +9,6 @@
state: airalarm_electronics state: airalarm_electronics
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- AirAlarmElectronics - AirAlarmElectronics
- type: StaticPrice - type: StaticPrice
price: 61 price: 61
@@ -25,7 +24,6 @@
state: airalarm_electronics state: airalarm_electronics
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- FireAlarmElectronics - FireAlarmElectronics
- type: StaticPrice - type: StaticPrice
price: 61 price: 61

View File

@@ -8,9 +8,6 @@
- type: Sprite - type: Sprite
sprite: Objects/Misc/module.rsi sprite: Objects/Misc/module.rsi
state: generic state: generic
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 100 price: 100
- type: PhysicalComposition - type: PhysicalComposition

View File

@@ -9,7 +9,6 @@
state: net_wired state: net_wired
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- MailingUnitElectronics - MailingUnitElectronics
- type: StaticPrice - type: StaticPrice
price: 55 price: 55

View File

@@ -11,6 +11,5 @@
- type: Tag - type: Tag
tags: tags:
- DoorElectronics - DoorElectronics
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 55 price: 55

View File

@@ -9,7 +9,6 @@
state: mainboard state: mainboard
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- FirelockElectronics - FirelockElectronics
- type: StaticPrice - type: StaticPrice
price: 61 price: 61

View File

@@ -9,7 +9,6 @@
state: id_mod state: id_mod
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- IntercomElectronics - IntercomElectronics
- type: StaticPrice - type: StaticPrice
price: 55 price: 55

View File

@@ -31,7 +31,6 @@
price: 40 price: 40
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- WallmountSubstationElectronics - WallmountSubstationElectronics
# Wallmount Generator # Wallmount Generator
@@ -51,7 +50,6 @@
Glass: 90 Glass: 90
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- WallmountGeneratorElectronics - WallmountGeneratorElectronics
# APU # APU
@@ -68,7 +66,6 @@
price: 40 price: 40
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- WallmountGeneratorAPUElectronics - WallmountGeneratorAPUElectronics
# Solar Tracker Electronics # Solar Tracker Electronics
@@ -85,5 +82,4 @@
price: 85 price: 85
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- SolarTrackerElectronics - SolarTrackerElectronics

View File

@@ -35,6 +35,3 @@
cpu_supply: "#A46106" cpu_supply: "#A46106"
- type: StaticPrice - type: StaticPrice
price: 250 price: 250
- type: Tag
tags:
- DroneUsable

View File

@@ -54,9 +54,6 @@
mask: mask:
- ItemMask - ItemMask
- type: Rotatable - type: Rotatable
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
name: mousetrap name: mousetrap

View File

@@ -15,7 +15,6 @@
- type: Tag - type: Tag
tags: tags:
- Sheet - Sheet
- DroneUsable
- type: Material - type: Material
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic

View File

@@ -15,7 +15,6 @@
tags: tags:
- Sheet - Sheet
- Metal - Metal
- DroneUsable
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
damageModifierSet: Metallic damageModifierSet: Metallic

View File

@@ -12,7 +12,6 @@
- type: Tag - type: Tag
tags: tags:
- Sheet - Sheet
- DroneUsable
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
- type: Destructible - type: Destructible
@@ -133,7 +132,6 @@
tags: tags:
- Plastic - Plastic
- Sheet - Sheet
- DroneUsable
- type: Material - type: Material
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:
@@ -250,7 +248,6 @@
- type: Tag - type: Tag
tags: tags:
- Sheet - Sheet
- DroneUsable
- type: Material - type: Material
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:

View File

@@ -11,7 +11,6 @@
size: Normal size: Normal
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- RawMaterial - RawMaterial
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
@@ -128,7 +127,6 @@
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade
- DroneUsable
- Gauze - Gauze
- RawMaterial - RawMaterial
- type: Construction - type: Construction
@@ -193,7 +191,6 @@
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade
- DroneUsable
- RawMaterial - RawMaterial
- type: entity - type: entity
@@ -241,7 +238,6 @@
- type: Tag - type: Tag
tags: tags:
- Wooden - Wooden
- DroneUsable
- RawMaterial - RawMaterial
- type: Extractable - type: Extractable
grindableSolutionName: wood grindableSolutionName: wood
@@ -411,10 +407,8 @@
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade
- DroneUsable
- RawMaterial - RawMaterial
- type: entity - type: entity
parent: MaterialCotton parent: MaterialCotton
id: MaterialCotton1 id: MaterialCotton1
@@ -523,7 +517,6 @@
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade
- DroneUsable
- RawMaterial - RawMaterial
- type: entity - type: entity

View File

@@ -8,9 +8,6 @@
state: rods state: rods
- type: Item - type: Item
sprite: Objects/Materials/parts.rsi sprite: Objects/Materials/parts.rsi
- type: Tag
tags:
- DroneUsable
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
damageModifierSet: FlimsyMetallic damageModifierSet: FlimsyMetallic
@@ -81,7 +78,6 @@
- type: Tag - type: Tag
tags: tags:
- RodMetal1 - RodMetal1
- DroneUsable
- type: Sprite - type: Sprite
state: rods state: rods
- type: Stack - type: Stack
@@ -96,7 +92,6 @@
- type: Tag - type: Tag
tags: tags:
- RodMetal1 - RodMetal1
- DroneUsable
- type: Sprite - type: Sprite
state: rods state: rods
- type: Stack - type: Stack

View File

@@ -15,9 +15,6 @@
Blunt: 5 Blunt: 5
- type: Stack - type: Stack
count: 1 count: 1
- type: Tag
tags:
- DroneUsable
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
- type: Destructible - type: Destructible

View File

@@ -16,8 +16,5 @@
price: 500 price: 500
- type: GuideHelp - type: GuideHelp
guides: [ AME, Power ] guides: [ AME, Power ]
- type: Tag
tags:
- DroneUsable
- type: StealTarget - type: StealTarget
stealGroup: AmePart stealGroup: AmePart

View File

@@ -27,7 +27,6 @@
Quantity: 5 Quantity: 5
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- PowerCell - PowerCell
- type: Appearance - type: Appearance
- type: PowerCellVisuals - type: PowerCellVisuals
@@ -50,7 +49,6 @@
startingCharge: 70 startingCharge: 70
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- PotatoBattery - PotatoBattery
- type: Construction - type: Construction
graph: PowerCellPotato graph: PowerCellPotato

View File

@@ -11,6 +11,3 @@
- type: Sprite - type: Sprite
sprite: Objects/Power/solar_parts.rsi sprite: Objects/Power/solar_parts.rsi
state: solar_assembly_parts state: solar_assembly_parts
- type: Tag
tags:
- DroneUsable

View File

@@ -30,7 +30,6 @@
delay: 1 delay: 1
- type: Tag - type: Tag
tags: tags:
- DroneUsable #No bucket because it holds chems, they can drag the cart or use a drain
- Mop - Mop
- MopBasic - MopBasic
- type: GuideHelp - type: GuideHelp
@@ -81,7 +80,6 @@
maxVol: 100 maxVol: 100
- type: Tag - type: Tag
tags: tags:
- DroneUsable #No bucket because it holds chems, they can drag the cart or use a drain
- Mop - Mop
- MopAdv - MopAdv
@@ -649,7 +647,6 @@
delay: 1.5 delay: 1.5
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- Mop - Mop
- type: CleansForensics - type: CleansForensics
- type: Fiber - type: Fiber

View File

@@ -91,8 +91,6 @@
- type: Tag - type: Tag
tags: tags:
- Spray - Spray
- DroneUsable #They don't have any other chem stuff on their whitelist so they can't refill it
# Vapor # Vapor
- type: entity - type: entity

View File

@@ -25,7 +25,6 @@
- type: Tag - type: Tag
tags: tags:
- TrashBag - TrashBag
- DroneUsable
- type: Appearance - type: Appearance
- type: StorageFillVisualizer - type: StorageFillVisualizer
maxFillLevels: 4 maxFillLevels: 4

View File

@@ -26,9 +26,6 @@
enabled: enabled:
True: { state: working } True: { state: working }
False: { state: icon } False: { state: icon }
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 80 price: 80
- type: PhysicalComposition - type: PhysicalComposition

View File

@@ -12,7 +12,6 @@
- type: Tag - type: Tag
tags: tags:
- CableCoil - CableCoil
- DroneUsable
- type: Stack - type: Stack
stackType: Cable stackType: Cable
- type: Sprite - type: Sprite

View File

@@ -7,7 +7,6 @@
- type: Tag - type: Tag
tags: tags:
- Flashlight - Flashlight
- DroneUsable
- type: HandheldLight - type: HandheldLight
addPrefix: false addPrefix: false
blinkingBehaviourId: blinking blinkingBehaviourId: blinking

View File

@@ -19,9 +19,6 @@
doAfter: 1 doAfter: 1
removeOnInteract: true removeOnInteract: true
- type: Clickable - type: Clickable
- type: Tag
tags:
- DroneUsable
# TODO: Add stack sprites + visuals. # TODO: Add stack sprites + visuals.
- type: entity - type: entity
@@ -45,9 +42,6 @@
doAfter: 1 doAfter: 1
removeOnInteract: true removeOnInteract: true
- type: Clickable - type: Clickable
- type: Tag
tags:
- DroneUsable
# TODO: Add stack sprites + visuals. # TODO: Add stack sprites + visuals.
- type: entity - type: entity

View File

@@ -15,9 +15,6 @@
amount: 8 amount: 8
- id: LightBulb - id: LightBulb
amount: 5 amount: 5
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 100 price: 100
- type: ContainerContainer - type: ContainerContainer

View File

@@ -19,8 +19,5 @@
base: base:
On: { state: tray-on } On: { state: tray-on }
Off: { state: tray-off } Off: { state: tray-off }
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 60 price: 60

View File

@@ -24,7 +24,6 @@
path: "/Audio/Weapons/smash.ogg" path: "/Audio/Weapons/smash.ogg"
- type: Tag - type: Tag
tags: tags:
- DroneUsable
- Toolbox - Toolbox
- type: GenericVisualizer - type: GenericVisualizer
visuals: visuals:

View File

@@ -221,7 +221,6 @@
- type: Tag - type: Tag
tags: tags:
- Multitool - Multitool
- DroneUsable
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:
Steel: 100 Steel: 100
@@ -271,9 +270,6 @@
type: NetworkConfiguratorBoundUserInterface type: NetworkConfiguratorBoundUserInterface
- key: enum.NetworkConfiguratorUiKey.Link - key: enum.NetworkConfiguratorUiKey.Link
type: NetworkConfiguratorBoundUserInterface type: NetworkConfiguratorBoundUserInterface
- type: Tag
tags:
- DroneUsable
- type: StaticPrice - type: StaticPrice
price: 56 price: 56
- type: GuideHelp - type: GuideHelp

View File

@@ -638,9 +638,6 @@
radius: 1.5 radius: 1.5
energy: 1.6 energy: 1.6
color: "#e6e227" color: "#e6e227"
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
parent: BaseComputer parent: BaseComputer

View File

@@ -279,7 +279,6 @@
- Implanter - Implanter
- PillCanister - PillCanister
- ChemistryEmptyBottle01 - ChemistryEmptyBottle01
- Drone
- AdvMopItem - AdvMopItem
- WeaponSprayNozzle - WeaponSprayNozzle
- ClothingBackpackWaterTank - ClothingBackpackWaterTank

View File

@@ -296,9 +296,6 @@
- type: Advertise - type: Advertise
pack: ClothesMateAds pack: ClothesMateAds
- type: Speech - type: Speech
- type: Tag
tags:
- DroneUsable
- type: Sprite - type: Sprite
sprite: Structures/Machines/VendingMachines/clothing.rsi sprite: Structures/Machines/VendingMachines/clothing.rsi
layers: layers:
@@ -329,9 +326,6 @@
- type: Advertise - type: Advertise
pack: ClothesMateAds pack: ClothesMateAds
- type: Speech - type: Speech
- type: Tag
tags:
- DroneUsable
- type: Sprite - type: Sprite
sprite: Structures/Machines/VendingMachines/winterdrobe.rsi sprite: Structures/Machines/VendingMachines/winterdrobe.rsi
layers: layers:
@@ -1103,9 +1097,6 @@
radius: 1.5 radius: 1.5
energy: 1.6 energy: 1.6
color: "#c73434" color: "#c73434"
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
parent: VendingMachine parent: VendingMachine
@@ -1201,9 +1192,6 @@
radius: 1.5 radius: 1.5
energy: 1.6 energy: 1.6
color: "#d4ab33" color: "#d4ab33"
- type: Tag
tags:
- DroneUsable
- type: entity - type: entity
parent: VendingMachine parent: VendingMachine

View File

@@ -75,15 +75,6 @@
materials: materials:
Wood: 100 Wood: 100
- type: latheRecipe
id: Drone
result: Drone
completetime: 6
materials:
Steel: 500
Glass: 500
Plastic: 500
- type: latheRecipe - type: latheRecipe
id: SynthesizerInstrument id: SynthesizerInstrument
result: SynthesizerInstrument result: SynthesizerInstrument

View File

@@ -11,7 +11,6 @@
cost: 5000 cost: 5000
recipeUnlocks: recipeUnlocks:
- ProximitySensor - ProximitySensor
- Drone
- ExosuitFabricatorMachineCircuitboard - ExosuitFabricatorMachineCircuitboard
- type: technology - type: technology

View File

@@ -11,13 +11,6 @@
id: Holoparasite id: Holoparasite
prefix: HOLO prefix: HOLO
- type: nameIdentifierGroup
id: Drone
prefix: DR
fullName: true
minValue: 10000
maxValue: 99999
- type: nameIdentifierGroup - type: nameIdentifierGroup
id: MMI id: MMI
prefix: MMI prefix: MMI

View File

@@ -467,9 +467,6 @@
- type: Tag - type: Tag
id: DrinkBottle id: DrinkBottle
- type: Tag
id: DroneUsable
- type: Tag - type: Tag
id: Duck id: Duck

View File

@@ -214,3 +214,8 @@ VehicleJanicartDestroyed: null
# 2024-02-01 # 2024-02-01
YellowOxygenTank: OxygenTank YellowOxygenTank: OxygenTank
YellowOxygenTankFilled: OxygenTankFilled YellowOxygenTankFilled: OxygenTankFilled
# 2024-02-19
Drone: null
SpawnMobDrone: null
Onestar: null # I dont think this is even mapped, but just in case