Shogun’s Reign OP Script – Keyless, Auto Fish, Fully Working 23 No Key

Shogun’s Reign OP Script – Keyless, Auto Fish, Fully Working

Shogun's Reign OP • 3 weeks ago • 23 views
Play Game

Description

This keyless script for Shogun’s Reign provides an Auto Fish feature designed to automate fishing.
It is described as fully working and requires no key.
The script keeps its feature set simple with Auto Fish as the main function.

Key Features

  • Shogun’s Reign Script
  • OP Script
  • Keyless Script
  • No Key Required
  • Fully Working
  • Auto Fish
  • Fishing Automation

Supported Executors

  • Xeno
  • Volt
  • Potassium
  • Wave
  • Delta
  • Solara
  • Opiumware
  • Codex
  • MacSploit
  • Vega X
  • Velocity
Shogun's Reign OP
Game Page
Shogun's Reign OP
Roblox
Views 23+
Likes 0
Dislikes 0
Posted 3 weeks ago
Updated 3 weeks ago
Key System No
Mobile Supported

Script Preview

298 lines • 10 KB
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 = 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()

How to Use This Script

1

Open Your Executor

Launch a supported executor and attach it to a running Roblox session.

2

Copy the Script

Click the Copy button above. The full loadstring is placed on your clipboard instantly.

3

Paste & Execute

Paste it into the executor and hit Execute. The hub window opens inside the game.

Comments

0
Join the discussion about this script.

No comments yet. Be the first to comment!