local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()
local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))()
local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))()
-- Services
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
-- Unload Flag
local isUnloaded = false
local originalWalkSpeed = 16
local walkSpeedActive = false
local cleanupAntiInvisible = function() end -- Placeholder for cleanup
-- Connections
local jumpConn, pAddConn, pRemConn
-- Game Modules (Bypasses UI Remote fetching completely)
local PersonalRemoteService = assert(require(ReplicatedStorage:FindFirstChild("PersonalRemoteService", true)), "PersonalRemoteService not found")
local PlayerDataService = assert(require(ReplicatedStorage:FindFirstChild("PlrDataService", true)), "PlayerDataService not found")
local ShurikenService = assert(require(ReplicatedStorage:FindFirstChild("ShurikenService", true)), "ShurikenService not found")
local AscensionService = assert(require(ReplicatedStorage:FindFirstChild("AscensionService", true)), "AscensionService not found")
local UpgradeRules = assert(require(ReplicatedStorage:FindFirstChild("UpgradeRules", true)), "UpgradeRules not found")
local ClassService = assert(require(ReplicatedStorage:FindFirstChild("ClassService", true)), "ClassService not found")
local SwordService = assert(require(ReplicatedStorage:FindFirstChild("SwordService", true)), "SwordService not found")
local SuccessRate = assert(require(ReplicatedStorage:FindFirstChild("SuccessRate", true)), "SuccessRate not found")
local BucksConfig = assert(require(ReplicatedStorage:FindFirstChild("BucksConfig", true)), "BucksConfig not found")
local UIService = assert(require(ReplicatedStorage:FindFirstChild("UIService", true)), "UIService not found")
-- Game Functions & Data
local RemoteEvent = assert(PersonalRemoteService.RemoteEvent, "RemoteEvent not found")
local PlayerData = assert(PlayerDataService.PlrData, "PlayerData not found")
local GetFinalSuccessRate = assert(SuccessRate.GetFinalSuccessRate, "GetFinalSuccessRate not found")
local GetSuccessRate = assert(SuccessRate.GetSuccessRate, "GetSuccessRate not found")
local UIServiceInvokePersonalRemote = assert(UIService.InvokePersonalRemote, "InvokePersonalRemote for UIService not found")
-- Window Setup
local Window = Fluent:CreateWindow({
Title = "+1 OP Ninja Hub",
SubTitle = "Auto Farm, ESP & Teleport",
TabWidth = 160,
Size = UDim2.fromOffset(580, 460),
Acrylic = true,
Theme = "Dark",
MinimizeKey = Enum.KeyCode.LeftControl
})
-- Tabs Setup
local Tabs = {
Main = Window:AddTab({ Title = "Main", Icon = "sword" }),
Visuals = Window:AddTab({ Title = "Visuals", Icon = "eye" }),
Player = Window:AddTab({ Title = "Player", Icon = "user" }),
Misc = Window:AddTab({ Title = "Misc", Icon = "cloud" }),
Settings = Window:AddTab({ Title = "Settings", Icon = "settings" })
}
local Options = Fluent.Options
do
Fluent:Notify({
Title = "+1 OP Ninja Hub",
Content = "Script loaded successfully!",
SubContent = "All features initialized. Ready to use!",
Duration = 5
})
-- ==================== //
-- MAIN TAB --
-- ==================== //
Tabs.Main:AddParagraph({
Title = "Welcome to +1 OP Ninja Hub",
Content = "Use the toggles below to automate your training and upgrades.\nNote: Auto Train requires your sword to be equipped!"
})
Tabs.Main:AddToggle("AutoTrain", {Title = "Auto Train", Default = false })
Tabs.Main:AddToggle("AutoKill", {Title = "Auto Kill (HOLD SWORD)", Default = false })
Tabs.Main:AddToggle("AutoDecline", {Title = "Auto Decline", Default = false })
Tabs.Main:AddDropdown("AutoUpgradeDropdown", {
Title = "Auto Upgrades",
Description = "Select which upgrades to automate",
Values = { "Sword", "Stars", "Class", "Ascendant" },
Multi = true,
Default = { "Sword", "Stars", "Class", "Ascendant" },
})
-- Auto Train Loop
task.spawn(function()
while task.wait(0.1) and not isUnloaded do
if Options.AutoTrain.Value then
pcall(function()
RemoteEvent:FireServer("SwordSlash", 67)
end)
end
end
end)
-- Auto Kill Loop
task.spawn(function()
while task.wait(0.1) and not isUnloaded do
if Options.AutoKill.Value then
local lpChar = LocalPlayer.Character
local lpHum = lpChar and lpChar:FindFirstChild("Humanoid")
if lpChar and lpChar:FindFirstChild("HumanoidRootPart") and lpHum and lpHum.Health > 0 then
local tool = lpChar:FindFirstChildWhichIsA("Tool")
if tool then
for _, target in ipairs(Players:GetPlayers()) do
if not Options.AutoKill.Value then break end
if target ~= LocalPlayer and (target.Team == nil or target.Team ~= LocalPlayer.Team) then
local tChar = target.Character
if tChar then
local tRoot = tChar:FindFirstChild("HumanoidRootPart")
local tHum = tChar:FindFirstChild("Humanoid")
if tRoot and tHum and tHum.Health > 0 then
-- Teleport behind the player
lpChar.HumanoidRootPart.CFrame = tRoot.CFrame * CFrame.new(0, 0, 4)
-- Spam tool:Activate() for 1 second
local startTime = tick()
while tick() - startTime < 1 do
if not Options.AutoKill.Value then break end
-- Check Local Player
if not lpChar or not lpChar.Parent then break end
local lHum = lpChar:FindFirstChild("Humanoid")
if not lHum or lHum.Health <= 0 then break end
-- Check Target
if not target or not target.Parent then break end
if not tChar or not tChar.Parent then break end
local tHumCheck = tChar:FindFirstChild("Humanoid")
if not tHumCheck or tHumCheck.Health = 0.025 then
lastPathTime = currentTime
local part = Instance.new("Part")
part.Size = Vector3.new(6, 1, 6)
part.Color = Options.PathColor.Value
part.Position = char.HumanoidRootPart.Position - Vector3.new(0, 3, 0)
part.Rotation = Vector3.new(0, math.random(0, 360), 0)
part.Anchored = true
part.CanCollide = false
part.Material = Enum.Material.Neon
part.Transparency = Options.PathTransparency.Value
part.Parent = Workspace
local tween = TweenService:Create(part, TweenInfo.new(4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Size = Vector3.new(0, 0, 0),
Transparency = 1
})
tween:Play()
task.delay(4.1, function()
if part and part.Parent then
part:Destroy()
end
end)
end
end
end
end
end)
end
-- Addons Setup
SaveManager:SetLibrary(Fluent)
InterfaceManager:SetLibrary(Fluent)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({})
InterfaceManager:SetFolder("FluentScriptHub")
SaveManager:SetFolder("FluentScriptHub/op-ninja")
InterfaceManager:BuildInterfaceSection(Tabs.Settings)
SaveManager:BuildConfigSection(Tabs.Settings)
-- CORRECT HOOK: Hook Fluent.Destroy instead of Window.Destroy
local originalDestroy = Fluent.Destroy
Fluent.Destroy = function(self, ...)
isUnloaded = true
cleanupAntiInvisible()
RunService:Set3dRenderingEnabled(true)
for _, player in ipairs(Players:GetPlayers()) do
if player.Character then
local hl = player.Character:FindFirstChild("ESPHighlight")
local bb = player.Character:FindFirstChild("ESPNameTag")
if hl then hl:Destroy() end
if bb then bb:Destroy() end
end
end
if walkSpeedActive then
local char = LocalPlayer.Character
if char and char:FindFirstChild("Humanoid") then
char.Humanoid.WalkSpeed = originalWalkSpeed
end
walkSpeedActive = false
end
if jumpConn then jumpConn:Disconnect() end
if pAddConn then pAddConn:Disconnect() end
if pRemConn then pRemConn:Disconnect() end
originalDestroy(self, ...)
end
Window:SelectTab(1)
SaveManager:LoadAutoloadConfig()