Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7a6e36e
Revert "Fix invalid admin level giving no warning" (#1872)
Dimenpsyonal Apr 2, 2025
92bc43a
Update Core.luau
coasterteam Apr 2, 2025
b959a3d
Expand DS blacklist
Dimenpsyonal Apr 5, 2025
1e56923
Update Core.luauRemouve double declaration, freeze PDKB
Dimenpsyonal Apr 5, 2025
d64c1b1
Update DataStore encoding
Dimenpsyonal Apr 5, 2025
cfb4394
Disable code execution
Dimenpsyonal Apr 6, 2025
62d3e2b
Use a DS whitelist instead of blacklist
Dimenpsyonal Apr 6, 2025
6038432
Fix table freeze syntax
Dimenpsyonal Apr 6, 2025
b637cc9
Change name from ";fix" to ;resetlighting (#1873)
WalkerOfBacon Apr 6, 2025
2f627db
Update changelog to v267
Dimenpsyonal Apr 11, 2025
7095489
Update Version model
Dimenpsyonal Apr 11, 2025
d0e18cb
Update plugin documentation to include :Connect (#1875)
StayBlue Apr 11, 2025
31a6ec5
Move shared to MainModule (#1689)
ccuser44 Apr 11, 2025
cd99c37
Fix quotes
Dimenpsyonal Apr 11, 2025
053ad57
Move shared files to MainModule (#1878)
Dimenpsyonal Apr 11, 2025
3049681
Fix moving of shared folder bricking Adonis (#1893)
ccuser44 Apr 30, 2025
f6441ae
Fix Unity Output Not Displaying (#1897)
kaiserandaxl May 8, 2025
9853c1b
Make :clientscript only work when CodeExecution is on (#1896)
WalkerOfBacon May 8, 2025
1abfb79
Made all asset ids work on capes and particles (#1895)
krampuszc May 8, 2025
b47ec41
Add `:back` alias to `:return` (#1894)
ccuser44 May 9, 2025
a2f4a86
;view persists when the target user respawns (#1880)
WalkerOfBacon May 15, 2025
829eca4
;sword using custom damage (#1881)
WalkerOfBacon May 15, 2025
6f6deff
Fix backwards compatibility for command prefix (#1888)
ccuser44 May 15, 2025
9fc55bf
Move legacy `Settings.CustomRanks` conversion to misc features comman…
ccuser44 May 15, 2025
4d2401f
Fix self-view causing disallowed content URL in CoreGui detection to …
xs4u May 15, 2025
b5a74d9
Update Changelog
Dimenpsyonal May 15, 2025
1933c7d
Fix Console not showing if theme has custom Console (#1902)
kaiserandaxl May 26, 2025
ad99193
Undo core table freezing (#1892)
ccuser44 May 27, 2025
6cc09eb
Dump Adonis client logs on studio if debug mode is on (#1882)
ccuser44 May 27, 2025
89dedc8
Update Changelog
Dimenpsyonal May 27, 2025
29cf66e
Remove whitelist
Dimenpsyonal May 27, 2025
f582ac2
Fix bots sometimes not working (#1904)
ccuser44 May 29, 2025
9542d68
Misc Fixes and improvements (#1903)
ccuser44 May 29, 2025
0251e38
v267 update
Dimenpsyonal May 29, 2025
b57c8ca
Make server shutdown use system message title (#1889)
ccuser44 Jun 1, 2025
1e2eddf
Create copilot-instructions.md
Dimenpsyonal Jun 2, 2025
f142dbb
Add "Keep Window Width on Minimize" setting to preserve GUI window wi…
Copilot Jun 6, 2025
c3cbcd4
Publish v267
Dimenpsyonal Jun 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This is a Roblox admin system, which therefore uses Luau. Therefore make sure to optimise for Luau – generally, using task.wait() instead of wait(), and interpolated strings instead of concatenation.
4 changes: 2 additions & 2 deletions Loader/Config/Plugins/Server-Example Plugin.luau
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
PlayerJoined will fire after the player finishes initial loading
CharacterAdded will also fire after the player is loaded, it does not use the CharacterAdded event.

service.Events.PlayerAdded(function(p)
service.Events.PlayerAdded:Connect(function(p)
print(`{p.Name} Joined! Example Plugin`)
end)

service.Events.CharacterAdded(function(p)
service.Events.CharacterAdded:Connect(function(p)
server.RunCommand('name', plr.Name, 'BobTest Example Plugin')
end)

Expand Down
2 changes: 1 addition & 1 deletion Loader/Config/Settings.luau
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ settings.CommandFeedback = false -- Should players be notified when commands wi
settings.CrossServerCommands = true -- Are commands which affect more than one server enabled?
settings.ChatCommands = true -- If false you will not be able to run commands via the chat; Instead, you MUST use the console or you will be unable to run commands
settings.CreatorPowers = true -- Gives me creator-level admin; This is strictly used for debugging; I can't debug without full access to the script
settings.CodeExecution = true -- Enables the use of code execution in Adonis; Scripting related (such as ;s) and a few other commands require this
settings.CodeExecution = false -- Enables the use of code execution in Adonis. Scripting related (such as ;s) and a few other commands require this
settings.SilentCommandDenials = false -- If true, there will be no differences between the error messages shown when a user enters an invalid command and when they have insufficient permissions for the command
settings.OverrideChatCallbacks = true -- If the TextChatService ShouldDeliverCallbacks of all channels are overridden by Adonis on load. Required for slowmode. Mutes use a CanSend method to mute when this is set to false.

Expand Down
5 changes: 4 additions & 1 deletion Loader/Loader/Loader.server.luau
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,17 @@ else
warn(`Failed to load Adonis MainModule {moduleId} due to {module}! If this does not work please purchase the Adonis MainModule to your inventory. Using backup method...`)
yxpcall(function()
module = loadModuleAsset(moduleId)
success = true
end, function(reason)
warn(`Failed to load Adonis mainmodule {moduleId} via :LoadAsset() method due to {reason}! Loading the backup MainModule...`)
yxpcall(function()
module = assert(require(data.Backup), "Backup module returned invalid values!")
success = true
end, function(reason)
warn(`Failed to load Adonis backup MainModule {data.Backup} due to {reason}! If this does not work please purchase the Adonis backup MainModule to your inventory. Using backup method...`)
yxpcall(function()
module = loadModuleAsset(data.Backup)
success = true
end, function(reason)
module = nil
warn(`FATAL ERROR! Failed to load Adonis backup MainModule {moduleId} via :LoadAsset() method due to {reason}! Adonis can't be booted up! Please contact the Adonis helpers immediately and add both the regular MainModule and the backup MainModule to your user&group inventory!`)
Expand All @@ -217,7 +220,7 @@ else
end)
end

local response = assert(module, "FATAL ERROR! Adonis bootstrap function is missing!")(data)
local response = assert(success and module, "FATAL ERROR! Adonis bootstrap function is missing!")(data)

if response == "SUCCESS" then
if data.Settings and data.Settings.HideScript and not data.DebugMode and not RunService:IsStudio() then
Expand Down
2 changes: 1 addition & 1 deletion Loader/Version.model.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"ClassName": "NumberValue",
"Properties": {
"Value": 266
"Value": 267
}
}
22 changes: 17 additions & 5 deletions MainModule/Client/Client.luau
Original file line number Diff line number Diff line change
Expand Up @@ -139,17 +139,17 @@ local log = function(...)
end

--// Dump log on disconnect
local Folder = script.Parent
local isStudio = game:GetService("RunService"):IsStudio()
game:GetService("NetworkClient").ChildRemoved:Connect(function(p)
if not isStudio then
if not isStudio or Folder:FindFirstChild("ADONIS_DEBUGMODE_ENABLED") then
print("~! PLAYER DISCONNECTED/KICKED! DUMPING ADONIS CLIENT LOG!")
dumplog()
end
end)

local unique = {}
local origEnv = getfenv()
local Folder = script.Parent
setfenv(1, setmetatable({}, { __metatable = unique }))
local startTime = time()
local oldInstNew = Instance.new
Expand All @@ -170,9 +170,10 @@ end

local function logError(...)
warn("ERROR: ", ...)
table.insert(clientLog, table.concat({"ERROR:", ...}, " "))

if client and client.Remote then
client.Remote.Send("LogError", table.concat({ ... }, " "))
client.Remote.Send("LogError", table.concat({...}, " "))
end
end

Expand Down Expand Up @@ -364,7 +365,7 @@ locals = {

log("Create service metatable")

service = require(Folder.Shared.Service)(function(eType, msg, desc, ...)
service = require(Folder.Parent.Shared.Service)(function(eType, msg, desc, ...)
--warn(eType, msg, desc, ...)
local extra = { ... }
if eType == "MethodError" then
Expand Down Expand Up @@ -543,11 +544,20 @@ return service.NewProxy({
data.DebugMode = false
end

log("Adding ACLI logs to the client logs")
if data.acliLogs then
for _, v in data.acliLogs do
log(v)
end
end

log("Clearing environment")
setfenv(1, setmetatable({}, { __metatable = unique }))

log("Loading necessary client values")
client.Folder = Folder
client.UIFolder = Folder:WaitForChild("UI", 9e9)
client.Shared = Folder:WaitForChild("Shared", 9e9)
client.Shared = Folder.Parent:WaitForChild("Shared", 9e9)

client.Loader = data.Loader
client.Module = data.Module
Expand Down Expand Up @@ -578,11 +588,13 @@ return service.NewProxy({
end
end

log("Fomratting chatlogs")
for i, line in ipairs(client.Changelog) do
client.FormattedChangelog[i] = applyColour(line)
end

--// Setup MatIcons
log("Setting up material icons")
do
local MaterialIcons = oldReq(service_UnWrap(client.Shared.MatIcons))
client.MatIcons = setmetatable({}, {
Expand Down
4 changes: 2 additions & 2 deletions MainModule/Client/Core/Functions.luau
Original file line number Diff line number Diff line change
Expand Up @@ -860,7 +860,7 @@ return function(Vargs, GetEnv)
Parent = p;
Name = "Decal";
Face = 2;
Texture = `rbxassetid://{decalId}`;
Texture = `rbxthumb://type=Asset&id={decalId}&w=420&h=420`;
Transparency = 0;
}) else nil

Expand Down Expand Up @@ -1456,7 +1456,7 @@ return function(Vargs, GetEnv)
if decal and decal~=0 then
local dec = service.New("Decal", p)
dec.Face = 2
dec.Texture = `http://www.roblox.com/asset/?id={decal}`
dec.Texture = `rbxthumb://type=Asset&id={decal}&w=420&h=420`
dec.Transparency=0
end
p.Size = Vector3.new(.2,.2,.2)
Expand Down
1 change: 1 addition & 0 deletions MainModule/Client/Core/Variables.luau
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ return function(Vargs, GetEnv)
ParticlesEnabled = true;
CapesEnabled = true;
HideChatCommands = false;
KeepWindowWidthOnMinimize = false;
CanUseEditableImages = false; -- TODO: Pool from FFlag
Particles = {};
KeyBinds = {};
Expand Down
24 changes: 14 additions & 10 deletions MainModule/Client/Plugins/Anti_Cheat.luau
Original file line number Diff line number Diff line change
Expand Up @@ -296,13 +296,16 @@ return function(Vargs)
local screenshotHud = service.GuiService:FindFirstChildOfClass("ScreenshotHud")

for _, container in {Player.Character, service.StarterPack, Player:FindFirstChildOfClass("Backpack")} do
for _, v in ipairs(container:GetChildren()) do
for _, v: Instance in ipairs(container:GetChildren()) do
if v:IsA("BackpackItem") and service.Trim(v.TextureId) ~= "" then
table.insert(coreUrls, service.Trim(v.TextureId))
elseif v:IsA("MeshPart") then
table.insert(coreUrls, service.Trim(v.MeshId))
table.insert(coreUrls, service.Trim(v.TextureID)) -- For some reason, on MeshParts it's TextureID instead of TextureId
end
end
end

if screenshotHud and service.Trim(screenshotHud.CameraButtonIcon) ~= "" then
table.insert(coreUrls, service.Trim(screenshotHud.CameraButtonIcon))
end
Expand All @@ -315,7 +318,7 @@ return function(Vargs)
local rawContentProvider = service.UnWrap(service.ContentProvider)
local workspace = service.UnWrap(workspace)
local tempDecal = service.UnWrap(Instance.new("Decal"))
tempDecal.Texture = "rbxasset://textures/face.png" -- Its a local asset and it's probably likely to never get removed, so it will never fail to load, unless the users PC is corrupted
tempDecal.Texture = "rbxasset://textures/face.png" -- It's a local asset and it's likely to never get removed, so it will never fail to load, unless the user's PC is corrupted
local coreUrls = getCoreUrls()

if not (service.GuiService.MenuIsOpen or service.ContentProvider.RequestQueueSize >= 50 or Player:GetNetworkPing() * 1000 >= 750) then
Expand All @@ -337,14 +340,14 @@ return function(Vargs)
end

hasDetected = true
Detected("Kick", "Disallowed content URL detected in CoreGui")
Detected("Kick", "Disallowed content URL detected in CoreGui: " ..url)
end
end)

tempDecal:Destroy()
task.wait(6)
if not activated then -- // Checks for anti-coregui detetection bypasses
Detected("kick", "Coregui detection bypass found")
if not activated then -- // Checks for Anti-CoreGui detection bypasses
Detected("kick", "CoreGui detection bypass found")
end
end

Expand All @@ -365,7 +368,7 @@ return function(Vargs)
then
Detected("kick", "Content provider spoofing detected")
end

-- // GetFocusedTextBox detection
local textbox = service.UserInputService:GetFocusedTextBox()
local success, value = pcall(service.StarterGui.GetCore, service.StarterGui, "DeveloperConsoleVisible")
Expand Down Expand Up @@ -506,6 +509,7 @@ return function(Vargs)
"run_secure_function"; -- synapse specific (?)
"Kill by Avexus#1234 initialized";
--"FilteringEnabled Kill"; -- // Disabled due to potential of having false flags
"Depricated & Drop Support on"; -- VegaX detection
"Couldn't find target with input:";
"Found target with input:";
"Couldn't find the target's root part%. :[";
Expand Down Expand Up @@ -537,7 +541,7 @@ return function(Vargs)
not service.UserInputService.TouchEnabled
then
if not pcall(function()
if not isStudio and (findService(game, "VirtualUser") or findService(game, "VirtualInputManager")) then
if not isStudio and (findService(game, "VirtualUser") or findService(game, "VirtualInputManager") or findService(game, "UGCValidationService")) then
Detected("crash", "Disallowed Services Detected")
end
end) then
Expand Down Expand Up @@ -712,7 +716,7 @@ return function(Vargs)
if ran then
Detected("crash", "RobloxLocked usable")
end

local function getDictionaryLenght(dictionary)
local len = 0

Expand Down Expand Up @@ -789,7 +793,7 @@ return function(Vargs)
end, function()
Detected("kick", "Tamper Protection 0x16C1D")
end)

if gcinfo() ~= collectgarbage("count") then
Detected("kick", "GC spoofing detected")
end
Expand Down
1 change: 1 addition & 0 deletions MainModule/Client/Plugins/Misc_Features.luau
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ return function(Vargs, GetEnv)
Logs:AddLog("Script", `Attempted to add {ind} to legacy Remote.Unencrypted. Moving to Remote.Commands`)
end
})
client.Folder:SetSpecial("Shared", client.Shared)
Functions.GetRandom = function(pLen)
local random = math.random
local format = string.format
Expand Down
8 changes: 4 additions & 4 deletions MainModule/Client/UI/Default/BubbleChat.luau
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ return function(data, env)

if window then
local box = window:Add("TextBox",{
Text = "Click here or press \";\" to chat";
PlaceholderText = "Click here or press \";\" to chat";
Text = `Click here or press "{client.Functions.KeyCodeToName(Enum.KeyCode.Semicolon.Value)}" to chat`;
PlaceholderText = `Click here or press "{client.Functions.KeyCodeToName(Enum.KeyCode.Semicolon.Value)}" to chat`;
BackgroundTransparency = 1;
TextScaled = true;
TextSize = 20;
})

box.FocusLost:Connect(function(enterPressed)
if enterPressed and service.Player.Character:FindFirstChild('Head') and color and box.Text~='Click here or press ";" to chat' then
if enterPressed and service.Player.Character:FindFirstChild('Head') and color and box.Text~=`Click here or press "{client.Functions.KeyCodeToName(Enum.KeyCode.Semicolon.Value)}" to chat` then
if #box.Text > 0 then
service.ChatService:Chat(service.Player.Character.Head, service.LaxFilter(box.Text), color)
end
box.Text = 'Click here or press ";" to chat'
box.Text = `Click here or press "{client.Functions.KeyCodeToName(Enum.KeyCode.Semicolon.Value)}" to chat`
end
end)

Expand Down
4 changes: 2 additions & 2 deletions MainModule/Client/UI/Default/Console.rbxmx
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
<token name="HorizontalScrollBarInset">0</token>
<int name="LayoutOrder">0</int>
<Content name="MidImage"><url>http://roblox.com/asset?id=158348114</url></Content>
<string name="Name">AutocompleteList</string>
<string name="Name">PlayerList</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
Expand Down Expand Up @@ -560,7 +560,7 @@ return function(data, env)
local frame = gui.Frame
local text = frame.TextBox
local scroll = frame.ScrollingFrame
local autoList = frame.AutocompleteList
local autoList = frame.PlayerList
local entry = gui.Entry

local Settings = Remote.Get("Setting", {"SplitKey", "ConsoleKeyCode", "BatchKey", "Prefix"})
Expand Down
45 changes: 39 additions & 6 deletions MainModule/Client/UI/Default/List.luau
Original file line number Diff line number Diff line change
Expand Up @@ -114,15 +114,48 @@ return function(data, env)
return newTab
end

function doSearch(tab, text)
local found = {}
text = string.lower(tostring(text)):gsub("%%", "%%%%"):gsub("%[", "%%["):gsub("%]", "%%]")
function doSearch(tab, query)
if query == "" then
return tab
end

local priorities = {{}, {}, {}, {}, {}, {}}
local total = 0
query = string.lower(query)

for _, v in ipairs(tab) do
if text == "" or (type(v) == "string" and string.find(string.lower(v),text)) or (type(v) == "table" and ((v.Text and string.find(string.lower(tostring(v.Text)), text)) or (v.Filter and string.find(string.lower(v.Filter),text)))) then
table.insert(found, v)
local isTable = type(v) == "table"
local text = (isTable and v.Text) and string.lower(v.Text) or string.lower(tostring(v))
local desc = (isTable and v.Desc) and string.lower(v.Desc)
local filter = (isTable and v.Filter) and string.lower(v.Filter)

if text == search then
total += 1
table.insert(priorities[1], v)
elseif string.find(text, query, 1, true) then
total += 1
table.insert(priorities[2], v)
elseif desc == search then
total += 1
table.insert(priorities[3], v)
elseif desc and string.find(desc, query, 1, true) then
total += 1
table.insert(priorities[4], v)
elseif filter == search then
total += 1
table.insert(priorities[5], v)
elseif filter and string.find(filter, query, 1, true) then
total += 1
table.insert(priorities[6], v)
end
end


local found = table.create(total)

for _, v in ipairs(priorities) do
table.move(v, 1, #v, #found + 1, found)
end

return found
end

Expand Down
6 changes: 3 additions & 3 deletions MainModule/Client/UI/Default/Message.rbxmx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bool name="AutoLocalize">false</bool>
<int name="DisplayOrder">0</int>
<bool name="Enabled">false</bool>
<bool name="IgnoreGuiInset">false</bool>
<bool name="IgnoreGuiInset">true</bool>
<string name="Name">Message</string>
<bool name="ResetOnSpawn">false</bool>
<Ref name="RootLocalizationTable">null</Ref>
Expand Down Expand Up @@ -51,7 +51,7 @@
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>-50</YO>
<YO>0</YO>
</UDim2>
<Ref name="RootLocalizationTable">null</Ref>
<float name="Rotation">0</float>
Expand All @@ -61,7 +61,7 @@
<XS>1</XS>
<XO>0</XO>
<YS>1</YS>
<YO>50</YO>
<YO>0</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<int64 name="SourceAssetId">-1</int64>
Expand Down
Loading
Loading