Introducing BaseAdmin

Not to be confused with “Basic Admin”. This one has slightly cleaner source code.

BaseAdmin would be a duplicate of an existing resource if it was not for this:
“BaseAdmin is admin that you can base stuff off of”

What is BaseAdmin?

BaseAdmin is an admin system that is designed to be based off of to the user’s liking. Unlike most other admin systems, BaseAdmin actually has readable source code if you know what you’re looking for.

BaseAdmin has been in development since May 31st of 2020 and publicly released in early 2021, named AdminSuite. The first version released to the public was v0.97, but had very messy source code. The first version that had BasicCommands (commands module) was v1.30.

Why should I prefer this over a more popular admin system?

BaseAdmin is not for everybody. I designed BaseAdmin to be easily customizable, and it is meant to have plugins (for advanced users, external features are also an option).

But I also considered the aspect of beginners and how they want everything to just work. That’s why I made BaseAdmin give details and steps to beginners on how to use it.

Is it secure?

Well, I’ll be specific. BaseAdmin places a folder in a Player when joined. This is why BaseAdmin is supposed to be kept in a secure environment. There should be no remote events that blindly set a value to a custom value, as exploiters might easily be able to get admin.

What are the features of BaseAdmin compared to other admin systems?

BaseAdmin has many features. One of them is the ‘restrict’ command, which allows you to restrict a command to a certain rank if a player on that rank is abusing the command. The best part about this is that you don’t have to fork BaseAdmin and it will continue to update.

Another feature is the ability to have custom rank names (called rankTranslations, because it translates the rank from a number to a word) without forking.

Last but not least, the best feature is basing stuff off of BaseAdmin. You can choose if you want a BindableFunction placed in your game that is responsible for running commands as the server user. Then, you can have automations that you can script yourself that automatically execute BaseAdmin commands or plugins.

Group admin would’ve been listed here, but that was a big deal when it came out. It’s now average for admin systems to have group admin. Plus, there’s literally a tag option “annoyinggroupadmin” so…

That’s great, how do I get it?

You can get the loader here: Base Admin Loader - Roblox

You can get the latest MainModule here: Base Admin MainModule - Roblox
(Name has not yet been updated to BaseAdmin, the title to the model is still using the previous name, AdminSuite)

And, if you want even more customizability, consider AdminSuite v1.37. You can get that here:
AdminSuite v1.37.rbxm (514.7 KB)
but it will not be as stable or secure (plugins have been updated in between releases, so they will not be compatible without conversion).

End

If you have any documentation questions or feedback, please ask in the replies. Requesting features is appreciated since that’s my current limitation to developing it at the moment.

1 Like

Could you include pictures of the in-game GUI (if applicable)?

1 Like

No problem! This is some of the UI of BaseAdmin:

Commands list:
image

Old UI:
image

GuiHelp:
image

“Immersive UI” is being worked on at the moment, so you will see that soon.
Most of the current UI looks the same, so there’s not much else to it.

Could you upload the source to Github?

I’m not sure how yet. If there’s a tutorial you could send me that would be great.

  1. Sign in to your account and press the plus button and go to New repository
    image
    and write all the information requested

  2. Press Add file
    image

  3. Above write the name that you will place and at the end write .lua
    image

  4. Place the script


Since there are several, write them in a text file and save it with its name, at the end write .lua, then go to GitHub and press Upload files and upload the files
image

1 Like

Seems like a lot of work to keep up to date all the time and synced with Roblox. What exactly are the benefits of doing so, other than branching?

Hey! I hear it’s been in development for a while, I would like some photos to see what it looks like!

I sent some photos of the UI in a previous post; I recommend you check that out!

1 Like

image

You might wanna port over all this code onto a module script buddy. And, why should we use your admin command over other admin commands?

I believe other popular admin systems also provide this.

2 Likes

This is AdminSuiteForDevelopers, which is out of date (it was the version before I put it into a modulescript). I consider you upgrade to BaseAdmin, I provided a link to it in the post.

1 Like

One possible issue:
BaseAdmin places values into the player for setting admin ranks for backwards compatibility reasons and to easily set ranks.

However, if you have one of these, it can be exploited:
event.OnServerEvent:Connect(function(_, s, v)s.Value=v end)
If you have one or more instances of something like that in your code, replace them with this:

event.OnServerEvent:Connect(function(plr, s, v)
    if s.Parent == plr:FindFirstChild("BaseAdminPlayerData") then
        --You can remove the below line, but it is recommended not to do so.
        plr:Kick("Exploit detected")
    else
        s.Value = v
    end
    --If you have any more code, place it here.
end)

It is highly recommended that developers look into this until an alternative is provided, since BaseAdmin currently only supports real-time rank changing, which cannot be disabled.

Yes, they do in fact.
Good examples are Adonis and Cmdr.

