M
ScriptKeyless
Natural disaster script. tested script. trial phase
Natural Disaster SurvivalDesktop & mobile ready
Description
This script is still in the trial phase, the UI is still random. And there are several features that don't work. The cheat detection in this game is too OP, so you can die suddenly.
GAMENatural Disaster Survival
UPDATEDOct 19, 2026
ACCESSKeyless
PLATFORMDesktop & Mobile
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
-- NDS Replica Hub v3 | Bodyguard + Fly + Status Indicator | Mobile
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local CoreGui = game:GetService("CoreGui")
getgenv().NDS = {
GodMode = false, Speed = false, Jump = false,
SpeedValue = 60, JumpValue = 130,
ESP = false, NoFall = false, AutoFarm = false,
Bodyguard = false, Fly = false,
SpeedConn = nil, OriginalSpeed = 16, OriginalJump = 50,
FlyBV = nil, FlyBG = nil,
}
-- ============================================
-- ANTI-DETECT HOOKS
-- ============================================
pcall(function()
local mt = getrawmetatable(game)
local oldNewIndex = mt.__newindex
local oldIndex = mt.__index
setreadonly(mt, false)
mt.__newindex = newcclosure(function(self, key, value)
if type(self) == "Instance" and self:IsA("Humanoid") then
if key == "Health" and NDS.GodMode and value < self.MaxHealth then return end
if key == "MaxHealth" and NDS.GodMode then return end
end
return oldNewIndex(self, key, value)
end)
mt.__index = newcclosure(function(self, key)
if type(self) == "Instance" and self:IsA("Humanoid") and NDS.Jump then
if key == "JumpPower" then
local caller = getcallingscript and getcallingscript()
if caller and caller ~= LocalPlayer.Character then
return NDS.OriginalJump
end
end
end
return oldIndex(self, key)
end)
setreadonly(mt, true)
end)
-- ============================================
-- GUI
-- ============================================
local gui = Instance.new("ScreenGui")
gui.Name = "NDS_Replica_Hub_v3"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = CoreGui
local main = Instance.new("Frame")
main.Size = UDim2.new(0, 290, 0, 500)
main.Position = UDim2.new(0, 15, 0, 70)
main.BackgroundColor3 = Color3.fromRGB(18, 18, 22)
main.BorderSizePixel = 0
main.Active = true
main.Draggable = true
main.Parent = gui
Instance.new("UICorner", main).CornerRadius = UDim.new(0, 12)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 40)
title.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
title.Text = "NDS Replica v3 | Keyless"
title.TextColor3 = Color3.fromRGB(200, 200, 255)
title.Font = Enum.Font.GothamBold
title.TextSize = 15
title.Parent = main
Instance.new("UICorner", title).CornerRadius = UDim.new(0, 12)
local scroll = Instance.new("ScrollingFrame")
scroll.Size = UDim2.new(1, -10, 1, -50)
scroll.Position = UDim2.new(0, 5, 0, 45)
scroll.BackgroundTransparency = 1
scroll.ScrollBarThickness = 4
scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
scroll.Parent = main
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 6)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = scroll
-- ============================================
-- STATUS INDICATOR (Kanan Atas)
-- ============================================
local statusFrame = Instance.new("Frame")
statusFrame.Size = UDim2.new(0, 180, 0, 30)
statusFrame.Position = UDim2.new(1, -195, 0, 10)
statusFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 20)
statusFrame.BackgroundTransparency = 0.2
statusFrame.BorderSizePixel = 0
statusFrame.Parent = gui
Instance.new("UICorner", statusFrame).CornerRadius = UDim.new(0, 8)
local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, -10, 1, 0)
statusLabel.Position = UDim2.new(0, 5, 0, 0)
statusLabel.BackgroundTransparency = 1
statusLabel.TextColor3 = Color3.fromRGB(120, 255, 120)
statusLabel.Font = Enum.Font.GothamBold
statusLabel.TextSize = 12
statusLabel.TextXAlignment = Enum.TextXAlignment.Left
statusLabel.Text = "⚡ No cheats active"
statusLabel.Parent = statusFrame
local function refreshStatus()
local active = {}
if NDS.GodMode then table.insert(active, "God") end
if NDS.Speed then table.insert(active, "Speed") end
if NDS.Jump then table.insert(active, "Jump") end
if NDS.ESP then table.insert(active, "ESP") end
if NDS.NoFall then table.insert(active, "NoFall") end
if NDS.AutoFarm then table.insert(active, "Farm") end
if NDS.Bodyguard then table.insert(active, "Guard") end
if NDS.Fly then table.insert(active, "Fly") end
if #active == 0 then
statusLabel.Text = "⚡ No cheats active"
statusLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
else
statusLabel.Text = "🔥 " .. table.concat(active, " | ")
statusLabel.TextColor3 = Color3.fromRGB(120, 255, 120)
end
end
-- ============================================
-- BUTTON HELPER (dengan state color)
-- ============================================
local function makeToggle(text, key, callback)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -12, 0, 40)
btn.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.Gotham
btn.TextSize = 13
btn.Text = text .. " (OFF)"
btn.Parent = scroll
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
btn.MouseButton1Click:Connect(function()
NDS[key] = not NDS[key]
if NDS[key] then
btn.BackgroundColor3 = Color3.fromRGB(30, 130, 60)
btn.Text = text .. " (ON)"
else
btn.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
btn.Text = text .. " (OFF)"
end
if callback then callback() end
refreshStatus()
end)
return btn
end
local function makeButton(text, callback)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -12, 0, 40)
btn.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.Gotham
btn.TextSize = 13
btn.Text = text
btn.Parent = scroll
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
btn.MouseButton1Click:Connect(callback)
return btn
end
-- ============================================
-- FLOATING TOGGLE
-- ============================================
local floatingBtn = Instance.new("TextButton")
floatingBtn.Size = UDim2.new(0, 55, 0, 55)
floatingBtn.Position = UDim2.new(0, 15, 0, 200)
floatingBtn.BackgroundColor3 = Color3.fromRGB(80, 60, 200)
floatingBtn.Text = "⚡"
floatingBtn.TextColor3 = Color3.new(1, 1, 1)
floatingBtn.Font = Enum.Font.GothamBold
floatingBtn.TextSize = 24
floatingBtn.Visible = false
floatingBtn.Parent = gui
Instance.new("UICorner", floatingBtn).CornerRadius = UDim.new(1, 0)
local draggingFB, dragStart, startPos
floatingBtn.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingFB = true
dragStart = input.Position
startPos = floatingBtn.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then draggingFB = false end
end)
end
end)
UserInputService.InputChanged:Connect(function(input)
if draggingFB and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
floatingBtn.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
floatingBtn.MouseButton1Click:Connect(function()
if not draggingFB then
main.Visible = true
floatingBtn.Visible = false
end
end)
local close = Instance.new("TextButton")
close.Size = UDim2.new(0, 28, 0, 28)
close.Position = UDim2.new(1, -34, 0, 6)
close.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
close.Text = "X"
close.TextColor3 = Color3.new(1, 1, 1)
close.Font = Enum.Font.GothamBold
close.TextSize = 14
close.Parent = main
Instance.new("UICorner", close).CornerRadius = UDim.new(0, 6)
close.MouseButton1Click:Connect(function()
main.Visible = false
floatingBtn.Visible = true
end)
-- ============================================
-- HELPER
-- ============================================
local function getHum()
local char = LocalPlayer.Character
if char then
return char, char:FindFirstChildOfClass("Humanoid"), char:FindFirstChild("HumanoidRootPart")
end
return nil, nil, nil
end
-- ============================================
-- 1. GOD MODE
-- ============================================
makeToggle("🛡️ God Mode", "GodMode", function()
local _, hum = getHum()
if NDS.GodMode and hum then
hum.MaxHealth = 1000000
hum.Health = 1000000
task.spawn(function()
while NDS.GodMode do
local _, h = getHum()
if h and h.Health < h.MaxHealth then pcall(function() h.Health = h.MaxHealth end) end
task.wait(0.1)
end
end)
elseif hum then
pcall(function() hum.MaxHealth = 100 hum.Health = 100 end)
end
end)
-- ============================================
-- 2. SPEED (BodyVelocity)
-- ============================================
makeToggle("🏃 Speed Boost", "Speed", function()
local char, hum, hrp = getHum()
if NDS.Speed and hrp then
local old = hrp:FindFirstChild("NDS_SpeedBV")
if old then old:Destroy() end
local bv = Instance.new("BodyVelocity")
bv.Name = "NDS_SpeedBV"
bv.MaxForce = Vector3.new(math.huge, 0, math.huge)
bv.Velocity = Vector3.new(0, 0, 0)
bv.Parent = hrp
NDS.SpeedConn = RunService.Heartbeat:Connect(function()
local _, h, root = getHum()
if not root or not h then return end
local move = h.MoveDirection
if move.Magnitude > 0 then bv.Velocity = move * NDS.SpeedValue
else bv.Velocity = Vector3.new(0, 0, 0) end
end)
else
if NDS.SpeedConn then NDS.SpeedConn:Disconnect() NDS.SpeedConn = nil end
if hrp then
local bv = hrp:FindFirstChild("NDS_SpeedBV")
if bv then bv:Destroy() end
end
end
end)
-- ============================================
-- 3. JUMP
-- ============================================
makeToggle("🦘 Jump Boost", "Jump", function()
local _, hum = getHum()
if not hum then return end
if NDS.Jump then
pcall(function() hum.UseJumpPower = true hum.JumpPower = NDS.JumpValue end)
task.spawn(function()
while NDS.Jump do
local _, h = getHum()
if h and h.JumpPower ~= NDS.JumpValue then pcall(function() h.JumpPower = NDS.JumpValue end) end
task.wait(0.5)
end
end)
else
pcall(function() hum.JumpPower = NDS.OriginalJump end)
end
end)
-- ============================================
-- 4. FLY (mobile-friendly)
-- ============================================
makeToggle("🕊️ Fly", "Fly", function()
local char, hum, hrp = getHum()
if not hrp then return end
if NDS.Fly then
local bv = Instance.new("BodyVelocity")
bv.Name = "NDS_FlyBV"
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = Vector3.new(0, 0, 0)
bv.Parent = hrp
local bg = Instance.new("BodyGyro")
bg.Name = "NDS_FlyBG"
bg.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
bg.P = 1000
bg.D = 50
bg.Parent = hrp
NDS.FlyBV = bv
NDS.FlyBG = bg
task.spawn(function()
while NDS.Fly do
local _, h, root = getHum()
if not root then break end
local cam = Workspace.CurrentCamera
local move = h.MoveDirection
local speed = 80
if move.Magnitude > 0 then
bv.Velocity = cam.CFrame:VectorToWorldSpace(move) * speed
else
bv.Velocity = Vector3.new(0, 0, 0)
end
bg.CFrame = cam.CFrame
task.wait(0.03)
end
end)
else
if hrp then
local bv = hrp:FindFirstChild("NDS_FlyBV")
local bg = hrp:FindFirstChild("NDS_FlyBG")
if bv then bv:Destroy() end
if bg then bg:Destroy() end
end
NDS.FlyBV = nil
NDS.FlyBG = nil
end
end)
-- FLY UP / DOWN BUTTON
local flyUpBtn = makeButton("⬆️ Fly Up (hold)", function()
local _, _, hrp = getHum()
if NDS.FlyBV and hrp then
NDS.FlyBV.Velocity = Vector3.new(NDS.FlyBV.Velocity.X, 80, NDS.FlyBV.Velocity.Z)
end
end)
local flyDownBtn = makeButton("⬇️ Fly Down (hold)", function()
local _, _, hrp = getHum()
if NDS.FlyBV and hrp then
NDS.FlyBV.Velocity = Vector3.new(NDS.FlyBV.Velocity.X, -80, NDS.FlyBV.Velocity.Z)
end
end)
-- ============================================
-- 5. BODYGUARD (rotating fling blocks)
-- ============================================
getgenv().NDS_BodyguardParts = {}
getgenv().NDS_BodyguardFolder = nil
makeToggle("🥷 Bodyguard", "Bodyguard", function()
local char, hum, hrp = getHum()
if not hrp then return end
if NDS.Bodyguard then
local folder = Instance.new("Folder")
folder.Name = "NDS_BodyguardFolder"
folder.Parent = Workspace
NDS_BodyguardFolder = folder
local angles = {0, 90, 180, 270}
for i, ang in ipairs(angles) do
local part = Instance.new("Part")
part.Name = "NDS_Guard_" .. i
part.Size = Vector3.new(2, 6, 2)
part.Color = Color3.fromRGB(255, 80, 80)
part.Material = Enum.Material.Neon
part.CanCollide = false
part.Anchored = true
part.Transparency = 0.3
part.Parent = folder
local att = Instance.new("Attachment")
att.Name = "Attach_" .. i
att.Parent = hrp
-- posisi orbit awal
local rad = math.rad(ang)
att.Position = Vector3.new(math.cos(rad) * 4, 0, math.sin(rad) * 4)
local align = Instance.new("AlignPosition")
align.Mode = Enum.PositionAlignmentMode.OneAttachment
align.Attachment0 = att
align.MaxForce = 1e6
align.Responsiveness = 100
align.Parent = part
local contact = Instance.new("Part")
contact.Name = "Hitbox_" .. i
contact.Size = Vector3.new(4, 8, 4)
contact.Transparency = 1
contact.CanCollide = false
contact.Anchored = true
contact.Parent = folder
local weld = Instance.new("WeldConstraint")
weld.Part0 = part
weld.Part1 = contact
part.Touched:Connect(function(hit)
if not NDS.Bodyguard then return end
local model = hit:FindFirstAncestorOfClass("Model")
if model and model ~= char and model:FindFirstChildOfClass("Humanoid") then
local h = model:FindFirstChildOfClass("Humanoid")
local root = model:FindFirstChild("HumanoidRootPart")
if h and root and h.Health > 0 then
-- fling velocity
local dir = (root.Position - part.Position).Unit
local bv = Instance.new("BodyVelocity")
bv.MaxForce = math.huge
bv.Velocity = (dir + Vector3.new(0, 2, 0)) * 500
bv.Parent = root
game:GetService("Debris"):AddItem(bv, 0.5)
h.Health = 0
end
end
end)
table.insert(NDS_BodyguardParts, part)
end
-- Spin loop
task.spawn(function()
local t = 0
while NDS.Bodyguard do
t = t + 0.5
local _, _, root = getHum()
if not root then break end
for i, ang in ipairs(angles) do
local rad = math.rad(ang + t * 10)
local att = root:FindFirstChild("Attach_" .. i)
if att then
att.Position = Vector3.new(math.cos(rad) * 4, 0, math.sin(rad) * 4)
end
end
task.wait(0.03)
end
end)
else
if NDS_BodyguardFolder then
NDS_BodyguardFolder:Destroy()
NDS_BodyguardFolder = nil
end
if hrp then
for i = 1, 4 do
local att = hrp:FindFirstChild("Attach_" .. i)
if att then att:Destroy() end
end
end
NDS_BodyguardParts = {}
end
end)
-- ============================================
-- 6. ESP DISASTER
-- ============================================
makeToggle("👁️ ESP Disaster", "ESP", function()
if NDS.ESP then
task.spawn(function()
while NDS.ESP do
for _, part in pairs(Workspace:GetDescendants()) do
if part:IsA("BasePart") and not part:FindFirstChild("NDS_ESP") then
local n = part.Name:lower()
if n:find("disaster") or n:find("storm") or n:find("tornado") or n:find("meteor") or n:find("lava") then
local hl = Instance.new("Highlight")
hl.Name = "NDS_ESP"
hl.FillColor = Color3.fromRGB(255, 0, 0)
hl.OutlineColor = Color3.fromRGB(255, 255, 0)
hl.Parent = part
end
end
end
task.wait(2)
end
end)
else
for _, part in pairs(Workspace:GetDescendants()) do
local hl = part:FindFirstChild("NDS_ESP")
if hl then hl:Destroy() end
end
end
end)
-- ============================================
-- 7. DISASTER DETECTOR
-- ============================================
local detectorLabel = Instance.new("TextLabel")
detectorLabel.Size = UDim2.new(0, 220, 0, 30)
detectorLabel.Position = UDim2.new(0, 15, 0, 30)
detectorLabel.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
detectorLabel.BackgroundTransparency = 0.4
detectorLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
detectorLabel.Font = Enum.Font.GothamBold
detectorLabel.TextSize = 13
detectorLabel.Text = "Disaster: -"
detectorLabel.Visible = false
detectorLabel.Parent = gui
Instance.new("UICorner", detectorLabel).CornerRadius = UDim.new(0, 6)
makeButton("🔔 Disaster Detector", function()
detectorLabel.Visible = not detectorLabel.Visible
if detectorLabel.Visible then
task.spawn(function()
while detectorLabel.Visible do
local found = "None"
for _, obj in pairs(Workspace:GetDescendants()) do
if obj:IsA("BasePart") then
local n = obj.Name:lower()
if n:find("disaster") or n:find("storm") or n:find("tornado") or n:find("meteor") then
found = obj.Name
break
end
end
end
detectorLabel.Text = "Disaster: " .. found
task.wait(1)
end
end)
end
end)
-- ============================================
-- 8. TELEPORT SPAWN
-- ============================================
makeButton("🏠 Teleport Spawn", function()
local char = getHum()
if char then char:MoveTo(Vector3.new(0, 5, 0)) end
end)
-- ============================================
-- 9. NO FALL DAMAGE
-- ============================================
makeToggle("🪂 No Fall Damage", "NoFall", function()
if NDS.NoFall then
task.spawn(function()
while NDS.NoFall do
local _, hum = getHum()
if hum and hum.Health < hum.MaxHealth and hum.Health > 0 then
pcall(function() hum.Health = hum.MaxHealth end)
end
task.wait(0.2)
end
end)
end
end)
-- ============================================
-- 10. AUTO FARM
-- ============================================
makeToggle("💰 Auto-Farm Points", "AutoFarm", function()
if NDS.AutoFarm then
task.spawn(function()
while NDS.AutoFarm do
local char = getHum()
if char then
local rp = Workspace:FindFirstChild("Points") or Workspace:FindFirstChild("Coins")
if rp and rp:IsA("BasePart") then
pcall(function() char:MoveTo(rp.Position) end)
end
end
task.wait(3)
end
end)
end
end)
-- ============================================
-- 11. AUTO WIN
-- ============================================
makeButton("⬆️ Auto-Win (Teleport Safe)", function()
local char = getHum()
if not char then return end
local tower = Workspace:FindFirstChild("Tower") or Workspace:FindFirstChild("SafeZone")
if tower and tower:IsA("BasePart") then
char:MoveTo(tower.Position + Vector3.new(0, 20, 0))
else
char:MoveTo(Vector3.new(0, 200, 0))
end
end)
-- ============================================
-- CANVAS SIZE UPDATE
-- ============================================
layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
scroll.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 20)
end)
refreshStatus()
print("[NDS v3] Loaded. Bodyguard + Fly + Status Indicator active.")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place