-- ====================================================================
-- SISTEMA DE MODERAÇÃO E ANTI-CHEAT PARA LIGA DE FUTEBOL ROBLOX
-- Compatível com Delta Executor / Luau
-- ====================================================================
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
-- --------------------------------------------------------------------
-- BANCO DE DADOS LOCAL DO SISTEMA (Credenciais e Logs Internos)
-- NOTA: As credenciais do sistema NÃO possuem relação com contas Roblox.
-- --------------------------------------------------------------------
local SystemAccounts = {
["KKKK"] = { password = "KKKKK", isAdmin = true }
}
local SystemLogs = {
{
username = "ExemploUser1",
displayName = "JogadorExemplo",
reason = "Speed Hack Detectado (WalkSpeed > 24)",
datetime = "07/10/2026 14:30",
status = "Pending"
},
{
username = "ExemploUser2",
displayName = "AtacantePro",
reason = "Teleport/Fly suspeito na área do gol",
datetime = "07/10/2026 15:12",
status = "Confirmed"
}
}
local CurrentUser = nil
-- --------------------------------------------------------------------
-- INTERFACE GRÁFICA (UI)
-- --------------------------------------------------------------------
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "LeagueModHub"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = PlayerGui
-- Janela Principal
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, 520, 0, 360)
MainFrame.Position = UDim2.new(0.5, -260, 0.5, -180)
MainFrame.BackgroundColor3 = Color3.fromRGB(20, 22, 28)
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.Parent = ScreenGui
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 10)
UICorner.Parent = MainFrame
-- Barra de Título
local TitleBar = Instance.new("Frame")
TitleBar.Size = UDim2.new(1, 0, 0, 40)
TitleBar.BackgroundColor3 = Color3.fromRGB(15, 16, 20)
TitleBar.BorderSizePixel = 0
TitleBar.Parent = MainFrame
local TitleBarCorner = Instance.new("UICorner")
TitleBarCorner.CornerRadius = UDim.new(0, 10)
TitleBarCorner.Parent = TitleBar
local TitleLabel = Instance.new("TextLabel")
TitleLabel.Size = UDim2.new(1, -20, 1, 0)
TitleLabel.Position = UDim2.new(0, 15, 0, 0)
TitleLabel.Text = "LEAGUE MODERATION HUB"
TitleLabel.TextColor3 = Color3.fromRGB(220, 220, 220)
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
TitleLabel.Font = Enum.Font.GothamBold
TitleLabel.TextSize = 14
TitleLabel.BackgroundTransparency = 1
TitleLabel.Parent = TitleBar
-- Contêiner do Form de Auth
local AuthFrame = Instance.new("Frame")
AuthFrame.Size = UDim2.new(1, 0, 1, -40)
AuthFrame.Position = UDim2.new(0, 0, 0, 40)
AuthFrame.BackgroundTransparency = 1
AuthFrame.Parent = MainFrame
local UserInput = Instance.new("TextBox")
UserInput.Size = UDim2.new(0, 280, 0, 38)
UserInput.Position = UDim2.new(0.5, -140, 0.2, 0)
UserInput.PlaceholderText = "System Username"
UserInput.Text = ""
UserInput.TextColor3 = Color3.fromRGB(255, 255, 255)
UserInput.BackgroundColor3 = Color3.fromRGB(30, 33, 42)
UserInput.Font = Enum.Font.Gotham
UserInput.TextSize = 13
UserInput.Parent = AuthFrame
Instance.new("UICorner", UserInput).CornerRadius = UDim.new(0, 6)
local PassInput = Instance.new("TextBox")
PassInput.Size = UDim2.new(0, 280, 0, 38)
PassInput.Position = UDim2.new(0.5, -140, 0.35, 0)
PassInput.PlaceholderText = "System Password"
PassInput.Text = ""
PassInput.TextScaled = false
PassInput.TextColor3 = Color3.fromRGB(255, 255, 255)
PassInput.BackgroundColor3 = Color3.fromRGB(30, 33, 42)
PassInput.Font = Enum.Font.Gotham
PassInput.TextSize = 13
PassInput.Parent = AuthFrame
Instance.new("UICorner", PassInput).CornerRadius = UDim.new(0, 6)
local LoginBtn = Instance.new("TextButton")
LoginBtn.Size = UDim2.new(0, 135, 0, 36)
LoginBtn.Position = UDim2.new(0.5, -140, 0.52, 0)
LoginBtn.Text = "Login"
LoginBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 215)
LoginBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
LoginBtn.Font = Enum.Font.GothamBold
LoginBtn.TextSize = 13
LoginBtn.Parent = AuthFrame
Instance.new("UICorner", LoginBtn).CornerRadius = UDim.new(0, 6)
local RegisterBtn = Instance.new("TextButton")
RegisterBtn.Size = UDim2.new(0, 135, 0, 36)
RegisterBtn.Position = UDim2.new(0.5, 5, 0.52, 0)
RegisterBtn.Text = "Create Account"
RegisterBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 62)
RegisterBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
RegisterBtn.Font = Enum.Font.GothamBold
RegisterBtn.TextSize = 13
RegisterBtn.Parent = AuthFrame
Instance.new("UICorner", RegisterBtn).CornerRadius = UDim.new(0, 6)
local StatusMsg = Instance.new("TextLabel")
StatusMsg.Size = UDim2.new(0, 280, 0, 25)
StatusMsg.Position = UDim2.new(0.5, -140, 0.68, 0)
StatusMsg.Text = ""
StatusMsg.TextColor3 = Color3.fromRGB(255, 85, 85)
StatusMsg.BackgroundTransparency = 1
StatusMsg.Font = Enum.Font.Gotham
StatusMsg.TextSize = 12
StatusMsg.Parent = AuthFrame
-- Notice de Esclarecimento sobre Credenciais
local AuthNotice = Instance.new("TextLabel")
AuthNotice.Size = UDim2.new(0, 380, 0, 35)
AuthNotice.Position = UDim2.new(0.5, -190, 0.82, 0)
AuthNotice.Text = "Aviso: Estas credenciais são exclusivas do Hub da Liga.\nNUNCA insira dados da sua conta Roblox aqui."
AuthNotice.TextColor3 = Color3.fromRGB(130, 135, 145)
AuthNotice.BackgroundTransparency = 1
AuthNotice.Font = Enum.Font.Gotham
AuthNotice.TextSize = 10
AuthNotice.Parent = AuthFrame
-- Painel Administrativo
local AdminFrame = Instance.new("Frame")
AdminFrame.Size = UDim2.new(1, 0, 1, -40)
AdminFrame.Position = UDim2.new(0, 0, 0, 40)
AdminFrame.BackgroundTransparency = 1
AdminFrame.Visible = false
AdminFrame.Parent = MainFrame
-- Barra Superior do ADM (Busca, Filtro e Logout)
local SearchBox = Instance.new("TextBox")
SearchBox.Size = UDim2.new(0, 180, 0, 28)
SearchBox.Position = UDim2.new(0, 15, 0, 10)
SearchBox.PlaceholderText = "Buscar por Username/Display"
SearchBox.Text = ""
SearchBox.TextColor3 = Color3.fromRGB(255, 255, 255)
SearchBox.BackgroundColor3 = Color3.fromRGB(30, 33, 42)
SearchBox.Font = Enum.Font.Gotham
SearchBox.TextSize = 11
SearchBox.Parent = AdminFrame
Instance.new("UICorner", SearchBox).CornerRadius = UDim.new(0, 4)
local FilterBtn = Instance.new("TextButton")
FilterBtn.Size = UDim2.new(0, 100, 0, 28)
FilterBtn.Position = UDim2.new(0, 205, 0, 10)
FilterBtn.Text = "Filtro: TODOS"
FilterBtn.BackgroundColor3 = Color3.fromRGB(35, 40, 50)
FilterBtn.TextColor3 = Color3.fromRGB(200, 200, 200)
FilterBtn.Font = Enum.Font.Gotham
FilterBtn.TextSize = 10
FilterBtn.Parent = AdminFrame
Instance.new("UICorner", FilterBtn).CornerRadius = UDim.new(0, 4)
local LogoutBtn = Instance.new("TextButton")
LogoutBtn.Size = UDim2.new(0, 80, 0, 28)
LogoutBtn.Position = UDim2.new(1, -95, 0, 10)
LogoutBtn.Text = "Logout"
LogoutBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
LogoutBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
LogoutBtn.Font = Enum.Font.GothamBold
LogoutBtn.TextSize = 11
LogoutBtn.Parent = AdminFrame
Instance.new("UICorner", LogoutBtn).CornerRadius = UDim.new(0, 4)
-- Container dos Logs
local LogsScroll = Instance.new("ScrollingFrame")
LogsScroll.Size = UDim2.new(1, -30, 1, -55)
LogsScroll.Position = UDim2.new(0, 15, 0, 45)
LogsScroll.BackgroundColor3 = Color3.fromRGB(15, 17, 22)
LogsScroll.BorderSizePixel = 0
LogsScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
LogsScroll.ScrollBarThickness = 4
LogsScroll.Parent = AdminFrame
Instance.new("UICorner", LogsScroll).CornerRadius = UDim.new(0, 6)
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Parent = LogsScroll
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0, 4)
-- --------------------------------------------------------------------
-- LÓGICA DE ATUALIZAÇÃO E INTERAÇÃO DA UI
-- --------------------------------------------------------------------
local currentFilterIndex = 1
local filterStatuses = {"ALL", "Pending", "Confirmed", "Rejected"}
local function RenderLogs()
for _, child in pairs(LogsScroll:GetChildren()) do
if child:IsA("Frame") then child:Destroy() end
end
local filter = filterStatuses[currentFilterIndex]
local searchText = SearchBox.Text:lower()
local totalHeight = 0
for idx, log in ipairs(SystemLogs) do
local matchesFilter = (filter == "ALL") or (log.status == filter)
local matchesSearch = (log.username:lower():find(searchText) ~= nil) or
(log.displayName:lower():find(searchText) ~= nil)
if matchesFilter and matchesSearch then
local LogFrame = Instance.new("Frame")
LogFrame.Size = UDim2.new(1, -8, 0, 52)
LogFrame.BackgroundColor3 = Color3.fromRGB(25, 28, 36)
LogFrame.Parent = LogsScroll
Instance.new("UICorner", LogFrame).CornerRadius = UDim.new(0, 4)
local InfoLabel = Instance.new("TextLabel")
InfoLabel.Size = UDim2.new(1, -120, 1, 0)
InfoLabel.Position = UDim2.new(0, 10, 0, 0)
InfoLabel.Text = string.format("%s (@%s) - %s\n%s | Status: %s",
log.displayName, log.username, log.reason, log.datetime, log.status)
InfoLabel.RichText = true
InfoLabel.TextColor3 = Color3.fromRGB(220, 220, 220)
InfoLabel.TextXAlignment = Enum.TextXAlignment.Left
InfoLabel.Font = Enum.Font.Gotham
InfoLabel.TextSize = 11
InfoLabel.BackgroundTransparency = 1
InfoLabel.Parent = LogFrame
-- Botão para alternar Status do Log
local StatusBtn = Instance.new("TextButton")
StatusBtn.Size = UDim2.new(0, 90, 0, 24)
StatusBtn.Position = UDim2.new(1, -100, 0.5, -12)
StatusBtn.Text = log.status
StatusBtn.Font = Enum.Font.GothamBold
StatusBtn.TextSize = 10
if log.status == "Pending" then
StatusBtn.BackgroundColor3 = Color3.fromRGB(200, 140, 20)
elseif log.status == "Confirmed" then
StatusBtn.BackgroundColor3 = Color3.fromRGB(40, 160, 60)
else
StatusBtn.BackgroundColor3 = Color3.fromRGB(160, 40, 40)
end
StatusBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
StatusBtn.Parent = LogFrame
Instance.new("UICorner", StatusBtn).CornerRadius = UDim.new(0, 4)
StatusBtn.MouseButton1Click:Connect(function()
if log.status == "Pending" then log.status = "Confirmed"
elseif log.status == "Confirmed" then log.status = "Rejected"
else log.status = "Pending" end
RenderLogs()
end)
totalHeight = totalHeight + 56
end
end
LogsScroll.CanvasSize = UDim2.new(0, 0, 0, totalHeight)
end
-- Ações de Login e Cadastro
LoginBtn.MouseButton1Click:Connect(function()
local user = UserInput.Text
local pass = PassInput.Text
if SystemAccounts[user] and SystemAccounts[user].password == pass then
CurrentUser = user
StatusMsg.Text = ""
if SystemAccounts[user].isAdmin then
AuthFrame.Visible = false
AdminFrame.Visible = true
RenderLogs()
else
StatusMsg.TextColor3 = Color3.fromRGB(85, 255, 85)
StatusMsg.Text = "Login efetuado (Acesso padrão)."
end
else
StatusMsg.TextColor3 = Color3.fromRGB(255, 85, 85)
StatusMsg.Text = "Credenciais inválidas do hub."
end
end)
RegisterBtn.MouseButton1Click:Connect(function()
local user = UserInput.Text
local pass = PassInput.Text
if user == "" or pass == "" then
StatusMsg.TextColor3 = Color3.fromRGB(255, 85, 85)
StatusMsg.Text = "Preencha usuário e senha."
return
end
if SystemAccounts[user] then
StatusMsg.TextColor3 = Color3.fromRGB(255, 85, 85)
StatusMsg.Text = "Usuário já existente."
else
SystemAccounts[user] = { password = pass, isAdmin = false }
StatusMsg.TextColor3 = Color3.fromRGB(85, 255, 85)
StatusMsg.Text = "Conta criada com sucesso!"
end
end)
LogoutBtn.MouseButton1Click:Connect(function()
CurrentUser = nil
AdminFrame.Visible = false
AuthFrame.Visible = true
UserInput.Text = ""
PassInput.Text = ""
StatusMsg.Text = ""
end)
FilterBtn.MouseButton1Click:Connect(function()
currentFilterIndex = (currentFilterIndex % #filterStatuses) + 1
FilterBtn.Text = "Filtro: " .. filterStatuses[currentFilterIndex]
RenderLogs()
end)
SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
RenderLogs()
end)
-- --------------------------------------------------------------------
-- SISTEMA DE DETECÇÃO ANTI-CHEAT & AVISO
-- --------------------------------------------------------------------
local function ShowFlaggedWarning(reasonText)
-- Gera log automático para o painel de moderação
table.insert(SystemLogs, 1, {
username = LocalPlayer.Name,
displayName = LocalPlayer.DisplayName,
reason = reasonText,
datetime = os.date("%d/%m/%Y %H:%M"),
status = "Pending"
})
-- Tela de Alerta Vermelha (Screen Warning em Inglês)
local WarnGui = Instance.new("ScreenGui")
WarnGui.Name = "CheatWarningGui"
WarnGui.ResetOnSpawn = false
WarnGui.Parent = PlayerGui
local AlertFrame = Instance.new("Frame")
AlertFrame.Size = UDim2.new(1, 0, 1, 0)
AlertFrame.BackgroundColor3 = Color3.fromRGB(15, 0, 0)
AlertFrame.BackgroundTransparency = 0.1
AlertFrame.Parent = WarnGui
local WarnTitle = Instance.new("TextLabel")
WarnTitle.Size = UDim2.new(1, 0, 0, 60)
WarnTitle.Position = UDim2.new(0, 0, 0.4, -30)
WarnTitle.Text = "YOU HAVE BEEN CAUGHT CHEATING"
WarnTitle.TextColor3 = Color3.fromRGB(255, 30, 30)
WarnTitle.Font = Enum.Font.GothamBold
WarnTitle.TextSize = 28
WarnTitle.BackgroundTransparency = 1
WarnTitle.Parent = AlertFrame
local WarnSub = Instance.new("TextLabel")
WarnSub.Size = UDim2.new(1, 0, 0, 40)
WarnSub.Position = UDim2.new(0, 0, 0.4, 30)
WarnSub.Text = "Your activity has been flagged for league moderation."
WarnSub.TextColor3 = Color3.fromRGB(200, 200, 200)
WarnSub.Font = Enum.Font.Gotham
WarnSub.TextSize = 16
WarnSub.BackgroundTransparency = 1
WarnSub.Parent = AlertFrame
task.delay(6, function()
WarnGui:Destroy()
end)
end
-- Detecção básica de WalkSpeed (Apenas Exemplo Funcional)
task.spawn(function()
while task.wait(2) do
local char = LocalPlayer.Character
if char then
local humanoid = char:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.WalkSpeed > 28 then
ShowFlaggedWarning("Alteração anormal de WalkSpeed (>28)")
break
end
end
end
end)