core
core copied to clipboard
Update internal data and user systems before continuing work
role stuff:
- [ ] 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.isEqualhas changed toDataUtil.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
playerAddedMethodto justplayerAddedand rename the signals toplayerAddedSignal - [ ] 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
- [ ]
getLoadedUseris now simplygetUser, andgetUseronly returns once loaded- [ ] check all uses of
getUserand consider replacing some with :onUserLoaded - [ ] replace all getLoaded with get
- [ ] check all uses of
- [ ] 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
- [ ]
.changedand.changedFirsthave been renamed tomutated,mutatedFirstandgetValueChangedSignal
- [ ] 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()asconvertDescendantTableshas been replaced withdontConvertDescendantTables - [ ] the
value.isStatecheck 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