2 Likes

Version 1.67 is now released.

This is now fixed, anyone worried about security now has nothing to worry about.


Additions
  • When opening UI in first person, keybinds will be provided to close the UI. If this breaks anything, please let me know.

  • Loading other versions is now possible with the ‘loadversion’ command. You can view the versions available with the ‘versions’ command.

  • BasicCommands now contains a new function called getCommand. This function allows the retrieval of commands with a name, and will return an error message when not found. A few other internal functions were added onto this, such as getCommandRank and getFastCommandRank. The difference between those two is getFastCommandRank does not check for custom restrictions set on a command, while getCommandRank does.

Fixes
  • Fixed a bug that prevented the ‘buyvip’ command from prompting purchases of gamepasses.
Changes
  • Setting ranks can no longer be done directly from the server without access to the processAdminSavedData service.

  • Commands list gives an option to show commands for a certain rank, and now by default only shows commands for the current player’s rank.

  • Features will now have environment variables of the MainModule passed to them through the 2nd parameter. This affects both external and non-external Features, as a minor change. Current external features will continue to work normally.

  • Minor text changes for various internal messages.


Notes:

For those who need to set ranks outside of BaseAdmin, and are prevented by the security update

“AdminRank” and “SetRank”, present in “BaseAdminPlayerData”, can no longer be changed directly. To change these values, you must use the syntax: ModulesHandler.run("processAdminSavedData", Player, "setRank", type (dependency name of BaseAdminPlayerData), value).

To retrieve the ModulesHandler from a plugin
local data = {}

local env = {}

local ModulesHandler

data.name = 'e'
data.disabled = false --turn off if you want to test out a plugin.

data.plugin = {function(Player, arg)
	for i, obj in pairs(env) do
		print(i, obj)
	end
end, 'desc', '<arg>', 2}

function init()
	env = getfenv(2)
	ModulesHandler = getfenv(3).ModulesHandler
	return data
end

return init
To retrieve the ModulesHandler from an external or non-external feature

This is now possible with the latest template.

return function(set, env)
	--init function
	local modulesHandler = env.ModulesHandler
	if not modulesHandler then warn("No ModulesHandler!") end
	local s,e = pcall(function()
		--Place your code here
	end)
	if not s then
		--Available options are Retry and Abort.
		--Return: StatusCode, pcallStatus, pcallError
		--if the status code is Abort, pcallStatus can also be used as a string to identify an error code.
		--example: return "Abort", "Unknown error"
		--or, the Abort status can be used normally
		--example: return "Abort", false, "Parse error"
		
		return "Retry", s, e
	end
end

If you need more information, I would be happy to help you!


Loader updates:
The loader will receive a minor version increment, from 0.78 to 0.781, as nothing has changed in the settings module yet. The latest version has an updated “extFeatures” example module which contains the 2nd “env” parameter.


Known Issues:

  • When ranking a user in-game, the exploit protection might prevent instant ranking to accomplish. A workaround is to have the target player rejoin the game to become ranked. This issue is fixed as of v1.68b1.
1 Like

There’s a chance v1.68 will be rolling out today! Stay tuned!

The update will include the ragdoll commands working again. I’ll provide more info in the update post.

Version 1.68 is now released.


Additions
  • Ragdoll v5.2 and v6.1 have been implemented in BaseAdmin.

  • The new service addition, “CorePrompt”, will use the :SetCore function to either prompt players or send a core notification. If you need information and syntax, please reply.

Fixes
  • When ranking a user in game, their new rank will be denied. The cause of this was the exploit protection implemented in v1.67; v1.68 is now updated to apply this fix.
Changes
  • BasicCommands now uses the CorePrompt service for notifications when a dependency of a command is restricted.

  • Internal ragdoll command changes.


Notes:

Wait, Ragdoll 5.x used glue, how is it back!?

A little thing I called “ReplaceGlueWithAttachments” fixes this. It is coded very badly, but the Ragdoll 5 system is needed for R6 characters as the Ragdoll 6 system’s R6 functionality was limited when Glue was obsoleted. This caused Ragdoll 6 to become unstable when it came to R6, and it also did not work with RagdollCombatTools, which only worked with Ragdoll 5.

Ragdoll 5.2 and 6.1 are now included in BaseAdmin. Ragdoll 5 has very limited support with R15, but it does work.

To ragdoll, use “;ragdoll me” and then “;forceragdoll me true”. To use combat tools, use “;combat” and then “;clone”. Now, you can test out the system (combat tool animations do not play outside of the places owned by my account).


Loader updates:
A new update with a minor version increment brings the loader to v0.782, with the new addition of the setting “PromptToViewErrors”. When enabled, this setting will notify users with the “Owner” rank about errors and ask if they want to view them, using the CorePrompt service.