BlueJay - Twitter Codes made easy

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.

1 Like

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.

2 Likes

I’m sorry, I just made one post giving an alternative to under 16s.

2 Likes

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.

3 Likes

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.

3 Likes

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.

2 Likes

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)

2 Likes

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”

3 Likes

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.

1 Like