* Edited blueberry pancake textures to seem more blueberry-stained
* Added new blueberry pancake sprites to allow stacking up to 9
* Added more sprites for chocolate pancakes so they can stack up to 9
* Fixed up the blueberry pancake sprites to be more consistent
* Updated the stack components of blueberry and chocolate pancakes in the yml prototype file.
* Updates the stack size in the consumable stacks yaml file.
* Added the new pancake sprites to the sprite meta json file.
* Removed an unnecessary space from the baked food YAML file
* Updated branch and fully resolved merge conflict
* Decreased the copy-pastiness of some of the blueberry sprites to make them less repetitive
* Diversified the textures some more for good measure.
* Fixed some missing rims around the pancakes because I'm bored
* Start work on PostgresNotificationManager
Implement initial version of init and listening code
* Finish implementing PostgresNotificationManager
Implement ban insert trigger
* Implement ignoring notifications if the ban was from the same server
* Address reviews
* Fixes and refactorings
Fix typo in migration SQL
Pull new code in BanManager out into its own partial file.
Unify logic to kick somebody with that when a new ban is placed directly on the server.
New bans are now checked against all parameters (IP, HWID) instead of just user ID.
Extracted SQLite ban matching code into a new class so that it can mostly be re-used by the ban notification code. No copy-paste here.
Database notifications are now not implicitly sent to the main thread, this means basic checks will happen in the thread pool beforehand.
Bans without user ID are now sent to servers. Bans are rate limited to avoid undue work from mass ban imports, beyond the rate limit they are dropped.
Improved error handling and logging for the whole system.
Matching bans against connected players requires knowing their ban exemption flags. These are now cached when the player connects.
ServerBanDef now has exemption flags, again to allow matching full ban details for ban notifications.
Made database notifications a proper struct type to reduce copy pasting a tuple.
Remove copy pasted connection string building code by just... passing the string into the constructor.
Add lock around _notificationHandlers just in case.
Fixed postgres connection wait not being called in a loop and therefore spamming LISTEN commands for every received notification.
Added more error handling and logging to notification listener.
Removed some copy pasting from SQLite database layer too while I was at it because god forbid we expect anybody else to do all the work in this project.
Sorry Julian
---------
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
* Copy button for connection messages on failed connections and ban hit attempts
* loc
* better sepperation layout
* consistent styling.
* Fix loc var name
* Reconnect button back.
* Move clipboard dependency out to the params.
* open buttons so they look a bit better.
* Add failure logging to DiscordWebhook.cs
Add a new function that logs errors with discord webhook's http requests.
Create, Delete, and Edit functions were modified slightly to call the log function but return the same information as before.
The log function logs the error code, caller method using a simple constant (could be better), and attempts to log headers mentioned in issue #30248.
* remove extra ';'
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
* Move header error logs to debug
---------
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
* Finally, people can learn what the Broadcast button does!
* Also add for Alert level
* Add alert level and shuttle button tooltips
* Fix dumdum, tweak Broadcast tooltip
Issue was tools was predicted but wires aren't so this would exclude user from audio.
For now we just do the non-predicted version and I or someone else will fully predict wires later.
Added 2 pixels on the front of the left and right views of the red and black gaiter sprites so that they would properly cover the nose of their wearers, as they do in reality.