[ ] for 'limiters' within roles, check against roles with that command and ensure all of those have the setting (see tylers notes for more details)
[ ] determine how role functions will work now with these new settings?
[ ] important: now that roleModifiersToOnlyRoleCommands has been removed, ensure role limiters/behaviours/modifiers/etc are exclusively applied to commands within that role, instead of all commands
[ ] ensure RoleService.verifySettings will still work
[ ] maybe introduce a new or modify verifySettings so that behaviours are solely limited to commands of that role
update everywhere which uses verifySettings
[ ] have located in a separate shared module so that it can be accessed by both client and server
[ ] repeat the same for game settings
other:
[ ] replace :waitForHumanoid with CharacterUtil.onHumanoidLoaded(playerOrUserId, callback)
[ ] Replace all :catch(warn) and :catch(print) with main.warn and main.print then add this to-do task to Nanoblox (maybe also utilise debug.traceback)
[ ] Have main.print and main.warn act as wrappers which extend the text Nanoblox (then ideally some sort of debug traceback, such as the name of the module)
[ ] Replace all game.JobId with main.jobId
[ ] DataUtil.isEqual has changed to DataUtil.areValuesEqual
[ ] add TeleportUtil
[ ] create userstores using scope, for example: UserStore.new("Nanoblox", "Players"), UserStore.new("Nanoblox", "Roles"), UserStore.new("Nanoblox", "Bans"), UserStore.new("Nanoblox", "General"), etc
[ ] ensure systems (within environments) are still split up and have more appropriate datastore key names which allow for potential future scaling (such as when bans exceed 4 million characters), e.g. Scope:Bans/Global/Profiles/1
[ ] convert PlayerService methods like playerAddedMethod to just playerAdded and rename the signals to playerAddedSignal
[ ] Replace .ancestryChanged of(game) with .Destroying
[ ] Introduce StreamingController and ensure replication detection of instances (such as with clientLoadCommandAsset, the melon, sound, etc) are working correctly with this new system instead of the old firing remote
[ ] PlayerStore (new setTemplate methods), etc
[ ] Also for all ':GetPropertyChangedSignal("Parent")' ensure that it is disconnected by something else other than itself as it is now always called (for instance if it belongs to a model and its parent id destroyed instead)
[ ] Either use ancestrychanged or the new .destroying event if is released
[ ] Important: Update RemoteServer (and maybe RemoteClient) with new one as the limit checks were acting on a per-player basis instead of a per-remote-per-player basis
[ ] Add in Global module and the two Global enums
[ ] Add this in under 'Packges'
[ ] Setup so it works like a package
[ ] Create a dedicated repo for this originally which a license preventing its use without my permission
[ ] Update to new Remote package
[ ] also consider utilising the new 'beforeFiring', 'afterFiring', etc when it comes to replicating assets
[ ] Update to new UserStore package (with profile service)
[ ] Explore how systems now work with profiles
[ ] getLoadedUser is now simply getUser, and getUser only returns once loaded
[ ] check all uses of getUser and consider replacing some with :onUserLoaded
[ ] replace all getLoaded with get
[ ] check all .changed State listeners as these have now been replaced with (pathway, value, oldValue)
[ ] createDescendantChangedSignal has also been removed
[ ] consider replacing some listeners with the new :getChangedSignal() with returns the exact value instead of pathwayValue
[ ] .changed and .changedFirst have been renamed to mutated, mutatedFirst and getValueChangedSignal
[ ] replace getOrSetup with simply get (or a . index) by adding these values to the default PlayerStore
[ ] state:getSimple has been removed, make sure to replace all references of this
[ ] Important: Inverse all State.new() as convertDescendantTables has been replaced with dontConvertDescendantTables
[ ] the value.isState check has also been removed so make sure that State tables are never created from an object (such as a Role)
[ ] originalCode:
function State:_get(remainCriteria, ...)
local pathwayArray = State.getPathwayArray(...)
local max = #pathwayArray
local value = self
if max == 0 then
return value
end
for i, key in pairs(pathwayArray) do
value = value[key]
if not remainCriteria(i, max, value) then
return nil
end
end
return value
end
function State:get(...)
return self:_get(function(i, max, value)
return (i == max or (type(value) == "table" and value.isState))
end, ...)
end
function State:getSimple(...)
return State._get(self, function(i, max, value)
return (i == max or type(value) == "table")
end, ...)
end
- [ ] a lot of DataUtil methods have been moved to State
- [ ] improve CommandService.createFakeUser
- [ ] ensure the PlayerStore has a way to return the default values (e.g. UserStore.getDefaultValues)
- [ ] introduce a UserStore.createUserTemplate
- [ ] improve CommandService.createFakeUser
- [ ] Sound modules (service, controller, etc)
- [ ] TypeChecking
- [ ] TestEZ
role stuff:
other:
CharacterUtil.onHumanoidLoaded(playerOrUserId, callback)
DataUtil.isEqual
has changed toDataUtil.areValuesEqual
UserStore.new("Nanoblox", "Players")
,UserStore.new("Nanoblox", "Roles")
,UserStore.new("Nanoblox", "Bans")
,UserStore.new("Nanoblox", "General")
, etcScope:Bans/Global/Profiles/1
playerAddedMethod
to justplayerAdded
and rename the signals toplayerAddedSignal
.ancestryChanged of(game)
with.Destroying
getLoadedUser
is now simplygetUser
, andgetUser
only returns once loadedgetUser
and consider replacing some with :onUserLoaded.changed
and.changedFirst
have been renamed tomutated
,mutatedFirst
andgetValueChangedSignal
State.new()
asconvertDescendantTables
has been replaced withdontConvertDescendantTables
value.isState
check has also been removed so make sure that State tables are never created from an object (such as a Role)function State:get(...) return self:_get(function(i, max, value) return (i == max or (type(value) == "table" and value.isState)) end, ...) end
function State:getSimple(...) return State._get(self, function(i, max, value) return (i == max or type(value) == "table") end, ...) end