Persistence

Share us your Persistence bugs and feedback here (one item per post).
Non-constructive and off-topic posts will be moved or deleted.
Add option for Keys to be Local
Issue: Setting any value on playerdata (for example, a setting for the world) syncs all playerdata keys/values to all users (for example, SaveData), even ones that were not changed. I don't want to to sync certain keys, as they are very big and not commonly changed. I also don't need other players to be able to see certain keys. Context: So this is very similar to https://feedback.vrchat.com/persistence/p/user-private-persistence however my reasoning is completely different. I have a leaderboard system and a settings panel in my world and they both use persistence, they work perfectly fine, but I recently introduced a Save-Load system, which lets players save pickup locations and pen drawings to their player-data, so they can load it later. The issue comes because when something unrelated gets changed in the player-data, for example a value on the leaderboard. All of that player's persistent data still gets sent over the network, including the large save data, this creates a LOT of network lag and makes the instance unstable. Using persistence is the only way I can make sure everyone can use the save-load system. I cant rely on a simple text box export alone or using the debug logs, as some users are on quest and that makes it quite difficult to extract debug logs/save text. And debug logs get automatically deleted, so It's unreliable. Solution: My idea is to have a third, optional argument for PlayerData.Set<T>(), For example: instead of: PlayerData.SetBytes(Key, Value); We would have: PlayerData.SetBytes(Key, Value, true); The third argument would be 'Local' it defaults to false so people would not need to update all their existing scripts When it is true, it makes it so that key is marked as Local Only, and doesn't get sent to other players, ever. If somewhere else in the code, localplayer calls PlayerData.SetBytes(Key, Value, false); or without the third argument, it sets that variable back to global. I have included a mockup screenshot.
1
Monthly subscription to get persistent world database access for Creator Economy members
World persistence in VRChat can for example allows creators : Build global leaderboards that carry across instances. Share cumulative player statistics. Create worlds that evolve based on player actions, etc. Allowing groups making changes or perform actions or set custom parameteres in a world, save them, and later these settings would be applied to any users who joined. Basically, creating more advanced worlds that attract and retain players on the platform. Limiting it to Creator Economy members would encourage more creators to join the program rather than rely on external services, while helping increase VRChat’s revenue. This feature could be offered as a paid option with a small fee, because data storage has real costs. The service could provide access to a lightweight database (such as SQLite, with XX.XX MB of storage) for use in a single world or shared across multiple worlds. Single World Database Plan : $5/month (or ~600 credits) Access to a dedicated SQLite database for one specific world. Universal Database Plan : $10–15/month (or ~1200 credits) Access to a shared SQLite database usable across multiple worlds. You pay for a limited database, and depending on your plan, you can use it in one or multiple worlds. Similar feature request: https://feedback.vrchat.com/feature-requests/p/multi-world-persistence https://feedback.vrchat.com/persistence/p/cross-world-persistency https://feedback.vrchat.com/feature-requests/p/vrchat-provided-world-data-persistence PS: For anyone concerned about the cost -> VRChat needs revenue to operate, and since this feature is limited to Creator Economy users, they can earn money that will quickly covering the cost.
1
Add "local" per-world data saving options.
Now that Persistence is in the game, it would make sense to give us the ability to also locally store data that isn't game-breaking if it's lost, but that would benefit from not being constrained by networking limits (and not taking up the limited persistence space). Some examples would be: Settings for local-only state in the world. Precomputed textures/models for dynamic content, such as character customization. The game already does this for per-avatar parameters. And of course we wouldn't be able to choose where to store it for security reasons, but make it similar to PlayerData in that we only get to say what we want to save, but expanded a bit on data-types, such as textures & JSON. (and ability to only load the data from specific keys when you need the data, not all of it at once). Having this capability could reduce networking needs, especially for more ambitious worlds and open up more gameplay possibilities. Understandably there would still need to be limits on how much data could be stored, but it could certainly be much, much more than the 100KB each of Player and PlayerObjects, say 2GB for PC only worlds and 400MB for Quest, with limits that could rise as min-hardware levels change. (and creator can fallback to regenerating content instead if local-space limits are hit). Would probably want to display how much local-storage a world is using when a person clicks on the world in the menu and option to sort worlds by data usage, so people can identify junk worlds they might join that try to fill the space for no reason just to annoy, then user can hit the "Clear data" button for that world which already exists (or better have a button also for local-data specifically in case they are just trying to free space).
0
Load More