* Make mind shield implants unable to be implanted more than once
* Default AllowMultipleImplants to false and update implanters.yml
* Use TryComp instead of TryGetComponent
* Deny multiple implants for fun implants too.
* Make comment more precise
(cherry picked from commit 771390bb67)
* SS14-17313 Chat Censorship Systems
Adds some systems to manage chat censorship:
1. No-op: does nothing
2. SimpleCensor: a regex-free censor with a variety of rules to use
3. RegexCensor: a censor that uses regex.
This exposes a singleton backed by a builder pattern (ChatCensor) that
is set up, probably during the code init phase, and then globally available
for your censorship needs.
* Migrate to Shared
* Add a reset function to the builder.
* Resolve PJB's feedback; add unit tests
(cherry picked from commit bf98a6a8bb)
* Adds Church Bells
* I'm dumb.
* The bell is no longer haunted.
* forgot attributions
* change sounds so scary law no hunt
* One day I'll stop needing to make an immediate micro-commit. One day.
* God damn it.
(cherry picked from commit a0cc87c267)
* Fix mailing units turning into disposal units while recharging.
The states were hardcoded.
* Fix error handling
* Make default states constants
(cherry picked from commit 94e4755a8d)
* Wearable Instrument Base + Changed harmonica base
Created the BaseWornInstrument base and updated the Harmonica to use it, being equipable in the neck slot.
* Update instruments_wind.yml
* compositions are cool and awesome
(cherry picked from commit b60f61c7b7)
* Add DeviceNetworkJammerComponent & System
Allows for entities to "jam" DeviceNetwork packets.
Whenever a device attempts to send a packet, the
DeviceNetworkJammerSystem listens for the BeforePacketSentEvent.
From there if any entity with the jammer component is within range of
either the sender or receiver of the packet the event will be cancelled.
Additionally jammers can only block packets in certain networks. If a
packet is not being transmitted in one of the networks it can block then
even if the jammer is in range the event will not be cancelled.
The range is stored in the jammer component along with the networks it
can jam.
Jammable network ids are stored as strings which seems to be how custom
networks are stored (E.g. network ids for suit sensors).
To allow for all of this, the BeforePacketSentEvent was modified to
provide the NetworkId.
* Make JammerSystem for the radio jammer use the DeviceNetworkJammer. Remove redundant event.
* Replace calls to TryDistance with InRange
(cherry picked from commit 266cc85f57)
Adds versions of the holoprojectors (janitoral, fan, and field) that start without a battery and changes the lathe recipe to use these instead. This is consistant with flashlights, which when made do not start with a cell.
Also it's a bit silly to have cargo printing a bunch of these to sell.
(cherry picked from commit 0bc886c009)
* Adds variations to immovable rod
* slash oopsie
* Changed prototypes from being hardcoded to being defined in the rules component
* Changed from 10% chance to 5%
* Changes based on feedback
* Fix nullable error
* Moved randomized logic to .yaml. Probabilities of alternate rods add up to 5%.
(cherry picked from commit 8f652eaa75)