

Description
Use this Shogun Tools hub for Shogun's Reign Roblox!! Now you can get features like Auto Sleep When Tired, Instant Bite Reel In, AFK Auto Fishing Loop, Auto Equip Rod and Nearest Fishing Spot Finder, and More!!
Shogun Tools is a tiny panel with a single Auto Fish button, which showed ON in green, and a line under it that counts casts, caught, miss and sleep, all at 0 when it starts. Spawn in as a Fisher, stand next to the water with your rod and switch it on. It picks the closest fishing spot within 12 studs, casts, waits up to 20 seconds for a bite and reels in the moment the bite comes, with a one second pause between casts. When your character says it is tired, the script sends you to sleep, then equips the rod again and carries on, so you can leave it running AFK for a long time. The code is open source and made only for this game. No key on this one, so paste the script and go!!
Features
- AFK Auto Fishing Loop
- Instant Bite Reel In
- Auto Sleep When Tired
- Auto Equip Rod
- Nearest Fishing Spot Finder
- Cast Retry and Timeout Safety
- Live Catch Tracker

Shogun's Reign
Explore more scripts for this game (1)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local plr = Players.LocalPlayer
local fishingRemote = ReplicatedStorage:WaitForChild("Events"):WaitForChild("Activities"):WaitForChild("Fishing")
-- Edit config here
local CONFIG = {
CastRetryDelay = 1.0, -- pause between casts
CastTimeout = 20, -- max seconds to wait for Bite/CastEnded
SpotMaxDist = 12, -- max distance to fire prompt from
}
getgenv().AutoFish = false
getgenv().NeedsSleep = false
getgenv().ShogunRunId = (getgenv().ShogunRunId or 0) + 1
local RUN_ID = getgenv().ShogunRunId
local function stillMine() return getgenv().ShogunRunId == RUN_ID end
if type(getgenv().ShogunConns) == "table" then
for _, c in ipairs(getgenv().ShogunConns) do
pcall(function() c:Disconnect() end)
end
end
getgenv().ShogunConns = {}
local function getPrompt()
local folder = workspace:FindFirstChild("World")
and workspace.World:FindFirstChild("Interactables")
and workspace.World.Interactables:FindFirstChild("Fish")
if not folder then return nil, nil, math.huge end
local plrChar = plr.Character
local hrp = plrChar and plrChar:FindFirstChild("HumanoidRootPart")
if not hrp then return nil, nil, math.huge end
local best, bestPrompt, bestDist
for _, spot in ipairs(folder:GetChildren()) do
if spot:IsA("BasePart") then
local d = (spot.Position - hrp.Position).Magnitude
if not bestDist or d < bestDist then
best = spot
bestDist = d
bestPrompt = spot:FindFirstChildOfClass("ProximityPrompt")
end
end
end
return bestPrompt, best, bestDist
end
local function ensureRodEquipped()
local ch = plr.Character
if not ch then return end
local hum = ch:FindFirstChildOfClass("Humanoid")
if not hum then return end
local held = ch:FindFirstChildOfClass("Tool")
if held and held.Name:lower():find("rod") then return end
local rod
for _, tool in ipairs(plr.Backpack:GetChildren()) do
if tool:IsA("Tool") and tool.Name:lower():find("rod") then
rod = tool
break
end
end
if rod then
hum:EquipTool(rod)
task.wait(0.4)
return
end
local function countFish()
local n = 0
for _, t in ipairs(plr.Backpack:GetChildren()) do
if t.Name == "Fish" then n = n + 1 end
end
return n
end
local fishN = countFish()
if fishN >= 8 then
pcall(function()
ReplicatedStorage.Events.Economy.Shop:FireServer("Sell", "Takeshi", { Fish = fishN })
end)
task.wait(0.5)
end
rod = nil
for _, tool in ipairs(plr.Backpack:GetChildren()) do
if tool:IsA("Tool") and tool.Name:lower():find("rod") then rod = tool break end
end
if not rod and not (ch:FindFirstChildOfClass("Tool") and ch:FindFirstChildOfClass("Tool").Name:lower():find("rod")) then
pcall(function()
ReplicatedStorage.Events.Economy.Shop:FireServer("Buy", "Takeshi", { ["Best Fishing Rod"] = 1 })
end)
task.wait(1.0)
for _, tool in ipairs(plr.Backpack:GetChildren()) do
if tool:IsA("Tool") and tool.Name:lower():find("rod") then rod = tool break end
end
if not rod then
for _, tool in ipairs(ch:GetChildren()) do
if tool:IsA("Tool") and tool.Name:lower():find("rod") then return end
end
end
end
if rod then
hum:EquipTool(rod)
task.wait(0.4)
end
end
local events = {}
local eventsDirty = false
table.insert(getgenv().ShogunConns, fishingRemote.OnClientEvent:Connect(function(action, data)
if not stillMine() then return end
local token = type(data) == "table" and data.token or nil
events[#events + 1] = { action = action, token = token }
eventsDirty = true
if action == "Bite" and token then
pcall(function()
fishingRemote:FireServer("Result", true, token)
end)
end
end))
do
local thoughtRemote
for _, d in ipairs(ReplicatedStorage.Events:GetDescendants()) do
if d.Name == "CreateThought" and d:IsA("RemoteEvent") then
thoughtRemote = d
break
end
end
if thoughtRemote then
table.insert(getgenv().ShogunConns, thoughtRemote.OnClientEvent:Connect(function(msg)
if not stillMine() then return end
if type(msg) == "string" and msg:lower():find("tired") then
getgenv().NeedsSleep = true
end
end))
end
end
task.spawn(function()
if not stillMine() then return end
local stats = { casts = 0, caught = 0, misses = 0, sleeps = 0 }
getgenv().FishStats = stats
while stillMine() do
if not getgenv().AutoFish then
eventsDirty = false
task.wait(0.1)
continue
end
if getgenv().NeedsSleep then
goToSleep()
stats.sleeps = stats.sleeps + 1
end
ensureRodEquipped()
local prompt, spot, dist = getPrompt()
if prompt and dist <= CONFIG.SpotMaxDist then
events = {}
eventsDirty = false
local ok = pcall(fireproximityprompt, prompt)
if ok then
stats.casts = stats.casts + 1
end
local t0 = os.clock()
local gotBite, resolved = false, false
while os.clock() - t0 < CONFIG.CastTimeout
and stillMine() and getgenv().AutoFish
and not resolved and not getgenv().NeedsSleep do
if eventsDirty then
eventsDirty = false
for _, e in ipairs(events) do
if e.action == "Bite" then gotBite = true end
if e.action == "CastEnded" then resolved = true end
end
end
task.wait(0.05)
end
if gotBite then
stats.caught = stats.caught + 1
elseif resolved then
stats.misses = stats.misses + 1
end
else
if not prompt then
warn("[AutoFish] no fishing spot found")
else
warn("[AutoFish] no prompt in range (dist=" .. tostring(dist) .. ")")
end
task.wait(CONFIG.CastRetryDelay)
end
task.wait(CONFIG.CastRetryDelay)
end
end)
local function buildUI()
local guiName = "ShogunToggleUI"
local old = plr:FindFirstChild("PlayerGui") and plr.PlayerGui:FindFirstChild(guiName)
if old then old:Destroy() end
local pg = plr:WaitForChild("PlayerGui")
local gui = Instance.new("ScreenGui")
gui.Name = guiName
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = pg
local frame = Instance.new("Frame")
frame.Name = "Main"
frame.Size = UDim2.fromOffset(200, 110)
frame.Position = UDim2.new(0, 16, 0.5, -55)
frame.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = frame
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(70, 70, 90)
stroke.Thickness = 1
stroke.Parent = frame
local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, 0, 0, 32)
title.BackgroundColor3 = Color3.fromRGB(32, 32, 42)
title.BorderSizePixel = 0
title.Font = Enum.Font.GothamBold
title.Text = "Shogun Tools"
title.TextColor3 = Color3.fromRGB(235, 235, 245)
title.TextSize = 14
title.Parent = frame
local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 8)
titleCorner.Parent = title
local titleFix = Instance.new("Frame")
titleFix.Size = UDim2.new(1, 0, 0, 10)
titleFix.Position = UDim2.new(0, 0, 1, -10)
titleFix.BackgroundColor3 = title.BackgroundColor3
titleFix.BorderSizePixel = 0
titleFix.Parent = title
local function makeToggle(name, labelText, y, getFlag)
local btn = Instance.new("TextButton")
btn.Name = name
btn.Size = UDim2.new(1, -24, 0, 36)
btn.Position = UDim2.new(0, 12, 0, y)
btn.BackgroundColor3 = Color3.fromRGB(40, 40, 52)
btn.BorderSizePixel = 0
btn.Font = Enum.Font.GothamSemibold
btn.TextSize = 13
btn.TextColor3 = Color3.fromRGB(235, 235, 245)
btn.AutoButtonColor = true
btn.Parent = frame
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, 6)
c.Parent = btn
local stateLabel = Instance.new("TextLabel")
stateLabel.Name = "State"
stateLabel.Size = UDim2.new(0, 52, 1, 0)
stateLabel.Position = UDim2.new(1, -60, 0, 0)
stateLabel.BackgroundTransparency = 1
stateLabel.Font = Enum.Font.GothamBold
stateLabel.TextSize = 12
stateLabel.TextXAlignment = Enum.TextXAlignment.Right
stateLabel.Parent = btn
local function refresh()
local on = getFlag() == true
btn.Text = labelText
btn.TextXAlignment = Enum.TextXAlignment.Left
btn.TextTransparency = on and 0 or 0.35
stateLabel.Text = on and "ON" or "OFF"
stateLabel.TextColor3 = on and Color3.fromRGB(90, 220, 130) or Color3.fromRGB(220, 90, 90)
end
refresh()
return btn, refresh
end
local btnFish, refreshFish = makeToggle("FishBtn", "Auto Fish", 44, function()
return getgenv().AutoFish
end)
btnFish.Activated:Connect(function()
getgenv().AutoFish = not getgenv().AutoFish
refreshFish()
end)
local statsLabel = Instance.new("TextLabel")
statsLabel.Name = "Stats"
statsLabel.Size = UDim2.new(1, -24, 0, 24)
statsLabel.Position = UDim2.new(0, 12, 1, -30)
statsLabel.BackgroundTransparency = 1
statsLabel.Font = Enum.Font.Gotham
statsLabel.TextSize = 11
statsLabel.TextColor3 = Color3.fromRGB(160, 160, 180)
statsLabel.TextXAlignment = Enum.TextXAlignment.Left
statsLabel.Text = "casts 0 | caught 0"
statsLabel.Parent = frame
task.spawn(function()
while gui.Parent and stillMine() do
refreshFish()
local s = getgenv().FishStats
if s then
statsLabel.Text = string.format(
"casts %d | caught %d | miss %d | sleep %d",
s.casts or 0, s.caught or 0, s.misses or 0, s.sleeps or 0
)
end
task.wait(0.5)
end
end)
return gui
end
buildUI()