* Adds a quick way to view notes from ticket panel (#69988)
* Adds a quick way to view notes from ticket panel
One thing that I hear be thrown around administration channels a lot is "If I had checked the notes, I would have been more fair on their ban!". Well, have a fast way to keep checking those notes!
* Adds a quick way to view notes from ticket panel
Co-authored-by: san7890 <the@san7890.com>
* Fixes Bread Smite Causing Some Fucked Up Shit (#69853)
* Fixes Bread Smite Causing Some Fucked Up Shit
Hey there,
So basically, when you had the bread smite done on you, you were _just_ added to the contents of the bread. Nothing more. That means that you could pick it up. You couldn't add it to your bag (it would always return back into your hand(?)), but it would create some weird oddities that was just cursed in general. Let's make it so you can't hold the container that you are contained within by giving you HANDS_BLOCKED.
* actually we don't need the named arg
lets get rid of the cursed thing entirely
* removes sanity check
* we do a bit of component trolling
THIS TOOK ME TWO HOURS FUCK YOU
* removes cruft comment
* cleans up code a teeny bit, upgrades to incapacitated
* wait that named arg is still there wtf
* Review Time
Co-authored-by: Seth Scherer <supernovaa41@ gmx.com>
* wrong operator and wrong order of operations
* null out the container
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* checks to see if container is qdeld
* weakref time
Co-authored-by: Seth Scherer <supernovaa41@ gmx.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Fixes Bread Smite Causing Some Fucked Up Shit
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Seth Scherer <supernovaa41@ gmx.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Fixes weird blank in Watchlist Update Messages when adding a expiration date (#69897)
When you add a watchlist expiration date without having previously set one, the logged message should now be more clear as to this.
* Fixes weird blank in Watchlist Update Messages when adding a expiration date
Co-authored-by: san7890 <the@san7890.com>
* Examine Blocks Out The Debug Z-Levels Verb (#69845)
Hey there,
It's mostly on the tin. It really looked kinda ugly spitting out the information + the drawing right into chat, so let's wrap it in a nice examine_block to keep it looking good. I added some line breaks because I thought it also aided the formatting.
* Examine Blocks Out The Debug Z-Levels Verb
Co-authored-by: san7890 <the@san7890.com>
* Adds hint that antag panel objectives do not show team objectives (#69746)
* Adds hint that antag panel objectives do not show team objectives
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
* Rocking The Boat, er, Map Vote (#69561)
* Rocking The Boat, er, Map Vote
Hey there,
A while ago, I spooke (typo intentional) to some other people. One frustration I heard was the fact that people would sometimes sneak through map votes during the very start of a shift, during a high-paced portion, or just as a meme. People in OOC would then flood the vote, putting in any given station. However, if a vote happens 10 minutes in- and the round goes for 70 minutes and not many of the original players are around, then it's not particularly fair to those who have to play next shift on a map they bemoan.
So, we can rock the vote! If a player isn't particularly chuffed with the hand they are given, they can poll the players to see if they want to change the map as well. If rocking the vote goes through, huzzah, you get the ability to vote for the map again. If it doesn't go through: tough luck. You can rock the vote one time per shift by default, and server operators can change the amount of times you can call to rock the map vote at their discretion. Calling to rock the vote either successfully or non-successfully counts as a "call", and when that limit is exceeded: no more calls.
Does this mean that we will only rotate between two maps because pissants will keep rocking the vote until they get what they like? Maybe? I still see people bemoan getting Tram or shit the bed over IceBox, but I think enough people get sick of bread-on-butter to take the server where it need to go. If operators don't really like seeing only two maps play, they can always adjust the config to ensure it doesn't happen.
* makes the grammar grammar
it would be "Rock the Vote vote" otherwise
* Rocking The Boat, er, Map Vote
Co-authored-by: san7890 <the@san7890.com>
* Cleans up populate world code (#69752)
* cleans up populate world
* fix debug text
* cleanup
Co-authored-by: tattle <article.disaster@ gmail.com>
* Cleans up populate world code
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@ gmail.com>
* the mop can only absorb liquid within 1 tile
* return back tickets ping with config
* Revert "the mop can only absorb liquid within 1 tile"
This reverts commit 2cdd22363349835c6eab10a7f45403e41be27a59.
* mhm
* add init
* some changes
* some mistakes
some mistakes
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* CTF qol update for admins, map selection and admins can't render CTF unplayable by accident anymore. (#69710)
About The Pull Request
When CTF map unloading was originally created in had an unforeseen consequence of not entirely removing parts of the ongoing CTF round, namely the flags, as a result of this, this system that was originally made as a precursor to map rotation was not really usable. Since this was added various PRs have made this more and less buggy but the recent CTF voting PR has caused unloading CTF rounds to be a one way process without far more involved admin intervention to reverse. As such, I've made the disable CTF buttons admins have access to only disable CTF and not unload the map entirely. I've left the function to unload the map in incase a situation arises where an admin or maintainer really needs to get rid of the CTF map.
Removing this functionality also removes a really clunky but theoretical function of it, being that you could repeatedly unload and reload the CTF map to get one of your choice, since this is not an option anymore this PR also allows admins to pick a CTF map when they start CTF themself.
EDIT: I fixed the bug introduced by the CTF voting PR, CTF maps can now be reloaded after being unloaded, the flag issue is still around so it shouldn't be used without admin supervision however. Also unloading is a debug verb now.
Why It's Good For The Game
Map unloading was super buggy so it shouldn't be easily accessible.
Since admins cannot repeatedly unload and reload CTF maps anymore to get the one they want they can now just pick the one they want from a list which is significantly less dumb.
Changelog
cl
admin: When admins start CTF they can now choose which map is played or choose random as its always been
admin: Admins can no-longer permanently break CTF by unloading the map accidentally
spellcheck: Fixed a typo in the Map Description for CTF Cruiser
fix: CTF can now be reloaded after being unloaded
/cl
* CTF qol update for admins, map selection and admins can't render CTF unplayable by accident anymore.
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
* Atmos init speedup, saves 4 seconds (#69697)
* Micro optimizes ssair's turf init, saving 2 seconds
Most of this is making existing operations do more legwork, or cheaper.
I did add cycle checking to ONLY init turf linking, which required
creating a new proc.
Did some horrible horrible things in said proc to save like 0.8 seconds.
I think it was worth it.
* Atmos init speedup, saves 4 seconds
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Return of the scrubber overflow event (#68378)
About The Pull Request
Brings back the scrubber overflow event, previously removed in #53549
This version has nerfed numbers because foam changes made it stupidly powerful.
Also snake_cases some event variables.
Why It's Good For The Game
More dangerous but not station-damaging events. Bonus: janitor content.
Changelog
cl
add: Re-adds the scrubber overflow event as a random event
/cl
* Return of the scrubber overflow event
* update modular and fix missing non modular edit
* update stray meteor event
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Fixes hard-dels related to lua signal handlers (#69555)
When I changed the syntax of SS13.lua to account for the ability to properly index tables with datums, it turns out that the callbacks created for signal handlers and timeouts had circular references, resulting in hard-deletes.
My first solution was to make it so signal handler and timeout callbacks use weakrefs, which get resolved in lua_state/call_function, but it turns out that, when calling the signal cleanup function, a qdeleted-but-not-yet-garbage-collected datum's weakref resolves to null because datum.gc_collected is set to GC_CURRENTLY_BEING_QDELETED before COMSIG_PARENT_QDELETING gets sent.
To resolve this issue, Potato and Oranges both recommended that I make a snowflake variant of resolve which ignores whether the datum a weakref points to is qdeleted - only that it is null or it's weakref isn't the very weakref resolve was called on. This proc was given a lengthy autodoc comment describing when it should or shouldn't be used, to ensure it is only used in cases similar to the one I needed to create it for (needing to resolve a weakref to a datum in a COMSIG_PARENT_QDELETING handler registered on that very datum).
* Fixes hard-dels related to lua signal handlers
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
* [Lua] You can now `await` expensive non-sleeping procs. (#69570)
When trying to run getFlatIcon using lua scripting, I discovered that it was so expensive that, for certain atoms like complex humans, there is no way it will complete within the lua execution limit. While Mothblocks would suggest just raising the execution limit, the idea leaves a bad taste in my mouth due to the possibility of a script causing extreme lag by consistently overrunning the BYOND tick.
I instead elected to make /datum/auxtools_promise sleep once before invoking its assigned proc, thus immediately returning execution to lua, even if the proc being awaited wouldn't sleep. This allows for awaiting extremely expensive non-sleeping procs (like the aforementioned getFlatIcon)
* [Lua] You can now `await` expensive non-sleeping procs.
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
* admin deadsay now uses deadchat_broadcasts as it ought to. (#69593)
About The Pull Request
The admin deadsay command is old and still based on the assumption that ghosts and admins are the only ones that can hear deadchat messages, while using a snowflake loop that's pretty much superseded by the deadchat_broadcast proc.
* admin deadsay now uses deadchat_broadcasts as it ought to.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Resolves is_banned_from headaches and lag (Speeds up roundstart significantly) (#69376)
About The Pull Request
Just to be clear, when I refer to time here, I am not talking about cpu time. I'm talking about real time.
This doesn't significantly reduce the amount of work we do, it just removes a lot of the waiting around we need to do for db calls to finish.
Adds queuing support to sql bans, so if an ongoing ban retrieval query is active any successive ban retrieval attempts will wait for the active query to finish
This uses the number/blocking_query_timeout config option, I hope it's still valid
This system will allow us to precache ban info, in parallel (or in batches)
With this, we can avoid needing to setup all uses of is_banned_from to support parallelization or eat the cost of in-series database requests
Clients who join after initialize will now build a ban cache automatically
Those who join before init is done will be gathered by a batch query sent by a new subsystem, SSban_cache.
This means that any post initalize uses of is_banned_from are worst case by NATURE parallel (since the request is already sent, and we're just waiting for the response)
This saves a lot of headache for implementers (users) of the proc, and saves ~0.9 second from roundstart setup for each client (on /tg/station)
There's a lot of in series is_banned_from calls in there, and this nukes them. This should bring down roundstart join times significantly.
It's hard to say exactly how much, since some cases generate the ban cache at other times.
At base tho, we save about 0.9 seconds of real time per client off doing this stuff in parallel.
Why It's Good For The Game
When I use percentages I'm speaking about cost per player
I don't like how slow roundstart feels, this kills about 66% of that. the rest is a lot of misc things. About 11% (it's actually 16%) is general mob placing which is hard to optimize. 22% is manifest generation, most of which is GetFlatIcons which REALLY do not need to be holding up the main thread of execution.
An additional 1 second is constant cost from a db query we make to tell the server we exist, which can be made async to avoid holding the proc chain.
That's it. I'm bullying someone into working on the manifest issue, so that should just leave 16% of mob placing, which is really not that bad compared to what we have now.
Changelog
cl
code: The time between the round starting and the game like, actually starting has been reduced by 66%
refactor: I've slightly changed how ban caches are generated, admins please let me know if anything goes fuckey
server: I'm using the blocking_query_timeout config. Make sure it's up to date and all.
/cl
* Resolves is_banned_from headaches and lag (Speeds up roundstart significantly)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes weakref resolving in View Variables not working (#69375)
m
* Fixes weakref resolving in View Variables not working
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* Obstructed Vents and Scrubbers? - Debug Them Out! (#68890)
* Obstructed Vents and Scrubbers? - Debug Them Out!
Hello there,
In _May of 2014_, Ikarrus wrote the following (here)[https://tgstation13.org/phpBB/viewtopic.php?f=11&t=327]:
"Avoid placing scrubbers and air vents under objects. It's better to leave them in the open and visible so people can use them."
How far we have fallen. However, during a review I did in the last week, I accidentally let one of these (in multiple occurrences!) slip past me:
I don't want that to happen again. It's especially hard when they're under tables, or big bulky lockers, and under computers sometimes! They're not obvious to the human eye, so we must rely on technology. This creates a new Debug Mapping Verb that will flag out any vent, scrubber, or canister port that is being obstructed by an invalid object (directionals and undertiles are excluded). It will be a gargantuan effort unlike anything you've seen to get rid of all of them, but at least this is the first stone in a grand arch.
* Updates some variable names, adds some more logging
* Update code/modules/admin/verbs/mapping.dm
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Update code/modules/admin/verbs/mapping.dm
* no more single letter var
* early continue
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Obstructed Vents and Scrubbers? - Debug Them Out!
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* adds location atom to deletion message (#69372)
Helps with debugging to know that a flash was deleted from engi borg #424 at robotics than just a flash was deleted at X,Y,Z.
* adds location atom to deletion message
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
* Lua UI improvements (#68887)
Atomized from #68816, with a little addition. Fixes some dumb formatting issues with the lua editor, adds a "jump to bottom" button when viewing the state log, and paginates the state logs.
* Lua UI improvements
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
* [GBP No Update] Perish, individual logging runtime (#69024)
missed 2 or 3(lol it was more when I look back at the files), LOG_GAME tags on the log_message line, and did some cleaning up since i was looking through every log_message again
Co-authored-by: tattle <66640614+dragomagol@ users.noreply.github.com>
Co-authored-by: tattle <66640614+dragomagol@ users.noreply.github.com>
* [GBP No Update] Perish, individual logging runtime
Co-authored-by: Mooshimi <85910816+Mooshimi@users.noreply.github.com>
Co-authored-by: tattle <66640614+dragomagol@ users.noreply.github.com>
* Deadmin topic spam fix and fixes trailing MC panel after having deadmined (#68983)
* Removes redundant init_verb() call
* Fixes the MC tab not going away when you deadmin + runs Prettier on statbrowser.js
* Revert "Fixes the MC tab not going away when you deadmin + runs Prettier on statbrowser.js"
This reverts commit 2676d5f897cdc956b062f5d4785a7ebf2e1df8a9.
* Now prettier will only work inside of the tgui folder
* Actually makes the change for the MC tab sticking around forever
* Deadmin topic spam fix and fixes trailing MC panel after having deadmined
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Concentrated barbers aid can give hairless species hair + fixes hair updating once and for all (probably)
* Update code/modules/antagonists/thief/thief.dm
* Update code/modules/mob/living/carbon/human/species_types/felinid.dm
* Concentrated barbers aid can give hairless species hair + fixes hair updating once and for all (probably)
* yes
* Update _compile_options.dm
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Catches an edge case in ahelp replies (#69053)
It turns out if you hit reply to an ahelp before it was closed, and then
sent back the input() after close, you'd end up with a runtime leaking
your reply, and no feedback.
This catches that case, and instead forwards it to a new ahelp, so the
text isn't lost, and the closed ticket is respected
Approved by sitting headcatmin Timberpose
🆑
fix: Attempting to send back a reply to an ahelp after it is closed now sends the reply to a new ticket, rather then just dropping it and leaving you for dead with a runtime
admin: see above
/🆑
* Catches an edge case in ahelp replies
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes a lua state null return related to the print wrapper, improves the lua editor ui formatting, and implements a stopgap lua lag fix (#68816)
This PR fixes this issue by making sure every proc called in the stack of /proc/wrap_lua_print which could sleep is called using INVOKE_ASYNC, and to prevent such problems in the future, marks all the wrappers as SHOULD_NOT_SLEEP(TRUE). I also figured out how to fix the dumb overflowing problem of the lua editor ui.
Due to lag concerns regarding lua states with a large number of global variables (including fields within global tables), I have made it so the global table and state log are hidden by default - they can be shown using a toggle button in the editor ui.
* Fixes a lua state null return related to the print wrapper, improves the lua editor ui formatting, and implements a stopgap lua lag fix
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
* [MIRROR] Mob Ability Sequences Again Again (I swear this time)
* [MIRROR] Fix: Cult construct can attack while their spells are on cooldown (All spells no longer have a Melee CD by default) [MDB IGNORE]
* Update code/datums/actions/cooldown_action.dm
* Adds addition test areas verb that filters maintenance areas out (#68484)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds addition test areas verb that filters maintenance areas out
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Updates Test Station Areas Verb to filter better (#68183)
* Updates Test Station Areas Verb to filter better
Hey there,
So, previously we ran a "blacklist" system to filter out the specific areas we never wanted to see, and only ever checked areas that were on a station Z-level. This worked great four years ago, but now we have IceBoxStation. IceBox mingles several different types of areas that would take too long to blacklist, so I chose to implement a "whitelist" in concurrence with it.
We now have all station areas be under the `/area/station` path, which is quite useful. So, this will now always check for a station z-level, ensure that it's not in the blacklist (areas that we never wanna check, like the holodeck, or the bomb range that I just added), as well as the fact that it's whitelisted as well. This is very useful because otherwise, IceBox Test Areas would have these massive lists full of redundant, useless area spam, so this should condense it down a bit.
* Updates Test Station Areas Verb to filter better
Co-authored-by: san7890 <the@san7890.com>