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 })