Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SS14-17313 Chatfactor: Chat Censorship Systems #25908

Conversation

FairlySadPanda
Copy link
Contributor

About the PR

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.

Why / Balance

Partial fulfilment of #17313

Technical details

CE wants regex, CE gets regex

Otherwise SimpleCensor is designed to be usable by people who don't want to faff with regex.

This would be setup during server or client init, so would be driven by Cvars.

Media

  • I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

nope
Changelog
nope

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.
@deltanedas

This comment was marked as off-topic.

@Agoichi

This comment was marked as off-topic.

1 similar comment
@notquitehadouken

This comment was marked as off-topic.

@deltanedas
Copy link
Contributor

why downvote this is good
you have no reason to say the gamer word

@Tayrtahn
Copy link
Contributor

Tayrtahn commented Mar 7, 2024

Pretty sure it's not even intended for WizDen either. It's a good feature to have!

@github-actions github-actions bot added the Status: Needs Review This PR requires new reviews before it can be merged. label Mar 7, 2024
@FairlySadPanda
Copy link
Contributor Author

FairlySadPanda commented Mar 7, 2024

Pretty sure it's not even intended for WizDen either. It's a good feature to have!

It's sort of intended for Wizden but there's simply no game code for this sort of filtration atm. This PR just adds functionality, it'll be up to further PRs and ultimately the admins to define what the censor rules should be. #24680 shows it off as a "finished" example atm.

Other moderation-facing work will include adding the cvars/setup in EntryPoint and adding functional rate-limiting to counter spammers.

@ike709
Copy link
Contributor

ike709 commented Mar 7, 2024

it'll be up to further PRs and ultimately the admins to define what the censor rules should be.

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

@FairlySadPanda
Copy link
Contributor Author

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

@PJB3005
Copy link
Member

PJB3005 commented Mar 7, 2024

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

We don't do stuff like this, they have to be in repo. Otherwise I have to be called up to update them, instead of being able to do it via a regular PR. This is the same reason the config preset system exists.

@deltanedas
Copy link
Contributor

is there a reason it couldnt be rot13d or base64 encoded regex (mindustry discord bot has a similar thing)

@FairlySadPanda
Copy link
Contributor Author

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

We don't do stuff like this, they have to be in repo. Otherwise I have to be called up to update them, instead of being able to do it via a regular PR. This is the same reason the config preset system exists.

Good job this PR doesn't specify implementation then huh :clueless:

PJB3005
PJB3005 previously requested changes Mar 7, 2024
Copy link
Member

@PJB3005 PJB3005 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You shouldn't be working with Rune indexes in this code ever in the first place. It introduces far too much expensive bookkeeping to keep track of.

Content.Shared/Chat/V2/Moderation/ChatCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/ChatCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/ChatCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/ChatCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
Content.Shared/Chat/V2/Moderation/SimpleCensor.cs Outdated Show resolved Hide resolved
@Chief-Engineer
Copy link
Contributor

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

We don't do stuff like this, they have to be in repo. Otherwise I have to be called up to update them, instead of being able to do it via a regular PR. This is the same reason the config preset system exists.

Can they just be stored in the DB and be made to be updatable from ss14.admin or something?

@PJB3005
Copy link
Member

PJB3005 commented Mar 7, 2024

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

We don't do stuff like this, they have to be in repo. Otherwise I have to be called up to update them, instead of being able to do it via a regular PR. This is the same reason the config preset system exists.

Can they just be stored in the DB and be made to be updatable from ss14.admin or something?

Undesirable regardless, because it means people setting up a new server won't have a slur filter.

@Chief-Engineer
Copy link
Contributor

I haven't fully read through the code, but this seems pretty specific to just censoring stuff. The end goal is to be able to do a variety of actions based on a variety of conditions, for example, blocking the chat message and sending the player a popup with filter specific text. The way I assume would be best to reach the end goal would be to have a variety of conditions, a variety of actions, and putting them together to create each filter. This way, conditions and actions could be added easily in the future to expand the system.

Obviously, not every condition and not every action needs to be implemented from the very start, but will it be reasonably easy for someone to expand this system to support a variety of conditions and actions?

@Chief-Engineer
Copy link
Contributor

Slurs, even for the purposes of chat filtering, cannot be present in a GitHub repo. Multiple SS13 repos have gotten nuked for this. Slur chat filters have to be declared via config files.

Yes, go check the implementation in #24680. The intent is to pull from config files provided to servers via the host, not hosted on a Github.

We don't do stuff like this, they have to be in repo. Otherwise I have to be called up to update them, instead of being able to do it via a regular PR. This is the same reason the config preset system exists.

Can they just be stored in the DB and be made to be updatable from ss14.admin or something?

Undesirable regardless, because it means people setting up a new server won't have a slur filter.

If github doesn't like it being stored in github, then what other option is there? I'm not sure why they'd be ok with an encoded version of something that they don't allow so I don't really see how it could be put into the repo

@PJB3005
Copy link
Member

PJB3005 commented Mar 8, 2024

If github doesn't like it being stored in github, then what other option is there? I'm not sure why they'd be ok with an encoded version of something that they don't allow so I don't really see how it could be put into the repo

Can't we just store it base64'd so GitHub doesn't run any stupid automatic detections.

@FairlySadPanda
Copy link
Contributor Author

I'm not sure if Github are going to slap down this repo for a profanities list. E.g. https://github.com/TwiN/go-away

@FairlySadPanda
Copy link
Contributor Author

Sidebar: the "how do we load config into our game servers" "PJB does it manually" sounds a lot like a devops problem that needs resolving before going into Steam EA

@ike709
Copy link
Contributor

ike709 commented Mar 10, 2024

I'm not sure if Github are going to slap down this repo for a profanities list. E.g. https://github.com/TwiN/go-away

It's happened to much smaller SS13 repos than SS14.

@FairlySadPanda
Copy link
Contributor Author

@PJB3005 pls 🙏

@Chief-Engineer
Copy link
Contributor

If github doesn't like it being stored in github, then what other option is there? I'm not sure why they'd be ok with an encoded version of something that they don't allow so I don't really see how it could be put into the repo

Can't we just store it base64'd so GitHub doesn't run any stupid automatic detections.

