I have made another PR updating the Deploy on Railway button. It would be great if you could review it @okfalse.
How do I make it as efficient as this game PLS DONATE 💸 - Roblox?
The way the gamepasses and clothes loaded is lightning fast and it’s probably to do with how they coded their proxy server but idk how web codes work
I coded their proxy for them
Their secret, however, is that they start loading your shirts and gamepasses as soon as you start holding down the claim button. That way, they’re already loaded once you claim the booth.
This is pretty cool @okfalse, and I want to use a proxy, but not this. I am going to run a game that requires tons of requests, and I don’t want roproxy to randomly fail. Any way you could teach me to make a proxy?
hey @okfalse im trying to send a request to https://games.roproxy.com/v1/games/9230434873/servers/Public?limit=10 and I keep getting this error:
but when I go to the actual roblox site I get an actual response.
idk if Im doing something wrong, but hopefully we can find a fix
also this proxy doesn’t seem to support the Premium features api
When I send to roproxy(url) it says that it’s not found.
But when I do to the Roblox Api it works:
The /v1/games/…/servers/… endpoints have been disabled as they were being used for tools like RoSearcher. I have no intention of re-enabling them at this time, but feel free to host your own instance of RoProxy Lite
dang that sucks. I remember those working a few months ago. Really sad how a few people can ruin everything for everyone
also one thing I’d like to mention is that the premuim features API doesn’t work with roproxy. If you go here you get an error. But when you go there on the actual roblox site it’ll actually function.
will fix that endpoint shortly
How to fix the rate limit for Roproxy Lite?
RoProxy Lite (usually, depending on where you’re hosting it) uses a single IP. You can increase ratelimits a bit by providing a cookie with requests, but if that’s still not enough feel free to contact me and we can discuss something purpose-built.
Also just to add more information to my last comment, this is what happens if there’s too many people in my game.
I think what happens is that I Immediately load player’s gamepasses on spawn and the error appears.
I could just load player’s gamepasses when they claim a stand
but I still can’t figure out how to make it efficient if there’s 1k player’s playing in my game.
this is the script I got from someone’s community server and made my script based on.
local clothingUrl = "https://catalog.roproxy.com/v1/search/items/details?Category=3&CreatorTargetId=%s&CreatorType=%s&Limit=30&Cursor=%s"
local gamepassesUrl = "https://games.roproxy.com/v1/games/%s/game-passes?sortOrder=Asc&limit=100&cursor=%s"
local gamesUrl = "https://games.roproxy.com/v2/%s/%s/games?sortOrder=Asc&limit=50&cursor=%s"
local function getClothing(targetId, targetType, cursor, clothing)
cursor = cursor or ""
clothing = clothing or {}
local requestUrl = clothingUrl:format(targetId, targetType, cursor)
local success, result = pcall(getAsync, HTTPService, requestUrl)
if success then
if result then
local success2, result2 = pcall(jsonDecode, HTTPService, result)
if success2 then
if result2 then
for _, clothingItem in ipairs(result2.data) do
if not table.find(clothing, clothingItem.id) then
table.insert(clothing, clothingItem.id)
end
end
cursor = result2.nextPageCursor
if cursor then
return getClothing(targetId, targetType, cursor, clothing)
else
return clothing
end
end
else
warn(result2)
task.wait(1)
return getClothing(targetId, targetType, cursor, clothing)
end
end
else
warn(result)
task.wait(1)
return getClothing(targetId, targetType, cursor, clothing)
end
end
local function getGamepassesRecursive(gameId, cursor, gamepasses)
cursor = cursor or ""
gamepasses = gamepasses or {}
local requestUrl = gamepassesUrl:format(gameId, cursor)
local success, result = pcall(getAsync, HTTPService, requestUrl)
if success then
if result then
local success2, result2 = pcall(jsonDecode, HTTPService, result)
if success2 then
if result2 then
for _, gamepassItem in ipairs(result2.data) do
if not table.find(gamepasses, gamepassItem.id) then
table.insert(gamepasses, gamepassItem.id)
end
end
cursor = result2.nextPageCursor
if cursor then
return getGamepassesRecursive(gameId, cursor, gamepasses)
else
return gamepasses
end
end
else
warn(result2)
task.wait(1)
return getGamepassesRecursive(gameId, cursor, gamepasses)
end
end
else
warn(result)
task.wait(1)
return getGamepassesRecursive(gameId, cursor, gamepasses)
end
end
local function getGroupsRecursive(userId)
local userGroups = {}
local success, result = pcall(getGroupsAsync, groups, userId)
if success then
if result then
for _, groupItem in ipairs(result) do
if groupItem.Rank == 255 then
if not table.find(userGroups, groupItem.id) then
table.insert(userGroups, groupItem.Id)
end
end
end
return userGroups
end
else
warn(result)
task.wait(1)
return getGroupsRecursive(userId)
end
end
local function getGames(targetId, targetType, cursor, games)
cursor = cursor or ""
games = games or {}
local requestUrl = gamesUrl:format(targetType, targetId, cursor)
local success, result = pcall(getAsync, HTTPService, requestUrl)
if success then
if result then
local success2, result2 = pcall(jsonDecode, HTTPService, result)
if success2 then
if result2 then
for _, gameItem in ipairs(result2.data) do
table.insert(games, gameItem.id)
end
cursor = result2.nextPageCursor
if cursor then
return getGames(targetId, targetType, cursor, games)
else
return games
end
end
else
warn(result2)
task.wait(1)
return getGames(targetId, targetType, cursor, games)
end
end
else
warn(result)
task.wait(1)
return getGames(targetId, targetType, cursor, games)
end
end
local function getAssets(userId)
local sellableAssets = {}
local userClothing = getClothing(userId, 1)
local userGames = getGames(userId, "users")
local userGamepasses = {}
for _, userGameId in ipairs(userGames) do
local userGameGamepasses = getGamepassesRecursive(userGameId)
for _, userGameGamepass in ipairs(userGameGamepasses) do
table.insert(userGamepasses, userGameGamepass)
end
end
local userGroups = getGroupsRecursive(userId)
local groupsClothing = {}
local groupsGamepasses = {}
for _, groupId in ipairs(userGroups) do
local groupClothing = getClothing(groupId, 2)
for _, groupClothingId in ipairs(groupClothing) do
table.insert(groupsClothing, groupClothingId)
end
local groupGames = getGames(groupId, "groups")
for _, groupGameId in ipairs(groupGames) do
local groupGameGamepasses = getGamepassesRecursive(groupGameId)
for _, groupGameGamepass in ipairs(groupGameGamepasses) do
table.insert(groupsGamepasses, groupGameGamepass)
end
end
end
for _, userClothingId in ipairs(userClothing) do
table.insert(sellableAssets, userClothingId)
end
for _, groupsClothingId in ipairs(groupsClothing) do
table.insert(sellableAssets, groupsClothingId)
end
for _, groupsGamepassesId in ipairs(groupsGamepasses) do
table.insert(userGamepasses, groupsGamepassesId)
end
return sellableAssets, userGamepasses
end
You shouldn’t be sending that many requests from your game in the first place. Recursively fetching games, groups, group games, gamepasses, group clothing etc. is sure to make you hit Roblox’s 500/min HTTPService limits. You’ll want an external service fetching all that data and sending it back in a single request.
Even then you certainly won’t be able to handle anywhere near 1000 players with a single IP, you’ll want to set up some form of proxies.
I really don’t know a lot about proxy servers but basically, I need to make multiple proxies, convert the script then put it in a proxy server and make a script that requests the proxy server using only the player’s userid?
Not really understanding your reply - I’m suggesting you create an API that does what your script is doing. You might be sending few enough requests to just send it through Cloudflare workers and use their small pool of IPs, otherwise you’ll want to write something utilizing a proxy provider like webshare.
okay so how do we get around that and make it so we can access that info