I mean it’s good to practice making something like this, but from a practical standpoint no one would spend the time setting this up lol
Or you could just HttpService with a website that holds all the codes (or DataStores)
That’s literally what I’m doing, but I’m making it available for anyone to use without prior knowledge of setting up a webserver.
Google Docs can be used easily for storing files that can be requested via HttpService.
Yes but again that then requires a lot of setup on the game. Plus, you should never use something like Google Docs for something on Roblox.
Why?
It takes one line to get the codes and then you do have to implement you own codes system.
Hello there,
I believe the point of this product is to reduce the amount of work required to set up a Twitter Code system, as a way for developers of all levels of experience to utilize the product.
Yes, I’m sorry however i was just saying this as it is a better system for under 16s to use.
Yes, and as I’ve said, I am actively working to fix this age barrier. We picked 16+ as many countries in the EU have differing ages, with 16 being the highest.
Totally get it! Just seems as you’re hating on the product more than providing useful feedback. Also, I believe they’re working on a solution so people 13+ are able to utilize the platform shortly.
I’m sorry, I just made one post giving an alternative to under 16s.
Late reply, but I must say I believe BlueJay is adding more products from the looks of their website, so I think this is their first product out of a few! And in my opinion, it’ll be helping a lot of smaller developers who aren’t as experienced or bothered to script a custom system.
I’ve told this to many people. Using services such as Trello, Google Docs, Google Spreadsheets, or any other service that is meant specifically for simpler project management is not a database.
You should use a real database such as MySQL, NoSQL, or something like MongoDB/Firebase.
I’ll say this in the best way I can:
THANK YOU
Doesn’t make it useful and using an array of codes is much easier and much more reliable. As useful as you want to make “BlueJay” sound, it doesn’t justify the fact that it’s insanely overkill and has no benefits over the typical Array code storage.
This looks nice and simple for people that aren’t very experienced in scripting.
There is one issue though that bothers me quite a bit, in the code example on the website, the client is responsible for validating the code, and the server just gives money based on the remote event.
Any inexperienced developer will just simply copy paste the code and modify it to their need, which lets exploiters have full access to redeeming any code they want as long as they know how the codes are set up (which they can find out by sending and intercepting any public code).
Also, roblox lua includes string:split(delimeter), so no need for the large string splitting function.
Actually no! The client API sends a request through a RemoteFunction, which is then parsed on the server.
Odd, I tried doing that. Thanks!
Quick update everyone!
I have finally changed the age requirement from 16 to whatever your country requires (US/Canada is 13+, Germany is 16+, etc)
Privacy Policy is also updated.
(CC @R0bl0x10501050, @Ty_Scripts)
On the page that shows example code you have this snippet here
script.Parent.Buttons:WaitForChild("Confirm").MouseButton1Click:connect(function()
local redeemed, codeChanged = BlueJay.RedeemCode(CodeText.Text)
if redeemed then
script.Parent.Buttons.Confirm.Text = 'Redeemed!'
TestRemote:FireServer(codeChanged)
else
script.Parent.Buttons.Confirm.Text = 'Error Redeeming!'
end
wait(5)
script.Parent.Buttons.Confirm.Text = 'CONFIRM'
end)
as you can see, the client first calls
BlueJay.RedeemCode(CodeText.Text)
Which returns redeemed and the internal code from the website
The client then sends the internal code onto the server where it parses it
Remote.OnServerEvent:Connect(function(player, code)
-- Parse the code
-- Ex: coins_200000 parses to 200,000, which then gets added to the leaderstats Money.
local value = split(code.value, '_')
if value[1] == 'coins' then
player.leaderstats.Money.Value += tonumber(value[2])
end
end)
Using an exploit a client could simply call the remote and send any code they wanted, they could send for eample “coins_10000000000”
Thank you so much for notifying me of this issue!
I have proceeded to fix it by modifying the example code:
local BlueJay = game.ServerScriptService:WaitForChild("BlueJay")
local MainModule = BlueJay:WaitForChild("MainModule")
local BlueJayAPI = require(MainModule.Scripts.Server.API)
local TestRemote = game.ReplicatedStorage.Test
TestRemote.OnServerEvent:Connect(function(player, code)
if BlueJayAPI:HasRedeemedCode(code, player) then
local value = code.value:split('_')
if value[1] == 'coins' then
player.leaderstats.Money.Value += tonumber(value[2])
end
end
end)
The documentation is also updated.