Version 1.73 is now released. This applies enhancements to BaseAdmin along with some minor bug fixes. This will be the last update for 2022.
Additions
Internally added a layout for beta versions:
Started! Version 1.73b3 (Build date: 12/31/2022)
Beta 1:
√ Fix for fly command and deferred SignalBehavior.
√ Fix for GuiButton.Active unreliability.
√ Update for GUI window close animation.
Beta 2:
√ Organized version layout for beta versions
√ Update BaseAdmin games.
Beta 3:
→ Plan: Remove the "No Command" warning when the command is a blank string or a string with whitespace.
Below will be rescheduled for the next BaseAdmin version.
⌛ Plan: Start working on a ModuleScript version of the command interpreter. This will be used in the future to run on the client.
Fixes
Fix for the ‘fly’ command where it would not function with deferred SignalBehavior.
Due to the new keyboard navigation support update not supporting the GuiButton.Active property, this has been fixed inside of the script for the buttons for the GUI.
Fixed a bug where BaseAdmin would STILL play the notify sound in the studio run mode, despite it being fixed twice before.
Changes
Improvements
The “No Command” warning does not display when you add a suffix to the prefix that is less than three characters long.
Update for BaseAdmin games. Games should be more performant now.
General Changes
Update to the GUI window close animation where it will fade out instead of shrinking. This behavior will be customizable long in the future.
Delayed Updates
BaseAdmin command interpreter module that can be run on the client to run client commands instantly. This update will be delayed.
Details:
BaseAdmin games are games that are either integrated into BaseAdmin or are specified in the loader as “extGames.” Access it via “;games” and play them using the “game” command.
Loader updates:
The loader has been updated internally to fix a bug where the notify sound would play in studio run mode. Navigate to the notify sound in LegacyAdminSuite to apply this fix.
I am aware of some issues with the command “genericListForInstances.” This will be looked into.
As always, please report any issues you encounter due to this update. See you in the new year!
Version 1.74 is now released. This update is a long-term support update (like the previous update). It services some known bugs of BaseAdmin to keep it functioning as intended, as well as providing small content updates to enhance the user experience of BaseAdmin.
BaseAdmin is now living in 2023 and is now over three years old.
Additions
Added new “Clear” theme. It allows you to see what’s going on behind the window you’re working in. To access it, use the “;theme Clear” command.
Made default theme more modernized. You can still access the old ones under the name “LegacyBaseAdmin” and “LegacyBaseAdminLight”.
Fixes
Fixed some theming issues. Particularly how the search bar placeholder emoji will not be transparent when closing the window.
Fixed command and game sorting system.
Updates to processAdminSavedData to allow support for deferred SignalBehavior. This is the most likely part to cause bugs or issues, so please let me know if things go wrong!
Changes
Improvements
Search module general improvements (relevance sorting).
Improved error and warning strings inside of BaseAdmin to be clearer to the user.
General Changes
Details:
ACTION REQUIRED: Changing default parent of BaseAdminServer to ServerStorage for clarity. If you do not use this feature, you are unaffected. Otherwise, you will need to change references.
The behavior can be edited by adding a value called “ServerCommandsParent” in the config and setting it to your desired value.
Loader updates:
New ServerCommandsParent setting. Comment changes for new version clarity.
I am aware of an issue that causes the user data service to sometimes not load. However, this issue was present in the previous release, and has not been tested for this one.
As always, please report any issues you encounter due to this update. If you really need an older version of BaseAdmin to keep your game functioning, I’ll be able to provide it here, when asked.
Version 1.75 is now released. This update includes some major performance optimizations and a couple security fixes, as well as a couple new features and many improvements. But in the name of compatibility, this could seriously break with plugins you may have installed. Read the changes section for more details.
Additions
BaseAdmin themes can now be loaded directly through the loader instead of having to create your own FeatureModule to inject them or fork the module.
‘chatmute’ command. This command is infinitely more secure than the legacy mute and unmute commands. It only functions with the new TextChatService.
New “Modern” theme.
use the command “theme Modern” to use it.
Fixes
It’s been a while, but I haven’t fixed very many things, mostly because last version was a stable release. If there’s an issue, inform me by replying, and I’ll have it fixed.
A side effect of the new environment update removes the GuiService environment finder. This allows it to be used in many more contexts and fixes existing issues with existing contexts.
Fixed genericListForInstances.
Fixed a bug where the errors would be suppressed without reason when running a command. This was due to the tasks update not having the correct time fallback.
Changes (read if you experience compatibility issues, mind the wall of text)
IMPORTANT:
BaseAdmin no longer uses the legacy getfenv function for its internals. This change provides benefits to BaseAdmin’s optimizations but may also seriously impact compatibility. Here’s what’s changed:
New “environment” variable. You can access most of the stuff you could using getfenv from anywhere without having to specify a level.
The new plugin template no longer requires init to be called before accessing the plugin. It returns the data table, which contains init as a function. Don’t worry, init will certainly be called before the plugin is used.
How to identify the version of your plugin template, and what to change
There are three plugin template versions. I call them legacy, ENV, and new.
Here’s what legacy looks like:
As you can see, it returns ‘data’. But it also does not have an init function. This form of plugin template is NO LONGER SUPPORTED! I don’t expect any of you to be using this version. If you are, you can use the loadversion command to load AdminSuite version 1.48 or 1.37. There are two variants to this plugin version, but the 2nd one broke long ago (and was used in a beta of 1.37 but made its way to the example in the loader).
The ENV plugin template returns an init function to obtain the environment, and then returns data. This plugin template is deprecated, but it still works for the time being.Chances are you have this plugin template installed, so you will need to upgrade it.
New plugin template:
The new template will return data AND have an init function. templateVersion is for future compatibility but is not required. You only need to modify one variable in the plugin essentials.
To migrate your ENV plugin, you will need to change the bottom init section from this:
function init()
env = getfenv(2)
return data
end
return init
to this:
function data.init(newEnv)
env = newEnv
end
data.templateVersion = 1
return data
After you’ve replaced the ENV plugin with the new template, you should be good to go. Keep in mind that there’s certain variables that the new environment might not yet support, so keep reading for more information about compatibility.
Features and services now use the new environment. This includes the features loader, and all built in services. External features should not be affected by this change as the environment is passed as a parameter instead of relying on an initialization function, so the feature should see no difference.
The new environment does not have as many variables as the old one.
This is going to be the thing that keeps you up at 3 AM if you have an old plugin or feature. I’ll simplify this for you.
Some of the globals (such as SERVERPLAYER) were never meant to be accessed directly through env. They were always in var, which is a store for variables and functions inside the MainModule. Some functions like commandcheck are deprecated since version 1.65 and used internally. Others like init are internal functions used by BasicCommands and running them elsewhere might break the system or duplicate it. Don’t worry about those.
If you find that your plugin needs something on the new environment that isn’t here, please reply to this post and I’ll add it. I do not want to clutter the environment with unnecessary material.
Services compatibility
Services are a similar story to plugins, but less complex. At the moment, services are treated identically, but this is subject to change.
The ModulesHandler service detects if the service is compatible with the new environment via the nonlgcy variable in each service. Regardless, they are currently treated the same. If your service runs into issues that cannot be solved by adding something to the new environment, please tell me and I’ll add a compatibility layer for this variable.
Version 1.48 (ENV commands beta) loaded with the ‘loadversion’ command does not have the new environment update applied for compatibility reasons.
Improvements:
GamePIN is more secure (security patch 9) and can run when the game starts. More details in the loader update. GamePIN now has new command ‘eplock’ that will enforce the PIN on the existing players. It also has the ‘getpin’ command that can be used to obtain the current PIN.
Removed legacy datastore bloat in the MainModule. This speeds up loading time by a little bit.
The “GuiSystemAdder” module will add the systems to new themes in real time. Don’t rely on this too much, as I’m planning to update the GUIs in the future to automatically add these instances when they’re actually used to conserve memory.
The command bar, which was untouched since version 1.71 (almost a year ago), now has new optimizations. Firstly, it now uses task.wait instead of wait, so it should feel more responsive. Secondly, the remote event is now stored in ReplicatedStorage under the name “BaseAdminCommandBarSendRemote” (very catchy) so there is no longer a remote for each player.
“version” init module now has an internal variable that determines if it should output the release in the beta “roadmap” format or the normal format. This is a simple change that only benefits me, who updates this module and adds beta version formatting to the version.
Miscellaneous optimizations in the MainModule.
notifyplayersystemmessage will now print the message if it detects the user is SERVERPLAYER (7) or RESERVEDPLAYER (5.5).
Changed more of the waits to task.wait in older commands, modules, and GUI scripts.
Some commands that teleported the player to some random places were affected by a change (the place was moderated). I changed the teleport ID of that place to one that isn’t deleted.
The welcome message is friendlier.
Updated ‘hover’ GUI script. It is now more fluid and is framerate independent.
Changes
init modules now have a third argument. The third argument is the new environment.
Entirely removed obsolete ‘flush’ command.
Entirely removed legacy ‘spazzy’ command.
GuiService will now position the windows in a random variation.
Loader updates:
New version: 0.79. The last version was version 0.782, which was released over a year ago.
About GamePIN
In the startup section, you can add these commands to automate GamePIN:
config.Startup = {
--Add commands for when the game starts. FINALLY released in BaseAdmin v1.49
--do not add prefixes
PlayerJoin = {
--You can add commands you would like to run automatically when the player joins.
--Use %s for the player's name, example: pm %s hello
},
ServerStart = {
--You can add commands here that you would like to run when the server starts.
'setrandompin',
'splock true',
'eplock'
}
}
This example uses GamePIN to set a random PIN, lock the game, and enforce the PIN on all players currently in the server.
Advanced section finally released in new versions! You can add your own themes too!
The advanced section currently controls very little settings at the moment. This is what we currently have:
Note: some of the settings are NOT the defaults. If you want the default, make it nil or comment it out like always.
“DefaultTheme” corresponds to a theme in the extThemes folder. You can add your own if you want. Enabling this will make the default BaseAdmin GuiService theme the value.
“ForceTheme”, when enabled, will not allow the user to use any theme other than the default.
I’ve added a template for new themes in a folder called “extThemes”. Documentation inside the loader was improved.
Known issues:
The error notification sometimes makes duplicates of itself.
Clearing up some old claims I've made
There was no wizard created, it was just the deleteuserdata command.
SafeServer is deprecated and will be revamped in a future version. It’s an anti-exploit that prevents instance-based attacks but can easily be bypassed. It was designed to prevent one single physics exploit on the client. It stopped working about two years ago and has not been touched since.
This was an issue with studio.
You can now do this by using env.ModulesHandler directly!
This has been reverted back since then and I’ve not told you guys! Not only did this double the memory used by commands, but it was also not providing very necessary security benefits, if any. The only use case for this is if you’re installing hundreds of thousands of plugins that you cannot verify the security of.
You should still use useCommand. It is a wrapper for running commands that also detects if the user has a sufficient rank. It will return the string “restricted” if the command cannot run because of permission issues.
Do not hesitate to ask a question if you’re confused, no matter how small. Suggestions are also welcome!
As always, please report any issues you encounter due to this update (I usually don’t test every single feature included in BaseAdmin). If you really need an older version of BaseAdmin to keep your game functioning, I’ll be able to provide it here, when asked.
Edit 9/27/2023: Features such as BaseAdminSafeServer and BaseAdminIntegratedSSecurity are officially deprecated as of version 1.73. Forgot to clarify this in the update post. These features will be removed soon after a few subsequent releases. Nobody should be using these features anyways as they are disabled by default.
Update: new type module for easy creation of plugins, services, and features.
There is a new types module:
--!strict
type soundType = 'chord' | 'hardcrash' | 'notify' | 'push-notification' | 'push-notification2' | 'e' | 'random'
type cDisplayHintOrMessage = (msg:string, time:number, sound:soundType) -> nil
type serverPlayer = {
UserId : number;
Name : string;
Team : Team | nil;
Neutral : boolean;
Character : nil;
SERVER : true;
BaseAdminPlayerData : {
AdminRank : {
Value : number
};
SetRank : {
Value : number
}
}
};
type config = any
type service = {
info : string
}
type command = any
type getMessage = (Player, ...string) -> string;
type getPlayers = (Player, targetplr:string, customPlayerList:Instance|nil) -> any
export type environment = {
Cdisplay : (msg:string, time:number, sound:soundType, mode:string) -> nil;
CdisplayMessage : cDisplayHintOrMessage;
CdisplayHint : cDisplayHintOrMessage;
var : {
CommandTasks : any;
SERVERPLAYER : serverPlayer;
--RESERVEDPLAYER : serverPlayer;
addAdmin : (plr:Player, rank:number) -> nil; --do not use this
chatted : (msg:string, plr:Player) -> nil;
sortArguments : (cmd:string, args:string, plr:Player) -> nil;
config : config;
configloc : Instance | nil;
data : DataStoreService?;
data2 : DataStore?;
findMatchingCommand : (plr:Player, cmd:string, ...string) -> nil;
genericF : {
detectLoaderUpdate : (configloc:Instance, config) -> number;
getRank : (Player) -> number;
};
getConfig : (path:string, defaultValue:any) -> any;
};
version : number;
CdisplayNotification : cDisplayHintOrMessage;
ModulesHandler : {
run : (name:string, ...any) -> any;
info : (nil) -> string;
};
getCommand : (cmdname:string) -> command | nil;
getCommandRank : (cmdname:string) -> number;
getFastCommandRank : (cmdname:string) -> number;
getFilteredMessage : getMessage;
getMessage : getMessage;
getPlayerRun : getPlayers;
getPlayers : getPlayers;
isBetaVersion : boolean;
isRankAllowed : (plr1:Player, plr2:Player) -> nil;
rankAllowed : (plr1:Player, plr2:Player) -> (boolean, number, number); --allowed, plr1rank, plr2rank
isRankHigher : (plr1:Player, plr2:Player) -> boolean;
isVip : (Player) -> boolean;
notifyplayersystemmessage : (msg:string, plr:Player, time:number, sound:soundType?, hintmode:boolean, forceError:boolean) -> (TextLabel, ScreenGui);
preventJoin : (msg:string) -> nil;
purchase : (Player, id:number, type:'g'|any) -> nil; --'g' for gamepass
script : Instance;
t : {command};
useCommand : (Player, command:string, ...any) -> any | "restricted";
}
return true
it is probably poorly made since I’ve never done types before.
You can include it early into your plugin and feature templates:
local types = require(script.Parent.Parent:FindFirstChild("types")) --comment out when done (for performance reasons)!
local data = {}
local env : types.environment = {}
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 data.init(newEnv)
env = newEnv
end
data.templateVersion = 1
return data
local types = require(script.Parent.Parent:FindFirstChild("types")) --comment out when done (for performance reasons)!
return function(set, env : types.environment)
--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
Also, expect external services to come soon. This is not officially released yet, but you can apply it early. You will see this in the next loader version, 0.791.
I am half-glad that you stopped hard-coding yourself to have full admin in games that use this, but the fact that the comment is still there is a bit unnerving.
That said, are there any advantages of using this over, say, Redefine:A or Nano, both of which boast to have the same (if not higher) customization level?
I gave myself admin in BaseAdmin automatically since it was a pain to do so, but in the next loader update there will be a value to turn this on or off, and by default it will be off.
Redefine and Nano are alternatives to this system, however they work differently and don’t have all the same features (such as live restrictions, which must be coded manually).
The main selling point of BaseAdmin is its readable source and plugin development tools, all of which are shared by both systems. However, the way they were constructed over the years are very different. For example, with BaseAdmin you can install or create runtime scripts that can modify the environment, called Features. In Redefine, it would require a modification to the script. In BaseAdmin, you also get auto update to fix known security issues and add more features, however in Redefine you are expected more to modify the source.
TL;DR both systems have their strengths and weaknesses. However, I’ll recommend Redefine to anyone who wants to get the beta build from the source button, which BaseAdmin does not have:
He never said in his post that you should use this over other admin systems. This is simply a resource for anyone to use or modify as they please. He has absolutely no obligation to explain to you why you should use it over other systems. Quit acting like people who post here owe you something.
I disagree. I think there should be a proper reason on why you should switch to different admin systems. Advertising “modifying” as a main feature is not a selling point.
If you prefer another admin system then go use that one. You don’t need to act entitled and demand reasons for why you should use something from the devforums over another resource.
It’s not just modifying; it’s modifying without forking the whole thing. You get new features and updates with ease, and you can modify it to your liking. I’ll be expanding on this concept in the next version.
Though I do agree that it isn’t much of a selling point. However, I’m not really trying to sell this since it’s a free resource. Is there a feature that other systems have that you would like to suggest?
Version 1.76 is now released. This update gives BaseAdmin some new features, updates and improves existing ones, and changes existing features. This is the first good update in a while. So much has changed that I decided to summarize it.
Additions
External Init Module Support. BaseAdmin now allows you to add external init modules. They are under the “extInit” folder in the BaseAdminSettings module.
env.loadedInitModules: an array of loaded Init module names.
‘root’ Rank: an overpowered rank that allows you to do anything. More on this under the changes section.
DataManager Service: A service that allows you to easily manage your data. This will have its own section since it is a key new feature in this update.
‘root’ Command: run something as root using this command. For more information, “;define root”.
‘myrankis’ Command: see your current rank.
‘bulkrank’ Command: rank multiple users.
‘Clean’ Theme: A theme that looks… okay-ish? I really don’t know where I was going with this one:
fastData: A key part of DataManger. This is in the DataManager section.
External Service Support: Use services from your loader. They are placed in the “extServices” folder in the BaseAdminSettings module.
‘clearui’ Command: Allows you to clear all BaseAdmin GUIs that are on your screen. Useful if you don’t want to load the ‘GuiSystemAdder’ init module, but still want to be able to use GUIs.
‘env.waitFor’ Function: A callback function that is intended for init modules to use to retrieve environment variables specified after all init modules have been loaded. For example,
environment.waitFor(function()
--anything in here runs after all init modules do
end)
Note: This is disabled by default. Go to the loader updates to see how to enable it.
Fixes
Commands List Affiliates Search: You still cannot search affiliates, but commands that have them should be able to be searched properly and you won’t get an affiliate.
Theme Fixes: Fixes to various themes with various problems.
Fixed an error in GameUpdater.
Changes and Improvements
Updated documentation (the ‘docs’ command). Expect this to be removed soon in place for a much better one in #bulletin-board.
Ranks greater than 5 will no longer error.
DataStoreInfo is more useful.
The error tween is now a LocalScript.
Updated strings in “Features” module and ‘featurestatus’.
Various performance improvements.
Improved ModulesHandler so that services no longer load each time they are called.
Update to ‘hover’ so that it works better.
Display a deprecated message to users who use the deprecated or obsolete Features.
Changes to some rankTranslations.
‘disabled’ init module priority.
Most GUI themes now have this:
All About DataManager
What is DataManager?
To put it simply, it is a wrapper for data store requests. It is in a very early stage so expect a MessagingService improvement in the next version.
DataManger originally acted as a cache in its development. However, I decided to make something called “fastData”. A much more advanced cache.
What is fastData?
fastData is an advanced cache that automatically syncs with the server, allows for offline “virtual data store” access, and reduces requests by a significant amount.
Features:
Offline Access
Cached Backups
BindToClose Support
Default Values
DataStoreInfo Status Updates
fastData:
Virtual Data Store
Automatic Syncing
Automatic Caching
Manual Syncing
__index-based data management
How do I use DataManager?
I strongly recommend reading the source code with its many comments that explain all the advanced features. Here’s one of them:
--args: script; environment; action; key; default *if the action is SetAsync, default is the target value*
--returns: value or default or cache; success; errorMessage
--if action is SetAsync, the values returned are error message; success
--if action is RemoveAsync, the values returned are success; error message
--noFastData prevents use of fast data, but fast data could also be disabled in the configuration
--instant is whether the SetAsync fastData action should be instant or not
--example of running through the service handler: ModulesHandler.run("DataManager", "SetAsync", "isDataManagerCool", true); print(ModulesHandler.run("DataManager", "GetAsync", "isDataManagerCool")) --> true true
Loader updates:
New version: 0.792. This version removes deprecated features from the list of features, as well as adds a “rootPassword” field. “InitGetENVCallbackEnabled” was added to the advanced section of the settings module. Set to true to enable.
Known issues:
The error notification sometimes makes duplicates of itself.
Do not hesitate to ask a question if you’re confused, no matter how small. Suggestions are also welcome!
As always, please report any issues you encounter due to this update (I usually don’t test every single feature included in BaseAdmin).
Summary
Pasted from the version init module.
local ver = "1.76"
function displayBetaMessage()
print(([[Started! Version %sb4 (Build date: 11/3/2023)
Beta 1:
Update documentation
Beta 2:
Add external init modules
env.loadedInitModules
Allow ranks > 5
'root' rank 8
Fix cmds list so it no longer has issues with affiliates
New DataManager service
DataStoreInfo is now more useful
Theme fixes
Fixed an error in GameUpdater init module
Root command to run something as root
myrankis command to retrieve the current user's rank
bulkrank command to rank multiple users
New "Clean" theme
The error tween is now a LocalScript
Minor performance improvements
Beta 3:
Improved ModulesHandler so that services no longer load each time they are called
fastData (significant)
Updated strings in "Features" module and featurestatus
External services support
New "clearui" command
Theme improvements, fix to SNote theme so that it moves now
Beta 4:
10/28/2023 (pre): Made the text here capitalized
'waitFor' function for init modules that allows the init module to know when other init modules have finished modifying the environment. Enable using config.advanced.InitGetENVCallbackEnabled.
Release:
Minor changes.
Update to 'hover' so that it works better.
Display a deprecated message to users who use the deprecated or obsolete features.
]]):format(ver))
end
Forgot to mention: BaseAdmin feels like it loads instantly if you require it locally, disable data store, and set init module load priority to an empty array. It’s been years since that was possible.