* next set of admin verbs
* invoke
* .
* a few more
* few more
* .
* few more
* some more
* move thos
* next
* some debug verbs
* axe the old mod loading
* del
* is local for some verbs
* few more
* .
* .
* .
* Add local narrate.
* Fixes this
Needed to be user.mob, since user is the client and usr was the old user.mob
* fixes
* .
* .
* .
* .
---------
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
* Begin
* Begin 2
* move to tsx
* fix that UI
* fix gib
* bunch of fixes
* fix this one
* Nicer ahelp bot text formatting
* clean up all inputs
* .
* fix MC tab
* fix ore spawn
* with rare
* More filter stuff
* Cleaned up world
* Fix
* ummm
* .
* fix that
* .
* Begin
* Begin 2
* move to tsx
* fix that UI
* fix gib
* bunch of fixes
* fix this one
* clean up all inputs
* Nicer ahelp bot text formatting
* .
* fix MC tab
* fix ore spawn
* with rare
* More filter stuff
* Cleaned up world
* Fix
* Added missing props
* useContext fix
* .
---------
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
* selection target
* ugh
* fix deadmin
* larger
* fix paper icons
* those are inverted
* don't miss that
* fix all
* point transfer
* add nostrip flag to items
* un.... teppi
* .
* end life proc after qdel
* this could be null in very rare cases
* this has a lot of sleeps, someday should be refactored and check for qdeleted
* needs to be an object
* qdel check this
* use the rsc properly
* wtf?
* .
* fix narrate
* .
* push
* inform user, null it
* .
* can be null
* fix maint lurkers
* .
* spans
* .
* fix that too
* urg
* fix distillery
* don't wrap them
* needs usr
* Update cash_register.dm
* quick hook cleanup
* lots of fixes
* .
* clean that up for reasons
* next set of spans
* some more
* next
* next
* next
* .
* text...
* next... rest soon
* .
* .
* ok last set for the night
* .
* .
* .
* .
* some more
* next
* next
* all for now
* .
* some more easy ones
* some more easy ones
* .
* .
* some more bolds
* oups auto complete moment
* add the remaining spans
* this as well
* this as well
* .
* .,
* resync them properly
Replaces all direct references held in the /datum with WEAKREF(atom). This should reduce potential lag impacts from stuff getting blown up or dying or becoming invalid.
Makes it so non-mob atoms with either \improper names, or lowercase names or names without "The" become preceeded by "The" when narrated using loud & talk, loud & emote, not-loud & talk, not-loud & emote.
Preceeding with lower case "the" causes doubling of "the", but that's a general byond issue and is solved by proper capitalization or use of \proper and it causing issues here would cause issues elsewhere anyway.
Done per request from ResidentCody
* Removed special protection for mobs with clients
* * Instead, the GM is warned not to abuse this and each use will be logged
* * Added logging everywhere we previously used return or continue to prevent client narration
* * Kept !!!Player!!! typing rather than showing their actual path
* Added prevention of duplicate entity names.
* * Recursively calls the add entity proc until cancelled or a valid name is given
* Only sanitizes the message after it's passed to mob_args() for basic interface, and only for non-mob ones as mob one calls procs that sanitize the input themselves
* Likewise for TGUI, sanitization is only done within the actual narration proc to avoid double sanitization breaking things.
* While at it, I re-introduced [mode] to classic input's instruction string. I had it originally, then removed it while pruning code duplication. I realize I can add it back now.
*Adds all the necessary procs for TGUI functionality as backend
*Creates EntityNarrate.tsx
*Extends entity_narrate datum with helper vars for TGUI
*TGUI window now allows:
* * Multi Selection
* * Single Selection
* * It shows details if single
* * It shows how many if multi
* * Allows picking between subtle/loud
* * Allows picking between talk/emote
* * Allows sending messages every 0.5 seconds
* * Uses new textbox feature to make editing and tracking narration easy!
* Makes entity_narrate() call entity_narrate_args() with input gleaned from user interface
* Sanitizes text input. Multiple times: custom IDs are sanitized on creation
* Interface text input sanitized on input
* Sanitizes arguments of argument based function as well
* Enables multi-line text input when making messages using interface.
* Multiline also works with commandline tool using \n
* Changed type checks to check for /atom for non-mobs
* Changed static typing to use /atom for non-mobs
* Rearranged code logic where relevant so we only check for /atom if mob/living came out invalid
* Added a guard clause against observers on adding a ref. Only added to this as there's hopefully no way to access ghosts with the remaining procs
* Also added "Remove All" as an option for removing refs. It requires confirmation.
*Adds verbs to client: Narrate Entity, ... (Add ref), ... (Remove ref), ... (Interface)
* Adds new Client var to hold reference to entity_narrate datum instance
*Creates entity_narrate datum to hold list of unique/custom entity names, and an assoc list of name:atomref
* All listed client verbs initialize the datum onto the client var for later use when first used
* User is expected to right click mobs within viewrange to add them to ref list
* User is prompted to create a unique identifier to generate the key:value pair
* User may either request an interface to do the narration (interface)
* User may alternatively go narrate-mob "identifier" "speak/emote" "narration" into command line
* In case of argument call, message may be ommited to bring up non-multiline tgui_input_text
* User may remove entities from their personal list at will
* Users adding entities to their personal list are logged
* Users attempting to add players to their personal list are likewise logged
* Users succeeding despite this are logged if they try to speak for them
* If type is mob/living, it uses .say and .custom_emote() procs
* .say uses the mob's languages, stutters and so forth
* if type is obj/, user must specific speech verb when composing narration.
* User may narrate from any range.
* Each proc checks for R_FUN permission and prevents using if lacking rights