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:

Objects and Metatables

Importance of Newcclosure

Metamethod Hook Examples

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!