Sheldon's Scripting Environment

A scripting environment made for letting users have more customizability over their product. (<- not ai)

Obfuscate

Paste a script; get back the same code, unreadable.

source.lua raw input

The scrambler isn't wired up yet — this is the shell. The output will land on its own page.

Obfuscated Script

The scrambled output lands here.

obfuscated.lua awaiting input
No output yet submit a script and the scrambled result lands here

Global Functions

Built-in global functions available in the LuaVM environment.

FunctionDescription
print(...)Outputs to console with [print] prefix
warn(...)Outputs to console with [warn] prefix
error(...)Throws a Lua error
hex(number)Formats a number as hex string (e.g. 0x7FF...)
tick()Returns GetTickCount64() — milliseconds since system start
loadstring(source)Loads and compiles Lua source code. Returns (function, nil) on success or (nil, error_message) on failure.
type(v)Overrides Lua's built-in type(). Behaves normally for all Lua values, and additionally recognizes Roblox Luau GC addresses returned by cheat.getgc()/cheat.rawget() — for a number that points at a live GC object it returns "table", "string", "function", "userdata", or "thread" depending on the object's type.

String Extensions

Appended to Lua's built-in string library:

FunctionSignatureDescription
string.regex(text, pattern)string, stringReturns true if the pattern is found (std::regex_search). Returns false on invalid patterns.

Example

