[x] Consider handling the text filter within args instead of task
[x] IMPORTANT: how to determine caller has permission to use an argument, qualifier and modifiers
[x] maybe a separate method to verify and/or block with warning within CommandService like modifiers
[x] important: make sure to setup and handle the default values!
[x] change main.services.RoleService.verifySettings(user, {"limit", "denylistedIDs"}).areAll(true) to main.services.RoleService.verifySettings(user, "limit.denylistedIDs").areAll(true)
[x] Test:
[x] verifySettings
[x] getMaxValueFromSettings
[x] getMinValueFromSettings
[x] getHighestRoleSetting
[x] handle blocking of values and error notifications
[x] sounds
[x] gear
[x] if .parentchanged of storage arg item then produce an error/warning telling to clone instead
[x] scale
[x] SUPER IMPORTANT: Even if the self.args are missing (e.g. in ;mel me instead of the full ;mel me red) make sure the args are still parsed! If nil, make sure to pass thorugh "" as the stringValueToParse
[x] color
[x] fromName
[x] hex
[x] capsule
[x] optionalcolor
[x] bool
[x] stat
[x] setup a module called 'StatHandler'
[x] setup methods to modify stats (for commands get/set/add/subtract/reset)
[x] make displayName of stat 'statName' (while the arg returns a 'stat')
[x] have the stat arg return a stat from :get()
[x] clone this module under plugin loader extensions core and setup an example of how to modify
[x] split task:buff into task:buffPlayer and task:buffCaller
[x] test on server
[x] setup on client too (which has dynamic agents)
[x] consider renaming all references of 'target' to 'player'
[x] setup 'Caller' Persistence enums
[x] 'UntilCallerDies` - if caller not present, kill right away
[x] UntilCallerRespawns - if caller not present, kill right away
[x] update 'Become' with UntilCallerRespawns
[x] ;become @ForeverHD or ;become Ben doesnt work?
[x] ensure Parser.getPlayersFromString works for User arg (and then userDescription arg) - test by doing ;become Matt then ;become be and ;become @forever
[x] username - same as userId except returns username (check displayname, username, then userid, etc)
[x] check and update all Args which 'require a player arg at start'
[x] consider introducing a CommandService method which take a statement, converts the commandNames, args and modifiers into their real names, then verifies, then executes if successful
[x] Important: Player qualifier does not detect ;bundle @forev ID and ;bundle ben ID correctly
[x] update user qualifier
[x] also work on qualifier 'multi limit' - instead of multi bool property, just check the final qualifier results for that statement and block if result more than 1 (and multi role setting disabled)
[x] setup a paint command and see what happens when you paint over ;bundle and ;become etc
[x] ;unsize doesn't work
[x] ;paint me red, then ;bundle me 2, then ;unpaint, then ;unbundle still causes paint to remain
[x] Important: Reorganise agent self.groupedBuffs so that items like 'BodyScale' can all be merged into one master HumanoidDescription effect (then its own ignored)
[x] Reorganise
[x] What to do for specificEffect and specificProperty???
[x] Inform raza modifiers (such as un/undo, preview, etc) have entirely stopped working - likely something to do with: https://i.imgur.com/pEcqCJY.png
[x] Important: Agent resets incorrectly when doing ;bundle me 1 then ;bundle me 2
[x] setup 'preview' modifier
[x] if command.preview == true, then convert to preview modifier
[x] if preview but fromClient is present then ignore the preview modifier
[x] setup a 'requestBatch', 'requestStatement' and 'requestChat' remote within CommandService - limit these remotes to 10 requests every 5 seconds
[x] have these methods/remotes call verify statement then executestatement (identical to what chatCommand) does
[x] ensure verifyAndExecuteStatement and all downwards promises and returned correctly
[x] ensure the client-requested batches/statements are actually valid tables else block
[x] if promise errors then return false, error message
[x] if promise resolves but (false) then reject too
[x] only return true if everything successful
in the server first
[x] team - test only
[x] teamcolor - test only
[x] material - test only
[x] ensure modifiers and playeridentifier work (see raza)
[x] agent improvements
[x] ;paint me red;size me 2;bundle me 400 then ;bundle me 99 doesn't work correctly in-game (maybe due to the additional headless horseman checks)
[x] consider delaying the applying of humanoid descriptions so that effects to snap back and forth. For example, ;trans me 0.5 then ;trans me 0.9
[x] on initialisation (ideally within the Start of a service), iterate through all descendants of ServerStorage, ReplicatedStorage and NanobloxLoader, and if a tool object, then record its name
[x] Extensions/Tools has highest priority so iterate over and record items from this last
[x] morphs
[x] setup a dedicated folder within extensions and ensure they are pulled into the core on initialisation (maybe a MorphHandler/Service?)
[x] create internal morph command
[x] important: setup a dedicated buff method or effect to take instances (such as fire particles), and only display them when that particular buff is activated
[x] create morph arg
[x] make sure to become the entire morph
[x] convert the most important HD Admin morphs into humanoid descriptions or hdesc/character hybrids
[x] chair - make rideable
[x] slender
[x] anonymous
[x] clown
[x] donald (trump)
[x] guest666
[x] hacker
[x] SWAT
[x] superman
[x] guestoriginal
[x] lordduckkkkk - make rideable
[x] complete all descriptions (this is important for explaining color capsules, hex, etc)
[x] agent/buff IMPORTANT: ;trans me 0.5 then ;become oblivioushd discontinues transparency effect because new body parts replaced. overcome this, then test with that and ;morph me chair (check the face)
Additional
[x] ;size me 2, ;material me forcefield then ;become oblivioushd does not apply material value to body
[x] test :setWeight
[x] it seems to throw and error
[x] Override ID lists
[x] first...
[x] setup bundle arg verifycanuse
[x] replace main.InserService:LoadAsset with main.services.AssetService:loadAsset which first checks override list and replaces if found
[x] libraryIds
[x] catalogIds
[x] bundleIds
[x] Cooldown command setting
[x] Defaults to 0
[x] The cooldown is applied after the task finishes executing
[x] When coolingdown (if > 0), record task.cooldownEndTime
[x] Add a note to check for task.cooldownEndTime and produce a different warning to caller (i.e. cooling down, x time remaining)
[x] This cooldown should also be applied after the role setting 'limit cooldown'
main.services.RoleService.verifySettings(user, {"limit", "denylistedIDs"}).areAll(true)
tomain.services.RoleService.verifySettings(user, "limit.denylistedIDs").areAll(true)
;mel me
instead of the full;mel me red
) make sure the args are still parsed! If nil, make sure to pass thorugh "" as the stringValueToParseget/set/add/subtract/reset
)plugin loader extensions core
and setup an example of how to modifytask:buff
intotask:buffPlayer
andtask:buffCaller
UntilCallerRespawns
- if caller not present, kill right awayParser.getPlayersFromString
works for User arg (and then userDescription arg) - test by doing;become Matt
then;become be
and;become @forever
;bundle @forev ID
and;bundle ben ID
correctly;bundle me 1
then;bundle me 2
verifyAndExecuteStatement
and all downwards promises and returned correctly;paint me red
;size me 2
;bundle me 400
then;bundle me 99
doesn't work correctly in-game (maybe due to the additional headless horseman checks);trans me 0.5
then;trans me 0.9
Additional