That would probably defeat automated detections, but unless they don't actually mind it being on the repo and the automated systems are just too aggressive, it'll still cause issues if someone manually reports it or something

I'm not sure if Github are going to slap down this repo for a profanities list. E.g. https://github.com/TwiN/go-away

Everything I know about this is entirely what people have told me, so I'm not the best source, but if there's a difference between the repo you linked and the ones that have had issues related to this, I'd assume the ones that had issues had more slurs, whereas this is notably missing some common slurs that we'd 100% want filtered out

Sidebar: the "how do we load config into our game servers" "PJB does it manually" sounds a lot like a devops problem that needs resolving before going into Steam EA

The config is loaded automatically, but it's on github so if we can't use github to store the filter configs, then we'd either need a new system or PJB would have to do it manually

@FairlySadPanda
Copy link
Contributor Author

FairlySadPanda commented Mar 11, 2024

Next PR will be the "FSP causes a giant debate about how to load naughty words into the naughty words filter"

To be honest I have no clue how to fix it atm in a way that's satisfactory and obeys the limits of the cloud-based CI/CD that the project uses.

My hunch would be to get a tool like SS14.Admin set up to allow for config files to be provided to servers, but I get that there's a bunch of CI/CD questions to solve very-long-term for Wizden and I'm not really able to barge in and go DO THIS YOU GOOBERS

Hell I could advocate for a database query program to do it. Retool is an example of the sort of tools-as-a-service program I'd run to for corpo use, but for indie work it really just needs to be the ability to dump a blob of CSV into the database somehow

@FairlySadPanda FairlySadPanda changed the title SS14-17313 Chat Censorship Systems SS14-17313 Chatfactor: Chat Censorship Systems Mar 14, 2024
Comment on lines +53 to +55

var censored = input.ToList();

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this LINQ concerns me but will see how it goes.