1-- string.regex
2if string.regex("hello123", "%d+") then
3 print("contains digits")
4end
5
6-- type() also recognizes external Roblox GC addresses
7local gc = cheat.getgc()
8for _, t in next, gc do
9 if type(t) == "table" then
10 -- t is a number (Roblox table's memory address), but
11 -- type() reports "table" because it dereferences the GC header.
12 end
13end

base64

Base64 encoding and decoding. Always available (no library gate).

FunctionSignatureDescription
base64.Encode(data)stringEncodes a string to base64
base64.Decode(data)stringDecodes a base64 string back to plaintext

Example

1local encoded = base64.Encode("Hello, world!")
2print(encoded) -- SGVsbG8sIHdvcmxkIQ==
3local decoded = base64.Decode(encoded)
4print(decoded) -- Hello, world!

hash

Cryptographic hash functions. Always available (no library gate).

FunctionSignatureDescription
hash.Sha256(data)stringReturns SHA-256 hex digest
hash.Sha3(data)stringReturns SHA-3 hex digest
hash.Md5(data)stringReturns MD5 hex digest

Example

1local sha = hash.Sha256("hello")
2print(sha) -- 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

compress

LZ4 compression utilities. Always available (no library gate).

FunctionSignatureDescription
compress.Compress(data)stringCompresses data using LZ4 (does NOT prepend original size). Decompress expects a 4-byte size header — functions are currently incompatible.
compress.Decompress(data)stringDecompresses LZ4-compressed data back to original.

Example

1local comp = compress.Compress("Hello, world!")
2local dec = compress.Decompress(comp)
3print(dec) -- Hello, world!

task

Scheduling utilities for asynchronous execution.

FunctionSignatureDescription
task.spawn(fn)functionSchedules fn to run asynchronously
task.delay(seconds, fn)number, functionSchedules fn after seconds
task.wait(seconds)numberYields the coroutine, returns actual elapsed time. Must be called within a task.spawn'd or yielded coroutine (not from main thread).

Example

1task.spawn(function()
2 print("Runs asynchronously!")
3end)
4
5local elapsed = task.wait(1)
6print("Waited", elapsed, "seconds")

tween

Interpolate instance properties smoothly over time. Modelled on Roblox's TweenService.

FunctionSignatureDescription
tween.Info(time, delayTime?, style?)number, number?, string?Builds a TweenInfo table. style defaults to "Linear", delayTime to 0. You can also pass a raw table {time=..., delayTime=..., style=...} anywhere info is expected.
tween.Create(instance, info, props)Instance, table, tableCreates a tween that will interpolate each property in props from its current value to the target value. Returns a tween object.

Tween Object

MethodSignatureDescription
tween:Play(waitForFinish?)bool?Starts the tween. When waitForFinish is true, blocks the calling coroutine until every property has finished tweening; otherwise returns immediately. Both tween:Play(...) and tween.Play(...) syntaxes are accepted.
tween:Cancel()Snaps every property back to the value it had when the tween was created. Does not stop already-scheduled ticks — for that, let the tween finish or overwrite the property.

Easing Styles

Linear, Bounce, Elastic, Exponential, Cubic. Also exposed as tween.EasingStyle.Linear etc. for readability. Pass either the string or the constant.

Supported Property Types

  • number — e.g. Transparency, Reflectance, WalkSpeed
  • Vector3 — e.g. Position, Size, LinearVelocity, AngularVelocity
  • Color3 — e.g. Color

The property must be registered for the instance's class (see Class Properties) and must not be read-only. Unsupported properties raise an error at tween.Create time.

Example — Move a part

1local part = workspace.Part
2local info = tween.Info(1.5, 0, "Cubic")
3
4local t = tween.Create(part, info, {
5 Position = Vector3.new(0, 20, 0),
6 Transparency = 0.5,
7})
8
9t:Play()

Example — Wait until finished

1local part = workspace.Part
2
3local t = tween.Create(part, { time = 2, style = "Bounce" }, {
4 Position = part.Position + Vector3.new(0, 15, 0),
5})
6
7t:Play(true)
8print("Tween finished — running follow-up code")

Example — Chained tweens

1task.spawn(function()
2 local part = workspace.Part
3 local up = tween.Create(part, tween.Info(1, 0, "Cubic"), { Position = part.Position + Vector3.new(0, 10, 0) })
4 local down = tween.Create(part, tween.Info(1, 0, "Bounce"), { Position = part.Position })
5
6 up:Play(true)
7 down:Play(true)
8end)

Notes

  • Each property tweens independently. Passing multiple properties runs them in parallel on the same schedule.
  • tween:Play(true) blocks the calling coroutine — use task.spawn if you don't want to freeze your main script.
  • Tweens write directly to memory. Physics-driven properties (Position, CFrame, velocities) update visually but the engine may resimulate them next physics step; combine with anchoring or velocity-zeroing for full control.
  • Tween ticks run on a dedicated background thread and continue even if the script yields.

memory

Raw memory read/write operations. Requires the Memory library to be enabled.

Requires: Memory library enabled
FunctionSignatureDescription
memory.Read(type, address)string, uintptrReads from memory
memory.Write(type, address, value)string, uintptr, anyWrites to memory
memory.GetRTTI(address)uintptrGets RTTI type from vtable
memory.GetBase()Returns Roblox process base address
memory.Rebase(offset)uintptrReturns base + offset

Supported Types

Read/Write: float, double, int, uint, bool, byte, short, ushort, int64, uint64, string, vector2, vector3, color3.

Write also supports: pointer.

Example

1local base = memory.GetBase()
2local value = memory.Read("int", base + 0x1234)
3print(hex(value))
4memory.Write("int", base + 0x1234, 999)

cheat

Cheat utilities — event registration, raycasting, server/teleport helpers, and the Roblox Luau garbage-collector interface.

Events

FunctionSignatureDescription
Register(eventType, fn)string, functionRegister a callback for an event type. Fires for the lifetime of the script until unregistered.
Unregister(eventType, fn)string, functionUnregister a previously registered callback. Pass the same function reference used with Register.

Event Types

EventDescription
onPaintFires every frame for rendering
onUpdateFires every frame for logic updates
onSlowUpdateFires at a reduced rate
teleportFires when the player teleports

Example

1local function onPaint()
2 draw.Text("ESP Label", 100, 50, Color3.new(1, 1, 0))
3end
4
5cheat.Register("onPaint", onPaint)
6
7-- Later, stop drawing:
8cheat.Unregister("onPaint", onPaint)

Garbage Collector

Read and write the target process's Luau GC directly. getgc enumerates live objects; rawget/rawset operate on a single external table by address; setgc writes across every table that has a key.

FunctionSignatureDescription
getgc(includeAll?, searchKey?)bool?, string?Enumerates the target process's Luau GC. Default returns tables only; pass true as the first arg to include strings, functions, userdata, and threads. If searchKey is a non-empty string, getgc instead scans every GC table for that key and returns the first non-nil value it finds — decoded to a Lua value (string/number/boolean) where possible, or the raw address as a number for GC-typed values. Returns nil if no table has the key.
setgc(key, value)string, bool | number | addressIterates every GC table and writes value into every table that already has key. Accepts bool, number, or a GC address (the tt is inferred from the GC object's header). Cannot create new keys and does not issue a GC write barrier. String literals are rejected — pass an existing TString address (a number) instead.
rawget(addr, key | true)number, string | boolReads a field on the external table at addr. 2nd arg: pass a string key to fetch a single field, or pass true to dump the whole table as a Lua table. Missing keys return nil. Returned GC-typed values (tables/functions/userdata) come back as their raw address number; call rawget recursively on them to dive deeper.
rawset(addr, key, value)number, string, anyWrites an existing field on the external table at addr. Accepts nil, bool, number, or an address for GC-typed values (the tt is inferred from the GC object's header). Returns true on success, false if the key doesn't already exist. Cannot create new keys and does not issue a GC write barrier.

Example

1-- GC enumeration + rawget / rawset (Roblox Luau)
2-- Find every weapon config and give it unlimited ammo.
3for _, t in next, cheat.getgc() do
4 if type(t) == "table"
5 and cheat.rawget(t, "MaxAmmo") ~= nil then
6 cheat.rawset(t, "MaxAmmo", math.huge)
7 cheat.rawset(t, "CurrentAmmo", math.huge)
8 end
9end
10
11-- Shortcut: getgc(includeAll, searchKey) walks the GC for you
12-- and returns the first table's value for that key, or nil.
13local ammo = cheat.getgc(false, "MaxAmmo")
14if ammo then print("first MaxAmmo seen =", ammo) end
15
16-- setgc(key, value) writes into every GC table that has the key.
17-- One-liner replacement for the loop above:
18cheat.setgc("MaxAmmo", math.huge)
19cheat.setgc("CurrentAmmo", math.huge)
20
21-- Dump every field on a table (debugging).
22local dump = cheat.rawget(someAddr, true)
23for k, v in pairs(dump) do print(k, "=", v) end

Raycast

FunctionSignatureDescription
Raycast(pos, dir, distance, ignoreTransparent?)Vector3, Vector3, number, bool?Casts a ray. Returns (hit, instance, position, distance).

Example

1local hit, inst, pos, dist = cheat.Raycast(
2 Vector3.new(0, 5, 0),
3 Vector3.new(0, -1, 0),
4 500
5)
6
7if hit then
8 print("hit", inst.Name, "at", pos, "dist", dist)
9end

Servers & Teleport

FunctionSignatureDescription
TeleportPlace(placeId, jobId?)string, string?Teleport to a Roblox place/server. Also accepts a table {PlaceId, JobId}. Returns bool.
GetServers(placeId?)string?Fetches game server list. Returns table of servers with JobId, PlaceId, UniverseId, GameName, Playing, MaxPlayers, Ping, Fps. Defaults to current place.
GetUniverseId(placeId?)string?Gets universe ID for a place. Defaults to current place.

Example

1-- Teleport to a place
2local ok = cheat.TeleportPlace("123456789")
3print("Teleport:", ok)
4
5-- Get servers for current place
6local servers = cheat.GetServers()
7for _, srv in ipairs(servers) do
8 print(srv.JobId, srv.Playing, "/", srv.MaxPlayers)
9end

internet

HTTP networking functions.

FunctionSignatureDescription
internet.get(url, timeout?, info?)string, number?, table?HTTP GET. Info supports {headers={}}. Returns {text, status_code}
internet.post(url, body?, timeout?, info?)string, string?, number?, table?HTTP POST

Example

1local res = internet.get("https://api.example.com/data", 5000)
2print(res.status_code)
3print(res.text)

input

Mouse and keyboard input simulation. Requires the Input library to be enabled.

Requires: Input library enabled

Mouse

FunctionSignatureDescription
input.MoveMouse(dir, relative?)Vector2, bool?Move mouse (absolute or relative to overlay)
input.GetMousePosition()Current cursor position
input.MouseClick(click, time?)int, int?Simulate click (1=left, 2=right)
input.MousePress(click)intPress button
input.MouseRelease(click)intRelease button
input.GetScrollDelta()Scroll wheel delta
input.GetMoveDelta()Mouse move delta

Keyboard

FunctionSignatureDescription
input.IsHeld(vKey)int|stringKey held down
input.IsPressed(vKey)int|stringKey just pressed
input.IsReleased(vKey)int|stringKey just released
input.PressKey(vKey, time?)int|string, int?Press and release key
input.HoldKey(vKey)int|stringHold key down
input.ReleaseKey(vKey)int|stringRelease key
input.Type(text, time?)string, int?Type text character by character

Example

1-- Center mouse and click
2input.MoveMouse(Vector2.new(960, 540))
3input.MouseClick(1)
4
5-- Type a message
6input.Type("Hello, world!", 50)

file

Sandboxed file system operations. Requires the File_Management library to be enabled.

Requires: File_Management library enabled

All operations are sandboxed to {workspaceDir}/scripts/SandboxEnv/. Path traversal (..) is blocked.

FunctionSignatureDescription
file.write(location, content)string, stringWrite file
file.read(location)stringRead file
file.rename(location, newName)string, stringRename/move file
file.delete(location)stringDelete file
file.list(location)stringList directory
file.append(location, content)string, stringAppend to file

Example

1file.write("config.txt", "Hello, world!")
2local content = file.read("config.txt")
3print(content)
4file.delete("config.txt")

utility

Various utility functions including world-to-screen projection and clipboard access.

FunctionSignatureDescription
utility.WorldToScreen(worldPos)Vector3Project world position to screen. Returns (Vector2 screenPos, bool isOnScreen).
utility.GetClipboard()Get clipboard text
utility.SetClipboard(text)stringSet clipboard text

Example

1-- Project a player's position to screen
2local pos = utility.WorldToScreen(player.Character.HumanoidRootPart.Position)
3draw.Text("Player", pos.X, pos.Y, Color3.new(1, 1, 1))

GetClipboard / SetClipboard require Clipboard library enabled.

entity

Custom entity management system.

FunctionSignatureDescription
entity.AddEntity(key, data)string, tableAdd custom entity. data supports: Character, PrimaryPart, Name, DisplayName, Team, TeamColor, DoTeamCheck, Humanoid, MaxHealth, Health, RemoveOnDeath, Bones
entity.EditEntity(key, data)string, tableEdit entity data
entity.RemoveEntity(key)stringRemove entity
entity.Clear()Remove all entities
entity.GetEntity(key)stringGet entity data. Returns Character, PrimaryPart, Name, DisplayName, Team, Humanoid, MaxHealth, Health, UserId, IsEntity
entity.GetPlayers(includeEnemies?, includeEntities?)bool?, bool?Get players/entities data. Additionally returns: IsAlive, IsCameraVisible, IsLocal, IsPreview, IsTargeted, IsFriend, IsWhitelisted, IsEnemy, RigType

Example

1entity.AddEntity("target", {
2 Character = char,
3 PrimaryPart = char.HumanoidRootPart,
4 Name = "Player1"
5})
6local data = entity.GetEntity("target")
7print(data.Name, data.Character)

draw

2D drawing primitives for rendering overlays.

FunctionSignature
draw.Text(text, x, y, color?, font?, alpha?)string, number, number, Color3?, string?, int?
draw.TextOutlined(text, x, y, color?, font?, alpha?)same
draw.GetTextSize(text, font?)string, string?
draw.Line(x1,y1,x2,y2, color?, thickness?, alpha?)
draw.Rect(x,y,w,h, color?, thickness?, rounding?, alpha?)
draw.RectFilled(x,y,w,h, color?, rounding?, alpha?)
draw.Circle(cx,cy,radius, color?, thickness?, segments?, alpha?)
draw.CircleFilled(cx,cy,radius, color?, segments?, alpha?)
draw.Triangle(x1,y1,x2,y2,x3,y3, color?, thickness?, alpha?)
draw.TriangleFilled(x1,y1,x2,y2,x3,y3, color?, alpha?)
draw.Gradient(x,y,w,h, startColor, endColor, isHorizontal, startAlpha?, endAlpha?)
draw.Image(textureId, x,y,w,h, r,g,b,a)int, number,number,number,number, int,int,int,int
draw.Polyline(points, color, closed, thickness, alpha?)table, Color3, bool, number, int?
draw.ConvexPolyFilled(points, color, alpha?)
draw.ComputeConvexHull(points)table
draw.GetPartCorners(part)Instance
draw.DeltaTime()

draw.GetTextSize returns width, height as two float values.

Example

1-- Draw overlay text and shapes
2draw.Text("Hello World", 100, 100, Color3.new(1, 1, 1))
3draw.RectFilled(50, 50, 200, 100, Color3.new(1, 0, 0), 4, 0.8)

gui

Overlay GUI management functions.

FunctionSignatureDescription
gui.AddTab(tabName, func)string, functionAdd a scripted runtime tab
gui.RemoveTab(tabName)stringRemove a runtime tab
gui.IsTab(tabName)stringCheck if tab exists
gui.GetMenuState(checkForeground?)bool?Menu overlay state
gui.IsForeground()Roblox is foreground window
gui.GetWindowSize()Overlay window dimensions

Example

1-- Add a runtime tab
2gui.AddTab("My Script", function()
3 print("Tab opened!")
4end)

imgui

Dear ImGui-style immediate mode GUI system.

Windowing

FunctionSignature
imgui.Begin(name, flags?)string, int?
imgui.End()
imgui.BeginChild(id, w?, h?, border?, flags?)
imgui.EndChild()
imgui.SetNextWindowPos(x,y, cond?, pivot_x?, pivot_y?)
imgui.SetNextWindowSize(w,h, cond?)
imgui.SetNextWindowBgAlpha(alpha)
imgui.SetNextWindowCollapsed(collapsed, cond?)
imgui.SetNextWindowFocus()

Position

FunctionSignature
imgui.GetWindowPos()
imgui.GetWindowSize()
imgui.GetCursorPos()
imgui.SetCursorPos(x,y)
imgui.GetCursorScreenPos()
imgui.SetCursorScreenPos(x, y)
imgui.GetCursorStartPos()
imgui.GetContentRegionAvail()
imgui.GetWindowContentRegionMin()
imgui.GetWindowContentRegionMax()
imgui.GetContentAvail()
imgui.GetFrameHeight()
imgui.GetFrameHeightWithSpacing()
imgui.SameLine(...)
imgui.Spacing()
imgui.Separator()
imgui.SeparatorText(label)

Indentation

FunctionSignature
imgui.Indent(w?)
imgui.Unindent(w?)
imgui.BeginIndent()
imgui.EndIndent()

Groups

FunctionSignature
imgui.BeginGroup()
imgui.EndGroup()

Item Width

FunctionSignature
imgui.PushItemWidth(width)
imgui.PopItemWidth()

ID Stack

FunctionSignature
imgui.PushID(id)
imgui.PopID()

Dummy

FunctionSignature
imgui.Dummy(w, h)Adds an empty item with the specified size

Text Utilities

FunctionSignature
imgui.CalcTextSize(text)Returns rendered width, height of text

Widgets

FunctionSignature
imgui.Button(text, w?, h?)
imgui.TabButton(text, w?, h?, active?)
imgui.Checkbox(text, v)
imgui.Slider(title, v, min, max)
imgui.SliderInt(title, v, min, max)
imgui.DragFloat(title, v, speed?, min?, max?, format?, disabled?)returns changed, value
imgui.DragInt(title, v, speed?, min?, max?, format?, disabled?)returns changed, value
imgui.DragFloat2(title, x, y, speed?, min?, max?, format?, disabled?)labeled row, returns changed, x, y
imgui.DragFloat3(title, x, y, z, speed?, min?, max?, format?, disabled?)labeled row, returns changed, x, y, z
imgui.InputText(title, v, placeholder, w?, flags?)
imgui.MultilineInput(title, v, placeholder, w?, flags?)
imgui.WidgetsText(text, color?, alpha?)
imgui.BeginContent(title, h?, w?)
imgui.EndContent()
imgui.ColorPicker(title, color?, alpha?)
imgui.ProgressBar(title, value01, width, divisions, align?)
imgui.Note(text)
imgui.ListBox(label, items, height?, w?, listHeight?)
imgui.Dropdown(title, items, current?)
imgui.Shimmer(w, h)

Drag Widgets

DragFloat / DragInt are draggable numeric fields. Drag horizontally to change the value; click without dragging to type a value directly. Hold Ctrl while dragging for finer steps (0.1×), Shift for coarser (10×).

  • speed — value change per pixel dragged (default 1).
  • min, max — clamp range. Leave both 0 (or equal) for an unbounded field.
  • format — printf-style, may include a suffix, e.g. "%.2f studs" or "%d rounds".
  • disabled — when true, the field is dimmed and ignores input.
  • DragFloat2 / DragFloat3 render a labeled property row with 2 / 3 boxes sharing one row's width — ideal for Vector2 / Vector3.

Tabs

FunctionSignature
imgui.BeginTabs(title, enableAnim?)
imgui.BeginTab(name)
imgui.EndTab()
imgui.EndTabs()

Item State

FunctionSignature
imgui.IsItemHovered(flags?)
imgui.IsItemActive()
imgui.IsItemFocused()
imgui.IsItemClicked(btn?)
imgui.IsAnyItemHovered()
imgui.IsAnyItemActive()
imgui.IsAnyItemFocused()
imgui.GetItemRectMin()
imgui.GetItemRectMax()
imgui.GetItemRectSize()
imgui.IsWindowHovered(flags?)
imgui.IsWindowFocused(flags?)

Columns

FunctionSignature
imgui.Columns(...)
imgui.NextColumn()
imgui.GetColumnIndex()
imgui.GetColumnWidth()
imgui.SetColumnWidth()

Example

1imgui.Begin("My Window", 0)
2imgui.Text("Hello, world!")
3if imgui.Button("Click Me") then
4 print("Button clicked!")
5end
6
7-- Drag widgets return (changed, newValue). Reassign to persist.
8local changed, speed = imgui.DragFloat("Speed", speed, 0.5, 0, 100, "%.1f")
9if changed then print("Speed is now", speed) end
10
11-- Vector3 as a labeled 3-box row
12local moved, px, py, pz = imgui.DragFloat3("Position", px, py, pz, 0.25)
13
14-- A disabled (read-only looking) field
15imgui.DragFloat("Locked", 42, 1, 0, 0, "%.2f", true)
16imgui.End()

fflags

FastFlag (FFlag) reading and writing utilities.

FunctionSignatureDescription
fflags.Get(name, type, original?)string, string, bool?Get an FFlag value
fflags.Set(name, type, value)string, string, anySet an FFlag value
fflags.GetAll()Get all FFlags. Returns a table of entries, each with name, runtime, and original fields.

Types

float, double, int, uint, bool, byte, short, ushort, int64, uint64, string. Set also supports pointer.

Example

1local val = fflags.Get("FFlagEnableVR", "bool")
2print("VR enabled:", val)
3fflags.Set("FFlagEnableVR", "bool", true)

Instance

The core Roblox instance type. Access instances via game, Instance constructors, or methods.

Properties

PropertyTypeAccessDescription
NamestringRWInstance name
ClassNamestringROClass name
ParentInstanceRWParent instance
AddressuintptrRORaw memory address
FullNamestringROFull hierarchical path

Methods

MethodReturnsDescription
:FindFirstChild(name)Instance|nilFind first child by name
:WaitForChild(name, timeout?)Instance|nilWait for child to appear
:FindFirstChildOfClass(className)Instance|nilFind first child of class
:FindDescendants(name)tableFind all descendants by name
:FindDescendantsOfClass(className)tableFind all descendants of class
:GetChildren()tableDirect children
:GetDescendants()tableAll descendants
:Ancestors()tableAll ancestors
:IsDescendantOf(ancestor)boolCheck ancestry
:IsA(className)boolCheck class
:IsAncestorOf(descendant)boolCheck if is ancestor
:GetAttributes()tableAttribute table
:GetAttribute(name)string|nilGet attribute
:SetAttribute(name, value)Set attribute
:GetTags()tableCollection tags
:HasTag(tag)boolCheck tag
:RenameTag(oldName, newName)Rename tag
:GetPropertyChangedSignal(property)RBXScriptSignalReturns a signal that fires when the given property changes

Example

1local part = workspace.Part
2local sig = part:GetPropertyChangedSignal("Position")
3sig:Connect(function()
4 print("Position changed!")
5end)

Meta-Behavior

  • instance.PropertyName first checks built-in properties, then registered class properties, then falls back to child lookup by name.
  • Setting properties respects read-only flags.
  • instance.Changed returns an RBXScriptSignal that fires when any registered class property changes. Usage: instance.Changed:Connect(function(propertyName, newValue) ... end).
  • for k, v in pairs(instance) do ... end iterates over built-in properties, class properties, and children.

DataModel

Both game and Game resolve to the Roblox DataModel instance.

DataModel inherits from Instance, so all Instance methods are available.

GetService

MethodReturnsDescription
:GetService(className)Instance|nilGet service by class name
1local Players = game:GetService("Players")
2local RunService = game:GetService("RunService")

RemoteEvent

FireServer, InvokeServer, and bidirectional remote spy — extra members added to RemoteEvent, UnreliableRemoteEvent, and RemoteFunction instances.

These members appear on top of the standard Instance API for any instance whose ClassName matches. Reading a spy signal auto-installs the underlying hook on first read — you don't need to opt in ahead of time.

Remotes parented anywhere under RobloxReplicatedStorage are treated as protected — trying to access the spy on them errors with Protected <ClassName>.

Methods

MethodApplies toDescription
FireServer(...)RemoteEvent, UnreliableRemoteEventFires the remote to the server with the given args.
InvokeServer(...)RemoteFunctionInvokes the remote against the server with the given args. Currently fire-and-forget — the server WILL reply but the return value is not routed back to Lua yet, so this returns nil. If you need the reply value, pair a RemoteEvent both directions instead.

Example

1local rem = game:GetService("ReplicatedStorage").Events.MyEvent
2rem:FireServer("hello", 42, true)
3
4-- Instances, nested arrays, and string-keyed dicts are all supported.
5rem:FireServer(
6 game:GetService("Players").LocalPlayer,
7 { 1, 2, 3 },
8 { action = "buy", itemId = 7, meta = { source = "shop" } }
9)
10
11local func = game:GetService("ReplicatedStorage").Functions.RequestInventory
12func:InvokeServer("get", { slot = 1 }) -- returns nil for now

Outgoing spy (client → server)

Fires whenever anything in the game (Lua, C++, other exploits) sends args from this client to the server through the remote. One shared hook per class covers every instance — the first read installs it.

MemberTypeDescription
OnFireServerRBXScriptSignalCallback fires with the args when this RemoteEvent / UnreliableRemoteEvent is fired to the server.
OnServerEventRBXScriptSignalAlias for OnFireServer.
OnInvokeServerRBXScriptSignalCallback fires with the args when this RemoteFunction is invoked against the server. RemoteFunction only.
OnServerInvokeRBXScriptSignalAlias for OnInvokeServer.

Example

1local rem = game:GetService("ReplicatedStorage").Events.MyEvent
2
3rem.OnFireServer:Connect(function(...)
4 print("FireServer intercepted:", ...)
5end)
6
7-- :Wait() yields the coroutine and returns the next fire's args.
8task.spawn(function()
9 local a, b, c = rem.OnFireServer:Wait()
10 print("first fire:", a, b, c)
11end)
12
13local func = game:GetService("ReplicatedStorage").Functions.GetInventory
14func.OnInvokeServer:Connect(function(...)
15 print("InvokeServer intercepted:", ...)
16end)

Incoming spy (server → client)

Fires whenever the server sends args to this client through the remote. Hooked per-instance — the first read installs one shared hooked vtable per unique class-vptr, then every subsequent instance is cheap. Callback receives the args the server sent.

MemberTypeDescription
OnClientEventRBXScriptSignalCallback fires with the args when the server sends to this client through the RemoteEvent / UnreliableRemoteEvent.
OnClientInvokeRBXScriptSignalCallback fires with the args when the server invokes this RemoteFunction against the client. Purely observational — the connect does not assign a return value the server sees. RemoteFunction only.

Example

1local rem = game:GetService("ReplicatedStorage").Events.MyEvent
2
3rem.OnClientEvent:Connect(function(...)
4 print("server -> client:", ...)
5end)
6
7local func = game:GetService("ReplicatedStorage").Functions.GetInventory
8func.OnClientInvoke:Connect(function(...)
9 print("server invoked us with:", ...)
10end)

Class Properties

Registered class properties for common Roblox classes.

Part / MeshPart (BasePart)

PropertyTypeAccess
TransparencyfloatRW
ReflectancefloatRW
PositionVector3RW
SizeVector3RW
LinearVelocityVector3RW
AngularVelocityVector3RW
RotationVector3 (euler)RW
RightVectorVector3RO
UpVectorVector3RO
ForwardVectorVector3RO
AnchoredboolRW
CanCollideboolRW
ColorColor3RW

Humanoid

PropertyTypeAccess
HealthfloatRW
MaxHealthfloatRW
WalkSpeedfloatRW
JumpPowerfloatRW
JumpHeightfloatRW
HipHeightfloatRW
MaxSlopeAnglefloatRW
PlatformStandboolRW
AutoRotateboolRW
UseJumpPowerboolRW
SitboolRW

Player

PropertyTypeAccess
UserIduintptrRO
DisplayNamestringRO
CharacterInstanceRO
CameraModeintRW
NetworkPingfloatRO

NetworkPing returns the player's ping in ms. Only non-nil for LocalPlayer.

Players

PropertyTypeAccess
LocalPlayerInstance (Player)RO
GetPlayersfunctionRO
PlayerAddedRBXScriptSignalRO
PlayerRemovingRBXScriptSignalRO

Camera

PropertyTypeAccess
FovfloatRW
PositionVector3RW
SubjectInstance|nilRW
CameraTypeintRW

Workspace

PropertyTypeAccess
GravityfloatRW

Lighting

PropertyTypeAccess
BrightnessfloatRW
FogStartfloatRW
FogEndfloatRW
ClockTimefloatRW
ExposurefloatRW
LatitudefloatRW
GlobalShadowsboolRW
FogColorColor3RW
AmbientColor3RW
ColorShiftTopfloatRW
ColorShiftBottomfloatRW
SkyTopAmbientColor3RW
SkyBottomAmbientColor3RW
LightColorColor3RW
LightDirectionVector3RW
TrueSunPositionVector3RW
TrueMoonPositionVector3RW
SkyInstanceRO
AtmosphereInstanceRO
SunRaysInstanceRO
ColorCorrectionInstanceRO

Sky

PropertyTypeAccess
SkyboxBk / SkyboxDn / SkyboxFt / SkyboxLf / SkyboxRt / SkyboxUpstringRW
MoonTextureIdstringRW
MoonSizefloatRW
SunTextureIdstringRW
SunSizefloatRW
StarCountintRW
SkyboxOrientationVector3RW

Atmosphere

PropertyTypeAccess
ColorColor3RW
DecayColor3RW
GlarefloatRW
HazefloatRW
DensityfloatRW

SunRays

PropertyTypeAccess
IntensityfloatRW
SpreadfloatRW

ColorCorrection

PropertyTypeAccess
BrightnessfloatRW
ContrastfloatRW
SaturationfloatRW
TintColorColor3RW

Teams

PropertyTypeAccess
GetPlayersfunction(team)RO

FriendService

PropertyTypeAccess
FriendsStatusfunction()RO
GetFriendStatusfunction(userId, otherUserId?)RO

Value Objects

IntValue, BoolValue, StringValue, NumberValue, ObjectValue, Color3Value, Vector3Value — all have a single Value property of their respective type (RW).

Animation

PropertyTypeAccess
AnimationIdstringRW

Animator

PropertyTypeAccess
ActiveAnimationsfunction()RO

AnimationTrack

PropertyTypeAccess
SpeedfloatRW
TimePositionfloatRO
InfluencefloatRW
AnimationInstanceRO
AnimatorInstanceRO

VehicleSeat

PropertyTypeAccess
MaxSpeedfloatRW
TorquefloatRW
TurnSpeedfloatRW

ProximityPrompt

PropertyTypeAccess
HoldDurationfloatRW

GuiObject (base class for GUI elements)

Inherited by Frame, TextLabel, TextBox, TextButton, ImageLabel, ScreenGui.

PropertyTypeAccess
RotationfloatRW
SizeUDim2RW
PositionUDim2RW
BackgroundColor3Color3RW
BorderColor3Color3RW
VisibleboolRW

ScreenGui

Inherits all GuiObject properties.

PropertyTypeAccess
EnabledboolRW
DisplayOrderintRW
ResetOnSpawnboolRW
IgnoreGuiInsetboolRW
AbsoluteSizeVector2RO
AbsolutePositionVector2RO

TextLabel

Inherits all GuiObject properties.

PropertyTypeAccess
TextstringRW
TextColor3Color3RW

TextBox

Inherits all GuiObject properties.

PropertyTypeAccess
TextstringRW
PlaceholderTextstringRW
TextColor3Color3RW
PlaceholderColor3Color3RW

TextButton

Inherits all GuiObject properties.

PropertyTypeAccess
TextstringRW
TextColor3Color3RW

ImageLabel

Inherits all GuiObject properties.

PropertyTypeAccess
ImagestringRW
ImageColor3Color3RW
ImageTransparencyfloatRW

Frame

Inherits all GuiObject properties. No additional own properties.

Custom Types

Vector3, Vector2, Color3, UDim, and UDim2 types with Roblox-like semantics.

Vector3

1Vector3.new() -- (0, 0, 0)
2Vector3.new(x, y, z)
3Vector3.new(n) -- (n, n, n)
MemberType
.xfloat
.yfloat
.zfloat
.Magnitudefloat (RO)
.UnitVector3 (RO)

Operators: +, -, *, /, unary -

Vector2

1Vector2.new() -- (0, 0)
2Vector2.new(x, y)
3Vector2.new(n) -- (n, n)
MemberType
.xfloat
.yfloat
.Magnitudefloat (method)
.UnitVector2 (RO)

Color3

1Color3.new(r, g, b) -- values > 1 are divided by 255
2Color3.fromRGB(r, g, b)
3Color3.fromHSV(h, s, v)
4Color3.fromHex(string)
MemberType
.rfloat
.gfloat
.bfloat

Static constants: .White, .Red, .Green, .Blue, .Yellow, .Black

UDim

1UDim.new() -- UDim(0, 0)
2UDim.new(scale) -- UDim(scale, 0)
3UDim.new(scale, offset) -- UDim(scale, offset)
PropertyTypeAccess
.ScalefloatRW
.OffsetintRW

Operators: +, -, tostring

UDim2

1UDim2.new() -- UDim2(0,0, 0,0)
2UDim2.new(UDim x, UDim y) -- UDim2
3UDim2.new(float xs, int xo, float ys, int yo) -- UDim2
4UDim2.fromScale(float xs, float ys) -- UDim2
5UDim2.fromOffset(int xo, int yo) -- UDim2
6UDim2.Lerp(UDim2 a, UDim2 b, float alpha) -- UDim2
PropertyTypeAccess
.XUDimRW
.YUDimRW

Operators: +, -, tostring

Example

1local u = UDim2.fromOffset(100, 50)
2local v = UDim2.new(0.5, 0, 0, 20)
3local result = u + v
4
5local udim = UDim.new(0.5, 10)
6print(udim.Scale, udim.Offset)

RBXScriptSignal (Events)

Roblox-style event connection system.

1local connection = signal:Connect(fn)
2connection:Disconnect()
3connection:Stop()
4
5local result = signal:Wait() -- yields coroutine

Built-in Signals

SignalDescription
Players.PlayerAddedFires when a new player is detected
Players.PlayerRemovingFires when a player leaves

Library Gating

Some libraries must be explicitly enabled before use.

LibraryGated Functions
MemoryAll memory.*
Clipboardutility.GetClipboard, utility.SetClipboard
File_ManagementAll file.*
InputAll input.*

Notes

Additional implementation details and behavior notes.

  • Compound assignments (+=, -=, *=, /=, **=) are automatically expanded before execution.
  • pcall and xpcall are overridden to support script interruption.
  • Scripts can be interrupted mid-execution via a Lua instruction hook (every 10 instructions) that checks the stop flag.
  • File operations are sandboxed; path traversal (..) is blocked.
  • print() outputs with prefix [print]; warn() outputs with prefix [warn].
  • tick() returns GetTickCount64() — milliseconds since system start (not UNIX time).
  • loadstring returns (function, nil) on success or (nil, error_message) on failure.
  • Instance property access via __index checks built-in properties first, then registered class properties, then falls back to child lookup by name.
  • Property writes respect read-only flags — silently fail on RO properties like Address, FullName, RightVector, UpVector, ForwardVector, etc.
  • Both game and Game globals resolve to the Roblox DataModel instance.
  • Compressed data from compress.Compress does NOT store the original size, but compress.Decompress expects it. This is a known inconsistency — Compress and Decompress are currently incompatible.