What does this Github contain?
In this github, you will see all of my scripts and some scripts may be documented here. You will see how to use them, how to possibly edit them and any extra infomation you may need; for example, a command list. In addition, any developer resources will be listed here too. This will be layed out in the same format as the github is.
If you have any questions please contact me on Discord @ Stefanuk12#5820 and any suggestions to what you want to be added.
Games
Kohls Admin House
This will contain all of the infomation for all of the Kohls Admin House Scripts.
DarkKohls API
Admin Module
Regenerate Admin
<<boolean success>, <string error>> KohlsAPI.Admin.RegenerateAdmin()
Regenerates the admin
Get Admin
<<boolean success>, <string error>> KohlsAPI.Admin.GetAdmin(<Instance> SpecifyPad)
Automatically gets admin, and if specified, it tries to get the SpecifyPad
Permanant Admin
<<boolean success>, <string error>> KohlsAPI.SettingGetSet("AdminPermanantAdmin", Value);
Gets admin as soon as it is regenerated
oofkohls v2 Docs
Here you will see all of the necessary infomation for oofkohls v2 like the commands. Here's a link to the script. If you wish to check out v1 then you can go here
Admin
peradmin
This toggable feature gives you "permanant admin". As long as you don't get punished, you will have permanant admin.
Usage:
:peradmin
getadmin
This feature either teleports you to an available admin pad or it automatically gets admin for you via firetouchinterest.
Usage:
:getadmin
regen
This feature "presses" the regen button, regening the admin pads and this works from any distance.
Requirements: fireclickdetector
Usage:
:regen
Server OOF
removepbaseplates
This feature removes all of the 'fake' baseplates created with the makepbaseplate command.
Usage:
:removepbaseplates
epilepsy
This feature spams colour change, making an epilepsy-esque effect. This feature requires admin!
Usage:
:epilepsy
respam
This toggable feature constantly spams :respawn others
and :explode others
. This feature requires admin!
Usage:
:respam
rblphrase
This feature un-blacklists a phrase from a player(s). Make sure to seperate it with the | character!
Usage:
:rblphrase <string> targetUser <string> Phrase
Example:
:rblphrase | EpicGamer69 | kill all
rspam
This removes a phrase from the spam list.
Usage:
:rspam <string> Phrase
Example:
:rspam kill all
spam
This feature adds a phrase to the spam list.
Usage:
:spam <string> Phrase
Example:
:spam kill all
movebaseplate
This feature gets you in position to be able to move the baseplate. You will teleported to the correct place and orientation and stunned. You need to then punish yourself, wait a bit, then unpunish yourself. You should be stuck in the baseplate then from there you can teleport to move the baseplate or skydive yourself. Note: Please do not abuse this, it's impossible to find decent games.
Usage:
:movebaseplate
partspam
This toggable feature spams 10 by 10 by 10 parts. You need Persons299 Admin for this.
Usage:
:partspam
tlag
This toggable feature lags player(s). You may specify one user or use certain keywords like "me", "others" and "all". This also will lag the server too. Press CTRL + SHIFT + F7 to check the server ping, shown on the top left. Looking at logs, will make your game lag a lot and possibly crash. This feature also requires admin!
Usage:
:tlag <string> targetUser
Example:
:tlag EpicGamer69
tturret
This feature gives player(s) the Teapot Turret. The tools given to you do not actually work/replicate. However, it can be used as a FE Kill as if more than one person has the Teapot Turret, they are all killed. You may specify one user or use certain keywords like "me", "others" and "all".
Usage:
:tturret <string> targetUser
Example:
:tturret EpicGamer69
paintarea
This feature allows you paint certain areas of the workspace. You are given a paint bucket and automatically. For the last argument, you can specify what part or "all" which will paint the whole area. For the second argument, you may put a RGB Value or "random" which will paint the area a random colour. Make sure to seperate it with the | character! This feature requires admin!
Usage:
:paintarea | <string> RGB Value | <string> targetArea
Example:
:paintarea | 255 150 150 | Obby Box
makepbaseplate
This feature makes a 'fake' baseplate which allows you to walk on if the real baseplate has been skydived, removed or moved.
Usage:
:makepbaseplate
svrlag
This feature will lag the whole server. Having logs open may lag you further or even crash you. This feature requires admin!
Usage:
:svrlag
crash
This feature will crash the server. This does not personally work for me but I have seen it work for others. This feature requires admin!
Usage:
:crash
blphrase
This feature will blacklist a phrase from a player, and if they say it, a punishment will be said by you. You may specify one user or use certain keywords like "me", "others" and "all". Make sure to seperate it with the | character!
Usage:
:blphrase | <string> targetUser | <string> Phase | <string> Punishment
Example:
:blphrase | EpicGamer69 | kill all | reset all
Sound Abuse
earrape
This feature toggles the "ear rape" function. This constantly plays all of the sounds in the gear every tenth second.
Usage:
:earrape
smusic
This feature stops the music. This is untraceable in logs.
Usage:
:smusic
pmusic
This feature plays the music. This is untraceable in logs.
Usage:
:pmusic
sallsounds
This feature stops all sounds. This is untraceable in logs.
Usage:
:sallsounds
pasounds
This feature plays all sounds. This is untraceable in logs.
Usage:
:pasounds
Music Commands
Note: You can see the music table here
refreshmusic
This feature will refresh the music table.
Usage:
:refreshmusic
play
This feature will play a certain sound from the music table. Note, you this feature requires admin. To get the correct IndexOfSoundId
then follow one of these methods:
Method 1:
You may say :getmusic
and look in the Developer Console (F9) and the number before the "|" is the IndexOfSoundId
Method 2:
You can go to this link and the UUID number is the IndexOfSoundId
Usage:
:play <number, string> IndexOfSoundId
Examples:
:play ss45 -- You can add letters anywhere bc ROBLOX Chat Filter gay
:play 45 -- Or you can just do this
getmusic
This feature will print the music table in the Developer Console (F9).
Usage:
:getmusic
Gear Giver
givehelp
This feature will print all of the gears you can give yourself and others in the Developer Console (F9).
You may also refer to this list too but it may not be up to date, I might forget to update it here:
PaintBucket
Hyperlaser
RainbowCarpet
Airstrike
SuperRLauncher
RLauncher
SSTripmine
ASSentry
RPOSword
IceStaff
Transmorph
ShiftingPolarity
PortableJustice
Usage:
:givehelp
give
This feature can give you and others gears. Note: This is case-sensitive and this feature requires admin!
Usage:
:give <string> targetUser <string> Gear Name
Example:
:give me Hyperlaser
Anti
antipunish
This toggable feature resets you as soon as you are punished. You need admin for this feature to work.
Usage:
:antipunish
antijail
This toggable feature removesjails as soon as you are jailed. You need admin for this feature to work.
Usage:
:antijail
antikill
This toggable feature resets you as soon as you are killed. You need admin for this feature to work.
Usage:
:antikill
antiblind
This toggable feature removes the black blind screen as soon as you are blinded.
Usage:
:antiblind
Control
rblgear
This feature un-blacklists a blacklisted gear.
Usage:
:rblgear <number> Gear Id
Example:
:rblgear 19704064
rwhitelist
This feature un-whitelists a player(s). You may provide the user's shorterned name, or use "all", "others", and "me"
Usage:
:rwhitelist <string> targetUser
Example:
:rwhitelist EpicGamer69
blgear
This feature blacklists a gear, meaning no one but the whitelisted users can give themselves or others the specificed gear id.
Usage:
:blgear <number> Gear Id
Example:
:blgear 19704064
whitelist
This feature whitelists a user, this feature gives these users access to certain commands and they aren't affected by certain commands
Whitelisted Command List:
Usage:
:whitelist <string> targetUser
Example:
:whitelist EpicGamer69
Misc
xcmds
This feature shows a GUI with all of the commands, however, they aren't as informative and are just as a quick reference. Please use these docs for more info.
Usage:
:xcmds
execute
This feature executes any code after you put after the command.
Usage:
:execute <string> stringToExecute
Example:
:execute print('hi') -- This prints hi in the Developer Console (F9)
tbypass
This toggable feature toggles "global bypass" on all of your chats. This allows you to bypass the ROBLOX Safe Chat, more than likely this is only 13+ and the characters usually get patched. If you use certain characters more, like shown in the example, you may get around it.
Usage:
:tbypass
Example:
seeeeeeeeex offender -- This will attempted to be bypassed
copycmds
This feature copies the whole command list to your clipboard.
Usage:
:copycmds
age
This feature displays the Account Age of user(s). You may specify one user or use certain keywords like "me", "others" and "all".
Usage:
:age <string> targetUser
Example:
:age EpicGamer69
bypass
This feature has a similar concept to tbypass, however, it's not toggled but it bypasses the text you put after the command
Usage:
:bypass <string> textToBeBypassed
Example:
:bypass seeeeeeeeex offender -- This will attempted to be bypassed
rj
This feature makes you rejoin the game, this doesn't work all the time!
Usage:
:rj
cbtools
This feature gears can gear you and others client btools. This means only you can see what you're building. You may specify one user or use certain keywords like "me", "others" and "all".
Usage:
:cbtools <string> targetUser
Example:
:cbtools EpicGamer69
Whitelist CMDs
Hello, you may be wondering what is this page? Well, you've been whitelisted to use some command by a user in your game using oofkohls v2. oofkohls v2 is a script for Kohls Admin House with multiple features/commands. You are also excluded from certain abusive custom commands made by the script too! Anyway, here are the commands you are permitted to use. Click on the commands for extra info. Also, you need to include the ":" at the start or it will not work! These commands work in /c system too ;)
The redirect link to this page is: bit.ly/wlcmds
Perimitted Commands
Audio Visualiser
Note: This is reliant on Persons 299's Admin and Network Ownership. You need these and sethiddenproperty and gethiddenproperty as well as setclipboard! Here's a link to the script.
Orbiter
orbit
This feature will make the orbiter orbit a certain person.
Usage:
:orbit <string> targetUser
Example:
:orbit EpicGamer69
refreshorbit
This feature refreshes the orbiter if it breaks.
Usage:
:refreshorbit
Orbiter Settings
timelooporbit
This feature sets the time of how much each player has with the orbiter when it is getting looped around. This is in seconds.
Usage:
:timelooporbit <number> timeInSeconds
Example:
:timelooporbit 3
offset
This feature will set how far away the orbit is away from the targetUser.
Usage:
:offset <number> offsetNumber
Example:
:offset 5
speed
This feature will set the speed of how fast the orbiter spins.
Usage:
:speed <number> speedNumber
Example:
:speed 15
partamount
This feature will set how many parts will be made for the orbiter.
Usage:
:partamount <number> numOfParts
Example:
:partamount 50
Toggles
torbiter
This feature toggles the orbiter on and off.
Usage:
:torbiter
tvisualise
This feature toggles the Audio Visualiser part of things.
Usage:
:tvisualise
looporbit
This feature toggles the loop orbit where everyone takes turns with the orbiter.
Usage:
:looporbit
Misc
orbitcmds
This feature prints all of the commands in the Developer Console (F9).
Usage:
:orbitcmds
copyorbitcmds
This feature copies the commands to your clipboard. You need setclipboard
Usage:
:copyorbitcmds
Music API
If you wish to check out the Music Table then go to this link. Please note these are not automatically updated as soon as an audio is removed, instead it is removed manually as I don't know how to automate it in JS
This is formatted like this:
<returntype> examplefunction(<argumenttype> argument name)
Variables
ValiantMusicAPI
This is the main holder with all of the functions and majority of the variables.
<table> ValiantMusicAPI
ValiantMusicAPI.GitHubTable
This is a link to the json table that holds all of the audios that will be filtered through.
<string> ValiantMusicAPI.GitHubTable
ValiantMusicAPI.removedAssets
Things that possibly show that the audio/SoundId is removed.
<table> ValiantMusicAPI.removedAssets
ValiantMusicAPI.musicTable
Holds all of the filtered audios.
<table> ValiantMusicAPI.musicTable
Functions
ValiantMusicAPI.checkBadSound
This checks if a SoundId is removed or not.
<bool> ValiantMusicAPI.checkBadSound(<string> SoundId, <string> SoundName, <bool> UseMarketplace, <bool> Verbose)
ValiantMusicAPI.removeDuplicates
Removes any duplicate Sound Ids.
<table> ValiantMusicAPI.removeDuplicates(<table> targetTable)
ValiantMusicAPI.testAllSounds
Tests all of the sounds in the GitHub Table and then updates the music table.
<table> ValiantMusicAPI.testAllSounds(<bool> Verbose, <number> waitTime, <bool> UseMarketplace)
ValiantMusicAPI.printMusic
Prints all of the music table in a formatted way.
<void> ValiantMusicAPI.printMusic(<void>)
ValiantMusicAPI.getSound
Returns the Sound Id at the Index of the music table.
<string> ValiantMusicAPI.getSound(<number> Index)
ValiantMusicAPI.getSoundName
Returns the Sound Name at the Index of the music table.
<string> ValiantMusicAPI.getSoundName(<number> Index)
ValiantMusicAPI.saveMusicTableJSON
Saves the Music Table as a json file to your workspace.
<void> ValiantMusicAPI.saveMusicTableJSON(<bool> Verbose)
ValiantMusicAPI.exportMusicToClipboard
Copies the Music Table to your Clipboard in a formatted way.
ValiantMusicAPI.exportMusicToClipboard(<bool> Verbose)
Developer Resources
In this chapter, I will cover and share to you my knowledge. Note that I may be wrong at times, so if you notice an error, please tell me on my discord @ Stefanuk12#5820!
Metatables
Here, I will try to explain how to use metatables, and how to make them, as well as their uses.
NOTE: The Synapse X Team have made a better version of this, please check it out at these links:
Please check those out before reading this!
General Info
Metatables are a special type of tables where they contain certain metamethods. These metamethods can change how the table handles certain operations. Each metamethod has their own unique set amount of arguments that you can learn.
Why would we use them?
Metatables are used more often in OOP (Object Oriented Programming) where for example, if you want to add two tables, you cannot simply do that. You will need to make it into a metatable and change how the __add metamethod works. You may use metatables to create a shape like a square. You could allow the ability to add two squares by their areas, for example.
What are metamethods?
Metamethods are 'special keys' that perform 'special' actions when they are called. For example, lets say we have a table:
local exampleTable = {
specialNumber = 1,
}
and we get the specialNumber
from the table and assign it to a variable by doing:
local exampleTable = {
specialNumber = 1,
}
local specialNumber = exampleTable["specialNumber"]
Believe it or not, we have used two metamethod here.
Firtly, we have used __index. __index is called/fired when you access a key in a table. In this example, the key was specialNumber
.
Secondly, we have also used __newindex. __newindex is fired when a new index is added to a table or when an index is changed in a table. For example, the new index was specialNumber
and the new value is 1
. Within ___newindex, controls how this value is set.
However, we can edit these metamethods.
Editing metamethod/making metatables
We can easily make metatables by using the setmetatable
function. It accepts two arguments, both being a table. The first argument is the table you want to convert into a metatable and the second argument is a table including the metamethods you want to modify.
Lets make a simple metatable that returns "Hi" when it gets tostringed.
Firstly, make our table.
local tbl = {}
Now convert it into a metatable.
local tbl = {}
tbl = setmetatable(tbl, {
})
As of right now, this does nothing. We need to specify what metamethods we want to modify within the second table.
local tbl = {}
tbl = setmetatable(tbl, {
__tostring = function()
return "Hi"
end
})
We've created our first metatable. When we tostring the table, it will return "Hi". For tostring, the return value must be a string. So, lets test it out!
local tbl = {}
tbl = setmetatable(tbl, {
__tostring = function()
return "Hi"
end
})
tostring(tbl) --> Hi
It works!
It's really not that hard!
Identifying errors
Now that was simple but when you try to do more things, you may run into some certain errors, most notiably, "C Stack Overflow". This error is returned when the metamethod is in a constant loop of being called. Try executing this code:
local tbl = {Test = "hello"}
setmetatable(tbl, {
__index = function(t, k)
return t[k]
end
})
print(tbl[1])
You will get a C Stack Overflow error. This is because __index is fired when you try to get the value of a key from a table and it's using __index to return the correct value but then it needs to use __index again to get the correct value for when __index is called, etc etc. This is very confusing isn't it? Well, it's in a constant loop and it'll this breaks your code. So you usually do not want to use the same metamethod within the same metamethod. In this example, do not use __index in __index.
Ending
If you wish to check out all of the possible metamethods you can use then you can go to the lua wiki. Hopefully this introduced you into what metatables and metamethods are. If you have any questions then please ask me on Discord @ Stefanuk12#5820.
Note: ROBLOX does have extra metamethods, for example, __namecall.
Hooking metamethods
Previously, we discussed metatables and metamethods in normal vanilla lua but how about ROBLOX lua? Well in ROBLOX Lua there's a very interesting metamethod called __namecall. __namecall is fired when you use ":" on something. For example:
RemoteEvent:FireServer() -- Example 1
workspace:GetChildren() -- Example 2
Uniquely, there's no "set" amount of arguments but there are two main ones. Within a namecall hook, you can get the first argument which is the thing __namecall is being called on. In our example, that would be RemoteEvent
and workspace
and then a 'hidden' one called the method. In our example, that would be FireServer
and GetChildren
. In normal roblox lua, you cannot simply just get it like that but you need to use a custom function like getnamecallmethod()
.
What can we do with this?
Anything that uses remotes or namecall on the client can be easily exploited, if a game uses a Kick remote, you can simply block the remote and you will not get kicked or if you want to edit certain arguments like the damage amount you do, you can do that with __namecall. You can also use it to make remote spies and edit the return value of InvokeServer
. It's amazing what you can do with it.
How to hook metamethods
Firstly, we want to get the main game metatable. So we can do it by doing:
local mt = getmetatable(game)
While that may work, that is not how it should be done! The main game metatable has a metamethod that locks it called __metatable
. This means we can't do anything with it and it "hides" the metatable. Instead we need to use getrawmetatable
local mt = getrawmetatable(game)
Now we need to backup the metamethod we are changing to return it in the end or else anything that uses that metamethod, will break:
local mt = getrawmetatable(game)
local backupnamecall = mt.__namecall
Now lets change it! No, we cannot do that! The metatable is also locked, we need to unlock it. We can do this by using the function setreadonly
.
local mt = getrawmetatable(game)
local backupnamecall = mt.__namecall
setreadonly(mt, false)
Now we can change it, firstly, lets set some base variables inside the hook and return the backup.
local mt = getrawmetatable(game)
local backupnamecall = mt.__namecall
setreadonly(mt, false)
mt.__namecall = newcclosure(function(...)
local args = {...}
local method = getnamecallmethod()
return backupnamecall(...)
end)
I've done a lot of things that you may not recognise. Firstly, I've used the function newcclosure
. This function makes the command inside a C Function, no need to worry about what that exactly means but it means we can avoid detection levels of the hook being applied. Usually that could be detected by doing this:
local Env = getfenv()
xpcall(function()
return game:_____()
end, function()
for i = 0, 10 do
if getfenv(i) ~= Env then
warn("Detected metamethod tampering!")
end
end
end)
or
local OldErr, OldMsg = pcall(function() return game:____() end)
while wait(1) do
local Err, Msg = pcall(function() return game:____() end)
if OldErr ~= Err or OldMsg ~= Msg then
warn("Detected metamethod tampering!")
end
end
Back to our code, now lets make it print all of the things that use __namecall. Note: checkcaller
checks if the script was executed by the executor or not.
local mt = getrawmetatable(game)
local backupnamecall = mt.__namecall
setreadonly(mt, false)
mt.__namecall = newcclosure(function(...)
local args = {...}
local method = getnamecallmethod()
print('__namecall fired! Self - '..args[1]:GetFullName()..' Checkcaller - '..checkcaller()..' Args:')
table.foreach(args, print)
return backupnamecall(...)
end)
Now I will show you an anti-kick I made using hookfunction
and mainly, __namecall hooking
:
-- // Vars
local LocalPlayer = game:GetService("Players").LocalPlayer
-- // Base MT Vars + Funs
local mt = getrawmetatable(game)
local backupnamecall = mt.__namecall
setreadonly(mt, false)
-- // Anti kick
hookfunction(LocalPlayer.Kick, warn)
hookfunction(LocalPlayer.kick, warn)
mt.__namecall = newcclosure(function(...)
if string.lower(getnamecallmethod()) == "kick" then return end
return backupnamecall(...)
end)
That's the end of what I have to explain, for more examples, please visit the Synapse X Guide listed at the top!