-- 🥷 Ninja Tycoon | Auto Kill + Fly + Speed + Enemy Base
-- Mobile compatible: Delta, Fluxus, Codex, Arceus X
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local rootPart = character:WaitForChild("HumanoidRootPart")
LocalPlayer.CharacterAdded:Connect(function(newChar)
character = newChar
humanoid = newChar:WaitForChild("Humanoid")
rootPart = newChar:WaitForChild("HumanoidRootPart")
end)
--═══════════════════════════════════
-- GUI
--═══════════════════════════════════
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "NinjaTycoonHub"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local ok, _ = pcall(function()
ScreenGui.Parent = game:GetService("CoreGui")
end)
if not ok then
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
end
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 260, 0, 310)
MainFrame.Position = UDim2.new(0.5, -130, 0.5, -155)
MainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 25)
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.Parent = ScreenGui
Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 12)
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(80, 40, 120)
stroke.Thickness = 1.5
stroke.Parent = MainFrame
local TitleBar = Instance.new("Frame")
TitleBar.Size = UDim2.new(1, 0, 0, 40)
TitleBar.BackgroundColor3 = Color3.fromRGB(25, 15, 40)
TitleBar.BorderSizePixel = 0
TitleBar.Parent = MainFrame
Instance.new("UICorner", TitleBar).CornerRadius = UDim.new(0, 12)
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -50, 1, 0)
Title.Position = UDim2.new(0, 12, 0, 0)
Title.BackgroundTransparency = 1
Title.Text = "🥷 NINJA TYCOON"
Title.TextColor3 = Color3.fromRGB(200, 140, 255)
Title.TextSize = 15
Title.Font = Enum.Font.GothamBold
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Parent = TitleBar
local CloseBtn = Instance.new("TextButton")
CloseBtn.Size = UDim2.new(0, 34, 0, 34)
CloseBtn.Position = UDim2.new(1, -38, 0, 3)
CloseBtn.BackgroundColor3 = Color3.fromRGB(50, 20, 25)
CloseBtn.Text = "✕"
CloseBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
CloseBtn.TextSize = 16
CloseBtn.Font = Enum.Font.GothamBold
CloseBtn.Parent = TitleBar
Instance.new("UICorner", CloseBtn).CornerRadius = UDim.new(0, 8)
local Scroll = Instance.new("ScrollingFrame")
Scroll.Size = UDim2.new(1, -14, 1, -52)
Scroll.Position = UDim2.new(0, 7, 0, 46)
Scroll.BackgroundTransparency = 1
Scroll.BorderSizePixel = 0
Scroll.ScrollBarThickness = 3
Scroll.ScrollBarImageColor3 = Color3.fromRGB(100, 60, 160)
Scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
Scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
Scroll.Parent = MainFrame
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 6)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = Scroll
--═══════════════════════════════════
-- STATE
--═══════════════════════════════════
local connections = {}
local flying = false
local autoKill = false
local goToBase = false
local bodyVel, bodyGyro
local function storeConn(name, conn)
if connections[name] then connections[name]:Disconnect() end
connections[name] = conn
end
--═══════════════════════════════════
-- BUTTON BUILDER
--═══════════════════════════════════
local function createToggle(text, emoji, onEnable, onDisable)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -4, 0, 42)
btn.BackgroundColor3 = Color3.fromRGB(30, 25, 45)
btn.Text = emoji .. " " .. text
btn.TextColor3 = Color3.fromRGB(210, 200, 230)
btn.TextSize = 13
btn.Font = Enum.Font.GothamSemibold
btn.BorderSizePixel = 0
btn.Parent = Scroll
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
local s = Instance.new("UIStroke")
s.Color = Color3.fromRGB(55, 40, 85)
s.Thickness = 1
s.Parent = btn
local active = false
btn.MouseButton1Click:Connect(function()
active = not active
if active then
btn.BackgroundColor3 = Color3.fromRGB(30, 70, 35)
s.Color = Color3.fromRGB(70, 200, 90)
btn.TextColor3 = Color3.fromRGB(150, 255, 160)
if onEnable then onEnable() end
else
btn.BackgroundColor3 = Color3.fromRGB(30, 25, 45)
s.Color = Color3.fromRGB(55, 40, 85)
btn.TextColor3 = Color3.fromRGB(210, 200, 230)
if onDisable then onDisable() end
end
end)
return btn
end
--═══════════════════════════════════
-- HELPER: FIND MOBS
--═══════════════════════════════════
-- Ninja Tycoon mobs usually in Workspace folders like "Enemies", "Mobs", "NPCs"
-- We scan for humanoid models that aren't players
local function findMobs()
local mobs = {}
for _, obj in pairs(Workspace:GetDescendants()) do
if obj:IsA("Humanoid") and obj.Health > 0 then
local mobChar = obj.Parent
if mobChar and mobChar:IsA("Model") then
local isPlayer = Players:GetPlayerFromCharacter(mobChar)
if not isPlayer and mobChar ~= character then
local hrp = mobChar:FindFirstChild("HumanoidRootPart") or mobChar:FindFirstChildWhichIsA("BasePart")
if hrp then
table.insert(mobs, {humanoid = obj, rootPart = hrp, charModel = mobChar})
end
end
end
end
end
return mobs
end
--═══════════════════════════════════
-- HELPER: FIND ENEMY BASE
--═══════════════════════════════════
-- Scan for tycoon bases/pads that don't belong to LocalPlayer
local function findEnemyBase()
-- Common tycoon folder names
local searchTerms = {"Tycoon", "Base", "Plot", "Factory"}
local enemyBases = {}
for _, obj in pairs(Workspace:GetDescendants()) do
for _, term in pairs(searchTerms) do
if string.find(obj.Name, term, 1, true) then
-- Check if it's a model or folder containing tycoon stuff
if obj:IsA("Model") or obj:IsA("Folder") then
-- Try to find owner info
local ownerVal = obj:FindFirstChild("Owner") or obj:FindFirstChild("OwnerName")
if ownerVal then
local ownerName = nil
if ownerVal:IsA("ObjectValue") and ownerVal.Value then
ownerName = ownerVal.Value.Name
elseif ownerVal:IsA("StringValue") then
ownerName = ownerVal.Value
end
if ownerName and ownerName ~= LocalPlayer.Name then
table.insert(enemyBases, obj)
end
else
-- No owner = unclaimed or enemy
table.insert(enemyBases, obj)
end
end
end
end
end
-- Find closest mob to any enemy base or just find center of enemy base
if #enemyBases > 0 then
local base = enemyBases[1]
-- Find the primary part or center
local target = base.PrimaryPart or base:FindFirstChildWhichIsA("BasePart")
if target then
return target.Position
end
end
return nil
end
--═══════════════════════════════════
-- FEATURES
--═══════════════════════════════════
-- ▸ FLY
createToggle("Fly", "🕊️",
function()
flying = true
bodyVel = Instance.new("BodyVelocity")
bodyVel.MaxForce = Vector3.new(9e9, 9e9, 9e9)
bodyVel.Velocity = Vector3.zero
bodyVel.Parent = rootPart
bodyGyro = Instance.new("BodyGyro")
bodyGyro.MaxTorque = Vector3.new(9e9, 9e9, 9e9)
bodyGyro.P = 9e4
bodyGyro.Parent = rootPart
storeConn("fly", RunService.RenderStepped:Connect(function()
if not flying or not rootPart.Parent then return end
local cam = Workspace.CurrentCamera
local moveDir = humanoid.MoveDirection
local flyVec = Vector3.zero
if moveDir.Magnitude > 0 then
flyVec = cam.CFrame:VectorToWorldSpace(moveDir)
end
if humanoid.Jump then
flyVec = flyVec + Vector3.new(0, 1, 0)
end
bodyVel.Velocity = flyVec * 90
bodyGyro.CFrame = cam.CFrame
end))
end,
function()
flying = false
if connections["fly"] then connections["fly"]:Disconnect() end
if bodyVel then bodyVel:Destroy() bodyVel = nil end
if bodyGyro then bodyGyro:Destroy() bodyGyro = nil end
end
)
-- ▸ SPEED HACK
createToggle("Speed Hack", "🏃",
function()
storeConn("speed", RunService.Heartbeat:Connect(function()
if humanoid and humanoid.Parent then
humanoid.WalkSpeed = 120
end
end))
end,
function()
if connections["speed"] then connections["speed"]:Disconnect() end
if humanoid and humanoid.Parent then humanoid.WalkSpeed = 16 end
end
)
-- ▸ AUTO KILL MOBS (proximity-based — walk near them, they die)
createToggle("Auto Kill Mobs (Proximity)", "⚔️",
function()
autoKill = true
storeConn("autokill", RunService.Heartbeat:Connect(function()
if not autoKill then return end
local myPos = rootPart.Position
local KILL_RADIUS = 35 -- studs, walk near = they die
local mobs = findMobs()
for _, mob in pairs(mobs) do
if mob.humanoid.Health > 0 then
local dist = (mob.rootPart.Position - myPos).Magnitude
if dist 0 and obj.Parent ~= character then
local isPlayer = Players:GetPlayerFromCharacter(obj.Parent)
if not isPlayer then
local hrp = obj.Parent:FindFirstChild("HumanoidRootPart") or obj.Parent:FindFirstChildWhichIsA("BasePart")
if hrp and (hrp.Position - myPos).Magnitude <= RADIUS then
obj.Health = 0
end
end
end
end
end))
end,
function()
if connections["killaura"] then connections["killaura"]:Disconnect() end
end
)
--═══════════════════════════════════
-- CLOSE
--═══════════════════════════════════
CloseBtn.MouseButton1Click:Connect(function()
for _, conn in pairs(connections) do
conn:Disconnect()
end
if bodyVel then bodyVel:Destroy() end
if bodyGyro then bodyGyro:Destroy() end
ScreenGui:Destroy()
end)