BorService - A simple module for things I think should be built-into Roblox


Join our Discord Get it on Roblox Check out my channel Check out our channel Follow us on Twitter

BorService (I couldn’t think of any other name sorry) is a currently server-sided module (I might add client functions soon) I made that has functions I think should be built-in, such as getting the local player from the server by just running a function, and playing audios locally through a server script so only the local player can hear the audio. I know this is really easy to do without any module, but this is just to make this type of process easier if you don’t want to set up functions and stuff in both the client and server for one thing, for example.

Get data from the Roblox API one simple function! (Make sure to SELF HOST your proxy like shown below the API in this post for the Roblox API function, as I cannot guarantee safety with publicly hosted ones!)


API

BorService API

Referencing BorService

local ServerScriptService = game:GetService("ServerScriptService");
local BorService = require(ServerScriptService:WaitForChild("BorService", 30));

Get LocalPlayer from the server

local player : Player = BorService:GetLocalPlayer();

Play sound on the client through a server script

BorService:PlayLocalSound(SoundObject) -- SoundObject == instance (sound)

Request data from Roblox API

local DataTable = BorService:APIGet(endpoint); -- endpoint == string (ex: "/users/v1/users/1")

Self hosting your own proxy for Roblox API usage

Hosting a proxy

For this guide, we’ll be using LegoProxy by @TsuuNeko.

First, head over to https://github.com/PyTsun/LegoProxy and click the “Deploy to Deta” button.

Next, sign up to deta. Do not use your Roblox information!

After that, click the blue deploy button.

Lastly, click the link to your hosted proxy (the one I censored):

If you ended up here, congratulations! You have finished hosting your own proxy.

Now, in the configurations module, set UsesRobloxAPI to true and set the RobloxAPI_URL to your self-hosted proxy (the link you just clicked)

Next, enable HttpService in your game’s settings:

And now, congratulations! You finished setting up LegoProxy with BorService. Now, you can get data from the Roblox API through the BorService APIGet function in the API.


Lastly, I need you guys to tell me what you think of BorService and please, if you got any, give me ideas for new features. I really can’t come up with any, hence why publishing this module with only 3 functions.

Comment your ideas below! :smile:

1 Like

Honestly, I have a poor impression of this module.

function BorService:PlayLocalSound(Sound : Sound)

	repeat task.wait() until ReplicatedStorage:FindFirstChild("BorService")

Why are you checking if the module exists from a function inside the module?
Why are you checking in replicated storage for a module we were told to put in serverscriptstorage?

Players.PlayerAdded:Connect(function(player)
	
	script..OnInvoke = function()
		
		return player
		
	end
	
end)

Why are you trying to call OnInvoke on a script???
Why are you using two periods???
What even is the point of getting the “local player” form the server???

5 Likes

You can’t get the ‘local player’ from the server… because there is no local player.

What does BorService:GetLocalPlayer(); actually do?

1 Like

I did not notice this while working on the module, but thanks for pointing it out, I’ll change it in the next release.

I might have just gotten confused, as I had to rush the Local Sound function since it was almost 1 in the morning and I didn’t really want to continue the next day so I just tried to make it all in the same day. I’m very sorry about this…

This is a Roblox script editing glitch, the script is attempting to call OnInvoke on the Bindable Function inside of it, but my code referencing it might have not been saved. Last time I checked, it wasn’t like that, so that’s probably why.

So if you want to do stuff regarding the player in the server without calling PlayerAdded or getting it from the client you just get it from the function

1 Like

It calls onInvoke on a BindableFunction inside of a script inside of the module (that sounds weird, sorry about that), and the script just has a PlayerAdded code that checks when the function is invoked, and then returns the player object

Little confused about this. Why couldn’t you just grab the player directly from game.Players? Wdym by “getting it from the client”?

1 Like

I’m gonna start working on fixing the errors pointed out by @screenswitch1, thanks for letting me know about them!

But couldn’t you do the same thing with this?

game.Players:GetPlayers()[1]

Because I’m pretty sure on the server you can’t do game.Players.LocalPlayer (this is a server module)

with getting it from the client I meant like invoking a remote function to get the player from the client then send it back

So it returns the newest player in the server? or am I understanding wrong?

Even still - there is no ‘local player’ on the server and the function name could probably be a named a bit better.

1 Like

I’ve never heard of anyone needing to access the local player from the server in the way you’re describing it. You should just say this module simplifies remote communication to play sounds on the client from the server.

I’ve never heard of this method, but thanks for letting me know - Just a question though, does the [1] mean it’ll grab the first player it finds? If so wouldn’t it just grab the first player that joined? (Bare with me on that one, I’m not very advanced with scripting :P)

:GetPlayers() returns an array of players (I think it’s just called a table in roblox) so [1] returns the first index of the table (ie. the first player)

2 Likes

Yes, that’s a better way to put it, the thing is I’m planning to add features that not only simplify server-client or client-server communication, but like the function to get data from the Roblox API, just let you do things that you’d be able to do normally in a simpler way

2 Likes

Alright, thanks; I’ll check that out a bit and I’ll probably implement it in the next release if it works well :+1:

2 Likes

:warning: Temporarily made module off-sale because it’s a bit broken atm, next release will include bug fixes for everything. Thank you to Screenswitch1 for pointing out the bugs with the module! :warning:

Hey, just checked the part of the code you mentioned, I wanna point out that this isn’t checking for the module, it’s checking for the BorService folder that is created in ReplicatedStorage in the initialize script (I’ll change it to BorServiceReplicated though to make it easier to understand so this doesn’t get mixed up later on). Hope this clears that part out :+1:
image

I like the idea that you wanna contribute but to be honest this module is completely useless as it doesn’t really simplify advanced processes.

2 Likes

In addition to my original response this module feels like it was done by an inexperienced/new developer. If you are an inexperienced/new developer my biggest advice is to look at quality free models such as FE gun kit and game leaks because they can provide amazing insight.

The module was fixed and placed back onsale.