I’m not sure about the new RunContext feature but roblox’s default replication system never sends serversided code to the client. You can check any leaked place and you’ll see that server scripts won’t have content or there will be a comment saying that the exploit couldn’t decompile it’s bytecode.
Your request has been added! You can now name modules what ever you’d like. Just make sure that it ends with the type of module. For example, CameraClient, WeaponClient, CameraServer, and WeaponServer. The string detection is only checking the end of the string.
Scripts set to the Client RunContext will only send byte code to the client, while if it’s set to the server it will only be sent to the server.
Hey! Would you mind explaining how I would implement something where a system would run a function when a RbxSignal goes out? Such as a .PlayerAdded event in my case. Formatting and logic-wise.
local signal = BULLFROG.createBindableLink()
-- I'm assuming your using a bindable event
-- the "..." are your arguments
signal.Event:Connect(function(...)
-- do stuff
end)
-- To fire a signal you just do this
-- the "..." are your arguments
signal:Fire(...)
Yea @shr2mp did a really good job of explaining it! Thank you so much! You can setup Events and Bindables the way that they explained.
Hello, I’ve gotten interested in this framework and I’m considering using it. I really like the organization it gives by using the RunContext feature, and I like how it’s pretty simple to understand, unlike other frameworks. Anyways, I’ve got a couple of questions before I use it:
-
How would I go about making tools using the provided example setup? I’m guessing that you would need to make a new system for every unique tool, but I would like to know just in case I do it wrong or inefficently.
-
What are the submodules mentioned in the “Systems” section of the documentation? I didn’t find any further explanation of the submodules in there.
-
Will this framework ever get more complex? I like how simple this framework is, so I hope that the future updates will keep the simplicity.
-
Could you provide an example place that uses this framework that has random examples such as tools, NPCs, or a tycoon money generator?
Thank you! Ill go ahead and answer some of your questions.
-
There are many ways actually that you could create tools. You could do a class based system where you have a melee weapons system and a ranged weapon system. You could do a table and determine the tool type at run time, there are hundreds of ways.
-
Submodules are just sub modules of the client and server. I will need to add to the GitHub repo some details about this. It basically just allows for more finer organization and breaking down of scripts. If youve ever heard of ECS or Entity-Component-Systems then its similar to that.
-
Im trying to keep this framework as simple as possible. I too thought other frameworks were super overkill for what they are trying to accomplish. My goal with this framework was to be as simple as Love2D. Provide you the basics and let you get creative.
-
This is a wonderful idea! I will work on creating a place that is public and it can have examples on how everything would tie together!
That would be a right answer if all the game’s actual code wouldn’t be found on module scripts in replicated storage which the client is actually able to see.
Right, I have since updated it to function differently. It is far more secure now. I have actually developed multiple small games using Bullfrog. It does some stuff to delete the server side code from the client.
What makes this better than Knit?
Thats up to you to decide. I created this kind of for myself. I found Knit to be really heavy and it comes with a lot of dependencies, such as promises for example. I have nothing against promises, but I wanted something more lightweight. Thats where I came up with Bullfrog. It has zero dependencies and the Link system is just a simple wrapper for Remote Events and Functions. There is nothing complicated about it, its must easier to just jump in and start. I would also like to mention Bullfrog is specifically designed so that all of your code can be placed inside of one place, ReplicatedStorage. Bullfrog does some stuff on startup to prevent clients from seeing the server code. Also having everything in one place makes using a Rojo workflow a lot easier. Nothing is disjointed across from StarterPlayer to ServerScriptService. Everything is inside a systems folder. It just makes things a lot more organized!
This sounds interesting… Why did you decide to name it Bullfrog? It’s a cute name.
I see on bullfrog you store the value returned by systems modules on a table, so you technically could then destroy the modules to be able to hide the code from exploiters using “Dex” and things like that, since you already have saved the value there would be no need to keep the modulescript there, of course this would require constant memory usage since you shouldn’t be able to remove the systems from storage. At the cost of using more memory you could hide all the code from all your systems.
Interesting I like it, I do agree with you, Knit is a really heavy framework there’s a lot of stuff that I get lost using Knit.
create a model with the domain roblox.com
How does this use more memory? And, I’m fairly sure that exploiters could just view the contents of the table anyways. This would only work on the server.
I have an obsession with Frogs and Toads!
The way its currently setup is upon startup each Client runs through and deletes any of the server code from that client specifically. I am trying to think of a more secure way to do this better, but it works for now. Only downside is the cleanup wont run until the module is required. So delayed requiring of the Bullfrog module on the client can lead to a possible security issue.
What do you mean? Like a public module?
what are you on about? there are a few features only like services, components, etc. and it literally states its an lightweight framework.
sorry for the bump
Its got lots of dependencies built in that aren’t necessarily needed. Such as promises, easy network, etc. Plus lightweight is a general term and often leaves much up to interpretation. Just like any word really. The word lightweight may mean something different to a different person with a different perspective. I know that to me, something that is lightweight may mean it has zero dependencies and the source code can be read through in an afternoon, probably less.