Disaster buttons
Key Required Patched

Disaster buttons

Ohio Tools NULL01NULL01 3.4K views 472 executesUpdated Jan 31, 2026
3.8/ 5(4 votes)
3175% Positive
Lua Script•100 lines (2665 chars)
print("Drop GUI running")

-- SERVICES
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Camera = workspace.CurrentCamera

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

-- REMOTES
local trainRemote = ReplicatedStorage:WaitForChild("DropBlock")
local planeRemote = ReplicatedStorage:WaitForChild("PlaneDrop")
local carRemote = ReplicatedStorage:WaitForChild("SpawnCars")

-- === FIXED GUI CREATION ===
local gui = Instance.new("ScreenGui")
gui.Name = "DropGui"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = playerGui

-- === BUTTON CREATOR ===
local function makeButton(textOff, textOn, pos, offCol, onCol)
	local b = Instance.new("TextButton")
	b.Size = UDim2.new(0, 220, 0, 70)
	b.Position = pos
	b.Text = textOff
	b.TextScaled = true
	b.BackgroundColor3 = offCol
	b.Active = true
	b.Draggable = true
	b.Parent = gui

	local enabled = false
	b.MouseButton1Click:Connect(function()
		enabled = not enabled
		b.Text = enabled and textOn or textOff
		b.BackgroundColor3 = enabled and onCol or offCol
	end)

	return function() return enabled end
end

-- === BUTTONS ===
local trainOn = makeButton(
	"🚆 Train OFF", "🚆 Train ON",
	UDim2.new(0.02, 0, 0.60, 0),
	Color3.fromRGB(255,80,80), Color3.fromRGB(80,255,80)
)

local planeOn = makeButton(
	"✈️ Plane OFF", "✈️ Plane ON",
	UDim2.new(0.02, 0, 0.70, 0),
	Color3.fromRGB(80,120,255), Color3.fromRGB(80,255,160)
)

local carOn = makeButton(
	"🚗 Cars OFF", "🚗 Cars ON",
	UDim2.new(0.02, 0, 0.80, 0),
	Color3.fromRGB(180,180,180), Color3.fromRGB(255,255,80)
)

-- === RAYCAST FROM SCREEN ===
local function getWorldPos(screenPos)
	local ray = Camera:ViewportPointToRay(screenPos.X, screenPos.Y)
	local params = RaycastParams.new()
	params.FilterDescendantsInstances = { player.Character }
	params.FilterType = Enum.RaycastFilterType.Blacklist

	local hit = workspace:Raycast(ray.Origin, ray.Direction * 3000, params)
	return hit and hit.Position
end

-- === INPUT HANDLER (PC + MOBILE) ===
UserInputService.InputBegan:Connect(function(input, gp)
	if gp then return end
	if input.UserInputType ~= Enum.UserInputType.Touch
	and input.UserInputType ~= Enum.UserInputType.MouseButton1 then return end

	local worldPos = getWorldPos(input.Position)
	if not worldPos then return end

	-- Train
	if trainOn() then
		trainRemote:FireServer(worldPos)
	end

	-- Plane
	if planeOn() then
		planeRemote:FireServer(worldPos)
	end

	-- Cars
	if carOn() then
		carRemote:FireServer(worldPos)
	end
end)

Features & Information

The button has 3 disasters the first one is a train the second one is a plane and the third one is cars pretty nice, Also you can use the script when the game is popular or smth you can use it anytime.
#Disasters

Community Comments (9)

NULL01NULL01Jan 31, 2026

:p

NULL01NULL01Jan 31, 2026

I appreciate if you like it but if not it's okay,

NULL01NULL01Jan 31, 2026

And also I forgot to mention the controls turn on one of them to spawn it but if you turn all of them on you can go chaos mode

NULL01NULL01Jan 31, 2026

And click anywhere to spawn them in

NULL01NULL01Jan 31, 2026

Also if you ever see someone named jynsmsdmdm / hysteria that's me

NULL01NULL01Jan 31, 2026

okay I'm not gonna keep yapping

dsedsdsedsFeb 1, 2026

w script

ZACKYHAKIZIMANZACKYHAKIZIMANMar 13, 2026

It does not work

NULL01NULL01Mar 19, 2026

oh it's patched aww man i think

More Scripts for Ohio Tools