DataStore Editor Plugin

I’ve been working on a DataStore Editor plugin for the last few days. It’s not 100% done, but it’s seen a lot of progress.

This is essentially a CRUD (Create/Read/Update/Delete) application plugin for DataStores from Studio.

The coolest part of the plugin is the ability to navigate through tables! I had a lot of fun making that part of the plugin. It was definitely challenging, but worth the challenge. You can load (or create) tables from the DataStore and view/edit them in a table editor built-in to the plugin.

Link to plugin:
http://www.roblox.com/DataStore-Editor-Under-Development-item?id=185867332

Screenshot of Angels Fifteen player data from Studio:

Video Demo:

It would be very nice if it supported OrderedDataStores, and had the ability to list them.
(Using that SortedAsync method)

It’s sad that ODS only support numbers as values, or else I would always use that, just for the “get all keys”-feature

Anyone else find it inconvenient that you can only iterate through OrderedDataStores? The only reason I use OrderedDataStores is because I can iterate through them and collect data, such as a ban list, returning the names/userIds of those who are banned (key) and any detail for that key (value). What I mean by iterate is to be able to go through an entire datastore using only 1 Get() function like :GetSortedAsync does with OrderedDataStores. Regular Data Stores can’t do this, or can they? Couldn’t find anything on the wiki. It’s inconvenient because I’m then forced to use integers. I have to use a Legend to decode what each integer means, like

oneLegend = {
[“1”] = “Hack Exploiting”,
[“2”] = “Glitch Exploiting”,
[“3”] = “Player Abuse”
}

When I could just use the words themselves.

Awesome plugin though crazyman, I’ve been seeing some real talent in plugins lately on the forums. These should be installed into default studio, makes for another good gadget for developers to use.

Whoops. I totally neglected to add support for that! I’ll have to add in support for that somehow at some point.

Sadly no way to do that :frowning: I really wish we could so that I could write a search query for this, rather than a single key query.

Is there a way to use the MarketPlaceService to check if the person owns the place and if it is a place? Attempting to breaks the plugin.

Hmmmmm

I have a really cool idea for this, and I’m in need of a quick challenge as I’m currently at the bottom of a creativity block. Would you be okay with me making a similar plugin?

[quote] Hmmmmm

I have a really cool idea for this, and I’m in need of a quick challenge as I’m currently at the bottom of a creativity block. Would you be okay with me making a similar plugin? [/quote]

Go for it

Well I must say that is awesome. Good work. This is definitely one of the things that annoyed me about Data Stores

[quote] Anyone else find it inconvenient that you can only iterate through OrderedDataStores? The only reason I use OrderedDataStores is because I can iterate through them and collect data, such as a ban list, returning the names/userIds of those who are banned (key) and any detail for that key (value). What I mean by iterate is to be able to go through an entire datastore using only 1 Get() function like :GetSortedAsync does with OrderedDataStores. Regular Data Stores can’t do this, or can they? Couldn’t find anything on the wiki. It’s inconvenient because I’m then forced to use integers. I have to use a Legend to decode what each integer means, like

oneLegend = {
[“1”] = “Hack Exploiting”,
[“2”] = “Glitch Exploiting”,
[“3”] = “Player Abuse”
}

When I could just use the words themselves. [/quote]

Uh, why not just do something like

thingy:UpdateAsync("banned",function(old) --ban user old[userIdHere]="Reason here" return old end

To iterate through all the banned players, simply use call pairs on the table returned from GetAsync.

If you need to store the name and id AND reason all in the same key for whatever reason (which you shouldn’t, btw, it’s rather silly since we can just get the username from the id anyways, and the usernames can change) you can set old[useridHere] to something like {usernameHere,reasonHere} or even do something like old[userIdHere…“:”…usernameHere]=reasonHere to store both in one key.

But don’t do that.

[quote] Anyone else find it inconvenient that you can only iterate through OrderedDataStores? The only reason I use OrderedDataStores is because I can iterate through them and collect data, such as a ban list, returning the names/userIds of those who are banned (key) and any detail for that key (value). What I mean by iterate is to be able to go through an entire datastore using only 1 Get() function like :GetSortedAsync does with OrderedDataStores. Regular Data Stores can’t do this, or can they? Couldn’t find anything on the wiki. It’s inconvenient because I’m then forced to use integers. I have to use a Legend to decode what each integer means, like

oneLegend = {
[“1”] = “Hack Exploiting”,
[“2”] = “Glitch Exploiting”,
[“3”] = “Player Abuse”
}

When I could just use the words themselves. [/quote]

Uh, why not just do something like

thingy:UpdateAsync("banned",function(old) --ban user old[userIdHere]="Reason here" return old end

To iterate through all the banned players, simply use call pairs on the table returned from GetAsync.

If you need to store the name and id AND reason all in the same key for whatever reason (which you shouldn’t, btw, it’s rather silly since we can just get the username from the id anyways, and the usernames can change) you can set old[useridHere] to something like {usernameHere,reasonHere} or even do something like old[userIdHere…“:”…usernameHere]=reasonHere to store both in one key.

But don’t do that.[/quote]

What I do is just throw all my data into a table anyway. That’s also why I focused on making the table editor on this plugin a highh importance.

[quote] [quote=“Dinizterz” post=112053]Anyone else find it inconvenient that you can only iterate through OrderedDataStores? The only reason I use OrderedDataStores is because I can iterate through them and collect data, such as a ban list, returning the names/userIds of those who are banned (key) and any detail for that key (value). What I mean by iterate is to be able to go through an entire datastore using only 1 Get() function like :GetSortedAsync does with OrderedDataStores. Regular Data Stores can’t do this, or can they? Couldn’t find anything on the wiki. It’s inconvenient because I’m then forced to use integers. I have to use a Legend to decode what each integer means, like

oneLegend = {
[“1”] = “Hack Exploiting”,
[“2”] = “Glitch Exploiting”,
[“3”] = “Player Abuse”
}

When I could just use the words themselves. [/quote]

Uh, why not just do something like

thingy:UpdateAsync("banned",function(old) --ban user old[userIdHere]="Reason here" return old end

To iterate through all the banned players, simply use call pairs on the table returned from GetAsync.

If you need to store the name and id AND reason all in the same key for whatever reason (which you shouldn’t, btw, it’s rather silly since we can just get the username from the id anyways, and the usernames can change) you can set old[useridHere] to something like {usernameHere,reasonHere} or even do something like old[userIdHere…“:”…usernameHere]=reasonHere to store both in one key.

But don’t do that.[/quote]

What I do is just throw all my data into a table anyway. That’s also why I focused on making the table editor on this plugin a highh importance.[/quote]

That’s a thing you probably shouldn’t do either, because if you ever need to listen to OnUpdate, you’ll have lots of meaningless data filling up your request limit. If I want to listen to OnUpdate of, say, a list of active “servers” (using CreatePlace), I don’t want to have to listen to EVERY SINGLE UPDATE EVER.

So yeah, you should put them into keys that are relevant to, y’know, the data itself.

[quote]
That’s a thing you probably shouldn’t do either, because if you ever need to listen to OnUpdate, you’ll have lots of meaningless data filling up your request limit. If I want to listen to OnUpdate of, say, a list of active “servers” (using CreatePlace), I don’t want to have to listen to EVERY SINGLE UPDATE EVER.

So yeah, you should put them into keys that are relevant to, y’know, the data itself. [/quote]

Well, it’s a table of data per player. But yes, I agree that it hurts when trying to listen for updates in the data or not. To fix that, I just built an API around the player data to listen for those changes.