All though this is nicely done and better than using profile service, I would recommend; that if you have not created your own cached session locking based datastore you should do that. It will help you learn more about the workings of the API when you come across issues.
How to create a session locker efficiently:
Use updateasync so you can get data and set data at the same time. You can set a boolean in the database to see if there is an existing session. If there is an active session retry every second. If after 20 seconds the session is still locked the server might have crashed and just load their most recent data. It is also important to use promises and listen for errors to retry.
Issue was fixed by changing the SaveInterval in src to 5. I don’t know if there’s a way to have it save data when releasing the keep, but saving on an interval of 5 will make saving more consistent.
I keep having issues with the LoadKeep function. There is a “LoadKeep is not a valid member of DataStore “DataStoreService.PlayerData”.” error that pops up every time I test the game.
I also don’t know whether it is with the way I store things in the table or the way I create the folders. If you know how to solve it, please let me know.
Profiles do not automatically clean up internal connections, making the developer have to perform inconvenient clean-ups
ProfileService async calls make waiting for Profiles to be loaded difficult. Causing weird patterns when waiting for Profiles; DataKeep is promise-based
These aren’t really huge issues?
All you had to add to solve async calls was making your own promises etc, since ive added promises i have never had an issue with “waiting for profiles”
And if you look into the setup guide, connections are properly cleaned up
GetStore now waits for mockstore detection to finish. Players.PlayerAdded events may fire before getstore is ready. Use a loop of current players first. (See Example)