its such a stupid fucking name, the verbs are all mapping related, they are all in the mapping tab, nobody knows about them because its called debug verbs for some reason instead of mapping verbs
I spend a lot of my time adminning the servers alt tabbed when not much is going on, tabbing back in every 5-10 minutes to see what's happening or when I hear a bwoink. Sometimes I miss out on other admins asking me questions or trying to get my attention, and I'll only realize way later when I'm scrolling back up through the chat logs, if at all.
This PR adds the ability to @ other admins in asay by their ckey, which underlines the pinged name, plays a bloop sound (the one when a vote starts) and flashes their window icon if they're not tabbed in.
admin topics for updating available jobs weren't logged at all and that was kinda dumb
john willard logged the console to game which i disagree with so i want to move that also
## About The Pull Request
stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it
for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

## Regex used:
procs without args, not even regex
`/Initialize()`
procs with args
`\/Initialize\((?!mapload)((.)*\w)?`
cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
Admins can now revert (most) station traits before a round starts, as well as setup the station traits that will run next round.
Previously, admins had no control over this system, making it sometimes painful for running planned events.
It is not feasible to update the station traits of the current round, considering some apply pre-roundstart, but it is doable to edit the station traits of the next round.
About The Pull Request
Admins can bypass IsAdminAdvancedProcCall checks by using these methods of proccall because proccall protection is kinda dumb. This has been tweaked so that there is proper proccall protection for these methods of proccall.
Code is hacky, but there's not much of a choice if we want procs to be properly protected from admin proccalls from any sort of remote source. If anyone has a better idea on how to implement this, feel free to hit me up.
We need a special global mob that handles proccalls from sources that may not have a usr/client to refer back to. IsAdminAdvancedProcCall() relies usr being defined, so if no usr is defined, then this will always return false. This has been adjusted so that proccalls without a usr/client to refer back to will instead set usr to this special mob, which will then let the IsAdminAdvancedProcCall() return true by comparing whether usr == this special global mob.
Why It's Good For The Game
Admins can no longer bypass IsAdminAdvancedProcCall checks.
Changelog
cl
admin: Admins are no longer able to bypass proccall protections using remote methods of proccalling.
/cl
Adds some extra vars and logic to explosion code to make powerful logging entries that should help admins narrow down when explosives get misused.
Records this new info in the feedback database and bumps the explosion version +1 as a result of this.
Adds the sparring god. Your deity wants you to go out and spar people for self improvement.
Sparring
You can create contracts from paper as the chaplain. The contracts come with a set of conditions for the battle.
You can set which weapons are allowed.
You can set what you earn from winning.
You can set where you fight.
BOTH participants in the sparring match must agree to the terms for the fight to begin. Changing the terms will remove any other signatures on the contract, requiring them to review and willingly sign again.
Setting the stakes to be holy will give you favor for winning the fight. You can only do this once per person, so you can't farm points. You can use points on declaring new areas as arenas, or if you save up enough, buff your heart to keep fighting in dangerous conditions.
This fix was one hell of a debug journey. Icon.Insert() was the issue here but I'm not sure if it counts as byond bug in this particular case. When you insert a single frame icon, if an existing icon state of the same name exists normally it would be overridden. However different things happen if the icon that gets overridden has multiple frames. I'm not fully sure of the different behaviors but depending on what the icons consisted of you could get animated sprites where every frame was the same or appending frames to animated sprites in strange ways.
This has been fixed by making sure no Inserts are overriding existing icon states so that the strange behavior doesn't have to be dealt with.
The GAGS debug menu has been upgraded a bit on the way to fixing this bug. A toggle to automatically refresh icons when the dmi or json configuration are updated has been added and the step by step preview will only show steps now involved in the creation of the icon state you select.
I have made the admin sheanigean use a datum that registers the COMSIG_GLOB_CREWMEMBER_JOINED signal to give latejoins the traitor antag datum. I have also moved the global comsig at the end of AttemptLateSpawn(), which is necessary to stop latejoins who already rolled antag from getting the role and also make it work for non humans (though robots can't be latejoined as right now). For summon guns/magic, a ishuman check has been added, and the definition of the make_scottish() has been moved to living. This shouldn't affect how the other datums who use the same comsig work.
About The Pull Request
Rewrites the entire preferences menu in tgui. Rewrites the entire backend to be built upon datumized preferences, rather than constant additions to the preferences base datum.
Splits game preferences into its own window.
Antagonists are now split into their individual rulesets. You can now be a roundstart heretic without signing up for latejoin heretic, as an example.
This iteration matches parity, and provides very little new functionality, but adding anything new will be much easier.
Fixes#60823Fixes#28907Fixes#44887Fixes#59912Fixes#58458Fixes#59181
Major TODOs
Quirk icons, from @Fikou (with some slight adjustments from me)
Lore text, from @EOBGames (4/6, need moths and then ethereal lore from @AMonkeyThatCodes)
Heavy documentation on how one would add new preferences, species, jobs, etc
A lot of specialized testing so that people's real data don't get corrupted
Changelog
cl Mothblocks, Floyd on lots of the design
refactor: The preferences menu has been completely rewritten in tgui.
refactor: The "Stop Sounds" verb has been moved to OOC.
/cl
individual logging now relies on the global list of player details, instead of checking that client's player details which doesnt work if client is logged off
Fixed imaginary friends being unable to turn by movement or holding down ctrl. I assume this was broken when abstract_move was implemented.
Makes some tweaks to the Imaginary Friend mob. It no longer cares about any brain traumas and can exist standalone.
Added the ability to take a set of datum prefs as an argument. It will attempt to create an imaginary friend as per those datum prefs.
This imaginary friend can be a cyborg or an AI core.
Takes this improved behaviour and packages it into a brand new smite that allows admins to inflict anyone with a permanent imaginary friend. This is not tied to a brain trauma. You can probably give imaginary friends imaginary friends. You can probably give the AI eye an imaginary friend. I have not tested this. It is probably a bad idea.
You can give simplemobs imaginary friends. Basic mobs. Silicons.
You choose whether the imaginary friend takes on the preferences of the person you choose to be the imaginary friend or is random
Made all say()s deal with encoding, audited all uses of say() to prevent double encoding or like, manually inserting span().
I left some stuff without sanitize that only draws from the code, since it's hell to clean up otherwise. That
and I let admins do whatever the fuck they want
There are methods that let players spam the everloving shit out of ghosts with BONG BONG BONG BONG BONG BONG BONG etc. through being able to constantly poll ghosts for roles with no restriction or cooldown.
Examples are laughter and slaughter demon antag_spawners.
It makes no sense to be able to concurrently poll for the same mob. As a result, I've now added a guard against this. The proc has been given a static list of mobs it's polling for ghost roles for. If it's already polling for ghost roles for a given mob, then it just early returns with an empty list, otherwise it adds the mob to the static list when the poll starts and removes it when the poll ends.
I've also done a little cleanup in var names and the proc name, with a find-and-replace done. There weren't many things calling it and none used named keywords in the args so should be fine.
There is also poll_candidates_for_mobs (also included in my cleanup) - This proc is basically only called by admins via sentience balloons and they have their own guards against spamming (the balloon pops and thus can only be used once)
Also fixes an issue in /mob/living/silicon/robot/proc/replace_banned_cyborg() where incorrect args were used in the proc call to poll for candidates.
* Re-Adds Header Checkboxes
- Ban Panel categories can now be clicked to click all the checkboxes in their category
- Adds a new js method called header_click_all_checkboxes whichs clicks all the checkboxes whose class is the hidden checkbox's name
Re-introduces a function that was lost with #60578 (6c4134d1ea) , closes#60903 (Admins being unable to click on the ban category and check all subcheckboxes). The method was largely copied, but was changed to comply with the toggle_other_checkboxes() method introduced with the aforementioned PR by replacing a .checked assignment with a .click() call to ensure that duplicate entries are properly marked
Admins can now click categories to more easily ban people from all entries in that category. Demonstrated below to show that checkboxes are being toggled correctly in all relevant categories
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Admins can now give players a popup if they are not responding to tickets.
Popup is cleared when player replies or ticket is resolved/closed.
As more and more of the chat screen is made irrelevant, new players read it less and less.
This means that a lot of new players are ignoring ahelps, which is something I've encountered myself.
SDQL spells have been improved in several ways:
- The behavior of executing SDQL spell queries using datums has been migrated to a component
- Projectile SDQL spells can now fire any subtype of /obj/projectile
- Touch SDQL spells can use any subtype of /obj/item/melee/touch_attack
- More robust parse error detection
- Parse errors while loading a file from json are displayed in a modal window, with the option to load whatever parts of the spell were correctly parsed (be forewarned, scrollable sections are scuffed, and the ones that appear in the parse error modal can only be scrolled through by drag-selecting the text within them)
- Fixes a bug with the names of variables within lists
- Compartmentalizes SDQL spell code into several .dm files.
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Implements the Requests Manager, a new admin tool used to view all prayers, Centcom/Syndicate requests, and nuke code requests within the span of a round.
The verb can be found under Admin.Game, or alternatively just use the verb directly Requests Manager. The requests can be filtered by type (using the type filter button), or using a text search which searches both the message text as well as the request owner's name.
This happened because clients are incredibly fickle and may disappear at any time.
In this case searching for the DB took long enough to cause this.
Improved a little code around it, in the process.
(It's more like the db sleeps, so byond has a chance to nuke the client datum. but this is good either way)
Adds a check for observers to invisimin verb code.
Less admins thinking it's broken when it just tells them they are disabling it over and over as an observer.
This fixes#58258. Basically anytime a pAI holoform gets shot with a staff of changing or polymorph item it would change their mob type. This allowed ghost roles infinite respawns since the pAI card is not destroyed when it gets polymorphed. An unlimited army can be created with no downsides since you can keep bringing people back to life with the pAI requests.
I also went and fixed another strange behavior with polymorph, where if you used a staff of animate on an object, you could turn around and then polymorph the object into a mob. The animate magic is supposed to wear off the object after a certain while so I made the mimic immune to polymorph effects.