Comment on lines +199 to +205
private char[] FindFalsePositives(List<char> chars, char replaceWith = '*')
{
var input = string.Concat(chars);

var output = Enumerable.Repeat(replaceWith, input.Length).ToArray();
var inputAsARr = input.ToArray();

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These allocations here look pretty bad.

Would it be better to just pass the input around as a stringbuilder or span or the likes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably. I would need to benchmark and benchmarking C# is not something I've done before.

I pinkie promise to write a benchmark test for this and tune this code path to get it broadly fast enough.

I'm not convinced StringBuilder is what I want to reach for here though. It smacks of a Java solution to a C# problem.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At the moment the raw string is being passed around and re-allocated multiple times to manipulate it instead of some kind of list structure. Like there's roughly 8 or so allocations being done per message, with 2 stringbuilders, multiple lists, etc.

@metalgearsloth metalgearsloth enabled auto-merge (squash) March 25, 2024 23:50
@metalgearsloth metalgearsloth dismissed PJB3005’s stale review March 25, 2024 23:50

peanut butter jelly

@metalgearsloth metalgearsloth merged commit bf98a6a into space-wizards:master Mar 25, 2024
11 checks passed
Yuoko pushed a commit to ss14-ganimed/ENT14-Master that referenced this pull request Mar 30, 2024
* Fix store refunds (space-wizards#26173)

* Fix anomaly decay logs (space-wizards#26180)

Fix anomaly decay logs (space-wizards#26122)

* Small species melee weapon change (space-wizards#26183)

* inital

* Update animals.yml

* Update engine to v214.2.0 (space-wizards#26190)

* Recolor paper-stamp detective (space-wizards#26194)

the old seal of the detective on paper has been changed to a new one

* Change collision mask of canisters to allow passing through cargo flaps (space-wizards#26193)

Co-authored-by: Jeff <velcroboy333@hotmail.com>

* Fix presetidcard extended access throwing (space-wizards#26195)

* Update Credits (space-wizards#26196)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* Add explosion-proof backpack to uplink (space-wizards#26187)

* Backpacks

* move to wearables

* Update Resources/Prototypes/Catalog/uplink_catalog.yml

* Update Resources/Prototypes/Entities/Clothing/Back/backpacks.yml

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* Gives glue tag to crazy glue (space-wizards#26154)

* SlowContactsSystem to SpeedModifierContactsSystem mini rework (space-wizards#26110)

* rework

* update logic

* Add decoy syndicate bomb to uplink (space-wizards#26034)

bombening

* Obsolete `Logger` cleanup for `EntitySystem`s part 2 (space-wizards#26159)

* Kill the static InRangeUnOccluded

* Adjusted 4 more EntitySystems that were missed.

* Update blood related tips! (space-wizards#25809)

* Added 18 new bounties to cargo (space-wizards#26160)

* Added 18 new bounties + tags, couple of balance tweaks

* Oops, 2 corn tags.

* Fixed another duplicate from merge conflict

* Fixed all arbitrage issues

* Removed metamorphic glass/manly dorf bounty

* Removed manly dorf bounty

* Removed manly dorf bounty

* Removed manly dorf bounty

* Changed hiviz tag, removed commented out bounty

* Removed extra line

* Change HiViz tag

* Removed unused tag

* Removed LaceupShoes, changed HiViz

* Changed flavor text for fruit bounty

* Removed live mouse bounty

* Unify `Content`'s `EntitySystem` logging (space-wizards#26216)

Use Log with generated sawmill name rather than explicitly named one for all non rule-based Content EntitySystems.

* New wooden furniture (space-wizards#26182)

* ю

* Fences

* bench, stairs and fence shadow

* small gate desc

* empty

* empty

* destructible

* price fix

* Fix barotrauma calculations

The math for our pressure damage (barotrauma) system is directly taken from TG. The constants are the same and the math is almost the same. However there are two errors.

1. Pressure damage started being applied within the WARNING bounds, rather than the HAZARD bounds. This means you started taking low pressure damage at 50 kPa instead of the intended 20 kPa, and also the HUD icon didn't show "danger" like it should even if you were already taking damage.

2. The calculations for high pressure damage were wrong. These are supposed to be linearly scaled, but the function was wrong so the scaling didn't actually work properly (especially when considering the fixed bounds above). This appears to be the case because the function was taken from an incorrect comment in the original source, rather than the real math.

Both of these issues are now fixed to match the TG behavior. Note that this somewhat nerfs pressure damage in non-extreme circumstances. e.g. a room at 40 kPa now gives NO pressure damage, whereas previously it would do full space damage.

The description of the pressure alerts is wrong for "low" severity, but I can't be arsed to fix that right now. Alerts don't have a way to change the description depending on severity...

* Increase air alarm low pressure thresholds.

If a room's pressure drops it can become unbreathable long before people start taking pressure damage, and so also long before the air alarm starts reporting a danger state. I've increased the values so that the air alarm should show danger if the pressure becomes so low as to be unbreathable.

* Make puddle smoothing better (space-wizards#26171)

puddles

* Change Syndie Monkey Price 8-6 TC (space-wizards#26214)

Price 8-6 TC

* Criminal Record Icons below Job Icons (space-wizards#26203)

SS13 Criminal Record Icon Location REAL

Adds a new Offset DataField to the StatusIcon Prototype. It effects status icon location on a per-pixel level. Not sure what else it could be used for, but hey, nothing wrong with generalizing. Also moves the mindshield icon priority to one, to fix an unreported bug with them covering non-job icons.

* Fixed safe filling with WT550 (space-wizards#26208)

* Suit slot weapon consistency + visuals (space-wizards#26152)

suit slot my beloved

Co-authored-by: vanx <#vanxxxx>

* make romerol work on the dead (space-wizards#26222)

* a

* review

* g

* reach update (space-wizards#26224)

* reach update

* fixgridatmos

* invalid link error

* move arrivals to the side

* who are we if we just get squashmerged anyway

* chocolate machine

* Move faction exception and everything it needs to shared (space-wizards#25154)

* move faction prototype to shared

* move faction exception and member stuff to shared

* fix breaking changes for random stuff

* move pettable friend stuff to shared

* mostly fix

* final fixy

* dragonops

* final fixy II

* use querys and fix warpspeed fish (probably)

* fixer

* Rrrr!

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>

* Add reckless replay load button (space-wizards#26212)

* Add reckless replay load button

* A

* More descriptive button

* Fix borg charger error (space-wizards#26230)

Fix borg chargers not working

* Improves Medical Hud interface and functionality (space-wizards#26027)

* Improvements to the medical hud interface

* Adds an icon for SSD players

* Indentation fix

* Update sprites, changes direction and adds new status icon.

* Adds decomposing icon

* Code cleaning

* Changes Crit Icon sprite

* Simplifies the decision structure

* Changes copyright line

* Changes Critical Icon sprite

* Makes the Critical Icon border darker

* Changes sprites to /tg/ station

* Updates copyright

* Makes Dead Icon animation slight faster

* Code cleaning

* Remove some unused imports

* Code cleaning and rename icon

* Minor code cleaning

* fix decoy bomb uplink category (space-wizards#26205)

move

* Increase lone ops TC from 40 to 60 (space-wizards#26130)

* Create lone ops outfit and 60 TC radio

* Changed lone op entity to use the new loneop outfit prototype

* Fix shop

---------

Co-authored-by: Plykiya <plykiya@protonmail.com>

* Fix barotrauma pressure protection (space-wizards#26236)

Oops

In space-wizards#26217 I re-organized the logic for the calculation. Part of that was moving the logic for GetFeltLowPressure and GetFeltHighPressure to be done before we actually check the hazard thresholds. What I didn't realize is that, with how our pressure protection is set up, these functions can return values so extreme they rebound into the other category.

For example, according to the math, when you're wearing a hardsuit in a low-pressure environment you have "felt" pressure of 1000 kPa. Yeah that's not right.

Now these functions clamp their result to OneAtmosphere, in the appropriate direction (101.3 kPa).

Fixes space-wizards#26234

* makes closets/lockers better (space-wizards#24942)

* hmngm

* fix

* Manual changelog update

* Spray Paint (Review Ready) (space-wizards#23003)

* Spray Paint (Draft)

* paint colors, paints in maints loot, cargo crate of paints.

* fix

* remove paint (sort of)

* moved paintcleaner into own system

* Moved paint to server (had to unfortunately)

* doafter now breaks when moving away.

* cant paint mobstatecomp

* loads of fixes

* fixes

* fixes

* nopaintshadercomp

* fixes

* fix

* use locale for paint remove string

* remove nopaintshadercomponent and use blacklist

* remove enabled.true from visualizer

* paint doafter event.

* add verbs for paint and remove paint and icon for paint verb.

* fixes

* no longer replaces shader when shader exists.

* replace forloop with foreach, check shader before adding and removing.

* paint doafter now separate so no copy paste code

* Entities in sprayed targets item slots are also now correctly sprayed.

* fix

* fix

* fix airlock psray painter now removes painted before painting door.

* spray paints now use openablecomponent.

* fix

* fix damn accesstypes.

* fix

* fix

* Automatic changelog update

* Include bans in adminremarks command (space-wizards#26240)

Fixes space-wizards#20645

* Automatic changelog update

* Updated the TEG page (space-wizards#26170)

* Ported from guidebook-cleanup branch on my fork

* Missed a skill issue, thanks Tayrtahn

* Fixed misinformation

* Automatic changelog update

* Adds craftable ducky slippers (space-wizards#26138)

* Craftable ducky slippers

* fix node

---------

Co-authored-by: Plykiya <plykiya@protonmail.com>

* saltern paramedic slot (space-wizards#26038)

add paramedic to prototype

Co-authored-by: deltanedas <@deltanedas:kde.org>

* Automatic changelog update

* Bumps LoneOps minimum required players to 20 (space-wizards#26244)

done

* Automatic changelog update

* Zombies can very slowly regen heat and shock damage (space-wizards#25925)

Update ZombieComponent.cs

* Automatic changelog update

* Initial Infected can see each other (space-wizards#25934)

initial infected icon

* Automatic changelog update

* Fix SCRAM implant not working while cuffed. Incidentally fix freedom implant working while dead/crit (space-wizards#25978)

* Fix SCRAM implant not being usable while in cuffs. Also fix freedom implant from working while dead/crit as a side effect

* Move check up to apply to all actions and do thing I forgor to do before

* Change check into an ActionBlocker check that also checks whether the user is sleeping.

* Make checking for Consciousness the default for actions

Went through and chose what I believe to be sensible defaults for actions that had CheckCanInteract.

* Fix typos my beloved

I had an unbelievable skill issue

* Fix major skill issue

* Automatic changelog update

* Fix recycled containers deleting items inside them (space-wizards#26045)

* Removes items from containers in reclaimers

* Made it into an event instead

* Sloth review comment

* Fix indentation and rename field

* Automatic changelog update

* Fix artifact report info (space-wizards#26252)

* Update ArtifactReports.xml

Fix conflicting info

* Small tweak to wording

* Automatic changelog update

* Pulling rework v2 (space-wizards#24936)

* Pulling rework

Fixing up the FOUR systems managing pulling, all the shitcode, and also making it nicer ingame.

* More pulling cleanup

* stats

* More cleanup

* First draft

* More pulling

* weh

* Fix puller

* Pulling working

* Fix merge

* Dunked

* Self-merge time

* Fix hotkey

* Fix container changes

* oop

* Fix multi-pulling

* Move alerts cleanup.

* pulling fixes

* Store Refund Fix (space-wizards#26251)

Removes else that accidentally enables refunds

* Automatic changelog update

* Changed current value to unextracted value in artifact report guidebook (space-wizards#26253)

* Fix name

Forgot the name was also different

* Fix Name, wording

happened so fast I messed up

* Simplify DoAfterArgs behavior for movement and distance checks (space-wizards#25226)

* Merge BreakOnWeightlessMove and BreakOnMove. Provide different theshold for weightless movement.

* Adjust WeightlessMovementThresholds. Put a thing I forgot to put in the doafterargs.

* Make DoAfterArgs only use OnMove to determine whether to check for
movement and MoveThreshold to determine the threshold regardless of
weightlessness. Gave DistanceThreshold a default value which will always
be checked now.

* Fix issue introduced by merge.

* Use interaction system for determining whether a distance is within range

* Fix incorrect doafter args introduced by previous merge.
Forgor to commit these.

* Exorcise ghost.

The execution system should have been deleted when I merged previously.
For a reason I cannot comprehend it came back, but only the execution
system.

* Exorcise ghost Pt. 2

* Allow for movement check to be overriden in zero g and adjust doafter args where needed.

You can now override checking for movement in zero g with the BreakOnWeightlessMove bool. By default it will check.
The following doafters were made to ignore the movement check in zero g:
- Healing yourself with healing items,
- Removing embedded projectiles,
- Using tools like welders and crowbars

* Adjust distance for cuffing/uncuffing to work. Make injections not break on weightless movement.

* Fix evil incorrect and uneeded comments

* Fix build (space-wizards#26258)

* Fix build

- Fixes a couple paint things that were broken.

* wat

* Fix Fland's Cargo Shuttle Atmos (space-wizards#26273)

* Adds logging for refunds (space-wizards#26274)

LGTM

* spawn panel rock crab suffix (space-wizards#26264)

crab crab crab crab crab its all crabs.

* Code cleanup: Dirty(Comp) (space-wizards#26238)

* Replaced uses of Dirty(Component) with Dirty(Uid, Component)
Modified some systems (notably pulling-related) to use uids.

* Missed a few

* Revert changes to pulling

* No

* new book - Tales of a Tired Janitor (space-wizards#24441)

* book

* Update book-authorbooks.ftl

* make traitor syndicate reinforcements get the traitor role (space-wizards#25400)

inital

* Thrown soap/banana/(etc?) will fail to slip until it lands (space-wizards#24494)

* throw miss

* event

* whoops

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* fix popup duplication

* Separate cancellable event

* no popup, no problem

* remove leftover stuff

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* Automatic changelog update

* Monkey and gorilla melee weapon fix (space-wizards#26288)

Update animals.yml

* Fix blunt melee weapon hitsound (space-wizards#26286)

* ok

* Update welders.yml

* Fix EFCore obsoletion warnings in Content.Server.Database (space-wizards#26285)

* Fix wire layout inheritance. (space-wizards#26289)

Wire layouts manually navigate the inheritance hierarchy, but the data fields on the prototypes were also automatically inherited already. This meant that inheriting a wire layout prototype and changing nothing would cause the wires to be duplicated unless they were manually modified on top.

Fix is easy: just disable inheritance on the data fields.

Also, integration test for it.

* Per-department wire layouts (space-wizards#26247)

* add per-department wire layouts

* fix science/research inconsistency

* fix wireLayout inheritance

* science is no longer security

* Security doors back to normal wire count

* implement proper wire inheritance

* revert WiresSystem.cs fix

* Automatic changelog update

* Pizza is not a fruit (space-wizards#26293)

* Pizza is not a fruit

* Also the slice

* Let the lizards still eat pizza

* Automatic changelog update

* fix legally distinct visor man plush name. (space-wizards#26299)

am in vr. approved by real spaniard.

* Fix some invalid damage types (space-wizards#26295)

Fixed some invalid damage types

* Code cleanup: Purge calls to obsolete EntityCoordinates methods (space-wizards#26292)

* Purge calls to obsolete EntityCoordinates methods

* Pizza defruited; rerun those tests!

* Rats eyes glow in dark + reorganize rat textures (space-wizards#26300)

* Split mice from rats and made rats eye glow

+ added red eyes to regal rats (Both king and buff) + normal rats
- removed mouse-3 sprites from mice and moved it into a dedicated rat rsi
+fixed admin smite wording (you turn players into mice, not rats)

* minor formatting fix

* removed version numbers float.

* Typo fix + removed unneeded layer name

* Automatic changelog update

* Improve admin message seen/dismiss state. (space-wizards#26223)

Fixes space-wizards#26211

Admin messages now have separate "seen" and "dismissed" fields. The idea is that an admin should be able to tell whether a user pressed the "dismiss for now" button. Instead of using "seen" as "show this message to players when they join", "dismissed" is now used for this.

Existing notes in the database will automatically be marked as dismissed on migration. A note cannot be dismissed without being seen (enforced via constraint in the database too, aren't I fancy).

As part of this, it has become impossible for a player to play without dismissing the message in some form. Instead of a shitty popup window, the popup is now a fullscreen overlay that blocks clicks behind it, making the game unplayable. Also, if a user somehow has multiple messages they will be combined into one popup.

Also I had enough respect for the codebase to make it look better and clean up the code somewhat. Yippee.

* Automatic changelog update

* Fix scram! implant keeping you pulled to someone when teleporting you (space-wizards#26309)

* Fix scram! implant keeping you pulled to someone when teleporting you

* Exorcise sleep deprivation speak

* Automatic changelog update

* Door Remote now shows Mode in UI (space-wizards#26162)

* Prep for DoorRemote Status

* Door Remote Mode Messages

* plural opens and closes

* never trust webedits

---------

Co-authored-by: Plykiya <plykiya@protonmail.com>

* remove rped (space-wizards#26316)

* remove rped

* trol

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>

* Automatic changelog update

* FTL UIScale fixes (space-wizards#26305)

- Fix text drawing being offset.
- Fix beacon snapping and distance check.
- Fix DrawData being offset.
- Fix bounds check for map objects not using PixelSize.

* Automatic changelog update

* Fix puller being improperly unset when pulling stops. (space-wizards#26312)

Fix puller not being improperly unset on PullableComponent while being unpulled.

When unpulled, the pullableComp has its puller field set to null after the message signifying the pulling has stopped
has been sent. Since the component has a field to determine whether its owner is being pulled which is determined by
the puller field, systems listening on the event would think that the owner of the component was still being pulled.

* Automatic changelog update

* bagel update (space-wizards#26326)

* Sanitize "ig" (space-wizards#26328)

replace ig

* Snore is a trait now (space-wizards#26322)

* Automatic changelog update

* Code Cleanup: Purge obsolete MapManager methods (space-wizards#26279)

* GetGrid

* GridExists

* TryGetGrid

* Nerf budget insulated gloves (space-wizards#26318)

Insul Chance

* Automatic changelog update

* Irish Coffee Recipe Tweak (space-wizards#26327)

Update drinks.yml

Why would this need to be 2+2=4 when 1+1=2 is the more logical reaction?

* Automatic changelog update

* Added verb action to Glue/Lube system (space-wizards#26002)

* Added verb action to Glue/Lube system

* Changes based on feedback

* Fix TryGlue/Lube to use Entity<> rather than EntityUid, Component

* Automatic changelog update

* Fix missing semicolon after migration. (space-wizards#26337)

Are you kidding me EFCore doesn't sanitize this itself?

* The return of the 'long bedhead' haircut as an alternative (space-wizards#26336)

* Automatic changelog update

* Fix cross-grid spreader behavior (space-wizards#26346)

* NPC steering tweaks (space-wizards#26351)

- Fix the free node check considering the whole tile and not the poly.
- Clear maps on direction resets.
- More robust arrival checks for pathfinding nodes.

* Automatic changelog update

* Make air tanks appear on the back in suitstorage (space-wizards#26353)

* g

* a

* jetpak

* Fix crash on load when no slot key assigned (space-wizards#26354)

Co-authored-by: wrexbe <wrexbe@protonmail.com>

* Throwing Knives: Syndicate Kit (space-wizards#26026)

* add

* rename

* change damage type and lower price

* 6 tc

* fix?

* missed listing

* Update Resources/Textures/Objects/Storage/boxes.rsi/meta.json

* Update Resources/Textures/Objects/Storage/boxes.rsi/meta.json

* Update Resources/Textures/Objects/Storage/boxes.rsi/meta.json

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* Automatic changelog update

* Changed black carpet texture to correctly align itself. (space-wizards#26358)

* Partial atmos refactor (space-wizards#22521)

* Reduce atmos component queries

* Remove method events

* Cache airtight data

* Make MolesArchived nullable

* Fix airtight cache

* only get tile def once

* Immutable mixtures

* firelock queries

* misc

* misc cleanup

* Trim disconnected tiles

* Fix merge issues and bugs

* Why does the PR keep increasing in scope

* debug overlay

* Fix bugs

* Fix test, remove unused events

* Add setmapatmos command

* Fix overlays

* Add map check

* A

* Resolve conflicts with space-wizards#26102

* Remove some obsolete methods

* Automatic changelog update

* 1x2 cable coils (space-wizards#26361)

* 1x2 cable coils

* sprite edits

* Revert "sprite edits"

This reverts commit 3c76c55.

* coil rotate

* Automatic changelog update

* Fix bypassing vaulting clumsy check with verb action. (space-wizards#24977)

* Fix bypassing bonking with verb

* Revert "Fix bypassing bonking with verb"

This reverts commit efa0f0f.

* Properly refactored BonkSystem.

* Oh hey, this is redundant now

* Better solution

* Reduced default bonk chance from 75% to 50%

* Also do a little grammar fix

* Moved BonkChance from BonkableComponent to ClumsyComponent.

* Revert "Moved BonkChance from BonkableComponent to ClumsyComponent."

This reverts commit 0acbd92.

* Another little grammar fix

* Matched default bonk doAfter length to default climb doAfter length

* Fixed duplicate popups

* Check CanVault with verb use too. Add granularity to ClimbingComponent and remove Leg/Foot requirement.

* Don't show verb if you can't climb

* Removed CanForceClimb

* byref record struct

* Automatic changelog update

* Restrict door remotes to only being able to manipulate doors relevant to their type (space-wizards#26371)

Restrict door remotes to only being able to manipulate doors relevant to
their type.

* Automatic changelog update

* Update Credits (space-wizards#26373)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* Configuration argument for content packaging (space-wizards#25569)

* Configuration argument for content packaging

Needed this for something so here we are. I think someone mentioned they wanted this? Welp its here now

* Add client, tiny fixes

* Update submodule to 215.0.0 (space-wizards#26375)

* Admin New Player Notification Sound (space-wizards#24327)

play a sound to active admins when a new player joins

* Fix playglobalsound autocompletion (space-wizards#26167)

* Update submodule to 215.1.0 (space-wizards#26376)

pitch

* Haunted dungeon template (space-wizards#23768)

* haunted dungeon

* Initial work

Still needs prefab gen work to make it interesting.

* ime a worm

* weh

* Work

* Slight tweaks

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>

* Maybe fix rsi truncheon error (space-wizards#26374)

Co-authored-by: wrexbe <wrexbe@protonmail.com>

* Add Prometheus stats for admin count (space-wizards#26284)

* Add Prometheus stats for admin count

Fixes space-wizards#20828

Reports time series for admin count. Counts are separated by state (active, AFK, or deadminned) and admin rank.

* Use static constructor instead of static readonly for the metric

Docs recommend this due to inconsistent execution of C# static constructors.

* Remove static usage, use IoC IMeterFactory.

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>

* Hide empty marking categories in the markings picker (space-wizards#26377)

Hide empty marking categories

* Automatic changelog update

* Give cap door remote his access (space-wizards#26378)

Give cap doorremote his access

* Automatic changelog update

* Landmine stepoff (space-wizards#22962)

* make landmine work on stepping off

* update methods naming

* made both step modes possible

* updated stepoff event raise to not interfere with game physics internals

* added comments

* figuring out how audiosystem works

* added beep sound effect, updated how stepoff trigger works to make it more consistent

* updated source in attributions.yml

* made stepoff working every time

* introduced suggested changes

* updated janitor's WetSignMine to have audio

* made cleaner events and bashing my head at OnEndCollide event raise

* inverted conditional where applicable

* review

---------

Co-authored-by: Yurii Kis <yurii.kis@smartteksas.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>

* Update submodule to 215.2.0 (space-wizards#26388)

* Add stealthmins (space-wizards#26263)

* Add stealthmin command.

* Update Content.Server/Administration/Commands/AdminWhoCommand.cs

As suggested by CE.

Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>

* Add admin notifications for admins toggling stealthmin.

* Localize stealthmin command

---------

Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>

* Automatic changelog update

* Run `fixgridatmos` for cargo & emergency shuttle (space-wizards#26382)

Fix cargo & emergency shuttle

* Automatic changelog update

* Fix Medical Hud death icon animation and Changes critical icon (space-wizards#26391)

Fix Dead Icon animation and changes Critical Icon

* Automatic changelog update

* Adds "untriaged" labeler workflow (space-wizards#26392)

All new opened issues automatically get marked as "untriaged", so a maintainer can go through them properly.

* Fixes store purchase events and adds support to raise a directed event (space-wizards#26389)

* fixes store event check

* raise directed product event

* Store keybind priority (space-wizards#26356)

* Fix saving keybind priority

* Change movestoreditem keybind priority to prevent bug

---------

Co-authored-by: wrexbe <wrexbe@protonmail.com>

* Origin Station Update 12.03.2024 (space-wizards#26055)

* Origin Station Update 12.03.2024

* implement PJB requested changes

* changed ap magnum rounds for magnum rounds.

* added west side maints door per pjb request.

* removed laser glass box from captain quarters.

* Make fland's mail into wheel-and-spoke distribution. (space-wizards#26404)

* Remove CRLF, enforce with workflow (space-wizards#26401)

* Check for CRLF in actions workflow

Make emisse weep

* Copy paste bottom text

* I would like to thank StackOverflow for this spite PR.

* Mention file name in message because the workflow tab doesn't display it.

* dos2unix everything

* Removed Cannabis from thief objectives (space-wizards#26412)

* Removed Cannabis from thief objectives

* Removed the steal group and from cannabis prototypes

* Automatic changelog update

* Gives borg industrial welder (space-wizards#26332)

Update borg_modules.yml

Changes basic welder in borg tool module to industrial welder

* Automatic changelog update

* Immovable Rod visual variations (space-wizards#25932)

* 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%.

* Fixed some icon rsi warnings (space-wizards#26414)

Fixed some icon warnings

Co-authored-by: wrexbe <wrexbe@protonmail.com>

* Update close-master-pr.yml (space-wizards#26416)

Fix name of "Close PRs on master" workflow

* Accept cloth and ingots in the ammofab (space-wizards#26413)

* Automatic changelog update

* Fix admin verb to set unspawned ballisic ammo count (space-wizards#26411)

Don't crash if an invalid value is given.

* Use entity queries in ambient sound & power receiver systems (space-wizards#26410)

* Unswap small and tall wodden fence gates (space-wizards#26409)

* Holoprojectors crafted at lathes no longer come with a cell (space-wizards#26405)

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.

* Automatic changelog update

* Fix tags on antique laser gun (space-wizards#26398)

It's missing the tag that's needed for it to go back in the glass storage box.

* Automatic changelog update

* Add astro-jungle/mowed grass and astro-snow (space-wizards#26381)

* Automatic changelog update

* Make parrots talk like parrots (space-wizards#26340)

* Automatic changelog update

* Create DeviceNetworkJammerComponent & System as a general way for entities to act as jammers (space-wizards#26342)

* 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

* nerf rad artifacts (space-wizards#26422)

* Code cleanup: Purge obsoleted SharedPhysicsSystem methods (space-wizards#26287)

Updated calls to SharedPhysicsSystem methods

* Cleaner Grenade (space-wizards#25444)

* Cleaner Grenade

Added Cleaner Grenade

* Sprite update

Draw issue moment

* Removed from jani closet | added box of cleanades

* Automatic changelog update

* Wearable Harmonicas (space-wizards#26261)

* 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

* Automatic changelog update

* Fix mailing units turning into disposal units while recharging. (space-wizards#26383)

* Fix mailing units turning into disposal units while recharging.

The states were hardcoded.

* Fix error handling

* Make default states constants

* Automatic changelog update

* Church Bells (space-wizards#26030)

* 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.

* Re-resprites labcoats (space-wizards#26425)

* resprites labcoats again

* fix tests

* SS14-17313 Chatfactor: Chat Censorship Systems (space-wizards#25908)

* 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

* Make all implants unable to be implanted more than once (space-wizards#26250)

* 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

* Automatic changelog update

* Nerf ninja research stealing (space-wizards#26421)

* nerf ninja steal objective

* fubar

* Automatic changelog update

* Reduces size of smaller cartons and fix size discrepancies with empty containers (space-wizards#26430)

* Reduces size of smaller cartons

* Fix trash bottles/cartons

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>

* Make chest rig purchasable in uplink (space-wizards#26427)

a

* Automatic changelog update

* Fix atmos NaN error (space-wizards#26441)

* Fix atmos NAN error

* Remove redundant yaml entries

* Automatic changelog update

* Curtains fix (space-wizards#26447)

* Update furniture.yml

* Update curtains.yml

* Update Resources/Prototypes/Entities/Structures/Decoration/curtains.yml

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

---------

Co-authored-by: Futuristic-OK <141568243+FuturisticRUS@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Update submodule (space-wizards#26451)

* Update submodule (space-wizards#26454)

* Minor cleanup of cuffablesystem (space-wizards#26434)

* Fix cuffs breaking after they stop being pulled

* Do proper interaction check for UncuffAttempt

* Minor cleanup

Take as much out as possible from _net.IsServer() if blocks.
Misc cleanup

* Automatic changelog update

* Objects such as lighters/welders are now able to be dropped in disposal units. (space-wizards#26463)

Don't always mark after interact event as handled for welder tools. Done with a view towards allowing disposal interaction post tool system handling.

Co-authored-by: MQuatermain <misterquatermain@pm.me>

* Update submodule to 216.0.0 (space-wizards#26467)

* Revert "Give cap door remote his access" (space-wizards#26465)

Revert "Give cap door remote his access (space-wizards#26378)"

This reverts commit ea818ea.

* Fix GhostRoleComponent performing randomization on ComponentInit (space-wizards#26466)

* Fix ghostrole ComponentInit

* A

* a

* Revert "Re-resprites labcoats (space-wizards#26425)"

This reverts commit bd58954.

* Remove Rubber Rounds, Give Security Disablers (space-wizards#26470)

Remove Rubbers, give sec Disablers

* Automatic changelog update

* Removed Box of Hugs and Donk Pockets from Bounties (space-wizards#26481)

As far as I know, the Box of Hugs only spawns on the clown and is used in the construction of a honkbot such that if the clown decided earlier to craft a honkbot or if the low price of some 3000 spesos is insufficient this bounty is impossible. Similarly, Donk Pockets are not a renewable resource and it has happened that a station has eaten too many for the bounty to be completed only to get it in rotation and esssentially lose a bounty slot forever. I would like it if each bounty was at least theoretically possible on any station it's likely to occur in, and there are too many where there aren't enough of these obtainable to complete the bounty, which is no fun.

* Automatic changelog update

* Artifact node IDs are now only 3 digits long (space-wizards#26482)

* 2-digit nodes

* 3-digits instead

* Fix exclusive bounds

* Automatic changelog update

* Body code cleanup (space-wizards#24946)

* Fix test

* Kill float accumulators

* Use entity proxy methods

* DataField auto name generation where possible

* Kill comp properties

* Clean up server comps

* Make events record structs

* Clean up shared body code

* Clean up server body code

* Rename organ events to be same names as in med refactor

* Add stacktrace to action error logs (space-wizards#26486)

Add trace to action error logs

* Late Join Menu Properly Retains Position On New Player Joins (space-wizards#26483)

* When another player late joins it will correctly update the UI locally

* Resolve passengers not displaying the correct message in late join

* Improve final boolean comparison of button disabled state to be a bit neater

* Automatic changelog update

* Remove atmos method events (space-wizards#26402)

* Remove HasAtmosphereMethodEvent

* Remove GetTileMixturesMethodEvent

* Remove GetTileMixtureMethodEvent

* Remove GetAdjacentTilesMethodEvent

* Add TileMixtureEnumerator

* Remove GetAdjacentTileMixturesMethodEvent

* Remove IsTileSpaceMethodEvent

* Remove HotspotExposeMethodEvent

* Remove pipe net method events

* Remove device method events

* Use Entity<T>

* Misc fixes

* A

* Theres probably a few more of these

* Fix other resolve errors

* Misc ItemToggleSystem changes (space-wizards#26489)

* Minor ItemToggleSystem tweaks

* Update visuals on startup

* Remove SetIgnited

* Misc toggle fixes

* Update ItemToggleHotComponent.cs

* Allow cargo bounties to be sold off-station (space-wizards#26469)

* Ported over code for delta-v to fix bounties

* Added requested changes

* Removed the station arg from "IsBountyComplete". It is unneeded and all calls just use a null value for it anyways

* Automatic changelog update

* Remove broadcast cooldown (space-wizards#26492)

* Removed inconsistent broadcast cooldown whenever the "Announce" button is pressed on the communications terminal.

* Revert "Removed inconsistent broadcast cooldown whenever the "Announce" button is pressed on the communications terminal."

This reverts commit c730d64.

* Reapply "Removed inconsistent broadcast cooldown whenever the "Announce" button is pressed on the communications terminal."

This reverts commit 3c2d66a.

* -Removed cooldown entirely

* Add DoorBumpOpener to space dragon (space-wizards#26490)

Add DoorBumpOpener to space dragon.yml

* Automatic changelog update

* Use nav beacon locations for announcements (space-wizards#26437)

* use nav beacon locations for announcements

* :thumbs_up:

* Automatic changelog update

* Arcade machine improvements (space-wizards#24200)

* Give 'em something to talk about

* Wire panel visuals

* Wire graphics tweak

* More ads and thanks

* More ads for a noisy arcade

* New screen for space villain machines

* Implement EmitSoundIntervalComponent and a bunch of arcade noises

* Require power for sounds

* Allow earlier startup intervals

* Orange glow

* Audio attributions

* Include the PR link

* Replace EmitSoundInterval with expanded SpamEmitSound

* Remove pacman-themed arcade sounds

* Documentation good.

* Updated methods to use Entity<T>

* Refactored SpamEmitSound to get rid of accumulator and chance.

* Fixed prewarm logic

* Moved stuff to Shared

* Fix outdated YAML

* Better prediction, auto pause handling

* Make enable/disable reset the timer instead of trying to save it.

* Automatic changelog update

* biggest gridinv update OF ALL TIME (space-wizards#25834)

* add SaveItemLocation keybind

* make item direction public to avoid having to change between Angle for no reason

* add item location saving

* show

* Added a better save keybind, made it draw saved positions, and trying to save in a position it has already been saved in removes that position.

* w

* code style

* Make taken spots appear blue

* style

* !

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: notquitehadouken <tripwiregamer@gmail.com>
Co-authored-by: I.K <45953835+notquitehadouken@users.noreply.github.com>

* dynamic alert sprites (space-wizards#25452)

* dynamic alert sprite

* fix fat cooldowns

* Automatic changelog update

* voicemask can select speech verb (space-wizards#25768)

* add Name field to SpeechVerbPrototype

* extra locale for voice mask ui

* SpeechVerb ui and handling

* raaaaaaaaa

* reeeeeeeeal

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* fix sort

* did you hear john syndicate died of ligma

* Update Content.Client/VoiceMask/VoiceMaskNameChangeWindow.xaml

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* Automatic changelog update

* Separate "thank you" messages from general ads (space-wizards#25867)

* Separated "thank you" messages from general ads

* Moved MessagePackPrototype to shared, cleaned up AdvertiseComponent, and actually killed AdvertisementsPackPrototype.
+More suggests changes.

* Rename PackPrototypeID to Pack in both components.

* Фиксы

* Fix master (space-wizards#26501)

* Fix master

* this

* messages

* Fix missing verb name parrot

* Fix messagePack for blockgame and spacevillain

---------

Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>

* Фикс

* Фикс

* Фикс лобби

* очередной фикс апстрима

* Фиксы юмлок

* Фикс запуска сервера

* Фикс клиента

* фикс

* Фикс подключения клиента к серверу

* Фикс лобби

* Некоторые переводы

* Переводы и фикс РНД

* Пул карт

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: LordCarve <27449516+LordCarve@users.noreply.github.com>
Co-authored-by: Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com>
Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Co-authored-by: Awlod <159960340+Awlod@users.noreply.github.com>
Co-authored-by: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com>
Co-authored-by: Jeff <velcroboy333@hotmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
Co-authored-by: 21Melkuu <79728504+21Melkuu@users.noreply.github.com>
Co-authored-by: Adrian16199 <144424013+Adrian16199@users.noreply.github.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: Whisper <121047731+QuietlyWhisper@users.noreply.github.com>
Co-authored-by: wafehling <wafehling@users.noreply.github.com>
Co-authored-by: Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: potato1234_x <79580518+potato1234x@users.noreply.github.com>
Co-authored-by: FungiFellow <151778459+FungiFellow@users.noreply.github.com>
Co-authored-by: Golinth <amh2023@gmail.com>
Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
Co-authored-by: HappyRoach <117393350+HappyRoach@users.noreply.github.com>
Co-authored-by: vanx <61917534+Vaaankas@users.noreply.github.com>
Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: DoutorWhite <68350815+DoutorWhite@users.noreply.github.com>
Co-authored-by: Plykiya <58439124+Plykiya@users.noreply.github.com>
Co-authored-by: Plykiya <plykiya@protonmail.com>
Co-authored-by: brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
Co-authored-by: Terraspark4941 <terraspark4941@gmail.com>
Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
Co-authored-by: shamp <140359015+shampunj@users.noreply.github.com>
Co-authored-by: Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
Co-authored-by: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: Verm <32827189+Vermidia@users.noreply.github.com>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
Co-authored-by: Nairod <110078045+Nairodian@users.noreply.github.com>
Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
Co-authored-by: James Simonson <jamessimo89@gmail.com>
Co-authored-by: Doctor-Cpu <77215380+Doctor-Cpu@users.noreply.github.com>
Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: liltenhead <104418166+liltenhead@users.noreply.github.com>
Co-authored-by: BlitzTheSquishy <73762869+BlitzTheSquishy@users.noreply.github.com>
Co-authored-by: RenQ <164364533+ImRenQ@users.noreply.github.com>
Co-authored-by: Wrexbe (Josh) <81056464+wrexbe@users.noreply.github.com>
Co-authored-by: wrexbe <wrexbe@protonmail.com>
Co-authored-by: Ubaser <134914314+UbaserB@users.noreply.github.com>
Co-authored-by: OnyxTheBrave <131422822+OnyxTheBrave@users.noreply.github.com>
Co-authored-by: Vasilis <vasilis@pikachu.systems>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
Co-authored-by: Baptr0b0t <152836416+Baptr0b0t@users.noreply.github.com>
Co-authored-by: KISS <59531932+YuriyKiss@users.noreply.github.com>
Co-authored-by: Yurii Kis <yurii.kis@smartteksas.com>
Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
Co-authored-by: ChaseFlorom <57235581+ChaseFlorom@users.noreply.github.com>
Co-authored-by: SoulFN <164462467+SoulFN@users.noreply.github.com>
Co-authored-by: Luminight <balazscsabai98@gmail.com>
Co-authored-by: Callmore <22885888+Callmore@users.noreply.github.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: DenisShvalov <115770678+DenisShvalov@users.noreply.github.com>
Co-authored-by: Weax <59857479+ImWeax@users.noreply.github.com>
Co-authored-by: Sphiral <145869023+SphiraI@users.noreply.github.com>
Co-authored-by: Flareguy <78941145+Flareguy@users.noreply.github.com>
Co-authored-by: Hannah Giovanna Dawson <karakkaraz@gmail.com>
Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>
Co-authored-by: Futuristic-OK <141568243+Futuristic-OK@users.noreply.github.com>
Co-authored-by: Futuristic-OK <141568243+FuturisticRUS@users.noreply.github.com>
Co-authored-by: Jake Huxell <JakeHuxell@pm.me>
Co-authored-by: MQuatermain <misterquatermain@pm.me>
Co-authored-by: Ghagliiarghii <68826635+Ghagliiarghii@users.noreply.github.com>
Co-authored-by: 0x6273 <0x40@keemail.me>
Co-authored-by: blueDev2 <89804215+blueDev2@users.noreply.github.com>
Co-authored-by: superjj18 <gagnonjake@gmail.com>
Co-authored-by: notquitehadouken <tripwiregamer@gmail.com>
Co-authored-by: I.K <45953835+notquitehadouken@users.noreply.github.com>
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Needs Review This PR requires new reviews before it can be merged.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

9 participants