
Key Required
Fishing Chef
Lua Script•793 lines (24114 chars)
local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local UserInputService = game:GetService("UserInputService")
local VirtualUser = game:GetService("VirtualUser")
-- Services & Variables
local Fish = ReplicatedStorage:WaitForChild("Packages"):WaitForChild("Knit"):WaitForChild("Services"):WaitForChild("Fish")
local RF = Fish:WaitForChild("RF")
local RE = Fish:WaitForChild("RE")
local SellFishRemote = RE:WaitForChild("SellFish")
local StartCutSessionRemote = RF:WaitForChild("StartCutSession")
local CutActionRemote = RE:WaitForChild("CutAction")
local ServerAnimsRemote = RE:WaitForChild("ServerAnims")
local CutFishRemote = RF:WaitForChild("CutFish")
local RequestRestaurauntDataRemote = RF:WaitForChild("RequestRestaurauntData")
local CookRemote = RF:WaitForChild("Cook")
-- State (using original variable names)
local autoFish = false
local fishThread = nil
local autoSell = false
local sellThread = nil
local autoCookNigiri = false
local cookNigiriThread = nil
local autoCookSushi = false
local cookSushiThread = nil
local autoCookSashimi = false
local cookSashimiThread = nil
local selectedFishingLocation = 1 -- Default to first location
-- Misc State
_G.fullbright = false
_G.noFog = false
_G.forceDayTime = false
_G.forceNightTime = false
_G.ambientEnabled = false
_G.ambientR = 0.32156862745098
_G.ambientG = 0.32156862745098
_G.ambientB = 0.32156862745098
_G.walkSpeed = 16
_G.fly = false
_G.flySpeed = 50
_G.flingWalk = false
_G.antiFling = false
_G.jumpPower = 50
-- NEW Locations! (Added "No TP (Stay Here)")
local locations = {
{ Name = "No TP (Stay Here)", Position = nil },
{ Name = "Moon Tuna Hunt", Position = Vector3.new(60, 10, -858) },
{ Name = "Moon Tuna Islands 2", Position = Vector3.new(-166, 9, -817) },
{ Name = "Moon Tuna Islands 3", Position = Vector3.new(40, 8, -586) },
{ Name = "Koi Pond", Position = Vector3.new(-88, 11, -1350) },
{ Name = "Shark Hunt", Position = Vector3.new(-16, 4, 325) },
{ Name = "Bamboo Islands", Position = Vector3.new(-2359, 4, -928) },
{ Name = "Snow Islands", Position = Vector3.new(-3743, 6, 1484) },
{ Name = "Location 1", Position = Vector3.new(-112.332, 2.689, -1336.005) },
{ Name = "Location 2", Position = Vector3.new(-3875.299, 38.839, 1557.888) },
{ Name = "Location 3", Position = Vector3.new(-1315.620, 37.832, 1635.639) },
{ Name = "Location 4 (Ocean)", Position = Vector3.new(-2.137, 23.070, 175.539) }
}
-- Create location names list for dropdown
local locationNames = {}
for i, loc in ipairs(locations) do
table.insert(locationNames, loc.Name)
end
-- Anti AFK
LocalPlayer.Idled:Connect(function()
VirtualUser:Button2Down(Vector2.new(0, 0), Workspace.CurrentCamera.CFrame)
task.wait(0.1)
VirtualUser:Button2Up(Vector2.new(0, 0), Workspace.CurrentCamera.CFrame)
end)
-- Helper Functions
local function teleportToLocation(position)
if not position then return end -- Don't teleport if "No TP"
local char = LocalPlayer.Character
if char and char:FindFirstChild("HumanoidRootPart") then
char.HumanoidRootPart.CFrame = CFrame.new(position)
end
end
local function findCuttingBoard()
local plot = Workspace:FindFirstChild("Code"):FindFirstChild("Plots")
if plot then
local playerPlot = plot:FindFirstChild(LocalPlayer.Name)
if playerPlot then
local stall = playerPlot:FindFirstChild("STALL")
if stall then
local station = stall:FindFirstChild("CookingStation")
if station then
return station:FindFirstChild("CuttingBoard")
end
end
end
end
return nil
end
local function getInventory()
local fishList = {}
local ok, data = pcall(function() return RF.RequestFishData:InvokeServer() end)
if ok and type(data) == "table" then
for _, fish in ipairs(data) do
if type(fish) == "table" and fish.ID then
table.insert(fishList, {
ID = fish.ID,
CF = fish.CF or fish.Name or "tuna",
Mutations = fish.Mutations or {},
Data = fish.Data or 1,
Value = fish.Value or 0
})
end
end
end
return fishList
end
-- === EXACT ORIGINAL AUTO FUNCTIONS FROM YOUR SCRIPT! ===
local function startFishLoop()
fishThread = task.spawn(function()
-- Teleport to selected location only if it's not "No TP"
local selectedLoc = locations[selectedFishingLocation]
if selectedLoc and selectedLoc.Position then
teleportToLocation(selectedLoc.Position)
end
while autoFish do
pcall(function() RF.CastRequest:InvokeServer(99999999999) end)
task.wait(3)
pcall(function() RF.MinigameResolved:InvokeServer(true) end)
task.wait(1)
end
end)
end
local function startSellLoop()
sellThread = task.spawn(function()
while autoSell do
for id = 1, 1000 do
if not autoSell then break end
pcall(function()
SellFishRemote:FireServer({{ ID = id, Name = "fish", Weight = 9999999999 }})
end)
task.wait(0.005)
end
task.wait(0.3)
end
end)
end
local function cookSingleFish(fishData, dish)
pcall(function() StartCutSessionRemote:InvokeServer() end)
task.wait(0.2)
pcall(function() CutActionRemote:FireServer(1) end)
task.wait(0.2)
pcall(function() CutActionRemote:FireServer(2) end)
task.wait(0.2)
local board = findCuttingBoard()
if board then
pcall(function() ServerAnimsRemote:FireServer("CuttingBoard", board, false) end)
end
task.wait(0.2)
pcall(function() CutFishRemote:InvokeServer(1, 1.85) end)
task.wait(0.2)
pcall(function() RequestRestaurauntDataRemote:InvokeServer() end)
task.wait(0.2)
pcall(function()
CookRemote:InvokeServer(dish, {
CF = fishData.CF,
Name = "Fish Filet",
Amount = 1,
Value = fishData.Value,
Mutations = fishData.Mutations,
Data = fishData.Data,
ID = fishData.ID
})
end)
end
local function startCookLoop(dish, enabledFlag)
return task.spawn(function()
while enabledFlag() do
local fishList = getInventory()
if #fishList > 0 then
for _, fish in ipairs(fishList) do
if not enabledFlag() then break end
cookSingleFish(fish, dish)
task.wait(4)
end
end
task.wait(1)
end
end)
end
-- === ANTI-FLING FUNCTION ===
local antiFlingLastPos = nil
local antiFlingConnection = nil
local function startAntiFling()
if antiFlingConnection then return end
antiFlingConnection = RunService.Heartbeat:Connect(function()
if not _G.antiFling then return end
local char = LocalPlayer.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local LastPos = antiFlingLastPos or hrp.Position
local LastVelocity = (hrp.AssemblyLinearVelocity.Magnitude > 250 and Vector3.new(0,0,0)) or hrp.AssemblyLinearVelocity
local LastAngularVelocity = (hrp.AssemblyAngularVelocity.Magnitude > 250 and Vector3.new(0,0,0)) or hrp.AssemblyAngularVelocity
if hrp.AssemblyLinearVelocity.Magnitude > 250 or hrp.AssemblyAngularVelocity.Magnitude > 250 then
hrp.AssemblyLinearVelocity = LastVelocity
hrp.AssemblyAngularVelocity = LastAngularVelocity
hrp.CFrame = CFrame.new(LastPos)
else
antiFlingLastPos = hrp.Position
end
end)
end
-- === FLING WALK FUNCTION (FIXED TO NOT FLING YOU, ONLY OTHER PLAYERS!) ===
local flingWalkConnection = nil
local function startFlingWalk()
if flingWalkConnection then return end
flingWalkConnection = RunService.Heartbeat:Connect(function()
if not _G.flingWalk then return end
local char = LocalPlayer.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
-- Keep YOU completely stable!
hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
hrp.RotVelocity = Vector3.new(0, 0, 0)
-- Check all other players
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local targetChar = player.Character
local targetHrp = targetChar:FindFirstChild("HumanoidRootPart")
local targetHum = targetChar:FindFirstChildOfClass("Humanoid")
if targetHrp and targetHum then
local distance = (hrp.Position - targetHrp.Position).Magnitude
if distance < 10 then -- Flings players within 10 studs
-- Calculate strong fling direction (away from you)
local direction = (targetHrp.Position - hrp.Position).Unit
-- Apply huge velocity to fling THEM far away
targetHrp.AssemblyLinearVelocity = direction * 600 + Vector3.new(0, 350, 0)
targetHrp.RotVelocity = Vector3.new(math.random(-800, 800), math.random(-800, 800), math.random(-800, 800))
-- Try to set network ownership to make fling more effective
pcall(function()
targetHrp:SetNetworkOwner(LocalPlayer)
end)
end
end
end
end
end)
end
local function stopFlingWalk()
if flingWalkConnection then
flingWalkConnection:Disconnect()
flingWalkConnection = nil
end
local char = LocalPlayer.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.RotVelocity = Vector3.new(0,0,0)
hrp.AssemblyLinearVelocity = Vector3.new(0,0,0)
hrp.AssemblyAngularVelocity = Vector3.new(0,0,0)
end
end
end
-- === LIGHTING SYSTEM (UPDATED NO FOG) ===
local function updateLighting()
-- Fullbright (not too bright!)
if _G.fullbright then
Lighting.Brightness = 2
Lighting.GlobalShadows = false
Lighting.Ambient = Color3.new(0.8, 0.8, 0.8)
Lighting.OutdoorAmbient = Color3.new(0.8, 0.8, 0.8)
Lighting.ExposureCompensation = 0.5
end
-- No Fog (UPDATED)
if _G.noFog then
Lighting.FogEnd = 100000000
Lighting.FogStart = 100000000
Lighting.FogColor = Color3.new(1,1,1)
end
-- Force Day/Night Time (no flicker!)
if _G.forceDayTime then
Lighting.ClockTime = 14
Lighting.TimeOfDay = "14:00:00"
Lighting.GeographicLatitude = 0
elseif _G.forceNightTime then
Lighting.ClockTime = 23
Lighting.TimeOfDay = "23:00:00"
Lighting.GeographicLatitude = 0
end
-- Ambient
if _G.ambientEnabled then
Lighting.Ambient = Color3.new(_G.ambientR, _G.ambientG, _G.ambientB)
Lighting.OutdoorAmbient = Color3.new(_G.ambientR, _G.ambientG, _G.ambientB)
end
end
-- Block the game from changing time
local clockTimeConn = Lighting:GetPropertyChangedSignal("ClockTime"):Connect(function()
if _G.forceDayTime then
Lighting.ClockTime = 14
elseif _G.forceNightTime then
Lighting.ClockTime = 23
end
end)
local timeOfDayConn = Lighting:GetPropertyChangedSignal("TimeOfDay"):Connect(function()
if _G.forceDayTime then
Lighting.TimeOfDay = "14:00:00"
elseif _G.forceNightTime then
Lighting.TimeOfDay = "23:00:00"
end
end)
-- Block the game from changing fog properties
local fogEndConn = Lighting:GetPropertyChangedSignal("FogEnd"):Connect(function()
if _G.noFog then
Lighting.FogEnd = 100000000
end
end)
local fogStartConn = Lighting:GetPropertyChangedSignal("FogStart"):Connect(function()
if _G.noFog then
Lighting.FogStart = 100000000
end
end)
-- Run lighting update every frame
local lightingConnection = RunService.Heartbeat:Connect(updateLighting)
-- === MOVEMENT FUNCTIONS ===
local function updateCharacterStats()
local char = LocalPlayer.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum.WalkSpeed = _G.walkSpeed
hum.JumpPower = _G.jumpPower
end
end
end
-- Fly System
local flyConnection = nil
local function startFly()
if flyConnection then return end
flyConnection = RunService.Heartbeat:Connect(function()
if not _G.fly then return end
local char = LocalPlayer.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
hum.PlatformStand = true
local camera = Workspace.CurrentCamera
local direction = Vector3.new()
if UserInputService:IsKeyDown(Enum.KeyCode.W) then
direction = direction + camera.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then
direction = direction - camera.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then
direction = direction - camera.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then
direction = direction + camera.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
direction = direction + Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then
direction = direction - Vector3.new(0, 1, 0)
end
if direction.Magnitude > 0 then
direction = direction.Unit * _G.flySpeed
end
hrp.Velocity = direction
end)
end
local function stopFly()
if flyConnection then
flyConnection:Disconnect()
flyConnection = nil
end
local char = LocalPlayer.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum.PlatformStand = false
end
end
end
-- Character Added Event
LocalPlayer.CharacterAdded:Connect(function()
updateCharacterStats()
if _G.fly then
task.wait(0.5)
startFly()
end
end)
-- Create UI
Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true
local Window = Library:CreateWindow({
Title = "Fishing Chef",
NotifySide = "Right",
ShowCustomCursor = true,
Footer = "IdkhubXApelhub",
})
Library:AddDraggableLabel("Fishing Chef - IdkhubXApelhub")
local Tabs = {
Auto = Window:AddTab("Auto", "pickaxe"),
Cooking = Window:AddTab("Cooking", "shopping-cart"),
Teleport = Window:AddTab("Teleport", "map"),
Misc = Window:AddTab("Misc", "wrench"),
Settings = Window:AddTab("Settings", "settings"),
}
-- Auto Tab
local AutoLeft = Tabs.Auto:AddLeftGroupbox("Auto Fishing & Selling")
AutoLeft:AddToggle("AutoFishToggle", {
Text = "Auto Fishing",
Default = false,
Callback = function(v)
autoFish = v
if v then
startFishLoop()
else
if fishThread then
task.cancel(fishThread)
fishThread = nil
end
end
end
})
AutoLeft:AddDropdown("FishingLocationDropdown", {
Text = "Fishing Location",
Default = 1, -- Default to "No TP"
Values = locationNames,
Callback = function(v)
-- Find which location this is
for i, name in ipairs(locationNames) do
if name == v then
selectedFishingLocation = i
-- If auto fish is already running and not "No TP", teleport to new location
if autoFish then
local selectedLoc = locations[i]
if selectedLoc and selectedLoc.Position then
teleportToLocation(selectedLoc.Position)
end
end
break
end
end
end
})
AutoLeft:AddToggle("AutoSellToggle", {
Text = "Auto Sell",
Default = false,
Callback = function(v)
autoSell = v
if v then
startSellLoop()
else
if sellThread then
task.cancel(sellThread)
sellThread = nil
end
end
end
})
-- Cooking Tab (EXACT ORIGINAL CALLBACKS!)
local CookingLeft = Tabs.Cooking:AddLeftGroupbox("Auto Cooking")
CookingLeft:AddToggle("AutoCookNigiriToggle", {
Text = "Auto Cook Nigiri",
Default = false,
Callback = function(v)
autoCookNigiri = v
if v then
cookNigiriThread = startCookLoop("Nigiri", function() return autoCookNigiri end)
else
if cookNigiriThread then
task.cancel(cookNigiriThread)
cookNigiriThread = nil
end
end
end
})
CookingLeft:AddToggle("AutoCookSushiToggle", {
Text = "Auto Cook Sushi",
Default = false,
Callback = function(v)
autoCookSushi = v
if v then
cookSushiThread = startCookLoop("Sushi", function() return autoCookSushi end)
else
if cookSushiThread then
task.cancel(cookSushiThread)
cookSushiThread = nil
end
end
end
})
CookingLeft:AddToggle("AutoCookSashimiToggle", {
Text = "Auto Cook Sashimi",
Default = false,
Callback = function(v)
autoCookSashimi = v
if v then
cookSashimiThread = startCookLoop("Sashimi", function() return autoCookSashimi end)
else
if cookSashimiThread then
task.cancel(cookSashimiThread)
cookSashimiThread = nil
end
end
end
})
-- Teleport Tab
local TeleportLeft = Tabs.Teleport:AddLeftGroupbox("Quick Teleport")
for _, loc in ipairs(locations) do
if loc.Position then -- Skip "No TP" from quick teleport buttons
TeleportLeft:AddButton({
Text = loc.Name,
Callback = function()
teleportToLocation(loc.Position)
Library:Notify({
Title = "Teleport",
Description = "Teleported to " .. loc.Name,
Duration = 2
})
end
})
end
end
-- Misc Tab
local MiscLeft = Tabs.Misc:AddLeftGroupbox("Visual")
local MiscMovement = Tabs.Misc:AddLeftGroupbox("Movement")
MiscLeft:AddToggle("FullbrightToggle", {
Text = "Fullbright",
Default = false,
Callback = function(v)
_G.fullbright = v
updateLighting()
end
})
MiscLeft:AddToggle("NoFogToggle", {
Text = "No Fog",
Default = false,
Callback = function(v)
_G.noFog = v
updateLighting()
end
})
MiscLeft:AddToggle("ForceDayTimeToggle", {
Text = "Force Day Time",
Default = false,
Callback = function(v)
_G.forceDayTime = v
if v then
_G.forceNightTime = false
end
updateLighting()
end
})
MiscLeft:AddToggle("ForceNightTimeToggle", {
Text = "Force Night Time",
Default = false,
Callback = function(v)
_G.forceNightTime = v
if v then
_G.forceDayTime = false
end
updateLighting()
end
})
MiscLeft:AddToggle("AmbientEnabledToggle", {
Text = "Enable Ambient Changer",
Default = false,
Callback = function(v)
_G.ambientEnabled = v
updateLighting()
end
})
MiscLeft:AddSlider("AmbientRSlider", {
Text = "Ambient Red",
Default = 0.32156862745098,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(val)
_G.ambientR = val
updateLighting()
end
})
MiscLeft:AddSlider("AmbientGSlider", {
Text = "Ambient Green",
Default = 0.32156862745098,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(val)
_G.ambientG = val
updateLighting()
end
})
MiscLeft:AddSlider("AmbientBSlider", {
Text = "Ambient Blue",
Default = 0.32156862745098,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(val)
_G.ambientB = val
updateLighting()
end
})
MiscMovement:AddSlider("WalkSpeedSlider", {
Text = "Walk Speed",
Default = 16,
Min = 16,
Max = 100,
Rounding = 0,
Callback = function(val)
_G.walkSpeed = val
updateCharacterStats()
end
})
MiscMovement:AddSlider("JumpPowerSlider", {
Text = "Jump Power",
Default = 50,
Min = 50,
Max = 200,
Rounding = 0,
Callback = function(val)
_G.jumpPower = val
updateCharacterStats()
end
})
MiscMovement:AddToggle("FlyToggle", {
Text = "Fly (WASD, Space, Ctrl)",
Default = false,
Callback = function(v)
_G.fly = v
if v then
startFly()
else
stopFly()
end
end
})
MiscMovement:AddSlider("FlySpeedSlider", {
Text = "Fly Speed",
Default = 50,
Min = 10,
Max = 200,
Rounding = 0,
Callback = function(val)
_G.flySpeed = val
end
})
MiscMovement:AddToggle("FlingWalkToggle", {
Text = "Fling Walk (Fling Other Players)",
Default = false,
Callback = function(v)
_G.flingWalk = v
if v then
startFlingWalk()
else
stopFlingWalk()
end
end
})
MiscMovement:AddToggle("AntiFlingToggle", {
Text = "Anti Fling",
Default = false,
Callback = function(v)
_G.antiFling = v
if v then
startAntiFling()
end
end
})
-- Settings Tab (for Obsidian Lib config)
local SettingsLeft = Tabs.Settings:AddLeftGroupbox("Menu")
SettingsLeft:AddButton("Unload", function()
-- Clean up
stopFly()
stopFlingWalk()
if antiFlingConnection then antiFlingConnection:Disconnect() end
if lightingConnection then lightingConnection:Disconnect() end
if clockTimeConn then clockTimeConn:Disconnect() end
if timeOfDayConn then timeOfDayConn:Disconnect() end
if fogEndConn then fogEndConn:Disconnect() end
if fogStartConn then fogStartConn:Disconnect() end
Library:Unload()
end)
SettingsLeft:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", {
Default = "End",
NoUI = true,
Text = "Menu keybind"
})
Library.ToggleKeybind = Library.Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({
"MenuKeybind"
})
ThemeManager:SetFolder("FishingChef")
SaveManager:SetFolder("FishingChef/Configs")
SaveManager:BuildConfigSection(Tabs.Settings)
ThemeManager:ApplyToTab(Tabs.Settings)
SaveManager:LoadAutoloadConfig()
-- Notify that script loaded
Library:Notify({
Title = "Fishing Chef",
Description = "Loaded - IdkhubXApelhub",
Duration = 5
})Features & Information
Jun 10th, 2026
Community Comments (0)
No comments yet for this script.
