local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()
Rayfield:Notify({
Title = "Loading Gojo Hub",
Content = "Thanks For Using Gojo Hub!",
Duration = 3,
Image = 4483362458,
})
local Window = Rayfield:CreateWindow({
Name = "Gojo Hub | MM2",
Icon = 0, -- Icon in Topbar. Can use Lucide Icons (string) or Roblox Image (number). 0 to use no icon (default).
LoadingTitle = "Loading Gojo Hub",
LoadingSubtitle = "by Gojo",
ShowText = "GojoHub", -- for mobile users to unhide rayfield, change if you'd like
Theme = "Default", -- Check https://[Log in to view URL]
ToggleUIKeybind = "K", -- The keybind to toggle the UI visibility (string like "K" or Enum.KeyCode)
DisableRayfieldPrompts = false,
DisableBuildWarnings = false, -- Prevents Rayfield from warning when the script has a version mismatch with the interface
ConfigurationSaving = {
Enabled = true,
FolderName = nil, -- Create a custom folder for your hub/game
FileName = "Gojo Hub"
},
Discord = {
Enabled = false, -- Prompt the user to join your Discord server if their executor supports it
Invite = "noinvitelink", -- The Discord invite code, do not include discord.gg/. E.g. discord.gg/ ABCD would be ABCD
RememberJoins = true -- Set this to false to make them join the discord every time they load it up
},
KeySystem = true, -- Set this to true to use our key system
KeySettings = {
Title = "Gojo Hub | Key System",
Subtitle = "Key Link In Discord!",
Note = "Key Link In DIscord!", -- Use this to tell the user how to get a key
FileName = "GojoHubKey", -- It is recommended to use something unique as other scripts using Rayfield may overwrite your key file
SaveKey = true, -- The user's key will be saved, but if you change the key, they will be unable to use your script
GrabKeyFromSite = true, -- If this is true, set Key below to the RAW site you would like Rayfield to get the key from
Key = {"https://[Log in to view URL]"} -- List of keys that will be accepted by the system, can be RAW file links (pastebin, github etc) or simple strings ("hello","key22")
}
})
setclipboard("https://[Log in to view URL]")
Rayfield:Notify({
Title = "Discord Link Copied",
Content = "The discord link was copied to clipboard: https://[Log in to view URL]",
Duration = 4,
})
Rayfield:Notify({
Title = "Thanks For Using Gojo Hub!",
Content = "V.1.0",
Duration = 1,
Image = "rewind",
})
-- Wait for game to load
if not game:IsLoaded() then
local s = pcall(function() game.Loaded:Wait() end)
if not s then repeat task.wait() until game:IsLoaded() end
end
-- Only work in MM2
if game.PlaceId ~= 142823291 then return end
-- Services
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
-- Player variables
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local RootPart = Humanoid and Humanoid.RootPart or Character:FindFirstChild("HumanoidRootPart") or Character:FindFirstChild("Torso") or Character:FindFirstChild("UpperTorso")
-- Character setup
LocalPlayer.CharacterAdded:Connect(function(newChar)
Character = newChar
Humanoid = Character:WaitForChildOfClass("Humanoid")
RootPart = Humanoid.RootPart or Character:WaitForChild("HumanoidRootPart")
end)
local InfoTab = Window:CreateTab("❓Info")
local MainTab = Window:CreateTab("🏠Main")
local PlayerTab = Window:CreateTab("🙍♂Player")
local TeleportTab = Window:CreateTab("⛳Teleport")
local AutoFarmTab = Window:CreateTab("♻AutoFarm")
local EspTab = Window:CreateTab("🟥Esp")
local MiscTab = Window:CreateTab("➕Misc")
local RolesTab = Window:CreateTab("🧏Roles")
local SettingsTab = Window:CreateTab("⚙Settings")
local ActivateFly,AlrActivatedFlyPC,ActivateInfiniteJump,ActiveNoclip = false,false,false,false,false,false,false,false,false,false,false,false,false
local ParagraphInfoServer = InfoTab:CreateParagraph({Title = "Info", Content = "Loading"})
-- Utility Functions
local function getRoles()
local data = ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
local roles = {}
for plr, plrData in pairs(data) do
if not plrData.Dead then
roles[plr] = plrData.Role
end
end
return roles
end
local function getMurdererTarget()
local data = ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
for plr, plrData in pairs(data) do
if plrData.Role == "Murderer" then
local player = Players:FindFirstChild(plr)
if player then
if player == LocalPlayer then return nil, true end
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then return hrp.Position, false end
local head = char:FindFirstChild("Head")
if head then return head.Position, false end
end
end
end
end
return nil, false
end
-- Roles Tab
local rolesLabel = RolesTab:CreateLabel("Sheriff: None\nMurder: None")
local sheriffName = "none"
local murderName = "none"
local function UpdateRoles()
sheriffName = "Waiting For Gun!"
murderName = "Waiting For Knife!"
for _, player in ipairs(game:GetService("Players"):GetPlayers()) do
if player.Character then
if player.Character:FindFirstChild("Gun") or
(player.Backpack and player.Backpack:FindFirstChild("Gun")) then
sheriffName = player.Name
elseif player.Character:FindFirstChild("Knife") or
(player.Backpack and player.Backpack:FindFirstChild("Knife")) then
murderName = player.Name
end
end
end
local sheriffText = "<font color='#00A2FF'>Sheriff: "..sheriffName.."</font>"
local murderText = "<font color='#FF0000'>Murder: "..murderName.."</font>"
rolesLabel:Set(sheriffText.."\n"..murderText)
end
game:GetService("RunService").Heartbeat:Connect(UpdateRoles)
RolesTab:CreateButton({
Name = "Copy Roles",
Callback = function()
local namesToCopy = "Sheriff: "..sheriffName.."\nMurder: "..murderName.."\n<<Gojo Hub>>"
setclipboard(namesToCopy)
Rayfield:Notify({
Title = "RolesCopied",
Content = "Roles Copied To Clipboard",
Duration = 2,
Image = nil,
})
end,
})
RolesTab:CreateButton({
Name = "Send roles to chat",
Callback = function()
local message = "Sheriff: "..sheriffName.."\nMurder: "..murderName.."\n<<Gojo Hub>>"
if game:GetService("TextChatService") then
local channel = game:GetService("TextChatService").TextChannels.RBXGeneral
if channel then
channel:DisplaySystemMessage(message)
else
warn("RBXGeneral channel not found!")
end
else
game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(message, "All")
end
Rayfield:Notify({
Title = "Roles Sented",
Content = "Roles Sented To Chat",
Duration = 2,
Image = nil,
})
end,
})
local Button = InfoTab:CreateButton({
Name = "Copy DIscord",
Callback = function()
setclipboard("https://[Log in to view URL]")
Rayfield:Notify({
Title = "Discord Link Copied!",
Content = "Discord Copied!",
Duration = 3,
Image = nil,
})
end,
})
local ButtonUnloadCheat = SettingsTab:CreateButton({
Name = "Unload Cheat",
Callback = function()
Rayfield:Destroy()
end,
})
local Themes = {
["Default"] = "Default",
["Amber Glow"] = "AmberGlow",
["Amethyst"] = "Amethyst",
["Bloom"] = "Bloom",
["Dark Blue"] = "DarkBlue",
["Green"] = "Green",
["Light"] = "Light",
["Ocean"] = "Ocean",
["Serenity"] = "Serenity"
}
local Dropdown = SettingsTab:CreateDropdown({
Name = "Change Theme",
Options = {"Default", "Amber Glow", "Amethyst", "Bloom", "Dark Blue", "Green", "Light", "Ocean", "Serenity"},
CurrentOption = selectedTheme, -- pour afficher ce qui est réellement chargé
Flag = "ThemeSelection",
Callback = function(Selected)
local ident = Themes[Selected[1]]
Window.ModifyTheme(ident) -- <— Applique le thème en direct
end,
})
local function getServerInfo()
local Players = game:GetService("Players")
local playerCount = #Players:GetPlayers()
local maxPlayers = game:GetService("Players").MaxPlayers
local isStudio = game:GetService("RunService"):IsStudio()
return {
PlaceId = game.PlaceId,
JobId = game.JobId,
IsStudio = isStudio,
CurrentPlayers = playerCount,
MaxPlayers =maxPlayers
}
end
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
Rayfield:LoadConfiguration()
task.spawn(function()
while true do
task.wait(1)
task.spawn(function()
local updatedInfo = getServerInfo()
local updatedContent = string.format(
"📌 PlaceId: %s\n🔑 JobId: %s\n🧪 IsStudio: %s\n👥 Players: %d/%d",
updatedInfo.PlaceId,
updatedInfo.JobId,
tostring(updatedInfo.IsStudio),
updatedInfo.CurrentPlayers,
updatedInfo.MaxPlayers
)
ParagraphInfoServer:Set({
Title = "Info",
Content = updatedContent
})
end)
end
end)
local IYMouse = Players.LocalPlayer:GetMouse()
local FLYING = false
local QEfly = true
local iyflyspeed = 1
local vehicleflyspeed = 1
local function sFLY(vfly)
repeat wait() until Players.LocalPlayer and Players.LocalPlayer.Character and Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart") and Players.LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
repeat wait() until IYMouse
if flyKeyDown or flyKeyUp then flyKeyDown:Disconnect() flyKeyUp:Disconnect() end
local T = Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
local CONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
local lCONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
local SPEED = 0
local function FLY()
FLYING = true
local BG = Instance.new('BodyGyro')
local BV = Instance.new('BodyVelocity')
BG.P = 9e4
BG.Parent = T
BV.Parent = T
BG.MaxTorque = Vector3.new(9e9, 9e9, 9e9)
BG.CFrame = T.CFrame
BV.Velocity = Vector3.new(0, 0, 0)
BV.MaxForce = Vector3.new(9e9, 9e9, 9e9)
task.spawn(function()
repeat wait()
if not vfly and Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid') then
Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid').PlatformStand = true
end
if CONTROL.L + CONTROL.R ~= 0 or CONTROL.F + CONTROL.B ~= 0 or CONTROL.Q + CONTROL.E ~= 0 then
SPEED = 50
elseif not (CONTROL.L + CONTROL.R ~= 0 or CONTROL.F + CONTROL.B ~= 0 or CONTROL.Q + CONTROL.E ~= 0) and SPEED ~= 0 then
SPEED = 0
end
if (CONTROL.L + CONTROL.R) ~= 0 or (CONTROL.F + CONTROL.B) ~= 0 or (CONTROL.Q + CONTROL.E) ~= 0 then
BV.Velocity = ((workspace.CurrentCamera.CoordinateFrame.lookVector * (CONTROL.F + CONTROL.B)) + ((workspace.CurrentCamera.CoordinateFrame * CFrame.new(CONTROL.L + CONTROL.R, (CONTROL.F + CONTROL.B + CONTROL.Q + CONTROL.E) * 0.2, 0).p) - workspace.CurrentCamera.CoordinateFrame.p)) * SPEED
lCONTROL = {F = CONTROL.F, B = CONTROL.B, L = CONTROL.L, R = CONTROL.R}
elseif (CONTROL.L + CONTROL.R) == 0 and (CONTROL.F + CONTROL.B) == 0 and (CONTROL.Q + CONTROL.E) == 0 and SPEED ~= 0 then
BV.Velocity = ((workspace.CurrentCamera.CoordinateFrame.lookVector * (lCONTROL.F + lCONTROL.B)) + ((workspace.CurrentCamera.CoordinateFrame * CFrame.new(lCONTROL.L + lCONTROL.R, (lCONTROL.F + lCONTROL.B + CONTROL.Q + CONTROL.E) * 0.2, 0).p) - workspace.CurrentCamera.CoordinateFrame.p)) * SPEED
else
BV.Velocity = Vector3.new(0, 0, 0)
end
BG.CFrame = workspace.CurrentCamera.CoordinateFrame
until not FLYING
CONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
lCONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
SPEED = 0
BG:Destroy()
BV:Destroy()
if Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid') then
Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid').PlatformStand = false
end
end)
end
flyKeyDown = IYMouse.KeyDown:Connect(function(KEY)
if KEY:lower() == 'w' then
CONTROL.F = (vfly and vehicleflyspeed or iyflyspeed)
elseif KEY:lower() == 's' then
CONTROL.B = - (vfly and vehicleflyspeed or iyflyspeed)
elseif KEY:lower() == 'a' then
CONTROL.L = - (vfly and vehicleflyspeed or iyflyspeed)
elseif KEY:lower() == 'd' then
CONTROL.R = (vfly and vehicleflyspeed or iyflyspeed)
elseif QEfly and KEY:lower() == 'e' then
CONTROL.Q = (vfly and vehicleflyspeed or iyflyspeed)*2
elseif QEfly and KEY:lower() == 'q' then
CONTROL.E = -(vfly and vehicleflyspeed or iyflyspeed)*2
end
pcall(function() workspace.CurrentCamera.CameraType = Enum.CameraType.Track end)
end)
flyKeyUp = IYMouse.KeyUp:Connect(function(KEY)
if KEY:lower() == 'w' then
CONTROL.F = 0
elseif KEY:lower() == 's' then
CONTROL.B = 0
elseif KEY:lower() == 'a' then
CONTROL.L = 0
elseif KEY:lower() == 'd' then
CONTROL.R = 0
elseif KEY:lower() == 'e' then
CONTROL.Q = 0
elseif KEY:lower() == 'q' then
CONTROL.E = 0
end
end)
FLY()
end
local function NOFLY()
FLYING = false
if flyKeyDown or flyKeyUp then flyKeyDown:Disconnect() flyKeyUp:Disconnect() end
if Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid') then
Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid').PlatformStand = false
end
pcall(function() workspace.CurrentCamera.CameraType = Enum.CameraType.Custom end)
end
local velocityHandlerName = "BodyVelocity"
local gyroHandlerName = "BodyGyro"
local mfly1
local mfly2
local function UnMobileFly()
pcall(function()
FLYING = false
local root = Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
root:FindFirstChild(velocityHandlerName):Destroy()
root:FindFirstChild(gyroHandlerName):Destroy()
Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid").PlatformStand = false
mfly1:Disconnect()
mfly2:Disconnect()
end)
end
local function MobileFly()
UnMobileFly()
FLYING = true
local root = Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
local camera = workspace.CurrentCamera
local v3none = Vector3.new()
local v3zero = Vector3.new(0, 0, 0)
local v3inf = Vector3.new(9e9, 9e9, 9e9)
local controlModule = require(Players.LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"):WaitForChild("ControlModule"))
local bv = Instance.new("BodyVelocity")
bv.Name = velocityHandlerName
bv.Parent = root
bv.MaxForce = v3zero
bv.Velocity = v3zero
local bg = Instance.new("BodyGyro")
bg.Name = gyroHandlerName
bg.Parent = root
bg.MaxTorque = v3inf
bg.P = 1000
bg.D = 50
mfly1 = Players.LocalPlayer.CharacterAdded:Connect(function()
local bv = Instance.new("BodyVelocity")
bv.Name = velocityHandlerName
bv.Parent = root
bv.MaxForce = v3zero
bv.Velocity = v3zero
local bg = Instance.new("BodyGyro")
bg.Name = gyroHandlerName
bg.Parent = root
bg.MaxTorque = v3inf
bg.P = 1000
bg.D = 50
end)
mfly2 = RunService.RenderStepped:Connect(function()
root = Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
camera = workspace.CurrentCamera
if Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid") and root and root:FindFirstChild(velocityHandlerName) and root:FindFirstChild(gyroHandlerName) then
local humanoid = Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid")
local VelocityHandler = root:FindFirstChild(velocityHandlerName)
local GyroHandler = root:FindFirstChild(gyroHandlerName)
VelocityHandler.MaxForce = v3inf
GyroHandler.MaxTorque = v3inf
humanoid.PlatformStand = true
GyroHandler.CFrame = camera.CoordinateFrame
VelocityHandler.Velocity = v3none
local direction = controlModule:GetMoveVector()
if direction.X > 0 then
VelocityHandler.Velocity = VelocityHandler.Velocity + camera.CFrame.RightVector * (direction.X * ((iyflyspeed) * 50))
end
if direction.X < 0 then
VelocityHandler.Velocity = VelocityHandler.Velocity + camera.CFrame.RightVector * (direction.X * ((iyflyspeed) * 50))
end
if direction.Z > 0 then
VelocityHandler.Velocity = VelocityHandler.Velocity - camera.CFrame.LookVector * (direction.Z * ((iyflyspeed) * 50))
end
if direction.Z < 0 then
VelocityHandler.Velocity = VelocityHandler.Velocity - camera.CFrame.LookVector * (direction.Z * ((iyflyspeed) * 50))
end
end
end)
end
local PlayerFlySpeedSlider = PlayerTab:CreateSlider({
Name = "Fly Speed",
Range = {0, 10},
Increment = 0.1,
Suffix = "Fly Speed",
CurrentValue = 1,
Flag = "Slider2", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
CurrentValue = Value
iyflyspeed = Value
end, iyflyspeed = CurrentValue,
})
local PlayerFlyToggle = PlayerTab:CreateToggle({
Name = "Fly",
CurrentValue = false,
Flag = "ButtonFly", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
ActivateFly = Value
task.spawn(function()
if not FLYING and ActivateFly then
if UserInputService.TouchEnabled then
MobileFly()
else
task.spawn(function()
if not AlrActivatedFlyPC then
AlrActivatedFlyPC = true
Rayfield:Notify({
Title = "Fly",
Content = "When you enable to fly you can press F to fly/unfly (it won't disable the button!)",
Duration = 5,
Image = "rewind",
})
end
end)
NOFLY()
wait()
sFLY()
end
elseif FLYING and not ActivateFly then
if UserInputService.TouchEnabled then
UnMobileFly()
else
NOFLY()
end
end
end)
end,
})
UserInputService.InputBegan:Connect(function(input, processed)
if processed then return end
if input.KeyCode == Enum.KeyCode.F then
if not FLYING and ActivateFly then
if UserInputService.TouchEnabled then
MobileFly()
else
NOFLY()
wait()
sFLY()
end
elseif FLYING and ActivateFly then
if UserInputService.TouchEnabled then
UnMobileFly()
else
NOFLY()
end
end
end
end)
local ValueSpeed = 16
local OldSpeed = Game.Players.LocalPlayer.Character.Humanoid.WalkSpeed
local Slider = PlayerTab:CreateSlider({
Name = "Player Speed",
Range = {0, 100},
Increment = 1,
Suffix = "Speeds",
CurrentValue = 16,
Flag = "Slider1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
CurrentValue = Value
ValueSpeed = Value
end, ValueSpeed = CurrentValue,
})
local PlayerActiveModifyingSpeedToggle = PlayerTab:CreateToggle({
Name = "Active Modifying Player Speed",
CurrentValue = false,
Flag = "ButtonSpeed", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
ActiveSpeedBoost = Value task.spawn(function()
while ActiveSpeedBoost do
Game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = ValueSpeed
task.wait(0.1)
end
Game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = OldSpeed
end)
end,
})
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalPlayer = Players.LocalPlayer
-- Добавляем переключатель ESP ролей
EspTab:CreateToggle({
Name = "Esp Roles",
CurrentValue = false,
Flag = "RoleESP",
Callback = function(Value)
if Value then
-- Включение ESP
if not _G.RoleESP then
-- Цвета для ролей
local roleColors = {
Murderer = Color3.fromRGB(255, 0, 0),
Sheriff = Color3.fromRGB(0, 0, 255),
Hero = Color3.fromRGB(255, 255, 0),
Innocent = Color3.fromRGB(0, 255, 0),
Default = Color3.fromRGB(200, 200, 200)
}
-- Функция получения ролей
local function getRoles()
local success, data = pcall(function()
return ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
end)
if not success then return {} end
local roles = {}
for plr, plrData in pairs(data) do
if not plrData.Dead then
roles[plr] = plrData.Role
end
end
return roles
end
-- Очистка ESP
local function clearESP()
for _, player in ipairs(Players:GetPlayers()) do
if player.Character then
local head = player.Character:FindFirstChild("Head")
if head and head:FindFirstChild("RoleESP") then
head.RoleESP:Destroy()
end
if player.Character:FindFirstChild("RoleHighlight") then
player.Character.RoleHighlight:Destroy()
end
end
end
end
-- Создание подсветки
local function applyHighlight(character, role)
local hl = Instance.new("Highlight")
hl.Name = "RoleHighlight"
hl.FillColor = roleColors[role] or roleColors.Default
hl.OutlineColor = Color3.new(1, 1, 1)
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.FillTransparency = 0.4
hl.OutlineTransparency = 0
hl.Parent = character
end
-- Создание текста с ролью
local function createRoleLabel(head, role)
local esp = Instance.new("BillboardGui")
esp.Name = "RoleESP"
esp.Adornee = head
esp.Size = UDim2.new(4, 0, 4, 0)
esp.AlwaysOnTop = true
esp.Parent = head
local label = Instance.new("TextLabel")
label.Name = "RoleLabel"
label.Parent = esp
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextStrokeTransparency = 0
label.TextSize = 14
label.TextColor3 = roleColors[role] or roleColors.Default
label.Font = Enum.Font.FredokaOne
label.Text = role -- Только роль без имени
end
-- Обновление ESP
local function updateESP()
local roles = getRoles()
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local head = player.Character:FindFirstChild("Head")
if head then
local role = roles[player.Name] or "Default"
-- Обновляем текст роли
if not head:FindFirstChild("RoleESP") then
createRoleLabel(head, role)
else
local label = head.RoleESP.RoleLabel
if label then
label.Text = role
label.TextColor3 = roleColors[role] or roleColors.Default
end
end
-- Обновляем подсветку
if not player.Character:FindFirstChild("RoleHighlight") then
applyHighlight(player.Character, role)
else
player.Character.RoleHighlight.FillColor = roleColors[role] or roleColors.Default
end
end
end
end
end
-- Запускаем обновление
_G.RoleESP = {
Connection = game:GetService("RunService").Heartbeat:Connect(function()
pcall(updateESP)
task.wait(0.3)
end),
Disconnect = function(self)
self.Connection:Disconnect()
clearESP()
end
}
end
else
-- Отключение ESP
if _G.RoleESP then
_G.RoleESP:Disconnect()
_G.RoleESP = nil
end
end
end
})
PlayerTab:CreateToggle({
Name = "Infinity Jump",
CurrentValue = false,
Flag = "InfJump",
Callback = function(Value)
getgenv().InfiniteJump = Value
if Value then
UserInputService.JumpRequest:Connect(function()
if getgenv().InfiniteJump and Character and Humanoid then
Humanoid:ChangeState("Jumping")
end
end)
Rayfield:Notify({
Title = "Infinite Jump",
Content = "Enabled infinite jump",
Duration = 2,
Image = 4483362458
})
end
end
})
PlayerTab:CreateToggle({
Name = "Noclip",
CurrentValue = false,
Flag = "Noclip",
Callback = function(Value)
getgenv().Noclip = Value
if not Value then
if Character then
for _, part in pairs(Character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = true
end
end
end
return
end
Rayfield:Notify({
Title = "Noclip",
Content = "Enabled noclip",
Duration = 2,
Image = 4483362458
})
local noclipLoop
noclipLoop = game:GetService("RunService").Stepped:Connect(function()
if not getgenv().Noclip or not Character then
noclipLoop:Disconnect()
return
end
for _, part in pairs(Character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end)
end
})
local JumpPowerSlider = PlayerTab:CreateSlider({
Name = "JumpPower",
Range = {50, 500},
Increment = 1,
Suffix = "power",
CurrentValue = 50,
Flag = "JumpPower",
Callback = function(Value)
if Humanoid then
Humanoid.JumpPower = Value
getgenv().Jumppower = Value
end
end
})
PlayerTab:CreateToggle({
Name = "Godmode",
CurrentValue = false,
Flag = "Godmode",
Callback = function(Value)
getgenv().enableGodmode = Value
local godcon
local function UpdateGod()
if godcon then
godcon:Disconnect()
godcon = nil
end
if Humanoid and getgenv().enableGodmode then
godcon = Humanoid.HealthChanged:Connect(function()
if Humanoid.Health < Humanoid.MaxHealth then
Humanoid.Health = Humanoid.MaxHealth
end
end)
end
end
if Value then
Rayfield:Notify({
Title = "Godmode",
Content = "Enabled godmode",
Duration = 2,
Image = 4483362458
})
UpdateGod()
LocalPlayer.CharacterAdded:Connect(function(newChar)
Character = newChar
Humanoid = Character:WaitForChildOfClass("Humanoid")
UpdateGod()
end)
else
if godcon then
godcon:Disconnect()
godcon = nil
end
end
end
})
TeleportTab:CreateButton({
Name = "Teleport To Map",
Callback = function()
local map = Workspace:FindFirstChild("CoinContainer", true)
if map and map.Parent then
local part = map:FindFirstChildWhichIsA("BasePart", true) or map.Parent:FindFirstChildWhichIsA("BasePart", true)
if part and part.CFrame then
if Character then
Character:PivotTo(part.CFrame * CFrame.new(0, 2, 0))
elseif RootPart then
RootPart.CFrame = part.CFrame * CFrame.new(0, 2, 0)
end
Rayfield:Notify({
Title = "Teleported",
Content = "Teleported to map",
Duration = 2,
Image = 4483362458
})
end
else
Rayfield:Notify({
Title = "Error",
Content = "Map not found",
Duration = 2,
Image = 7733658504
})
end
end
})
TeleportTab:CreateButton({
Name = "Teleport To Lobby",
Callback = function()
local lobby = Workspace:FindFirstChild("Lobby", true)
if lobby and lobby.Parent then
local part = lobby:FindFirstChildWhichIsA("BasePart", true) or lobby.Parent:FindFirstChildWhichIsA("BasePart", true)
if part and part.CFrame then
if Character then
Character:PivotTo(part.CFrame * CFrame.new(0, 2, 0))
elseif RootPart then
RootPart.CFrame = part.CFrame * CFrame.new(0, 2, 0)
end
Rayfield:Notify({
Title = "Teleported",
Content = "Teleported to lobby",
Duration = 2,
Image = 4483362458
})
end
else
Rayfield:Notify({
Title = "Error",
Content = "Lobby not found",
Duration = 2,
Image = 7733658504
})
end
end
})
local function SHubFling(TargetPlayer)
if not (Character and Humanoid and RootPart) then return end
local TCharacter = TargetPlayer.Character
if not TCharacter then return end
local THumanoid = TCharacter:FindFirstChildOfClass("Humanoid")
local TRootPart = THumanoid and THumanoid.RootPart
local THead = TCharacter:FindFirstChild("Head")
local Accessory = TCharacter:FindFirstChildOfClass("Accessory")
local Handle = Accessory and Accessory:FindFirstChild("Handle")
getgenv().OldPos = RootPart.CFrame
Workspace.CurrentCamera.CameraSubject = THead or Handle or THumanoid
local function FPos(BasePart, Pos, Ang)
local targetCF = CFrame.new(BasePart.Position) * Pos * Ang
RootPart.CFrame = targetCF
Character:SetPrimaryPartCFrame(targetCF)
RootPart.Velocity = Vector3.new(9e7, 9e8, 9e7)
RootPart.RotVelocity = Vector3.new(9e8, 9e8, 9e8)
end
local function SFBasePart(BasePart)
local start = tick()
local angle = 0
getgenv().timeout = getgenv().timeout or 2.5
repeat
if RootPart and THumanoid then
angle += 100
for _, offset in ipairs{
CFrame.new(0, 1.5, 0),
CFrame.new(0, -1.5, 0),
CFrame.new(2.25, 1.5, -2.25),
CFrame.new(-2.25, -1.5, 2.25)
} do
FPos(BasePart, offset + THumanoid.MoveDirection, CFrame.Angles(math.rad(angle), 0, 0))
task.wait()
end
end
until BasePart.Velocity.Magnitude > 500 or tick() - start > getgenv().timeout
end
local BV = Instance.new("BodyVelocity")
BV.Name = "FlingVelocity"
BV.Velocity = Vector3.new(9e8, 9e8, 9e8)
BV.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BV.Parent = RootPart
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false)
local target = TRootPart or THead or Handle
if target then SFBasePart(target) end
BV:Destroy()
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, true)
Workspace.CurrentCamera.CameraSubject = Humanoid
repeat
local cf = getgenv().OldPos * CFrame.new(0, .5, 0)
RootPart.CFrame = cf
Character:SetPrimaryPartCFrame(cf)
Humanoid:ChangeState("GettingUp")
for _, part in ipairs(Character:GetChildren()) do
if part:IsA("BasePart") then
part.Velocity, part.RotVelocity = Vector3.zero, Vector3.zero
end
end
task.wait()
until (RootPart.Position - getgenv().OldPos.p).Magnitude < 25
end
MiscTab:CreateButton({
Name = "Fling Murderer",
Callback = function()
local Murderer = nil
for plr, role in getRoles() do
if role == "Murderer" then
Murderer = Players:FindFirstChild(plr)
break
end
end
if Murderer and Murderer ~= LocalPlayer then
SHubFling(Murderer)
Rayfield:Notify({
Title = "Flinging Murderer",
Content = Murderer.Name,
Duration = 2,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Error",
Content = "No murderer found",
Duration = 2,
Image = 7733658504
})
end
end
})
MiscTab:CreateButton({
Name = "Fling Sheriff/Hero",
Callback = function()
local Target = nil
for plr, role in getRoles() do
if role == "Sheriff" or role == "Hero" then
Target = Players:FindFirstChild(plr)
break
end
end
if Target and Target ~= LocalPlayer then
SHubFling(Target)
Rayfield:Notify({
Title = "Flinging Sheriff/Hero",
Content = Target.Name,
Duration = 2,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Error",
Content = "No sheriff/hero found",
Duration = 2,
Image = 7733658504
})
end
end
})
-- Player Selection
local playerList = {}
local selectedPlayer = nil
local function updatePlayerList()
playerList = {}
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
table.insert(playerList, player.Name)
end
end
end
updatePlayerList()
local PlayerDropdown = MiscTab:CreateDropdown({
Name = "Select Player",
Options = playerList,
CurrentOption = "",
Flag = "PlayerSelect",
Callback = function(Option)
selectedPlayer = Option
end
})
Players.PlayerAdded:Connect(function()
updatePlayerList()
PlayerDropdown:Refresh(playerList)
end)
Players.PlayerRemoving:Connect(function()
updatePlayerList()
PlayerDropdown:Refresh(playerList)
end)
MiscTab:CreateButton({
Name = "Fling Selected Player",
Callback = function()
if selectedPlayer then
local player = Players:FindFirstChild(selectedPlayer)
if player and player ~= LocalPlayer then
SHubFling(player)
Rayfield:Notify({
Title = "Flinging Player",
Content = player.Name,
Duration = 2,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Error",
Content = "Player not found",
Duration = 2,
Image = 7733658504
})
end
else
Rayfield:Notify({
Title = "Error",
Content = "No player selected",
Duration = 2,
Image = 7733658504
})
end
end
})
MainTab:CreateButton({
Name = "Grab Gun",
Callback = function()
if Character and RootPart then
local gun = Workspace:FindFirstChild("GunDrop", true)
if gun then
if firetouchinterest then
firetouchinterest(RootPart, gun, 0)
firetouchinterest(RootPart, gun, 1)
else
gun.CFrame = RootPart.CFrame
end
Rayfield:Notify({
Title = "Gun Grabbed",
Content = "Successfully grabbed the gun",
Duration = 2,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Error",
Content = "No gun found in workspace",
Duration = 2,
Image = 7733658504
})
end
end
end
})
MainTab:CreateToggle({
Name = "Auto Grab Gun",
CurrentValue = false,
Flag = "AutoGrabGun",
Callback = function(Value)
getgenv().AGG = Value
if Value then
Rayfield:Notify({
Title = "Auto Grab Enabled",
Content = "Will automatically grab guns when available",
Duration = 2,
Image = 4483362458
})
end
local aggLoop
aggLoop = game:GetService("RunService").Heartbeat:Connect(function()
if not getgenv().AGG then
aggLoop:Disconnect()
return
end
if Character and RootPart then
local gun = Workspace:FindFirstChild("GunDrop", true)
if gun then
if firetouchinterest then
firetouchinterest(RootPart, gun, 0)
firetouchinterest(RootPart, gun, 1)
else
gun.CFrame = RootPart.CFrame
end
end
end
end)
end
})
MainTab:CreateButton({
Name = "Steal Gun (From Sheriff/Hero)",
Callback = function()
if Character and Humanoid then
local stolen = false
for _, p in pairs(Players:GetPlayers()) do
if p ~= LocalPlayer then
if p.Character and p.Character:FindFirstChild("Gun") then
p.Character:FindFirstChild("Gun").Parent = Character
Humanoid:EquipTool(Character:FindFirstChild("Gun"))
Humanoid:UnequipTools()
stolen = true
elseif p:FindFirstChild("Backpack") and p.Backpack:FindFirstChild("Gun") then
p.Backpack:FindFirstChild("Gun").Parent = LocalPlayer.Backpack
Humanoid:EquipTool(LocalPlayer.Backpack:FindFirstChild("Gun"))
Humanoid:UnequipTools()
stolen = true
end
end
end
if stolen then
Rayfield:Notify({
Title = "Success",
Content = "Stole gun from Sheriff/Hero",
Duration = 2,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Error",
Content = "No guns found to steal",
Duration = 2,
Image = 7733658504
})
end
end
end
})
EspTab:CreateToggle({
Name = "ESP Gun",
CurrentValue = false,
Flag = "GunESP",
Callback = function(Value)
getgenv().GunEsp = Value
local function clearGunESP()
local gun = Workspace:FindFirstChild("GunDrop", true)
if gun then
if gun:FindFirstChild("GunHighlight") then
gun:FindFirstChild("GunHighlight"):Destroy()
end
if gun:FindFirstChild("GunEsp") then
gun:FindFirstChild("GunEsp"):Destroy()
end
end
end
if not Value then
clearGunESP()
return
end
local gunEspLoop
gunEspLoop = game:GetService("RunService").Heartbeat:Connect(function()
if not getgenv().GunEsp then
gunEspLoop:Disconnect()
clearGunESP()
return
end
local gun = Workspace:FindFirstChild("GunDrop", true)
if gun then
if not gun:FindFirstChild("GunHighlight") then
local gunh = Instance.new("Highlight", gun)
gunh.Name = "GunHighlight"
gunh.FillColor = Color3.new(1, 1, 0)
gunh.OutlineColor = Color3.new(1, 1, 1)
gunh.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
gunh.FillTransparency = 0.4
gunh.OutlineTransparency = 0.5
end
if not gun:FindFirstChild("GunEsp") then
local esp = Instance.new("BillboardGui")
esp.Name = "GunEsp"
esp.Adornee = gun
esp.Size = UDim2.new(5, 0, 5, 0)
esp.AlwaysOnTop = true
esp.Parent = gun
local text = Instance.new("TextLabel", esp)
text.Name = "GunLabel"
text.Size = UDim2.new(1, 0, 1, 0)
text.BackgroundTransparency = 1
text.TextStrokeTransparency = 0
text.TextColor3 = Color3.fromRGB(255, 255, 0)
text.Font = Enum.Font.FredokaOne
text.TextSize = 16
text.Text = "Gun Drop"
end
end
end)
end
})
To embed this project on your website, copy the following code and paste it into your website's HTML: